Llama 3.3 70B'yi tek bir düğümde sunmak.
Beş dakika önce teslim edilen bir makineden, istekleri yanıtlayan OpenAI uyumlu bir uç noktaya — işlem hacminizi sessizce yarıya indiren iki bayrak ve sizi ele geçirilmeye açık bırakan bayrakla birlikte.
Kısa cevap
- Gereken bellek
- 4-bit'te 43 GB, FP8'de 82 GB, BF16'da 164 GB — tümü 8k bağlamda
- En basit makine
- Bir adet 80 GB'lık kart. Sharding yok, ara bağlantı yok, senkronizasyon yok
- İlk tokene kadar geçen süre
- Teslimattan itibaren on beş dakikadan az, çoğu ağırlıkları indirmekle geçer
- Tek hata
- 8000 portunu herkese açık bir adreste yayınlamak. Kimlik doğrulaması yoktur
Gerekenler
70 milyar parametre. 4-bit'te bu, 35 GB ağırlık demektir; KV önbelleği tek bir istek için 8k bağlamda 2.5 GB daha ekler, çalışma zamanı ek yükü ise yaklaşık %15'tir. Geri kalan her şey bu üç sayıdan çıkar — boyutlandırma rehberi bunların nereden geldiğini gösterir.
| Hassasiyet | Ağırlıklar | 8k bağlamında toplam | 32k bağlamında toplam | 128k bağlamında toplam |
|---|---|---|---|---|
| BF16 / FP16 | 140 GB | 164 GB | 173 GB | 207 GB |
| FP8 | 70 GB | 82 GB | 86 GB | 103 GB |
| 4-bit (AWQ, GPTQ) | 35 GB | 43 GB | 52 GB | 86 GB |
128k'daki 4-bit satırına dikkat edin: ağırlıklar 35 GB'a küçülür ama önbellek hiç küçülmez, çünkü AWQ ve GPTQ yalnızca ağırlıkları nicemler. Aşağıdaki makine seçiminin çoğunu belirleyen tek gerçek budur.
Düğüm seçimi
Katalogumuzdaki, bu modeli tek bir kartta barındıran en ucuz makineler — mümkünse tercih edeceğiniz yapılandırma budur: sharding olmayınca senkronizasyon da olmaz, hata ayıklanacak bir şey daha az olur.
| Düğüm | Sığan hassasiyet | Kart belleği | Tahmini tok/s | Aylık |
|---|---|---|---|---|
| NVIDIA RTX A6000 | 4-bit (AWQ, GPTQ) | 48 GB | ~10 | $286/ay |
| 2 × NVIDIA RTX A6000 | 4-bit (AWQ, GPTQ) | 48 GB | ~10 | $597/ay |
| NVIDIA L40S | 4-bit (AWQ, GPTQ) | 48 GB | ~11 | $714/ay |
| NVIDIA A100 PCIe | 4-bit (AWQ, GPTQ) | 80 GB | ~25 | $1,091/ay |
İşlem hacmi, bellek bant genişliğiyle sınırlı tek akışlı üretimdir ve kasıtlı olarak muhafazakârdır. Sürekli batching ile eşzamanlı istekler genelinde toplam değer kat kat daha yüksektir — vLLM'in bütün amacı budur.
On dakikalık kurulum
Burada adres dışında bize özgü hiçbir şey yoktur. Docker, NVIDIA container toolkit ve çalışan bir sürücü yığını makinede zaten hazırdır.
$ ssh root@203.0.113.42
$ nvidia-smi --query-gpu=name,memory.total --format=csv
# Weights on the fast local NVMe, not the system volume.
$ mkdir -p /scratch/models
$ df -h /scratch
# A gated model needs a token. Skip if yours is open.
$ export HF_TOKEN=hf_xxxxxxxxxxxxxxxxxxxx
Sunucuyu başlatmak
Tek bir konteyner. İlk çalıştırma yaklaşık 40 GB nicemlenmiş ağırlık indirir; bu da 1 Gbit/s hızındaki bir portta birkaç dakika sürer; bundan sonraki her yeniden başlatma saniyeler içinde tamamlanır.
$ docker run -d --name vllm --restart unless-stopped \
--gpus all --ipc=host \
-v /scratch/models:/root/.cache/huggingface \
-e HF_TOKEN="$HF_TOKEN" \
-p 127.0.0.1:8000:8000 \
vllm/vllm-openai:latest \
--model casperhansen/llama-3.3-70b-instruct-awq \
--quantization awq_marlin \
--max-model-len 8192 \
--gpu-memory-utilization 0.92
# Watch it load. "Application startup complete" is the signal.
$ docker logs -f vllm
$ curl -s http://127.0.0.1:8000/v1/models | head
$ curl -s http://127.0.0.1:8000/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"casperhansen/llama-3.3-70b-instruct-awq",
"messages":[{"role":"user","content":"In one sentence: what is a KV cache?"}],
"max_tokens":80}'
Önemli olan bayraklar
Onu dünyaya yayınlamamak
0.0.0.0'a bağlıysa, bu açık bir çıkarım sunucusudur ve tarayıcılar bunları saatler içinde bulur. Yukarıdaki komuttaki -p 127.0.0.1:8000:8000 kısmına dikkat edin — baştaki bu adres, onu internetten uzak tutan şeydir ve başka bir yerden komut kopyalanırken en sık atlanan tek karakterdir.
Kendi makinenizden bir SSH tüneli üzerinden erişin — açılan port yok, yönetilecek sertifika yok, yanlış yapılandırılacak bir şey yok:
$ ssh -N -L 8000:127.0.0.1:8000 root@203.0.113.42
# Now http://127.0.0.1:8000 on your laptop is the server.
Gerçekten herkese açık olması gerekiyorsa, önüne TLS ve bir API anahtarıyla bir ters proxy koyun ve güvenlik duvarında kaynak adreslerini de kısıtlayın. Dokümantasyonda minimal bir kural kümesi bulunur. Herkesin sorduğuna yanıt verecek bir uç nokta için doğru duruş, çifte önlemdir.
İşlem hacmini artırmak
Denemeye değer sıraya göre. İlk ikisi ücretsizdir ve genellikle en büyük kazancı sağlar.
--max-model-lendeğerini gerçek bağlamınıza düşürün. Neredeyse her zaman tek başına en büyük kazanç budur ve kullanmadığınız hiçbir şeye mal olmaz.--gpu-memory-utilizationdeğerini 0.95'e çıkarın. Bu, adanmış bir makinedir; kartta yer ayrılacak başka bir şey yoktur.- Kart destekliyorsa FP8 KV önbelleğini açın. Tutabileceğiniz miktarı ikiye katlar.
- İstemci tarafında batch yapın. Sürekli batching yalnızca istekler eşzamanlı geldiğinde işe yarar. Tek tek gelen istekler, ne yapılandırırsanız yapılandırın kartın çoğunu boşta bırakır.
- Ancak bundan sonra, daha hızlı bir kart düşünün. Üretim hızı bellek bant genişliğiyle sınırlıdır, bu yüzden 4.800 GB/s'teki bir H200, aynı model için 2.000'deki bir H100 PCIe'nin kabaca 2,4× katıdır — gerçek bir kazanç, ve bu listedeki en pahalısı.
$ docker exec vllm python -m vllm.entrypoints.openai.api_server --help | head -1
$ docker exec vllm vllm bench serve \
--model casperhansen/llama-3.3-70b-instruct-awq \
--num-prompts 200 --request-rate 8
# And watch the card while it runs: if utilisation sits below 90%,
# the bottleneck is your client, not the GPU.
$ nvidia-smi dmon -s um
Çalışır durumda tutmak
İlk gün yapılmaya değer üç şey, çünkü üçünü de on dördüncü günde keşfetmek can sıkıcıdır.
Yeniden başlatma politikası
--restart unless-stopped yukarıdaki komutta yer alır. Yeniden başlatmadan sonra konteyner geri döner ve ağırlıklar zaten /scratch üzerindedir, böylece bir dakikadan kısa sürede çalışır hale gelir.
Süreci değil, kartı izleyin
Veri yolundan düşmüş bir GPU, sağlıklı görünen bir konteyner bırakır. Bir sağlık kontrolünde nvidia-smi -q -d PERFORMANCE bunu yakalar; bir port kontrolü yakalamaz.
Ağırlıkların yedeği alınmaz
Bunlar yalnızca yerel NVMe'nizde bulunur, başka hiçbir yerde değil. Bu sorun değil — yeniden indirilebilirler. Fine-tuning yapılmış adaptörleriniz öyle değildir, bu yüzden onları makinenin dışında bir yere koyun.
Ve süre sona erdiğinde, diskler bir saat içinde, hiçbir ek süre tanınmadan silinir. /scratch üzerindeki her şey bununla birlikte gider. Bu kasıtlıdır — size verilen makinede başka kimsenin verisinin olmadığını garanti eden söz de aynı sözdür — ama bu, sürenin son gününün dosyaları kopyalamaya başlamak için uygun bir gün olmadığı anlamına gelir.
Bu modeli kiraladığımız her düğüme karşı kontrol edin.
Yapılandırıcı, hangi yapılandırmaların modeli tek bir kartta barındırdığını, hangilerinin bölmek zorunda olduğunu ve her birinin maliyetini bildirir.
Diğer rehberler
- Uygulama · 10 dk
Bir kartta 70B model fine-tuning
Tek bir 48 GB GPU'da QLoRA: nelerin sığdığı, bir ay için maliyeti ve tam fine-tuningin neden bambaşka bir makine sınıfı gerektirdiği.
Rehberi okuyun - Ödeme · 8 dk
Sunucu için kripto ile ödeme yapmak
Ödeme tıklaması ile root alma arasında gerçekte ne olduğu, hangi coinin seçileceği ve ilk ödemede para kaybettiren dört hata.
Rehberi okuyun - Boyutlandırma · 9 dk
Bir modelin gerçekte ihtiyaç duyduğu VRAM
“Sığar mı” sorusunun arkasındaki hesap: ağırlıklar, KV önbelleği ve kestirme bir kuralın üç katı kadar yanıldığı iki nokta.
Rehberi okuyun