مدل‌های هوش مصنوعی محلی به دلیل اجرای مستقیم روی کامپیوتر می‌توانند بدون ارسال داده به سرویس ابری کار کنند و برای کارهایی مثل تولید متن، کدنویسی و خلاصه‌سازی گزینه‌ای کاربردی باشند. با این حال سرعت اجرای آن‌ها فقط به قدرت پردازنده یا تعداد پارامترهای مدل بستگی ندارد. مقدار VRAM کارت گرافیک و تنظیمات مربوط به Context نیز تأثیر زیادی بر سرعت تولید پاسخ دارند.

اگر مدل نتواند به‌طور کامل در حافظه کارت گرافیک قرار بگیرد و بخشی از پردازش به رم سیستم منتقل شود، سرعت تولید توکن می‌تواند به شکل محسوسی کاهش پیدا کند. در Ollama نیز افزایش Context باعث مصرف بیشتر حافظه می‌شود و به همین دلیل انتخاب یک مقدار مناسب برای num_ctx یکی از تنظیمات مهم برای سیستم‌های دارای VRAM محدود است.

چرا اجرای مدل هوش مصنوعی محلی روی کامپیوتر کند می‌شود؟

یکی از مهم‌ترین دلایل کندی مدل‌های محلی این است که حافظه موردنیاز مدل از VRAM کارت گرافیک بیشتر می‌شود. در این شرایط بخشی از مدل یا داده‌های موردنیاز پردازش می‌تواند روی رم سیستم قرار بگیرد و ارتباط بین GPU و RAM از مسیر PCIe انجام شود. این وضعیت معمولاً بسیار کندتر از اجرای کامل مدل در VRAM است.

بنابراین هنگام انتخاب مدل فقط نباید حجم فایل مدل را بررسی کرد. کوانتایز مدل، طول Context و حافظه موردنیاز اجرای مدل نیز باید در نظر گرفته شوند. به عنوان مثال یک مدل Q4 ممکن است روی کاغذ چند گیگابایت حجم داشته باشد اما هنگام اجرا علاوه بر وزن‌های مدل به حافظه بیشتری برای KV Cache و بافرهای محاسباتی نیاز داشته باشد.

چرا Ollama کند است؟ افزایش سرعت مدل‌های هوش مصنوعی محلی با کاهش مصرف VRAM

انتقال مدل از VRAM به RAM چه تأثیری بر سرعت دارد؟

وقتی تمام بخش‌های موردنیاز مدل در VRAM جا نمی‌شوند، Ollama می‌تواند بخشی از بار مدل را روی CPU و رم سیستم قرار دهد. در چنین حالتی سرعت فقط به توان پردازشی GPU وابسته نیست و جابه‌جایی داده بین حافظه سیستم و کارت گرافیک به یکی از گلوگاه‌ها تبدیل می‌شود.

برای بررسی اینکه مدل واقعاً به‌صورت کامل روی GPU اجرا می‌شود یا بخشی از آن به CPU منتقل شده است، می‌توان وضعیت پردازنده را در Ollama بررسی کرد:

ollama ps

در خروجی این دستور ستون PROCESSOR مشخص می‌کند چه مقدار از مدل روی GPU و چه مقدار روی CPU قرار گرفته است. مستندات Ollama نیز برای دستیابی به عملکرد بهتر توصیه می‌کنند تا حد امکان از Offload شدن مدل به CPU جلوگیری شود.

چرا Ollama کند است؟ افزایش سرعت مدل‌های هوش مصنوعی محلی با کاهش مصرف VRAM

VRAM مدل‌های Ollama فقط صرف وزن‌های مدل نمی‌شود

هنگام اجرای یک مدل زبانی، VRAM فقط برای ذخیره وزن‌های مدل مصرف نمی‌شود. بخش دیگری از حافظه به KV Cache و داده‌های موقتی موردنیاز محاسبات اختصاص پیدا می‌کند. به همین دلیل ممکن است فایلی که مثلاً چند گیگابایت حجم دارد، هنگام اجرا به مقدار قابل‌توجهی حافظه بیشتر نیاز داشته باشد.

