اولین API مدل زبانی بزرگ (LLM) شما روی Kubernetes
اجرای یک LLM روی Kubernetes با اجرای یک اپلیکیشن وب استاندارد متفاوت است. شما فقط بر اساس تعداد درخواستها مقیاسبندی (scale) نمیکنید؛ بلکه بر اساس ظرفیت GPU و وزنهای مدل مقیاسبندی میکنید.
در این راهنما، شما یک مدل را روی یک نود (node) دارای GPU مستقر میکنید، آن را به عنوان یک API در دسترس قرار میدهید و با یک درخواست curl آن را فراخوانی میکنید.
ما از این ابزارها استفاده میکنیم:
- مدل: Qwen/Qwen2.5-1.5B-Instruct
- موتور: vLLM
- زیرساخت: Kubernetes با پشتیبانی از NVIDIA GPU
مرحله ۱: ظرفیت GPU خود را بررسی کنید
قبل از شروع، مطمئن شوید که Kubernetes سختافزار شما را میبیند. این دستور را اجرا کنید:
kubectl get nodes -o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu
اگر ستون GPU خالی است، متوقف شوید. ابتدا باید مشکل NVIDIA device plugin خود را برطرف کنید.
مرحله ۲: دسترسی به مدل خود را ایمن کنید حتی برای مدلهای عمومی، از یک توکن Hugging Face استفاده کنید. این کار باعث میشود در آینده تعویض مدل به مدلهای خصوصی آسانتر شود.
- ایجاد یک namespace:
kubectl create namespace llm-demo - ایجاد یک Secret برای توکن خود:
kubectl create secret generic hf-token -n llm-demo --from-literal=HF_TOKEN="your_token_here"
مرحله ۳: سرور مدل را مستقر کنید ما از vLLM استفاده میکنیم زیرا کارهای سنگین را مدیریت میکند. این ابزار وظایف batching، tokenization و ارائه API سازگار با OpenAI را بر عهده دارد.
یک فایل deployment با این الزامات کلیدی ایجاد کنید:
- درخواست ۱ عدد GPU:
nvidia.com/gpu: 1 - مونت کردن
/dev/shm: سرورهای مدل برای جلوگیری از کرش کردن به حافظه مشترک (shared memory) نیاز دارند. - استفاده از Secrets: توکن
HF_TOKENخود را به کانتینر پاس دهید.
پیکربندی خود را اعمال کنید:
kubectl apply -f qwen-vllm.yaml
مرحله ۴: API را تأیید کنید
به وضعیت "Running" اعتماد نکنید. یک pod در حالی که هنوز در حال دانلود فایلهای حجیم مدل است، میتواند در وضعیت "Running" باشد. لاگهای خود را زیر نظر بگیرید:
kubectl logs -n llm-demo -f deployment/qwen-vllm
منتظر بمانید تا ببینید سرور در پورت 8000 در حال گوش دادن (listening) است.
آن را با port-forwarding تست کنید:
kubectl port-forward -n llm-demo svc/qwen-vllm 8000:8000
درخواست curl خود را اجرا کنید:
curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-1.5B-Instruct",
"messages": [{"role": "user", "content": "Explain Kubernetes in two sentences."}],
"max_tokens": 120
}'
هدف نهایی: شما از ظرفیت خام GPU به یک API عملی رسیدهاید. شما ثابت کردید که:
- Kubernetes وظایف GPU را زمانبندی (schedule) میکند.
- کانتینر میتواند به سختافزار دسترسی داشته باشد.
- سرور مدل، وزنها را در حافظه بارگذاری میکند.
- API به درخواستهای استاندارد پاسخ میدهد.
اگر این چرخه با شکست مواجه شود، مقیاسبندی و مسیریابی (routing) شما را نجات نخواهد داد. ابتدا زیربنا را اصلاح کنید.
انجمن یادگیری اختیاری: https://t.me/GyaanSetuAi
