پرش به محتوای اصلی
پرش به محتوای مقاله

تلهٔ VRAM در اولاما: چرا مدل‌های ۲۶۲ هزار توکنی در ۳۳ هزار توکن می‌شکنند؟

·۲۵ مرداد ۱۴۰۵۸ دقیقه مطالعه۲ بازدید
راهنما
مدل ۲۶۲هزار توکنی من در ۳۳ هزار متوقف می‌شد و راه‌حل هیچ ارتباطی با OpenClaw نداشت
مدل ۲۶۲هزار توکنی من در ۳۳ هزار متوقف می‌شد و راه‌حل هیچ ارتباطی با OpenClaw نداشت
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

افشای مکانیزم تخصیص خودکار و خاموش پنجرهٔ متنی در اولاما بر اساس میزان VRAM؛ این یعنی سقف توکن‌ها به‌طور پویا و بدون اطلاع کاربر توسط لایهٔ سرویس‌دهی تغییر می‌کند.

۳۳ هزار توکن؛ این دقیقاً نقطه‌ای است که یک مدل Qwen با پنجرهٔ متنی ادعایی ۲۶۲,۱۴۴ توکن، در میانهٔ یک جلسهٔ زنده به‌طور خاموش فرو می‌پاشد. این تضاد یک حالت شکست خطرناک ایجاد می‌کند: عامل‌های هوش مصنوعی در تست‌های کوتاه عالی به نظر می‌رسند، اما در اجرای عملیات‌های پیچیده و چندمرحله‌ای در محیط تولید، ناگهان متوقف می‌شوند.

این مشکل زمانی رخ می‌دهد که توسعه‌دهندگان بیشتر و بیشتری از APIهای ابری به سمت استک‌های میزبانی شخصی (Self-hosting) مانند اولاما (Ollama) و OpenClaw حرکت می‌کنند. در حالی که کارت مدل (Model Card) — شبیه به برگهٔ مشخصات فنی یک خودرو که حداکثر سرعت را می‌نویسد — سقفی تئوریک ارائه می‌دهد، اما محدودیت واقعی در زمان اجرا (Runtime) اغلب توسط نحوه تعامل لایهٔ سرویس‌دهی با سخت‌افزار موجود تعیین می‌شود؛ نکته‌ای ظریف که معمولاً از مستندات رسمی جا می‌افتد.

همان‌طور که در تحلیل‌های پیشین ما درباره‌ی بهینه‌سازی مدل‌های بازمتن اشاره کردیم، فاصله میان تئوری و اجرا در محیط‌های محلی همیشه یک چالش است. طبق گزارشی فنی که در ۱۶ اوت ۲۰۲۶ منتشر شد، مقصر اصلی تفاوت میان «حداکثر زمینهٔ اعلام‌شده» و «زمینهٔ موثر در زمان اجرا» است. در واقع کارت مدل یک توجیه (Alibi) است، نه تضمینی برای عملکرد واقعی.

بسیاری از کاربران هنگام بررسی بحث‌های جامعه در محیط‌هایی مانند r/openclaw با این موضوع مواجه می‌شوند. کاربران گزارش می‌دهند که در حالی که OpenClaw تشخیص می‌دهد مدل از ۲۶۲,۱۴۴ توکن پشتیبانی می‌کند، پاسخ‌ها به‌طور مداوم پس از مصرف ۳۳,۰۰۰ توکن با خطا مواجه می‌شوند. این هسته اصلی باگ است: مدل از ۲۶۲ هزار توکن پشتیبانی می‌کند، اما استک اجرایی تنها حدود ۳۳ هزار توکن را سرو می‌کند. اگر این تفاوت را درک نکنید، ممکن است ساعت‌ها وقت خود را صرف متهم کردن لایه‌های اشتباه کنید.

در OpenClaw، رابط کاربری (UI) ممکن است ۲۶۲,۱۴۴ توکن درخواست کند، اما بک‌اند ممکن است تنها بخشی از آن را تخصیص دهد. سیگنال واقعی در ترمینال و از طریق دستور ollama ps یافت می‌شود؛ این دستور سقف واقعی را که جلسه در حال حاضر تحت آن زندگی می‌کند، فاش می‌کند. اگر ollama ps عدد ۳۳ هزار را نشان دهد، این سقف مطلق جلسه شماست، فارغ از اینکه در صفحهٔ مدل یا رابط کاربری OpenClaw چه عددی نوشته شده است.

