چیت‌شیت

پردازنده‌های گرافیکی، فضای ابری، Docker و کلیدهای API

GPUs, Cloud, Docker and API Keys

بررسی GPU، تعیین اندازه مدل برای حافظه‌ی گرافیکی، اجرای CUDA در Docker، ذخیره کلیدهای API و رفع خطاهای API.

  • ۱۳ بخش
  • ۳ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. کجا اجرا کنیم
  2. بررسی GPU
  3. ذخیره و استفاده از کلید API
  4. اولین فراخوانی با SDK
  5. فراخوانی مستقیم HTTP
  6. خطاهای API
  7. نصب Docker و دسترسی GPU
  8. ایمیج‌های پایه
  9. ساخت و اجرای ایمیج توسعه
  10. استک Compose
  11. وظایف Docker
  12. رفع خطاهای Docker
  13. نکات کاربردی

کجا اجرا کنیم

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
Local NVIDIA GPU$0نصب CUDA + cuDNN. استفاده مداوم، مجموعه‌داده‌های بزرگ
Google Colab (free tier)$0Runtime > Change runtime type > T4 GPU
Cloud GPU (Lambda, RunPod, Vast.ai)$0.20-2.00/hrاتصال SSH + نصب. آموزش‌های جدی و سنگین
CPUphases 1-3بیشتر درس‌ها روی CPU به خوبی اجرا می‌شوند
fp16 rule of thumb2 bytes per parameterحاشیه‌ای برای اکتیویشن‌ها در نظر بگیرید

بررسی GPU

کد
python
torch.cuda.is_available()           # False means no GPU
torch.version.cuda                  # نسخه CUDA در PyTorch
torch.cuda.get_device_name(0)       # نام GPU
props = torch.cuda.get_device_properties(0)
vram_gb = props.total_memory / 1e9  # حافظه‌ی گرافیکی به گیگابایت
params_fp16 = vram_gb * 1e9 / 2     # حداکثر پارامترها در fp16
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
torch.cuda.synchronize()            # قبل و بعد از زمان‌گیری GPU

ذخیره و استفاده از کلید API

گام‌به‌گام
  1. شِلexport ANTHROPIC_API_KEY="sk-ant-...". هرگز کلیدها را در کد قرار ندهید.
  2. فایل .envANTHROPIC_API_KEY=sk-ant-.... فایل .env را به .gitignore اضافه کنید.
  3. SDKمتد anthropic.Anthropic() کلید را از متغیرهای محیطی می‌خواند.
  4. درخواستاندپوینت، کلید، و یک بدنه با model، max_tokens و messages.
  5. پاسخخروجی JSON شامل content، usage و stop_reason.

اولین فراخوانی با SDK

کد
python
client = anthropic.Anthropic()
MODEL = os.environ.get("LLM_MODEL", "claude-sonnet-5")     # شناسه مدل
response = client.messages.create(
    model=MODEL,
    max_tokens=256,
    messages=[{"role": "user", "content": "<prompt>"}]
)
print(response.content[0].text)                            # متن پاسخ
response.usage.input_tokens, response.usage.output_tokens  # توکن‌های محاسبه‌شده

فراخوانی مستقیم HTTP

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
Endpointhttps://api.anthropic.com/v1/messagesmethod="POST"
x-api-keyANTHROPIC_API_KEYهدر کلید
anthropic-version2023-06-01هدر نسخه
LLM_MODELclaude-sonnet-5نام مستعار بدون تاریخ Sonnet
max_tokens256ارزش آموزشی
MOCK"1"نسخه TypeScript سپس شبکه را دور می‌زند

خطاهای API

عیب‌یابی
  • 401 Unauthorized

    علت
    کلید نادرست است یا وجود ندارد
    راه‌حل
    echo $ANTHROPIC_API_KEY \| head -c 10
  • 403 Forbidden

    علت
    عدم دسترسی به اندپوینت یا مدل
    راه‌حل
    بررسی دسترسی‌های کلید
  • 429 Too Many Requests

    علت
    محدودیت نرخ درخواست اعمال شده
    راه‌حل
    صبر کنید و دوباره تلاش کنید، یا فرکانس را کاهش دهید
  • 400 Bad Request

    علت
    بدنه درخواست نامعتبر است
    راه‌حل
    بررسی فیلدها، نام مدل و فرمت پیام‌ها
  • 500/502/503

    علت
    مشکل از سمت سرور
    راه‌حل
    یک دقیقه صبر کنید و دوباره امتحان کنید
  • Timeout

    علت
    درخواست بیش از حد طول کشید
    راه‌حل
    کاهش max_tokens یا استفاده از استریمینگ
  • Connection refused

    علت
    آدرس پایه یا شبکه اشتباه است
    راه‌حل
    curl -I https://api.anthropic.com