این مسئله در مدل‌هایی که Context طولانی دارند اهمیت بیشتری پیدا می‌کند. هرچه تعداد توکن‌هایی که مدل می‌تواند در یک مکالمه یا درخواست در اختیار داشته باشد بیشتر شود، حافظه موردنیاز برای نگهداری اطلاعات Context نیز افزایش پیدا می‌کند.

چرا Ollama کند است؟ افزایش سرعت مدل‌های هوش مصنوعی محلی با کاهش مصرف VRAM

KV Cache چیست و چرا با افزایش Context بزرگ‌تر می‌شود؟

KV Cache اطلاعات موردنیاز مکانیزم Attention را برای توکن‌های پردازش‌شده نگه می‌دارد تا مدل مجبور نباشد در هر مرحله همه محاسبات قبلی را دوباره انجام دهد. در نتیجه این حافظه با افزایش طول Context رشد می‌کند.

به همین دلیل انتخاب Context بسیار بزرگ برای درخواست‌های کوتاه لزوماً مفید نیست. اگر بیشتر استفاده شما از مدل شامل پرسش‌های کوتاه، تولید متن یا خلاصه‌سازی‌های معمولی است، اختصاص حافظه برای Context بسیار بزرگ می‌تواند فضای ارزشمند VRAM را اشغال کند بدون اینکه الزاماً مزیت عملی متناسبی ایجاد کند.

چرا Ollama کند است؟ افزایش سرعت مدل‌های هوش مصنوعی محلی با کاهش مصرف VRAM

Context Length در Ollama چقدر روی مصرف VRAM اثر دارد؟

Ollama در حال حاضر بر اساس مقدار VRAM سیستم، مقدار پیش‌فرض مشخصی برای Context در نظر می‌گیرد. برای GPUهایی با کمتر از ۲۴ گیگابایت VRAM مقدار پیش‌فرض 4K است. این مقدار برای بازه ۲۴ تا ۴۸ گیگابایت به 32K می‌رسد و برای کارت‌های دارای حداقل ۴۸ گیگابایت VRAM مقدار پیش‌فرض 256K اعلام شده است. خود Ollama نیز تأکید می‌کند که افزایش Context به حافظه بیشتری نیاز دارد.

اگر Context را بسیار بالاتر از نیاز واقعی تنظیم کنید، بخش بیشتری از VRAM برای KV Cache مصرف می‌شود. در سیستم‌های دارای VRAM محدود این کار می‌تواند باعث شود فضای کافی برای اجرای کامل مدل باقی نماند و مدل به سمت Offload شدن به CPU برود.

چگونه با کاهش Context سرعت Ollama را افزایش دهیم؟

اگر مدل روی سیستم شما کند اجرا می‌شود، قبل از خرید GPU جدید بهتر است مقدار Context را بررسی کنید. برای چت‌های معمولی، تولید متن و بسیاری از درخواست‌های روزمره، Context بسیار بزرگ همیشه ضروری نیست.

در برنامه Ollama می‌توانید Context را از تنظیمات برنامه تغییر دهید. مستندات رسمی Ollama نیز امکان تغییر آن از طریق رابط برنامه و متغیر محیطی OLLAMA_CONTEXT_LENGTH را ارائه می‌کنند.

در نسخه دسکتاپ مسیر تنظیم Context از بخش تنظیمات برنامه قابل دسترسی است:

Settings → Context Length

چرا Ollama کند است؟ افزایش سرعت مدل‌های هوش مصنوعی محلی با کاهش مصرف VRAM

اگر از روش خط فرمان استفاده می‌کنید، می‌توانید مقدار موردنظر را هنگام اجرای سرویس مشخص کنید:

OLLAMA_CONTEXT_LENGTH=8192 ollama serve

برای سیستم‌هایی با VRAM محدود می‌توان از مقادیر متعادل مانند 4K یا 8K شروع کرد و در صورت نیاز Context را افزایش داد. اگر مدل در 8K بدون Offload اجرا می‌شود اما در 32K بخشی از پردازش به CPU منتقل می‌شود، کاهش Context می‌تواند راه ساده‌ای برای بازگرداندن مدل به اجرای کامل روی GPU باشد.

چه مقدار Context برای مدل‌های محلی مناسب است؟

