Bu ne oluşturur
Açık ağırlıklı bir modeli OpenAI uyumlu şemayı konuşan bir HTTP API üzerinden sunan tek bir GPU örneği. Böylece sahip olduğunuz tüm istemci kütüphaneleri, yalnızca temel URL'yi değiştirerek onunla çalışır. nginx arkasında, TLS, bir API anahtarı ve yeniden başlatmalara dayanan bir systemd birimi ile.
Bir G-L40S üzerinde yazılmıştır: tek bir kartta kırk sekiz gigabayt VRAM, kiracılar arasında zaman dilimlerine bölünmek yerine PCIe üzerinden örneğe geçirilir. Bu ayrım, öngörülebilir gecikme ile başkasının eğitim işinin arkasında beklemek arasındaki farktır. Kart, siz iptal edene kadar sizindir.
Başlamadan önce
- Debian 13 ile bir G-L40S. Yirmi gigabayttaki G-ADA daha küçük modeller için çalışır; dördüncü adımdaki aritmetik size hangilerini söyler.
- Bu planda iki terabayt NVMe, ağırlıklar için doğru yerdir. Kök dosya sisteminde önbellek olduğu için kırk gigabaytı iki kez indirmek, bir saati harcamanın can sıkıcı bir yoludur.
- Örneği gösteren bir ana makine adı, aşağıda
llm.example.com.
1. Sürücü
sed -i "s/ main$/ main contrib non-free-firmware non-free/" /etc/apt/sources.list.d/debian.sources
apt update
apt install -y nvidia-driver firmware-misc-nonfree build-essential
rebootGeri geldikten sonra:
nvidia-smiKartın listelendiğini, sürücü sürümünün yazdırıldığını ve bellek kullanımının sıfıra yakın olduğunu görmek istersiniz. Bu noktada eksik bir kart neredeyse her zaman bayat bir initramfs'tir; bir bilet açmadan önce update-initramfs -u ve bir kez daha yeniden başlatın.
nvidia-smi -q -d PERFORMANCE | grep -A3 "Clocks Event Reasons"
nvidia-smi -pm 1Persistence modu, sürücüyü süreçler arasında yüklü tutar ve bu da her yeniden başlatmada birkaç saniyelik başlatmayı kaldırır.
2. Çalışma zamanı
apt install -y python3-venv python3-pip
install -d -o root -g root /srv/models /opt/vllm
python3 -m venv /opt/vllm/venv
/opt/vllm/venv/bin/pip install --upgrade pip
/opt/vllm/venv/bin/pip install vllmKurulum büyük bir CUDA bağlantılı tekerlek seti çeker ve biraz zaman alır. Bu sırada bir modele karar verin.
3. Sığacak olanı seçme
Ağırlıklar tabandır, bütçe değil. On altı bit hassasiyetindeki bir model, milyar parametre başına kabaca iki gigabayt VRAM artı her eşzamanlı istek için anahtar-değer önbelleği artı yaklaşık bir gigabayt çalışma zamanı yükü gerektirir.
| Kart | 16 bitte ağırlıklar | Gerçekçi model boyutu | Önbellek için kalan |
|---|---|---|---|
| L40S, 48 GB | Milyar başına 2 GB | Yaklaşık 20 milyara kadar | 6 ila 8 GB |
| L40S, 48 GB, 8 bit | Milyar başına 1 GB | Yaklaşık 34 milyara kadar | 10 GB |
| RTX 4000 Ada, 20 GB | Milyar başına 2 GB | Yaklaşık 7 milyara kadar | 5 GB |
| İki × L40S, 96 GB | Milyar başına 2 GB | Yaklaşık 40 milyara kadar | 12 GB |
Önbellek sütunu, uç noktayı aynı anda kaç kişinin kullanabileceğini belirler. Kartı ağırlıklarla ağzına kadar doldurursanız, çok hızlı tek kullanıcılı bir oyuncak inşa etmiş olursunuz.
4. Sunma
Önbelleği NVMe'ye yönlendirin ve sunucuyu başlatın. Seçtiğiniz açık ağırlıklı modelin depo tanımlayıcısını değiştirin; çalışma zamanı onu ilk başlatmada getirir.
cat > /etc/systemd/system/vllm.service <<EOF
[Unit]
Description=vLLM inference server
After=network-online.target
[Service]
Environment=HF_HOME=/srv/models
Environment=VLLM_API_KEY=<a long random string>
ExecStart=/opt/vllm/venv/bin/vllm serve <org>/<model> \\
--host 127.0.0.1 --port 8000 \\
--served-model-name local \\
--max-model-len 16384 \\
--gpu-memory-utilization 0.92 \\
--max-num-seqs 32
Restart=on-failure
RestartSec=10
TimeoutStartSec=1800
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload && systemctl enable --now vllm
journalctl -fu vllmLoopback'e bağlanmak bilinçlidir. Çalışma zamanındaki API anahtarı kontrolü, arkasında hız sınırlaması olmayan tek bir paylaşılan sırdır; bu nedenle nginx maruz kalmayı yapar ve çalışma zamanı genel arayüze asla dokunmaz.
Cömert başlangıç zaman aşımı, ilk başlatmanın onlarca gigabayt indirmesi ve ardından çekirdekleri derlemesi nedeniyle vardır. Sonraki başlatmalar bir dakikadan kısa sürer.
5. Proxy ve TLS
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name llm.example.com;
ssl_certificate /etc/letsencrypt/live/llm.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/llm.example.com/privkey.pem;
location /v1/ {
proxy_pass http://127.0.0.1:8000;
proxy_buffering off;
proxy_read_timeout 600s;
proxy_set_header Host $host;
}
}proxy_buffering off, akış yanıtlarının akmasını sağlayan satırdır. Açık bırakın ve nginx bir arabelleğin dolu olduğunu hissettiğinde belirteçler kibar gruplar halinde gelir; bu tam olarak yavaş bir model gibi görünür ve değildir.
Doğrulayın
Kartla başlayın:
nvidia-smi --query-gpu=memory.used,memory.total,utilization.gpu --format=csvKullanılan bellek, toplamın yaklaşık yüzde doksanı olmalıdır, çünkü --gpu-memory-utilization bunu istedi. Ardından uç nokta:
curl -s https://llm.example.com/v1/models -H "Authorization: Bearer <the key>" | head -20local adında bir model. Şimdi gerçek bir tamamlama ve zamanlayın:
time curl -s https://llm.example.com/v1/chat/completions \
-H "Authorization: Bearer <the key>" \
-H "Content-Type: application/json" \
-d '{"model":"local","messages":[{"role":"user","content":"List three prime numbers."}],"max_tokens":64}'Son olarak, aynı anda tek bir istek yerine yük altında ölçün; alıntı yapmaya değer tek sayı budur:
/opt/vllm/venv/bin/vllm bench serve \
--backend openai-chat \
--base-url https://llm.example.com \
--endpoint /v1/chat/completions \
--model local --num-prompts 200 --request-rate 8Çıktıdan üç sayı okuyun: toplamda saniye başına çıktı belirteci, ilk belirtece kadar geçen medyan süre ve uçtan uca doksan dokuzuncu yüzdelik. Tek bir L40S'te on ila yirmi milyar aralığındaki bir modelle, saniyede yüksek yüzlerce belirteçlik toplam çıktı verimi ve bir saniyenin çok altında ilk belirtece kadar geçen süre beklenen şekildir. Eşzamanlılıkla artan ilk belirtece kadar geçen süre, anahtar-değer önbelleğinizin çok küçük olduğu anlamına gelir; bu nedenle --max-model-len veya --max-num-seqs değerini düşürün ve tekrar çalıştırın.
Sonrasında
İlk hafta boyunca sıcaklığı ve saat hızı kısmasını nvidia-smi dmon ile izleyin, çünkü sürekli yük altında termal olarak kısılan bir kart, ağa bağlanan türden aralıklı yavaşlık üretir. Fatura açısından, bir GPU örneğinin kart meşgul veya boşta olsun aynı maliyete sahip olduğunu unutmayın; bu nedenle sıcak bırakmak yerine işleri toplu yapın. Fiyatlandırma GPU sayfasında bulunmaktadır.