نصب Docker و دسترسی GPU

دستورها
دستورکاربرد
curl -fsSL https://get.docker.com \| shنصب Docker روی Ubuntu
sudo usermod -aG docker $USERاجرای Docker بدون sudo. خروج و ورود مجدد
docker run hello-worldبررسی صحت نصب
sudo apt-get install -y nvidia-container-toolkitدسترسی GPU برای کانتینرها (Linux)
sudo nvidia-ctk runtime configure --runtime=dockerثبت محیط اجرا، سپس sudo systemctl restart docker
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smiتست GPU داخل کانتینر

ایمیج‌های پایه

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
nvidia/cuda:12.4.1-devel-ubuntu22.04~4 GBnvcc برای flash-attn و bitsandbytes
nvidia/cuda:12.4.1-runtime-ubuntu22.04~1.5 GBکد کامپایل‌شده آماده. بدون کامپایلرها
pytorch/pytorch:2.6.0-cuda12.4-cudnn9-runtime~6 GBPyTorch از قبل نصب شده است
python:3.12-slim~150 MBبدون CUDA. فقط CPU

ساخت و اجرای ایمیج توسعه

کد
bash
docker build -t ai-dev -f phases/00-setup-and-tooling/07-docker-for-ai/code/Dockerfile .
docker run --rm -it --gpus all \
    -v $(pwd):/workspace \  # کد شما
    -v ~/models:/models \   # مدل‌ها بعد از بیلد مجدد باقی می‌مانند
    -p 8888:8888 \          # پورت Jupyter
    ai-dev jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser --allow-root

استک Compose

معماری
والیوم‌هاhttp://qdrant:6333والیومپوشه‌های هاست~/models، ~/datasets، مخزن کدai-devاجرای Jupyter روی پورت 8888، پردازنده گرافیکی nvidiaqdrantqdrant/qdrant:v1.12.5qdrant_data/qdrant/storage

وظایف Docker

کار و کد
وظیفهکد
اجرای استکdocker compose up -d
توقف و حذف والیومdocker compose down -v
اجرای شِل درون یک سرویسdocker compose exec ai-dev bash
اندازه ایمیج‌هاdocker images
آزادسازی فضای دیسکdocker system prune -a
دسترسی GPU در کانتینرdocker exec -it <container_id> nvidia-smi
مشاهده لحظه‌ای لاگ‌هاdocker logs -f <container_id>

رفع خطاهای Docker

عیب‌یابی
  • No matching distribution found for torch==2.6.0+cu124

    علت
    مک ایمیج arm64 را انتخاب می‌کند
    راه‌حل
    FROM --platform=linux/amd64
  • عدم وجود GPU روی مک یا سیستم CPU

    علت
    عدم پشتیبانی از CUDA در آن سیستم
    راه‌حل
    حذف --gpus all و بلوک deploy مربوط به NVIDIA
  • حذف شدن مدل 14 گیگابایتی پس از توقف

    علت
    عدم اتصال والیوم
    راه‌حل
    -v ~/models:/models
  • سرور از هاست قابل دسترسی نیست

    علت
    بایند شدن روی localhost
    راه‌حل
    host="0.0.0.0" و -p 5000:5000

نکات کاربردی

نکته‌ها
  • زمان اجرای دوم GPU را اندازه بگیرید. اجرای اول شامل هزینه راه‌اندازی است.
  • قبل از اعتماد به بنچمارک، دستور !nvidia-smi را در Colab اجرا کنید.
  • هر کلید API را زمانی تنظیم کنید که درس به آن نیاز دارد.
  • هنگام شکست فراخوانی SDK، درخواست خام HTTP را بررسی کنید.
  • پکیج‌های جدید را به Dockerfile اضافه کرده و دوباره بیلد کنید. لایه‌های دست‌نخورده از کش خوانده می‌شوند.