اولاما از چندین پیش‌فرض استفاده می‌کند که می‌توانند با یکدیگر متضاد باشند. در حالی که پیش‌فرض پایه ۴,۰۹۶ توکن است (مگر اینکه تغییر داده شود)، راهنمایی‌های جدیدتر یک استراتژی تخصیص بر اساس حافظهٔ ویدیویی (VRAM) — که مثل فضای میز کار برای پردازش داده‌هاست — را توصیف می‌کنند:

  • کمتر از ۲۴ گیگابایت VRAM: حدود ۴ هزار توکن
  • ۲۴ تا ۴۸ گیگابایت VRAM: حدود ۳۲ هزار توکن
  • بیش از ۴۸ گیگابایت VRAM: تا ۲۵۶ هزار توکن

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

مدل ۲۶۲هزار توکنی‌ام در ۳۳هزار متوقف می‌شد و راه‌حل هیچ‌جا نزدیک OpenClaw نبود

پرامپت‌های تک‌مرحله‌ای (One-shot) اغلب گمراه‌کننده هستند چون پنجرهٔ زمینه (Context Window) — که مثل میزان متنی است که مدل هم‌زمان در ذهن نگه می‌دارد — را تحت فشار قرار نمی‌دهند. یک پرامپت مستقیم و کوتاه تقریباً هیچ اطلاعاتی به شما نمی‌دهد که آیا یک گردش‌کار عامل‌محور (Agent Workflow) دوام می‌آورد یا خیر. گردش‌کارهای عامل‌محور در ابزارهایی مثل n8n، Make، Zapier یا فریم‌ورک‌های سفارشی سازگار با OpenAI، داده‌های بسیار بیشتری را نسبت به یک چت ساده انباشته می‌کنند، از جمله:

  • پرامپت‌های سیستمی و حافظه (Memory)
  • نوبت‌های قبلی گفتگو
  • ردپای ابزارها (Tool Traces) و خروجی‌های مفصل ابزارها
  • دستورالعمل‌های عامل و تلاش‌های مجدد (Retries)
  • ساختارهای استدلالی میانی (Intermediate Reasoning Scaffolding)

این لایه‌ها به‌سرعت جلسه را از مرز ۳۲ هزار توکن عبور می‌دهند و باعث می‌شوند عامل پس از ۲۰ دقیقه اجرای به‌ظاهر موفق، ناگهان شکست بخورد. این محدودیت‌های پنهان فقط یک چت را نمی‌شکنند؛ آن‌ها حلقه‌های ابزار، انتقال حافظه، ردپاهای طولانی، اجرای کدها و اتوماسیون‌های چندمرحله‌ای را نابود می‌کنند. به همین دلیل اولاما صراحتاً برای کارهای کدنویسی، جست‌وجوی وب و بارهای کاری مربوط به عامل‌ها، استفاده از زمینه (Context) بزرگ‌تر را توصیه می‌کند.

بسیاری از توسعه‌دهندگان سعی می‌کنند با خروجی گرفتن از متغیر OLLAMA_CONTEXT_LENGTH=262144 در شل محلی خود این مشکل را حل کنند. اما اگر اولاما درون یک کانتینر داکر (Docker) اجرا شود، این متغیر باید درون همان کانتینر خاص وجود داشته باشد، نه در ترمینال میزبان، پروفایل شل یا کانتینر OpenClaw.

اگر اولاما نتواند متغیر را در پردازش (Process) خود ببیند، تنظیمات نادیده گرفته می‌شوند. برای تایید محیط واقعی، کاربران باید دستورات زیر را اجرا کنند:

  • docker logs <ollama-container> برای بررسی لاگ‌های زمان استارت‌آپ.
  • docker exec -it <ollama-container> env | grep OLLAMA برای بررسی متغیرهای محیطی در کانتینر در حال اجرا.

