On iki kurulum

Doğrudan GPU üzerinde, OpenAI uyumlu uç nokta ile yerel çıkarım

G-L40S üzerinde sürücü, çalışma zamanı ve model; TLS ve API anahtarı arkasında sunulur ve satıcı slaytı yerine gerçek token/saniye raporlayan bir yük testi içerir.

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
reboot

Geri geldikten sonra:

nvidia-smi

Kartı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 1

Persistence 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 vllm

Kurulum 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.

Kart16 bitte ağırlıklarGerçekçi model boyutuÖnbellek için kalan
L40S, 48 GBMilyar başına 2 GBYaklaşık 20 milyara kadar6 ila 8 GB
L40S, 48 GB, 8 bitMilyar başına 1 GBYaklaşık 34 milyara kadar10 GB
RTX 4000 Ada, 20 GBMilyar başına 2 GBYaklaşık 7 milyara kadar5 GB
İki × L40S, 96 GBMilyar başına 2 GBYaklaşık 40 milyara kadar12 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 vllm

Loopback'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=csv

Kullanı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 -20

local 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.

Hazır olduğunda

Bir şehir seç. Bir boyut seç. Kripto ile öde.

Kim olduğunuzla ilgili formlar yok, onay için insan bekleme yok, doğrulama için telefon görüşmesi yok. Ödeme onaylanır ve kimlik bilgileri gelen kutunuza düşer.