اجرای دو مدل روی یک GPU: ریاضیات پشت پردهی LLMهای محلی
من یک پشتهی عامل (agent stack) را روی یک ایستگاه کاری (workstation) اجرا میکنم. مدلها از طریق یک شبکه LAN روی یک DGX Spark قرار دارند. من برای مدیریت بهتر حافظه، به جای Ollama از vLLM استفاده میکنم.
هدف، اجرای همزمان دو مدل است:
- Qwen3-Next-80B برای استدلالهای سنگین.
- Qwen3-4B برای پاسخهای سریع.
هر دو مدل از طریق یک پروکسی LiteLLM به یک URL واحد متصل میشوند. این تنظیمات چندین بار با شکست مواجه شد تا اینکه بالاخره محاسبات درست را پیدا کردم.
در اینجا درسهایی که از این چالش آموختم آورده شده است.
تلهی حافظه
تنظیم gpu_memory_utilization هدف برای حافظهی آزاد نیست، بلکه کسری از کل حافظهی GPU است.
اگر یک کارت گرافیک ۱۲۰ گیگابایتی داشته باشید و میزان استفاده (utilization) را روی ۰.۸۰ تنظیم کنید، vLLM سعی میکند ۹۶ گیگابایت از کل ظرفیت را تصاحب کند. این تنظیمات به میزان حافظهی آزادِ فعلی نگاه نمیکند. اگر میخواهید دو فرآیند را اجرا کنید، مجموع درصدهای آنها باید کمتر از ۰.۹۵ باشد. باید فضایی را برای سربار (overhead) فریمورک CUDA در نظر بگیرید.
چه اتفاقی برای مدلها افتاد
من سعی کردم از نسخهی Thinking مدل 80B استفاده کنم. اما شکست خورد. مدل داخل تگهای <think> استدلال میکرد اما هرگز فراخوانی ابزار (tool call) را اجرا نمیکرد؛ فقط متوقف میشد.
مجبور شدم مدل پایه (backbone) 80B را به نسخهی Instruct تغییر دهم. این کار به عامل اجازه داد تا از ابزارها به درستی استفاده کند.
محاسبات واقعی پس از آزمایش، متوجه شدم این اعداد برای تنظیمات من کار میکنند:
• Qwen3-Next-80B (با هدف ۰.۸۰): حدود ۸۷.۸ GiB حافظهی واقعی مصرف میکند. • Qwen3-4B (با هدف ۰.۱۰): حدود ۱۳.۸ GiB حافظهی واقعی مصرف میکند. • مجموع مصرف: حدود ۱۰۱.۶ GiB. • فضای آزاد باقیمانده: حدود ۱۸ GiB.
اگر مقدار 80B را به ۰.۸۵ افزایش میدادم، مدل 4B نمیتوانست اجرا شود. مدل 80B بخش زیادی از حافظه را تصاحب میکرد و فضایی برای حداقل نیازهای مدل 4B باقی نمیگذاشت.
دستورالعمل من برای مدلهای همزیست
۱. ابتدا بزرگترین مدل را بارگذاری کنید.
۲. اجازه دهید مدل مستقر شود.
۳. دستور nvidia-smi را اجرا کنید تا میزان حافظهی واقعی مصرفشده را ببینید.
۴. اندازه مدل کوچکتر را بر اساس حافظهی آزادِ باقیمانده منهای ۵ گیگابایت (برای سربار) تعیین کنید.
۵. هر دو مدل را دو بار ریاستارت کنید تا از پایداری آنها مطمئن شوید.
تنظیمات حافظه را حدس نزنید. از این دستور برای مشاهده واقعیت استفاده کنید:
nvidia-smi --query-gpu=memory.used --format=csv
اگر تخصیص هدف (target allocation) و مصرف واقعی شما بیش از ۱۰٪ تفاوت داشت، محاسبات شما اشتباه است. قبل از استقرار پشتهی عامل خود، آن را اصلاح کنید.
Optional learning community: https://t.me/GyaanSetuAi