مقدار مناسب به نوع استفاده بستگی دارد و یک عدد ثابت برای همه سیستم‌ها وجود ندارد. برای پرسش‌های کوتاه و تولید متن معمولی، Context متوسط می‌تواند کافی باشد. برای مکالمه‌های طولانی، تحلیل فایل‌های بزرگ یا کارهای کدنویسی که به حفظ اطلاعات بیشتری نیاز دارند، Context بالاتر ارزش بیشتری پیدا می‌کند.

نکته مهم این است که Context را بر اساس نیاز واقعی تنظیم کنید، نه صرفاً بر اساس حداکثر مقداری که مدل پشتیبانی می‌کند. اگر VRAM محدود باشد، یک مدل کوچک‌تر که کاملاً روی GPU قرار می‌گیرد ممکن است در عمل بسیار روان‌تر از مدل بزرگ‌تری باشد که مجبور به استفاده از RAM سیستم است.

برای افزایش سرعت مدل محلی فقط GPU قوی‌تر لازم نیست

افزایش VRAM می‌تواند امکان اجرای مدل‌های بزرگ‌تر یا Context طولانی‌تر را فراهم کند اما همیشه اولین راهکار نیست. اگر مدل فعلی فقط به دلیل Context بیش از حد از VRAM خارج می‌شود، کاهش Context می‌تواند بدون تغییر سخت‌افزار مشکل را برطرف کند.

همچنین هنگام انتخاب مدل باید حجم مدل پس از Quantization را در کنار VRAM در نظر گرفت. مدل‌های کوانتایز‌شده با سطح پایین‌تر حافظه کمتری مصرف می‌کنند اما کاهش بیش از حد دقت می‌تواند روی کیفیت خروجی اثر بگذارد. بنابراین بهتر است بین اندازه مدل، سطح Quantization و Context و مقدار VRAM موجود تعادل برقرار شود.

در عمل برای عیب‌یابی کندی Ollama این موارد را بررسی کنید:

  • مقدار VRAM آزاد کارت گرافیک را بررسی کنید.
  • با ollama ps ببینید مدل کاملاً روی GPU قرار گرفته یا بخشی از آن روی CPU است.
  • Context را کاهش دهید و سرعت تولید توکن را دوباره مقایسه کنید.
  • اگر مدل همچنان در VRAM جا نمی‌شود، مدل کوچک‌تر یا Quantization کم‌حجم‌تر را امتحان کنید.
  • در صورت استفاده از GPUهای NVIDIA، سازگاری کارت و درایور با Ollama را نیز بررسی کنید. Ollama از طیف گسترده‌ای از GPUهای NVIDIA پشتیبانی می‌کند و RTX 40 نیز در فهرست سخت‌افزارهای پشتیبانی‌شده قرار دارد.

چگونه بفهمیم مشکل از Context است یا کمبود VRAM؟

اگر با کاهش Context سرعت مدل افزایش پیدا می‌کند و هم‌زمان مقدار بیشتری از مدل روی GPU قرار می‌گیرد، احتمالاً محدودیت حافظه یکی از عوامل اصلی کندی بوده است. برای تشخیص دقیق‌تر باید مقدار VRAM مصرفی، Context و وضعیت PROCESSOR را هم‌زمان بررسی کرد.

نکته مهم این است که سرعت مدل فقط با عدد Tokens/sec سنجیده نمی‌شود. زمان بارگذاری مدل، سرعت پردازش Prompt و سرعت تولید پاسخ نیز اهمیت دارند. بنابراین بهتر است دو تنظیم مختلف را با یک مدل و یک درخواست یکسان آزمایش کنید تا مقایسه قابل اتکاتری داشته باشید.

در نتیجه اگر یک مدل هوش مصنوعی محلی روی کامپیوتر شما بسیار کند است، ابتدا سراغ تنظیمات حافظه بروید. مدل باید تا حد امکان به‌طور کامل در VRAM قرار بگیرد و Context نیز نباید بدون نیاز واقعی بیش از حد بزرگ انتخاب شود. در بسیاری از سیستم‌های دارای VRAM محدود، کاهش منطقی Context می‌تواند تفاوت محسوسی در تجربه استفاده از Ollama ایجاد کند.