برای عیب‌یابی، باید بدانید هر لایه دقیقاً چه چیزی را کنترل می‌کند:

  • پیکربندی OpenClaw: کنترل می‌کند که OpenClaw چه مقدار زمینه را برای عامل درخواست یا تبلیغ کند. این مورد از طریق تنظیمات OpenClaw و رفتار درخواست‌ها قابل تایید است.
  • تنظیمات سرور اولاما: کنترل می‌کند که اولاما در زمان اجرا مایل به تخصیص چه مقدار حافظه است. این مورد از طریق ollama ps و لاگ‌های اولاما قابل تایید است.
  • اورراید num_ctx در هر درخواست: کنترل می‌کند که یک فراخوانی API خاص چه مقدار توکن درخواست کند. این مورد با بررسی دقیق Payload ارسالی به API تایید می‌شود.

مدیریت محیط معمولاً بسته به روش نصب می‌شکند:

  • نصب روی میزبان (Host Install): متغیرها در شل یا محیط سرویس اکسپورت می‌شوند. یک خطای رایج این است که متغیر در یک شل ست شده اما اولاما در جای دیگری (مثلاً یک ترمینال دیگر یا سرویس پس‌زمینه) اجرا می‌شود.
  • سرویس systemd: متغیرها باید در واحد سرویس (Service Unit) یا فایل override تعریف شوند؛ در غیر این صورت systemd محیط قدیمی را حفظ می‌کند.
  • کانتینر داکر: متغیرها باید به پردازش کانتینر پاس داده شوند. خطای رایج این است که متغیر روی میزبان ست شده اما هرگز به داخل کانتینر تزریق نشده است.

برای رفع این گلوگاه‌ها، گزارش مذکور یک رویکرد سیستماتیک شبیه به مدیریت حوادث تولید (Production-incident approach) را پیشنهاد می‌دهد، به‌جای اینکه چندین لایه را به‌طور هم‌زمان و تصادفی تغییر دهید:

۱. تنظیم درخواست: پنجرهٔ عامل را صراحتاً با دستور openclaw config set agents.defaults.contextWindow 262144 تنظیم کنید.
۲. تایید تخصیص: دستور ollama ps را اجرا کنید. اگر عدد حدود ۳۳ هزار را دیدید، این سقف واقعی شماست، نه سقف مطلوب شما.
۳. اجبار سرور: سرور را با یک متغیر مستقیم اجرا کنید. برای اجرای مستقیم از OLLAMA_CONTEXT_LENGTH=64000 ollama serve (یا ۲۶۲,۱۴۴ اگر سخت‌افزار پشتیبانی می‌کند) استفاده کنید تا از تبدیل عملکرد به «لجن» (کندی شدید) جلوگیری شود.
۴. جداسازی درخواست: با یک دستور curl مستقیماً num_ctx را روی API تست کنید:
curl http://localhost:11434/api/generate -d '{ "model": "llama3.2", "prompt": "Why is the sky blue?", "options": { "num_ctx": 64000 } }'
این کار رفتار سطح درخواست را از رفتار سطح سرور جدا می‌کند. اگر فراخوانی‌های مستقیم کار می‌کنند اما OpenClaw شکست می‌خورد، مشکل به فریم‌ورک محدود می‌شود. اگر فراخوانی‌های مستقیم همچنان با سقف مواجه می‌شوند، لایهٔ سرویس‌دهی گلوگاه است.
۵. بررسی پیکربندی داکر: برای Docker Compose، متغیر محیطی را در سرویس اولاما صریح کنید:

services:
  ollama:
    image: ollama/ollama
    ports:
      - "11434:11434"
    environment:
      - OLLAMA_CONTEXT_LENGTH=64000

سپس دستورات docker compose down و docker compose up -d را اجرا کرده و در نهایت با docker exec و ollama ps تایید کنید.

یک تفاوت حیاتی میان مدلی که ۲۵۶ هزار توکن را «پشتیبانی» می‌کند و ماشینی که می‌تواند آن‌ها را «سرویس» دهد وجود دارد. فشار برای رسیدن به حداکثر زمینه بدون سخت‌افزار کافی، سرعت پاسخ‌دهی را به‌شدت کاهش داده و عملکرد را به «لجن» تبدیل می‌کند.

