ساخت یک خوشه هوش مصنوعی با مشخصات فقر: تغییر کاربری RX 580

چگونه با پردازندههای گرافیکی RX 580 یک خوشه هوش مصنوعی ارزان بسازیم؟
چهار کارت RX 580 8GB از eBay یا فروش اقساطی فارمهای ماینینگ (هر کدام ۴۰ تا ۶۰ دلار) بخرید .
با استفاده از یک مادربرد ماینینگ، اسلاتهای PCIe، رم ۳۲ گیگابایتی DDR4 و یک منبع تغذیه ۸۵۰ تا ۱۰۰۰ واتی، یک ریگ چند پردازنده گرافیکی تک گرهای مونتاژ کنید .
اوبونتو ۲۲.۰۴ LTS را نصب کنید و تنظیمات بایوس را پیکربندی کنید (فعال کردن Above 4G Decoding، تنظیم PCIe روی Gen2).
برای محاسبات GPU، درایور ROCm/HIP (با HSA_OVERRIDE_GFX_VERSION=8.0.3 ) یا Mesa Vulkan را تنظیم کنید .
llama.cpp را از منبع با بکاند HIP یا Vulkan که gfx803 را هدف قرار میدهد، بسازید .
مدلهای GGUF کوانتیزه شده (توصیه میشود Q4_K_M) را از Hugging Face دانلود کنید .
برای توزیع استنتاج در هر چهار پردازنده گرافیکی، llama-server را با --tensor-split 1,1,1,1 اجرا کنید .
با کاهش ولتاژ پردازندههای گرافیکی (GPU) به میزان ۵۰ تا ۱۰۰ میلیولت، محدود کردن طول متن (context) و انتخاب مدلهای کوچکتر و کارآمد، بهینهسازی را انجام دهید .
راهاندازی LLM های محلی مثل سرگرمی یک فرد ثروتمند به نظر میرسد. یک NVIDIA H100 بیش از ۲۵۰۰۰ دلار قیمت دارد. یک RTX 4090 دست دوم حدود ۱۶۰۰ دلار قیمت دارد. در همین حال، هزینههای API ابری ماهانه افزایش مییابد و شما هر درخواست را به سرور شخص دیگری ارسال میکنید. اما یک کلاستر هوش مصنوعی ارزان قیمت در معرض دید عموم قرار دارد: RX 580 8GB، یک پردازنده گرافیکی استخراج ارز دیجیتال از رده خارج که میتوانید آن را با قیمت ۴۰ تا ۶۰ دلار در eBay تهیه کنید.
فهرست مطالب
چهار تا از آنها را بخرید، آنها را به یک مادربرد اقتصادی وصل کنید، و یک سیستم LLM محلی کاربردی برای استنتاج RX 580 خواهید داشت که هزینهاش کمتر از یک شام خوب برای دو نفر است.
در پایان این راهنما، شما یک ریگ استنتاج تک گرهای چند پردازنده گرافیکی خواهید داشت که LLMهای کوانتیزه شده را از طریق llama.cpp اجرا میکند. میخواهم در مورد اینکه این چیست و چه نیست، رک و راست باشم. این تنظیمات فقط استنتاج را مدیریت میکند، نه آموزش. شما مدلهای کوانتیزه شده را اجرا خواهید کرد، نه غولهای با دقت کامل. شما با عملکرد مرکز داده رقابت نخواهید کرد. شما با پرداخت هیچ هزینهای رقابت خواهید کرد. و برای پروژههای شخصی، دستیاران کدنویسی محلی، پرسش و پاسخ اسناد خصوصی و یادگیری نحوه عملکرد واقعی این موارد، این بیش از حد کافی است.
یک نکته در مورد اصطلاحات: من به این اصطلاح عامیانه «خوشه» میگویم، اما چیزی که ما میسازیم یک سیستم چند پردازنده گرافیکی تک گرهای با چهار کارت در یک مادربرد است. ما ماشینهای جداگانه را برای استنتاج توزیعشده به هم شبکه نمیکنیم.
اقتصاد: پردازندههای گرافیکی ۶۰ دلاری در مقابل هزینههای استنتاج ابری
بازار RX 580 در سال 2025
فروپاشی بازار ماینینگ ارزهای دیجیتال، انبارهای پر از پردازندههای گرافیکی AMD با معماری Polaris را بدون هیچ جایی برای فروش گذاشت. کارت گرافیک RX 580 از فهرست اولویتهای فعلی درایورهای AMD خارج شده است و ماینرهایی که زمانی هزاران عدد از این کارتها را احتکار کرده بودند، اکنون آنها را با قیمت بسیار ناچیزی نقد میکنند. eBay، Facebook Marketplace و فروشهای نقد شده از مزارع ماینینگ، منابع اصلی شما هستند.
هنگام خرید، به طور خاص به دنبال مدلهای VRAM 8 گیگابایتی باشید. کارتهای دارای حافظه سامسونگ معمولاً پس از سالها کار ماینینگ، نسبت به مدلهای مجهز به Hynix، عملکرد بهتری دارند، هرچند هر دو کار میکنند. بررسی کنید که آیا کارت با BIOS بهینه شده برای ماینینگ (کلاک حافظه بالاتر، زمانبندی اصلاح شده) فلش شده است یا خیر. اگر این اتفاق افتاده است، برای پایداری بیشتر، باید آن را به BIOS اصلی فلش کنید. اکثر فروشندگان در eBay نوع حافظه را فهرست میکنند؛ اگر این کار را نمیکنند، بپرسید. برای تعویض خمیر حرارتی و احتمالاً روغنکاری مجدد بلبرینگ فن، 5 تا 10 دلار برای هر کارت در نظر بگیرید. کارتهای ماینینگ سابق به شدت کار کردهاند.
مقایسه هزینه
اقتصاد فقط در صورتی درست است که اعداد واقعی را روی کاغذ بیاورید. در اینجا نحوهی ترکیب ۴ کارت گرافیک RX 580 را مشاهده میکنید:
| راهاندازی | هزینه اولیه | هزینه ماهانه | ۸ گیگابایت + حافظه ویدیویی | امکان استفاده از چند پردازنده گرافیکی |
|---|---|---|---|---|
| ۴ عدد کلاستر RX 580 8GB | حدود ۱۶۰ تا ۲۴۰ دلار (فقط پردازندههای گرافیکی) | برق حدود ۱۵ تا ۲۵ دلار | مجموع ۳۲ گیگابایت | بله |
| RTX 3060 12GB (دست دوم) | حدود ۱۵۰ تا ۲۰۰ دلار | برق حدود ۵ تا ۸ دلار | کارت تکی ۱۲ گیگابایتی | خیر (یک کارت) |
| RTX 4090 24GB (دست دوم) | حدود ۱۴۰۰ تا ۱۶۰۰ دلار | برق حدود ۸ تا ۱۲ دلار | کارت تکی ۲۴ گیگابایتی | خیر (یک کارت) |
| رابط برنامهنویسی کاربردی OpenAI (GPT-4o) | ۰ دلار | ۵۰ تا ۵۰۰ دلار + بسته به میزان استفاده | ناموجود | ناموجود |
| AWS g4dn.xlarge (T4) | ۰ دلار | حدود ۳۸۰ دلار به بالا (در صورت تقاضا، مداوم) | ۱۶ گیگابایت | ترازو با قیمت |
خط برق اهمیت دارد. هر RX 580 طبق رتبهبندی رسمی TDP شرکت AMD، در تنظیمات استاندارد و تحت بار کاری، تقریباً ۱۸۵ وات برق مصرف میکند. چهار کارت گرافیک به معنای تقریباً ۷۴۰ وات مصرف برق GPU به تنهایی قبل از اضافه کردن CPU، RAM و فنها است. با میانگین ایالات متحده که تقریباً ۰.۱۶ دلار در کیلووات ساعت است (طبق جدیدترین دادههای مسکونی EIA)، اجرای هر چهار کارت گرافیک تحت بار کاری به مدت ۸ ساعت در روز حدود ۲۵ تا ۳۰ دلار در ماه هزینه دارد. این پول واقعی است، اما هنوز کسری از قیمت نمونه GPU ابری است. و شما مالک سختافزار هستید.
برای استفاده شخصی متوسط (چند ساعت استنتاج روزانه)، هزینه ساخت کامل در مقایسه با هزینههای API، بسته به میزان مصرف توکن شما، ظرف یک تا سه ماه جبران میشود. فرضیات در اینجا: حدود ۵۰،۰۰۰ تا ۱۰۰،۰۰۰ توکن در روز استنتاج، در مقایسه با قیمتگذاری API GPT-4o-mini. میزان استفاده شما با الگوهای استفاده متفاوت است.
برای احتمال اینکه یکی از کارتها خراب یا با فن در حال خاموشی به دستتان برسد، 10 تا 20 دلار اضافی در نظر بگیرید. سختافزار استخراج قدیمی ریسک دارد.
لیست مواد سختافزاری
لیست کامل قطعات
| کامپوننت | مشخصات | هزینه تقریبی |
|---|---|---|
| پردازنده گرافیکی ۴ برابر | کارت گرافیک RX 580 8GB (حتماً باید 8GB باشد، نه 4GB) | ۱۶۰ تا ۲۴۰ دلار |
| مادربرد | مادربرد B250 Mining Expert یا مادربرد مشابه با ۴+ اسلات PCIe | ۴۰ تا ۷۰ دلار |
| پردازنده | اینتل i3 (LGA 1151) یا ایامدی رایزن 3 | ۲۵ تا ۴۰ دلار |
| رم | ۳۲ گیگابایت DDR4 (۲ عدد ۱۶ گیگابایتی یا ۴ عدد ۸ گیگابایتی) | ۴۰ تا ۵۰ دلار |
| منبع تغذیه | ۸۵۰ تا ۱۰۰۰ وات ۸۰+ برنز (یا منبع تغذیه دوگانه با آداپتور add2psu) | ۶۰ تا ۹۰ دلار |
| رایزرهای PCIe | ۴ عدد رایزر به سبک ماینینگ با تغذیه USB (VER 009S یا مشابه) | ۱۵ تا ۲۵ دلار |
| قاب | قاب معدن در فضای باز یا قفسه قفسه DIY | ۲۰ تا ۳۰ دلار |
| ذخیرهسازی | ۵۱۲ گیگابایت SSD (حداقل؛ ۱ ترابایت برای کتابخانههای مدل توصیه میشود) | ۳۰ تا ۵۰ دلار |
| خمیر حرارتی | Arctic MX-4 یا مشابه آن (برای تعویض پردازندههای گرافیکی دست دوم) | ۸ دلار |
| مجموع | ۳۹۸ تا ۵۹۳ دلار |
رم سیستم بیش از آنچه انتظار دارید اهمیت دارد. وقتی llama.cpp یک مدل را بارگذاری میکند، فایل GGUF را از دیسک نگاشت حافظه میکند و بخشهایی که در VRAM جا نمیشوند، در حافظه سیستم باقی میمانند. ۳۲ گیگابایت فضای ذخیرهسازی به شما میدهد. SSD نیز مهم است: فایلهای مدل برای یک مدل پارامتر ۷۰ بایتی در کوانتیزاسیون Q4، ۴۰ گیگابایت یا بیشتر اجرا میشوند. یک SSD 256 گیگابایتی به محض شروع دانلود چندین مدل، به سرعت پر میشود. حداقل ۵۱۲ گیگابایت و در صورت بودجه ۱ ترابایت را انتخاب کنید.
نکتهای در مورد سازگاری مادربرد: اگر قصد دارید از پردازنده Ryzen 3 استفاده کنید، به یک مادربرد با چیپست AMD (مثلاً B450) با اسلاتهای PCIe کافی نیاز دارید، نه Intel B250 Mining Expert که در بالا ذکر شد. برد B250 به یک پردازنده Intel LGA 1151 نیاز دارد. سوکت پردازنده و مادربرد خود را با هم تطبیق دهید.
مشکلات و هشدارهای سختافزاری
اندازه منبع تغذیه. چهار کارت گرافیک RX 580 در حالت استاندارد تقریباً ۷۴۰ وات فقط برای پردازنده گرافیکی مصرف میکنند. ۶۵ وات برای پردازنده، ۱۰ وات برای حافظه رم و سربار برای تلفات راندمان PSU را اضافه کنید، و در مجموع مصرف سیستم از ۸۵۰ وات عبور میکند. من یک PSU 1000 واتی یا یک سیستم دو PSU با استفاده از آداپتور Add2PSU (حدود ۱۰ دلار) را توصیه میکنم. استفاده از PSU با بار مداوم ۹۰٪ یا بیشتر، آن را سریعتر خراب میکند و خطر خاموش شدن در نوسانات گذرا را به همراه دارد. پس از اینکه سیستم را پایدار کردید، کاهش ولتاژ پردازندههای گرافیکی (که بعداً به آن پرداخته میشود) مصرف هر کارت را به ۱۲۰ تا ۱۴۰ وات کاهش میدهد و کل توان سیستم را به محدوده قابل قبول برای یک واحد ۸۵۰ واتی میرساند.
تنظیمات بایوس. مادربردهای ماینینگ مانند B250 Mining Expert برای شناسایی هر چهار پردازنده گرافیکی به تنظیمات بایوس خاصی نیاز دارند:
حالت «رمزگشایی بالاتر از ۴G» (که گاهی اوقات با عنوان «استخراج ارز دیجیتال» نیز شناخته میشود) را فعال کنید.
سرعت لینک PCIe را روی Gen2 تنظیم کنید (استفاده از Gen2 باعث بهبود پایداری با کابلهای رایزر میشود)
صدای داخلی و هرگونه لوازم جانبی بلااستفاده را غیرفعال کنید تا منابع آزاد شوند
فلش کردن مجدد بایوس ماینینگ. اگر GPU-Z یا amdgpu-info جداول کلاک اصلاحشده را نشان میدهند، بایوس اصلی را از مجموعه بایوسهای VGA TechPowerUp بگیرید و آن را با amdvbflash فلش کنید. اجرای استنتاج روی بایوس تنظیمشده برای ماینینگ با زمانبندی حافظه افزایشیافته باعث بیثباتی و خطاهای اصلاحشده حافظه میشود که همه چیز را کند میکند.
خنککننده. چهار پردازنده گرافیکی روی رایزرهایی در یک قاب روباز، گرمای زیادی تولید میکنند. یک فن جعبهای یا دو فن کیس ۱۲۰ میلیمتری را به سمت کارتها بگیرید. دمای VRM قاتل خاموش کارتهای استخراج قدیمی است؛ ممکن است دمای قالب پردازنده گرافیکی ۷۵ درجه سانتیگراد باشد در حالی که VRMها به ۱۰۵ درجه سانتیگراد رسیده و دچار افت دما میشوند. در لینوکس با sensors مانیتور کنید.
شما با عملکرد مرکز داده رقابت نخواهید کرد. شما با پرداخت هیچ هزینهای رقابت خواهید کرد.
مرور کلی پشته نرمافزار
پشته در یک نگاه
در اینجا زنجیره کامل نرمافزار از سیستمعامل تا مدل در حال اجرا آمده است:
Ubuntu 22.04 LTS └── AMDGPU kernel driver ├── Path A: ROCm userland ( HIP runtime ) → llama.cpp HIP backend └── Path B: Mesa RADV ( Vulkan driver ) → llama.cpp Vulkan backend └── Quantized GGUF models ( Q4_K_M, Q5_K_M, Q8_0 )اوبونتو ۲۲.۰۴ LTS زیرا نصب و آزمایش ROCm این نسخه را به طور کامل هدف قرار میدهد. توزیعهای دیگر کار میکنند اما اصطکاک ایجاد میکنند.
درایور هسته AMDGPU ماژول هسته پایه لینوکس برای پردازندههای گرافیکی AMD است که با هستههای اصلی ارائه میشود. هر دو مسیر ROCm و Vulkan بر روی آن ساخته میشوند.
مسیر A (ROCm/HIP) زمان اجرای محاسبات AMD، شامل HIP (رابط برنامهنویسی شبیه به CUDA) و rocBLAS برای محاسبات ماتریسی شتابیافته را در اختیار شما قرار میدهد. از نظر تئوری برای استنتاج LLM سریعتر است، اما با سختافزارهای عصر پولاریس سازگاری ندارد.
مسیر B (ولکان) از درایور RADV Vulkan شرکت Mesa استفاده میکند که از پشتیبانی عالی Polaris برخوردار است، زیرا RADV سالهاست که روی GCN پایدار بوده است. بکاند Vulkan مربوط به llama.cpp کاملاً از ROCm عبور میکند، که اغلب مسیر کممقاومتتری برای کارتهای gfx803 است. نکتهی منفی: استنتاج Vulkan معمولاً تا حدودی کندتر از یک پیکربندی HIP کارآمد است، اما در واقع به طور قابل اعتمادی کار میکند.
توصیه میکنم ابتدا مسیر A را امتحان کنید. اگر ROCm شما را اذیت میکند (و روی Polaris ممکن است اذیت کند)، مسیر B شما را در همان روز به دویدن وا میدارد.
راهاندازی ROCm روی پردازندههای گرافیکی Polaris
نصب سیستم عامل و پیش نیازها
با یک نصب تمیز اوبونتو ۲۲.۰۴ LTS شروع کنید. برای این پروژه از اوبونتو ۲۴.۰۴ اجتناب کنید؛ سازگاری ROCm با هستهها و نسخههای کتابخانه جدیدتر، متغیرهایی را که نیازی به آنها ندارید، اضافه میکند.
sudo apt update && sudo apt upgrade -y sudo apt install -y linux-headers- $( uname -r ) wget gnupg2 curl \ build-essential cmake git pkg-config
sudo usermod -aG video $LOGNAME sudo usermod -aG render $LOGNAME
sudo reboot پس از راهاندازی مجدد، نسخه کرنل خود را با uname -r بررسی کنید. این نسخه دقیق را یادداشت کنید. اگر ROCm کار میکند، بعداً باید آن را پین کنید، زیرا بهروزرسانی کرنل میتواند تشخیص GPU را مختل کند.
نصب درایورهای ROCm
اینجاست که اوضاع با پولاریس پیچیده میشود. ماتریس پشتیبانی ROCm شرکت AMD به تدریج تعداد پردازندههای گرافیکی که به طور رسمی پشتیبانی میشوند را محدود کرده است. RX 580 (gfx803) رسماً از طریق ROCm 5.x پشتیبانی میشد، اما در نسخههای ROCm 6.x خارج از فهرست پشتیبانی رسمی قرار میگیرد. کاربران عمومی، gfx803 را از طریق لغو متغیرهای محیطی به کار خود ادامه دادهاند، اما این را به عنوان یک راه حل با بهترین تلاش میدانند، نه یک مسیر تضمین شده.
رویکرد: نصب درایور ROCm AMDGPU، سپس استفاده از متغیر محیطی HSA_OVERRIDE_GFX_VERSION برای اعلام به HSA runtime که با gfx803 شما به عنوان یک هدف سازگار رفتار کند.
wget https://repo.radeon.com/amdgpu-install/6.1.2/ubuntu/jammy/amdgpu-install_6.1.60102-1_all.deb sudo apt install -y ./amdgpu-install_6.1.60102-1_all.deb
sudo amdgpu-install --usecase = rocm,hip --no-dkms
echo 'export HSA_OVERRIDE_GFX_VERSION=8.0.3' >> ~/.bashrc source ~/.bashrc
sudo modprobe amdgpu خط HSA_OVERRIDE_GFX_VERSION=8.0.3 راه حل کلیدی است. این خط به HSA (معماری سیستم ناهمگن) در زمان اجرا میگوید که پردازنده گرافیکی (GPU) را به عنوان سازگار با gfx803 گزارش دهد و بررسیهای نسخه را که در غیر این صورت سختافزار را رد میکرد، دور بزند. این متغیر در مرجع متغیر محیطی زمان اجرای ROCm مستند شده است، اگرچه AMD رسماً استفاده از آن را برای سختافزارهای پشتیبانی نشده تأیید نمیکند.
هشداری در مورد شکنندگی: این تنظیمات ممکن است هنگام بهروزرسانی بستههای ROCm با مشکل مواجه شود. پس از اتمام کار، نسخه ROCm خود را با sudo apt-mark hold روی بستههای مربوطه پین کنید. نسخههای دقیق همه چیز را مستند کنید (من یک چک لیست تکرارپذیری در انتهای این مقاله ارائه میدهم).
تأیید تشخیص چند پردازنده گرافیکی
پس از نصب ROCm و اعمال تغییرات، بررسی کنید که هر چهار پردازنده گرافیکی نمایش داده شوند:
rocm-smi rocminfo | grep -E "Name:|Marketing Name:|Device Type:"اگرrocm-smi rocminfo | grep -E "Name:|Marketing Name:|Device Type:"
rocm-smi کمتر از چهار پردازنده گرافیکی را نشان میدهد، بررسی کنید: آیا همه رایزرها روشن و نصب شدهاند؟ آیا «رمزگشایی بالای 4G» در بایوس فعال است؟ برای یافتن خطاهای راهاندازی اولیه درایور dmesg | grep amdgpu را امتحان کنید.
مسیر جایگزین ولکان
اگر ROCm از همکاری امتناع ورزد (که در gfx803 کاملاً محتمل است، به خصوص پس از اینکه بهروزرسانیهای بسته چیزی را خراب میکنند)، مسیر Vulkan شما را سریعتر به استنتاج عملی با دردسر بسیار کمتر در سطح درایور میرساند.
درایور RADV شرکت Mesa از پشتیبانی پایدار و کامل Vulkan برای پردازندههای گرافیکی Polaris برخوردار است. برای این کار نیازی به Vulkan SDK ندارید؛ بلکه به درایور Vulkan شرکت Mesa و ابزارهای اولیه Vulkan نیاز دارید.
sudo apt install -y mesa-vulkan-drivers vulkan-tools vulkaninfo --summary vulkaninfo --summary 2 > /dev/null | grep "deviceName"اگرsudo apt install -y mesa-vulkan-drivers vulkan-tools vulkaninfo --summary vulkaninfo --summary 2 > /dev/null | grep "deviceName"
vulkaninfo چهار دستگاه POLARIS10 را نشان میدهد، شما در حال کار هستید. این مسیر به طور کامل از ROCm اجتناب میکند، به این معنی که هیچ پین نسخهای، هیچ لغو HSA و هیچ وصله اجتماعی وجود ندارد. llama.cpp بکاند Vulkan مستقیماً بر روی این درایور کار میکند.
ساخت llama.cpp برای استنتاج چند پردازنده گرافیکی AMD
کامپایل کردن llama.cpp با پشتیبانی از HIP (ROCm)
سیستم ساخت llama.cpp به سمت CMake به عنوان روش ساخت اصلی مهاجرت کرده است. نام دقیق پرچمها به صورت دورهای تغییر میکند، بنابراین همیشه در کامیتی که میسازید، به README موجود در مخزن ارجاع متقابل دهید. در ساختهای اخیر، مسیر CMake به این شکل است:
git clone https://github.com/ggerganov/llama.cpp cd llama.cpp
mkdir build && cd build
cmake .. -DGGML_HIP = ON -DAMDGPU_TARGETS = "gfx803" \ -DCMAKE_BUILD_TYPE = Release
cmake --build . --config Release -j $( nproc )اگر از نسخهای از llama.cpp استفاده میکنید که هنوز از مسیر Makefile پشتیبانی میکند، معادل آن به صورت زیر است:
make GGML_HIP = 1 AMDGPU_TARGETS = gfx803 -j $( nproc ) برای اینکه بفهمید پرداخت شما از کدام روش ساخت پشتیبانی میکند، فایل README را بررسی کنید. نامگذاری پرچمها به مرور زمان تغییر کرده است ( LLAMA_HIP در برخی نسخهها به GGML_HIP تبدیل شده است)، بنابراین آن را با منبع فعلی مقایسه کنید.
کامپایل با Vulkan Backend (Fallback)
ساخت Vulkan معمولاً روی سختافزار Polaris سرراستتر است:
cd llama.cpp mkdir build && cd build
cmake .. -DGGML_VULKAN = ON -DCMAKE_BUILD_TYPE = Release
cmake --build . --config Release -j $( nproc )یا با مسیر Makefile:
make GGML_VULKAN = 1 -j $( nproc )یک تفاوت مهم: پشتیبانی از چند پردازنده گرافیکی و ویژگیهای عملکردی بین بکاندهای HIP و Vulkan متفاوت است. بکاند HIP بهینهسازی بیشتری برای مسیرهای محاسباتی پردازندههای گرافیکی AMD داشته است، اما بکاند Vulkan سازگاری وسیعتری با دستگاهها دارد. اگر میتوانید ROCm را راهاندازی کنید، هر دو را آزمایش کنید و نسخه Vulkan را به عنوان جایگزین خود نگه دارید.
دانلود مدلهای کوانتیزه شده
کوانتیزاسیون چیزی است که کل این پروژه را امکانپذیر میکند. یک مدل پارامتری 7B با دقت کامل (FP32) تقریباً به 28 گیگابایت حافظه نیاز دارد. یک نسخه کوانتیزه شده Q4_K_M از همان مدل حدود 4.1 گیگابایت فضا اشغال میکند. در اینجا تفکیک سطح کوانتیزاسیون برای کارتهای VRAM 8 گیگابایتی آمده است:
| کوانتیزاسیون | بیت/وزن | اندازه مدل 7B | اندازه مدل ۷۰B | برای یک کارت حافظه ۸ گیگابایتی مناسب است؟ |
|---|---|---|---|---|
| Q4_K_M | ۴.۵~ | حدود ۴.۱ گیگابایت | حدود ۴۰ گیگابایت | بله (7B) |
| Q5_K_M | ~۵.۵ | حدود ۴.۸ گیگابایت | ~۴۸ گیگابایت | بله (7B)، محکم |
| سوال ۸_۰ | ۸ | حدود ۷.۲ گیگابایت | حدود ۷۰ گیگابایت | به سختی (7B) |
برای یک RX 580، با Mistral 7B یا Llama 3 8B در کوانتیزاسیون Q4_K_M شروع کنید. اینها به راحتی در 8 گیگابایت VRAM با فضای کافی برای حافظه نهان KV (حافظهای که برای ذخیره متن مکالمه استفاده میشود و با طول متن افزایش مییابد) جا میشوند.
برای پیکربندی کامل ۴ پردازنده گرافیکی، میتوانید مدلهای بزرگتر را تقسیم کنید. یک کارت گرافیک Llama 3 70B در Q4_K_M با حجم تقریبی ۴۰ گیگابایت میتواند بین چهار کارت ۸ گیگابایتی پخش شود، اگرچه مجموع ۳۲ گیگابایت حافظه ویدیویی، ۳۲ گیگابایت کامل را برای وزنهای مدل در اختیار شما قرار نمیدهد زیرا هر پردازنده گرافیکی برای حافظه پنهان KV و بافرهای زمان اجرا به سربار نیاز دارد. در عمل، انتظار میرود وزنها با طول متن کوتاه تا متوسط تناسب داشته باشند.
نکتهای که باید درک کنید این است: چند پردازنده گرافیکی در llama.cpp لایههای مدل را بین دستگاهها تقسیم میکند. این ادغام حافظه ویدیویی نیست. ارتباط بین پردازندههای گرافیکی از طریق PCIe انجام میشود و با رایزرهای ماینینگ که با پهنای الکتریکی x1 کار میکنند، شما به تقریباً 985 مگابایت بر ثانیه در هر جهت به ازای هر لینک محدود میشوید (مشخصات PCIe 3.0 x1). این یک گلوگاه پهنای باند ایجاد میکند که تعداد توکنها در ثانیه را محدود میکند، به خصوص برای مدلهای بزرگتر که در آنها دادههای بیشتری بین پردازندههای گرافیکی به ازای هر توکن جابجا میشوند.
دانلود مدلها از Hugging Face:
pip install huggingface-hub
huggingface-cli download TheBloke/Mistral-7B-Instruct-v0.2-GGUF \ mistral-7b-instruct-v0.2.Q4_K_M.gguf \ --local-dir models/
huggingface-cli download TheBloke/Llama-2-70B-Chat-GGUF \ llama-2-70b-chat.Q4_K_M.gguf \ --local-dir models/توجه: TheBloke یکی از پرکارترین کوانتایزرهای GGUF در Hugging Face است، اما جامعهی کاربری آن بزرگ است و سایر آپلودکنندهها نسخههای کوانتیزهشدهی مدلهای جدیدتر مانند Llama 3 را ارائه میدهند. برای یافتن گزینههای فعلی، Hugging Face را با نام مدل به همراه "GGUF" جستجو کنید. برای مدلهای جدیدتر، بارتوسکی و سایر کوانتایزرها کار TheBloke را با انتشار نسخههای جدیدتر ادامه دادهاند.
اجرای استنتاج در چندین کارت گرافیک RX 580
اجرای تست تک پردازنده گرافیکی
با یک پردازنده گرافیکی (GPU) شروع کنید تا یک مبنای عملکرد ایجاد کنید و عملکرد ساخت را تأیید کنید:
./build/bin/llama-server \ -m models/mistral-7b-instruct-v0.2.Q4_K_M.gguf \ -ngl 99 \ --host 0.0 .0.0 \ --port 8080
curl http://localhost:8080/completion \ -H "Content-Type: application/json" \ -d '{"prompt": "Explain quicksort in three sentences:", "n_predict": 128}'به خروجی سرور برای معیار توکن در ثانیه توجه کنید. روی یک RX 580 8GB با Mistral 7B Q4_K_M، گزارشهای انجمن و آزمایشهای خودم تقریباً ۸ تا ۱۵ توکن در ثانیه برای تولید متن (رمزگشایی) را نشان میدهد، بسته به طول متن، کوانتیزاسیون و بکاند (HIP در مقابل Vulkan). این سرعت از یک کارت گرافیک NVIDIA مدرن کندتر است اما به طور قابل توجهی سریعتر از استنتاج فقط CPU در یک پردازنده اقتصادی است که معمولاً ۲ تا ۵ توکن در ثانیه برای همان مدل ارائه میدهد.
برای مشاهدهی پرچمهای دقیقی که نسخه شما پشتیبانی میکند، llama-server --help را بررسی کنید. نام پرچمها و پیشفرضها بین نسخهها تغییر میکند.
تقسیم لایهها بین ۴ پردازنده گرافیکی
برای توزیع یک مدل بین هر چهار کارت، از پرچم --tensor-split استفاده کنید. این به llama.cpp میگوید که چگونه لایههای مدل را بین GPUهای شناساییشده متناسب کند. مقادیر نشان دهنده نسبتهای تخصیص نسبی VRAM هستند:
./build/bin/llama-server \ -m models/llama-2-70b-chat.Q4_K_M.gguf \ -ngl 99 \ --tensor-split 1,1 ,1,1 \ --host 0.0 .0.0 \ --port 8080 export HIP_VISIBLE_DEVICES = 0,1 ,2,3./build/bin/llama-server \ -m models/llama-2-70b-chat.Q4_K_M.gguf \ -ngl 99 \ --tensor-split 1,1 ,1,1 \ --host 0.0 .0.0 \ --port 8080 export HIP_VISIBLE_DEVICES = 0,1 ,2,3
--tensor-split 1,1,1,1 لایهها را به طور مساوی توزیع میکند. اگر یک کارت گرافیک حافظه ویدیویی کمتری در دسترس دارد (شاید در حال پردازش یک نمایشگر نیز باشد)، میتوانید --tensor-split 0.8,1,1,1 برای قرار دادن لایههای کمتر روی GPU 0 انجام دهید.
نتایج بنچمارک
انتظارات عملکردی نیاز به چارچوببندی صادقانه دارند. این اعداد، محدودههای تقریبی را بر اساس معیارهای جامعه و آزمایش با بکاند HIP روی gfx803 نشان میدهند. نتایج شما با توجه به مدل دقیق، طول زمینه، اندازه دسته و دماها متفاوت خواهد بود:
| مدل | کوانتیزاسیون | پردازندههای گرافیکی مورد استفاده | تقریباً توکنها در ثانیه (رمزگشایی) | یادداشتها |
|---|---|---|---|---|
| دستورالعمل میسترال ۷بی | Q4_K_M | ۱ عدد RX 580 | ۸-۱۵ تن در ثانیه | جاگیری راحت تک کارتی |
| لاما ۳ ۸ب | Q4_K_M | ۱ عدد RX 580 | ۷-۱۳ تن در ثانیه | مشابه میسترال ۷بی |
| چت لاما ۲ ۷۰ب | Q4_K_M | ۴ عدد RX 580 | ۲-۵ تن در ثانیه | گلوگاه PCIe x1، توان عملیاتی را محدود میکند |
| فی-۳ مینی (۳.۸ ب) | Q4_K_M | ۱ عدد RX 580 | ۱۵-۲۵ تن در ثانیه | مدلهای کوچکتر اینجا میدرخشند |
برای درک بهتر، استنتاج فقط با CPU (مثلاً یک Ryzen 3 با 32 گیگابایت رم) روی Mistral 7B Q4_K_M معمولاً 2 تا 5 توکن در ثانیه ارائه میدهد. بنابراین حتی یک RX 580 به شما سرعت 3 تا 5 برابری میدهد. مدل 70B روی چهار کارت برای چت تعاملی قابل استفاده است اما سریع نیست. برای هر جمله چند ثانیه منتظر خواهید ماند.
ارزیابی صادقانه: این برای پروژههای شخصی، دستیاران کدنویسی محلی، خطوط لوله RAG که در آن پرسوجوها را دستهبندی میکنید و یادگیری قابل استفاده است. برای خدمات تولید یا هر چیزی که نیاز به تأخیر کم در مقیاس دارد، مناسب نیست. این هرگز هدف نبود. هدف، حاکمیت استنتاج با قیمت کمتر از ۵۰۰ دلار است.
از خروجی زمانبندی داخلی llama.cpp (که در کنسول سرور چاپ میشود) استفاده کنید یا برای دریافت جزئیات زمانبندی هر توکن، از --verbose استفاده کنید. این روش نسبت به بنچمارکگیری خارجی برای این تنظیمات خاص، قابل اعتمادتر است.
هدف، حاکمیت استنتاج با قیمتی کمتر از ۵۰۰ دلار است.
موارد استفاده عملی و بهینهسازیها
این خوشه برای چه چیزی مفید است؟
دستیار کدنویسی محلی. یک افزونه VS Code مانند Continue را به http://localhost:8080 اضافه کنید. Continue از نقاط پایانی سفارشی سازگار با OpenAI پشتیبانی میکند. در پیکربندی Continue خود، URL پایه API را روی سرور محلی llama خود تنظیم کنید. وقتی این را با Mistral 7B برای یک پروژه جانبی تنظیم کردم، پیشنهادات تکمیل خودکار در حدود ۱ تا ۲ ثانیه برگشتند، به اندازه کافی سریع که بدون ایجاد اختلال در روند کار مفید باشند. به سرعت Copilot نیست، اما روی دستگاه شما، روی شبکه شما اجرا میشود و هیچ یک از کدهای شما را در API شخص دیگری نمیخواند.
خطوط لوله RAG خصوصی. سرور استنتاج را با یک مدل جاسازی محلی و یک فروشگاه بردار (مانند ChromaDB) برای پرسش و پاسخ سند جفت کنید. خوشه RX 580 بخش تولید را مدیریت میکند در حالی که جاسازیها میتوانند روی CPU یا یک کارت اختصاصی اجرا شوند.
استنتاج آفلاین و بدون نیاز به اینترنت. پس از دانلود مدلها، همه چیز به صورت محلی اجرا میشود. این موضوع برای کارهای حساس به امنیت اهمیت دارد.
یادگیری و آزمایش. مدلها را عوض کنید، سطوح کوانتیزاسیون را آزمایش کنید، عملکرد پروفایل را یاد بگیرید، یاد بگیرید که تقسیم لایه چگونه کار میکند. از بین بردن یک پردازنده گرافیکی ۵۰ دلاری از طریق پیکربندی نادرست، آسیب بسیار کمتری نسبت به از کار افتادن یک کارت ۱۶۰۰ دلاری دارد.
نکات تنظیم عملکرد
کاهش ولتاژ. این تنها بهینهسازی با بالاترین تأثیر برای یک کلاستر RX 580 است. با استفاده از rocm-smi (مسیر ROCm) یا ویرایش جداول پخش توان AMDGPU، ولتاژ هسته را 50 تا 100 میلیولت کاهش دهید. من متوجه شدهام که اکثر RX 580ها با هسته 1050 میلیولت (کاهش از 1150 میلیولت استاندارد) به طور پایدار کار میکنند، که مصرف برق هر کارت را از 185 وات به تقریباً 120 تا 140 وات با افت عملکرد ناچیز کاهش میدهد. این کار مصرف کل برق سیستم را 150 تا 200 وات کاهش میدهد، دما را در کل برد پایین میآورد و گلوگاه حرارتی را در کارتهایی با خمیر حرارتی تخریبشده از بین میبرد.
طول متن در مقابل سرعت. حافظه نهان KV به صورت خطی با طول متن افزایش مییابد و VRAM موجود شما را اشغال میکند. در کارتهای 8 گیگابایتی، میتوانید حداکثر متن را 2048 یا 4096 توکن تنظیم کنید تا همه چیز پاسخگو باشد. رفتن به 8192 یا بالاتر در این کارتها باعث فشار بر VRAM، تولید کندتر یا خطاهای آشکار OOM میشود. برای پرچم اندازه متن (معمولاً -c یا --ctx-size ) به llama-server --help مراجعه کنید.
انتخاب مدل. مدلهای کوچکتر و جدیدتر، با توجه به سختافزار محدود، عملکرد بهتری دارند. Phi-3 Mini (پارامترهای ۳.۸B) و Mistral 7B اغلب نتایج بهتری نسبت به مدلهای بسیار بزرگتر اما قدیمیتر برای بسیاری از وظایف ارائه میدهند. مزیت سرعت استنتاج چشمگیر است: بیش از ۱۵ توکن در ثانیه برای یک مدل ۳.۸B در مقابل ۳ توکن در ثانیه برای یک مدل ۷۰B.
نظارت. برای دمای پردازنده گرافیکی، کلاک و میزان استفاده از حافظه ویدیویی (مسیر ROCm) rocm-smi یا برای مسیر Vulkan radeontop و lm-sensors استفاده کنید. به طور خاص دمای VRM را زیر نظر داشته باشید. اگر دمای نقطه داغ هر کارت از ۹۰ درجه سانتیگراد فراتر رفت، جریان هوا را بهبود بخشید یا دوباره آن را تنظیم کنید.
فضای ذخیرهسازی. زمان بارگذاری مهم است. مدلها از روی دیسک نگاشت حافظه میشوند و روی یک هارد دیسک، بارگذاری اولیه یک مدل ۴۰ گیگابایتی میتواند بیش از یک دقیقه طول بکشد. یک SSD این زمان را به چند ثانیه کاهش میدهد. اگر مرتباً بین مدلها جابجا میشوید، ذخیرهسازی SSD اختیاری نیست.
محدودیتها و زمان ارتقا
بیایید در مورد سقفها با چشمانی باز و هوشیار باشیم.
محدودیت اصلی، حافظه ویدیویی (VRAM) است. هر کارت ۸ گیگابایت حافظه دارد که در مجموع ۳۲ گیگابایت میشود. اما تقسیم چند پردازنده گرافیکی (multi-GPU splitting) یک روش عالی برای ادغام دادهها نیست. با در نظر گرفتن سربار حافظه نهان KV، بافرهای زمان اجرا و هزینههای همگامسازی بین پردازندههای گرافیکی، ظرفیت مؤثر مدل شما کمتر از ۳۲ گیگابایت خواهد بود. مقیاسبندی طول متن (context length scaling) این وضعیت را بدتر میکند: هر توکن در پنجره متن شما، حافظه ویدیویی (VRAM) را برای ورودیهای حافظه نهان کلید-مقدار در تمام لایهها مصرف میکند.
گلوگاه پهنای باند PCIe. رایزرهای ماینینگ، پردازندههای گرافیکی (GPU) را با سرعت الکتریکی PCIe 3.0 x1 اجرا میکنند که تقریباً به سرعت ۹۸۵ مگابایت بر ثانیه در هر جهت میرسد. وقتی یک مدل ۷۰ بیتی که به چهار کارت تقسیم شده است، باید دادههای فعالسازی را برای هر توکن بین پردازندههای گرافیکی (GPU) منتقل کند، این پیوند به گلوگاه اصلی تبدیل میشود. به همین دلیل است که اعداد عملکرد ۷۰ بیتی فوق بسیار پایینتر از آن چیزی است که از محاسبات خام FLOPS انتظار دارید.
عدم پشتیبانی از توجه سریع. معماری Polaris GCN فاقد ویژگیهای سختافزاری است که پیادهسازیهای جدیدتر هسته توجه از آنها بهرهبرداری میکنند. llama.cpp به مسیرهای توجه استاندارد بازمیگردد که در طول متن طولانیتر، از نظر حافظه کارایی کمتری دارند.
شکنندگی درایور. تنظیمات ROCm شما میتواند با بهروزرسانیهای هسته، بهروزرسانیهای Mesa یا بهروزرسانیهای بسته ROCm از کار بیفتد. همه چیز را پین کنید. sudo apt-mark hold روی هسته در حال کار، بستههای ROCm و بستههای Mesa خود استفاده کنید. نسخههای دقیق را مستند کنید.
چه زمانی باید ارتقا دهید. اگر مرتباً با این موانع برخورد میکنید، مراحل منطقی بعدی عبارتند از:
RTX 3060 12GB (دست دوم، ۱۵۰ تا ۲۰۰ دلار): VRAM بهتر به ازای هر کارت، اکوسیستم CUDA، پشتیبانی از Flash Attention، مصرف برق کمتر. در اکثر مدلها، یک کارت گرافیک به تنهایی از کل کلاستر ۴x RX 580 بهتر عمل میکند.
RX 6700 XT 12GB (دست دوم، ۱۵۰ تا ۲۰۰ دلار): در اکوسیستم AMD با پشتیبانی بهتر از ROCm باقی میماند (RDNA2، gfx1031 در محدوده پشتیبانی شده برای نسخههای اخیر ROCm قرار دارد).
RTX 3090 24GB (دست دوم، ۷۰۰ تا ۸۰۰ دلار): حافظه ویدیویی ۲۴ گیگابایتی، ۷۰B مدل کوانتیزه شده را روی یک کارت گرافیک واحد و بدون سربار تقسیم، مدیریت میکند.
کمتر از ۵۰۰ دلار برای حاکمیت استنتاجی
با کمتر از ۵۰۰ دلار هزینه سختافزار، اکنون یک ریگ استنتاج LLM محلی کاربردی دارید. هیچ وابستگی به API وجود ندارد. دادههای شما روی دستگاه شما باقی میماند. و شما یاد میگیرید که استنتاج GPU در سطح سختافزار چگونه کار میکند. بهترین سختافزار برای یادگیری هوش مصنوعی، سختافزاری است که بتوانید با آن آزمایش کنید، آن را بشکنید و دوباره بسازید.
بهترین سختافزار برای یادگیری هوش مصنوعی، سختافزاری است که بتوانید با آن آزمایش کنید، آن را بشکنید و دوباره بسازید.
چک لیست تکرارپذیری
این نسخههای دقیق را برای ساخت خود پین و مستند کنید:
- Ubuntu version: 22.04 .x LTS - Kernel version: ( output of uname -r ) - Mesa version: ( output of dpkg -l | grep mesa ) - ROCm version: ( if used ; output of apt list --installed 2 > /dev/null | grep rocm ) - llama.cpp commit: ( output of git rev-parse HEAD in your clone ) - Model file: ( exact filename and SHA256 hash ) - Quantization: ( eg, Q4_K_M ) - Build flags: ( exact cmake or make command used ) - Environment variables: HSA_OVERRIDE_GFX_VERSION = 8.0 .3وقتی چیزی بعد از بهروزرسانی خراب میشود (و خواهد شد)، این چکلیست به شما امکان میدهد به جای اشکالزدایی کورکورانه، به حالت خوب برگردید.
مرجع کامل راهاندازی سختافزار + نرمافزار
سختافزار:
۴ عدد کارت گرافیک RX 580 8GB (حافظه سامسونگ ترجیح داده میشود، بایوس اصلی)
مادربرد B250 Mining Expert یا معادل آن با ۴ اسلات یا بیشتر (برای پردازندههای اینتل)
پردازنده Intel i3 (LGA 1151) / Ryzen 3 (مطابق با سوکت مادربرد)
رم ۳۲ گیگابایتی DDR4
منبع تغذیه ۸۵۰ تا ۱۰۰۰ وات (حداقل ۸۰+ برنز)
۴ عدد رایزر PCIe (تغذیه شده با USB در VER 009S)
قاب فضای باز
۵۱۲ گیگابایت+ SSD
تنظیمات بایوس:
رمزگشایی بالاتر از 4G: فعال
سرعت لینک PCIe: نسل دوم
صدای داخلی: غیرفعال
مسیر نرمافزاری الف (ROCm/HIP):
sudo apt update && sudo apt upgrade -y sudo apt install -y linux-headers- $( uname -r ) wget gnupg2 build-essential cmake git sudo usermod -aG video,render $LOGNAME echo 'export HSA_OVERRIDE_GFX_VERSION=8.0.3' >> ~/.bashrc source ~/.bashrcمسیر نرمافزاری B (ولکان):sudo apt update && sudo apt upgrade -y sudo apt install -y linux-headers- $( uname -r ) wget gnupg2 build-essential cmake git sudo usermod -aG video,render $LOGNAME echo 'export HSA_OVERRIDE_GFX_VERSION=8.0.3' >> ~/.bashrc source ~/.bashrc
sudo apt update && sudo apt upgrade -y sudo apt install -y mesa-vulkan-drivers vulkan-tools build-essential cmake gitاجرا:sudo apt update && sudo apt upgrade -y sudo apt install -y mesa-vulkan-drivers vulkan-tools build-essential cmake git
./build/bin/llama-server \ -m models/your-model.gguf \ -ngl 99 \ --host 0.0 .0.0 \ --port 8080کل سرمایهگذاری کمتر از سه ماه استفاده متوسط از API است. دانشی که در مورد محاسبات GPU، کوانتیزاسیون مدل و بهینهسازی استنتاج به دست میآورید، ارزش بسیار بیشتری دارد.




ارسال نظر