عوامل دیگری نیز می‌توانند باعث شکست در پرامپت‌های بزرگ شوند، از جمله:

  • استفاده از یک بک‌اندهای دیگر سازگار با OpenAI
  • انتخاب‌های اشتباه در کوانتش (Quantization) — که مثل فشرده‌سازی یک فایل برای اشغال فضای کمتر است
  • فشار حافظه و مشکلات مربوط به GPU Offloading
  • عدم سازگاری بین مدل و سرور
  • استک سرویس‌دهی که درخواست را می‌پذیرد اما زیر بار شدید فرو می‌پاشد

برای عامل‌های تولیدی، یک تنظیم پایدار ۶۴ هزار توکنی که حلقه‌های ابزار را کامل کند، بسیار برتر از یک تنظیم تئوریک ۲۵۶ هزار توکنی است که در میانهٔ ردپاهای استدلالی متوقف می‌شود. همین پیش‌بینی‌ناپذیری است که برخی تیم‌ها را به سمت سرویس‌های سازگار با OpenAI مانند Standard Compute سوق می‌دهد تا از «اضطراب توکن» رها شوند و قیمت‌گذاری ماهانه پیش‌بینی‌پذیری داشته باشند و درگیر صورت‌حساب‌های توکن‌به-توکن نشوند.

در نهایت، هنگام عیب‌یابی، اولین سوال باید این باشد: «در حالی که جلسه فعال است، ollama ps چه می‌گوید؟». این کار تمام سردرگمی‌های ناشی از تضاد بین کارت مدل، پیکربندی OpenClaw، تخصیص زمان اجرا و رفتار عامل را از بین می‌برد.

اگر مدل ۲۶۲ هزار توکنی شما مثل یک مدل ۳۳ هزار توکنی رفتار می‌کند، احتمالاً در زمان اجرا دقیقاً همان است. به اعداد زمان اجرا اعتماد کنید، نه به اعداد بازاریابی. با متغیرهای محیطی داکر به عنوان شواهدی برخورد کنید که باید در داخل پردازش در حال اجرا اثبات شوند. برای عامل‌های تولیدی که نیاز به اجرای مداوم دارند، از استک‌هایی دوری کنید که در آن‌ها لایهٔ سرویس‌دهی بتواند به‌طور خاموش سقف کارت مدل را کاهش دهد.

گام بعدی شما

  • اگر از اولاما استفاده می‌کنید، همین حالا دستور ollama ps را در حین یک جلسهٔ فعال اجرا کنید تا سقف واقعی توکن‌های خود را ببینید.
  • در صورت استفاده از داکر، متغیر OLLAMA_CONTEXT_LENGTH را مستقیماً در فایل docker-compose.yaml تعریف کنید.
  • برای عامل‌های حساس، به‌جای هدف‌گذاری روی حداکثر توکن‌های مدل، روی یک عدد پایدار (مثلاً ۶۴ هزار) متمرکز شوید تا از کندی شدید (Sludge) جلوگیری کنید.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell مراجعه کنید.

چرا این موضوع مهم است؟

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

تأثیر برای ایران

برای توسعه‌دهندگان ایرانی که به‌دلیل محدودیت‌های پرداخت APIهای ابری به میزبانی شخصی (Self-hosting) روی سخت‌افزارهای محدود متکی هستند، شناسایی این گلوگاه برای جلوگیری از کرش کردن عامل‌های محلی ضروری است.

·نگاه ما
تحریریه دات‌هوش

اتکای بیش از حد به اعداد کارت مدل در محیط‌های Local LLM یک ریسک عملیاتی است. این شکاف نشان می‌دهد که لایه‌های Orchestration هنوز به بلوغ کافی برای مدیریت پویا و شفاف منابع نرسیده‌اند. استراتژی تخصیص خاموش اولاما ثابت می‌کند که در دنیای مدل‌های محلی، سخت‌افزار تعیین‌کنندهٔ قابلیت است، نه معماری مدل.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.