Laya — metin üretmeyen karar modeli
Sınıflandırma işini bir LLM yerine 421M'lik bir karar modeline yaptırdık ve ölçtük: kümenin kendisi, dağılımı ve taban çizgileriyle birlikte.
Bazı işler metin üretmeyi gerektirmez. "Bu destek talebi hangi konuda?", "Bu mesaj acil mi?" — cevapları tipli bir karar, bir paragraf değil.
Laya bunu yapan bir modeldir: durumu ve soruları verirsiniz, tek geçişte cevapları olasılıklarla döner. Metin üretmez, dolayısıyla ayrıştırılacak çıktı ve uydurma riski yoktur. 421M parametre, GPU istemez.
Bu sayfadaki her sayı gerçek bir Gao Kaptan pod'unda ölçüldü. Kümenin kendisi de aşağıda: bir doğruluk sayısı, üzerinde ölçüldüğü küme ve o kümenin taban çizgileri bilinmeden yorumlanamaz.
Bu sayfa 25 Eylül 2026'da yeniden ölçüldü. Önceki sürümünde daha yüksek bir doğruluk yazıyordu; o ölçümün kümesi saklanmamıştı, bu yüzden yeniden üretilemedi ve yayında tutulmadı. Farkın nereden geldiğini bilmiyoruz — bilmediğimiz bir şeyi açıklamak yerine kümeyi yayınlayıp baştan ölçtük.
Ölçülen küme
40 Türkçe destek talebi, elle etiketlenmiş. Dağılım bilerek dengesiz — gerçek bir destek kuyruğu dengeli değildir, ve dengesizlik taban çizgisini yükselttiği için sayının ne anlama geldiği ancak dağılım bilinerek okunur.
| alan | sınıflar | dağılım | çoğunluk-sınıf tabanı | rastgele |
|---|---|---|---|---|
konu | teknik · fatura · hesap · diger | 16 · 10 · 9 · 5 | %40,0 | %25,0 |
acil | evet / hayır | 9 evet · 31 hayır | %77,5 | %50,0 |
acil alanının çoğunluk tabanı %77,5. Yani "hiçbiri acil değil" diyen boş bir model o
alanda %77,5 alır. Bir modelin o alandaki puanı bu sayının altındaysa, modelin hiçbir şey
öğrenmediği değil, zarar verdiği anlamına gelir.
40 talebin tamamı
| # | talep | konu | acil |
|---|---|---|---|
| 1 | GPU pod'um açılmıyor, sürekli Pending kalıyor. Yarın sunum var. | teknik | evet |
| 2 | Pod'a SSH ile bağlanamıyorum, terminal açılmıyor. | teknik | hayır |
| 3 | Diskim doldu ve pod kapandı, ne yapmam gerekiyor? | teknik | hayır |
| 4 | MIG dilimi seçtim ama nvidia-smi hiçbir şey göstermiyor. | teknik | hayır |
| 5 | Pod'umun internet erişimi yok, pip install çalışmıyor. | teknik | hayır |
| 6 | Jupyter arayüzü açılıyor ama çekirdek sürekli ölüyor. | teknik | hayır |
| 7 | Kalıcı diskim pod'a bağlanmamış görünüyor, dosyalarım kayıp. | teknik | evet |
| 8 | Uyandırdıktan sonra pod CrashLoopBackOff durumuna düştü. | teknik | evet |
| 9 | Ollama modeli her başlatmada yeniden iniyor, çok yavaş. | teknik | hayır |
| 10 | Pod'un adresi 502 veriyor, uygulama ayakta ama erişemiyorum. | teknik | evet |
| 11 | Port yönlendirme yaptım ama bağlantı zaman aşımına uğruyor. | teknik | hayır |
| 12 | Yedekten geri dönmek istiyorum, hangi adımları izlemeliyim? | teknik | hayır |
| 13 | PostgreSQL pod'um boş veritabanıyla açıldı, verilerim nerede? | teknik | evet |
| 14 | Bellek artırdım ama konteyner yeniden başladı ve dosyalar gitti. | teknik | hayır |
| 15 | Zone değiştirmek istiyorum, mevcut pod'u taşıyabilir miyim? | teknik | hayır |
| 16 | vLLM pod'u 8192 token'dan sonra cevabı kesiyor. | teknik | hayır |
| 17 | Bakiye yükledim ama hesabıma geçmedi, kart ekstresinde görünüyor. | fatura | evet |
| 18 | Bu ayın faturası beklediğimden yüksek, dökümünü alabilir miyim? | fatura | hayır |
| 19 | Kullanmadığım bir pod için ücret kesilmiş, iade edilir mi? | fatura | hayır |
| 20 | Fatura adresimi güncellemek istiyorum. | fatura | hayır |
| 21 | Otomatik ödeme talimatı nasıl veriliyor? | fatura | hayır |
| 22 | GPU saat ücreti hangi zamanlarda işliyor, uyurken de sayılıyor mu? | fatura | hayır |
| 23 | Kredi kartım reddedildi, ödeme alınamadı yazıyor. | fatura | evet |
| 24 | Ön ödemeli bakiyem bitti ve pod'larım askıya alındı. | fatura | evet |
| 25 | Yıllık ödemede indirim var mı? | fatura | hayır |
| 26 | Fatura gelmiyor, e-posta adresim yanlış olabilir. | fatura | hayır |
| 27 | Şifremi sıfırlamak istiyorum ama e-posta gelmiyor. | hesap | hayır |
| 28 | Ekip arkadaşımı davet ettim, davet bağlantısı çalışmıyor. | hesap | hayır |
| 29 | Hesabıma iki kişi giriyor, oturumları görebilir miyim? | hesap | hayır |
| 30 | Şirket yetkilisini değiştirmek istiyoruz. | hesap | hayır |
| 31 | İki aşamalı doğrulamayı nasıl açarım? | hesap | hayır |
| 32 | Kullanıcı rolümü üye'den yönetici'ye çevirmeniz gerekiyor. | hesap | hayır |
| 33 | Hesabım kilitlendi, giriş yapamıyorum. Acil erişmem lazım. | hesap | evet |
| 34 | Kurumsal onay başvurum haftalardır beklemede. | hesap | hayır |
| 35 | E-posta doğrulama bağlantısının süresi dolmuş. | hesap | hayır |
| 36 | Gao Kaptan'ı üniversite dersinde kullanmak istiyoruz, eğitim indirimi var mı? | diger | hayır |
| 37 | Sözleşme metinlerinin İngilizce sürümünü alabilir miyim? | diger | hayır |
| 38 | Sistem durumu sayfanız var mı, kesintileri nereden takip ederiz? | diger | hayır |
| 39 | Basın bültenimizde Gao Kaptan'dan bahsetmek istiyoruz, logo alabilir miyiz? | diger | hayır |
| 40 | KVKK aydınlatma metniniz hangi tarihte güncellendi? | diger | hayır |
diger açıkça tanımlanmalı. Ölçtük: Laya 0.3.20 kendiliğinden bir "diğer" seçeneği
eklemiyor, probabilities yalnızca sizin tanımladığınız kriterleri döndürüyor. Tanımlamazsanız
model o sınıfı asla seçemez ve ona ait her örnek peşinen yanlış sayılır.
Pod
İmaj: python:3.11-slim
İnternet: açık
Komut: aşağıdaki tek satırsh -lc "pip install --no-cache-dir --index-url https://download.pytorch.org/whl/cpu --extra-index-url https://pypi.org/simple torch laya > /tmp/setup.log 2>&1; python -c 'from laya import Router; Router(preload=True)' >> /tmp/setup.log 2>&1; sleep infinity"Belleği dar tutmayın ve kurulumu terminalden başlatmayın. torch kurulumu 4 GB bellekli
bir pod'da öldürülür — katalogdaki cpu.std-2 paketi tam olarak 4 GB'tır, yani bu iş bir CPU
paketine sığmıyor. Ölçümü h200-1g18 paketiyle yaptık; GPU'yu kullanmadan, yalnızca
belleği için (torch.cuda.is_available() → False, kurulan tekerlek 2.14.0+cpu).
Kurulum birkaç dakika sürer ve pod'un başlangıç komutunda olmalıdır: terminalden
başlatılan uzun bir kurulum, terminal kapandığında sonlanır — nohup ve setsid de kurtarmaz.
Çağrı — predict(), route() değil
from laya import Router
r = Router(preload=True)
SORULAR = {
"konu": {
"type": "choice",
"instructions": "Müşteri destek talebi hangi konuda?",
"criteria": {
"teknik": "pod, sunucu, GPU, disk, ağ, hata",
"fatura": "ödeme, bakiye, fatura, ücret, iade",
"hesap": "giriş, şifre, üyelik, rol, davet",
"diger": "yukarıdakilerin hiçbirine girmiyorsa",
},
},
"acil": {"type": "noul", "instructions": "Zaman baskısı ya da son tarih içeriyor mu?"},
}
out = r.predict({"message": "GPU pod'um açılmıyor, sürekli Pending kalıyor."},
SORULAR, lang="tr")route() sınıflandırma yapmaz. O bir yönlendiricidir ve hangi checkpoint'in
kullanılacağını döndürür (RouteDecision), cevapları değil. Cevapları üreten metot
predict(). Bu sayfanın önceki sürümünde route() yazıyordu; o kodu kopyalayan hiçbir
cevap alamaz.
Dönen yapı:
{
"model": "laya-rl-agent",
"answers": {
"konu": {"type": "choice", "choice": "fatura",
"probabilities": {"teknik": 0.0593, "fatura": 0.9256, "hesap": 0.0151},
"confidence": 0.7247, "answer_confidence": 0.9256},
"acil": {"type": "noul", "noul": 0.032, "confidence": 0.968}
},
"usage": {"input_tokens": 120, "output_tokens": 0}
}output_tokens: 0 — model metin üretmiyor, sınıflandırıyor.
Sonuçlar
Aynı 40 talep, aynı kategori tanımları, sıralı istekler. Laya pod'un içinde CPU'da; Qwen platformun inference ucundan, ağ üzerinden, düşünme kapalı — ikisi de üretimde nasıl çalışacaklarsa öyle.
konu | acil | ikisi birden | p50 | p95 | üretilen token | |
|---|---|---|---|---|---|---|
| taban çizgisi (çoğunluk sınıfı) | %40,0 | %77,5 | — | — | — | — |
Laya lang="tr", CPU | %57,5 | %72,5 | %42,5 | 503 ms | 1008 ms | 0 |
| Qwen3.8-27B, JSON şema, GPU | %95,0 | %85,0 | %80,0 | 374 ms | 399 ms | 857 |
Qwen koşumu iki kez yapıldı ve doğruluk ikisinde de birebir aynı çıktı (%95,0 / %85,0); gecikme 374–388 ms arasında değişti.
Okunması gerekenler:
- Laya
konualanında taban çizgisinin 17,5 puan üstünde (%57,5 / %40,0). Öğreniyor, ama bu görevde Qwen'in 37,5 puan gerisinde. - Laya
acilalanında taban çizgisinin ALTINDA (%72,5 / %77,5). O alanda modeli hiç çağırmamak, çağırmaktan daha doğru sonuç verirdi. - Laya bu ölçümde daha hızlı değil. Düşünme kapatıldığında Qwen ağ üzerinden 388 ms'de cevaplıyor, Laya CPU'da 503 ms'de. Küçük modelin avantajı burada hız değil, GPU gerektirmemesi ve sıfır çıktı token'ı.
Qwen'in karışıklık matrisi üç tanımlı sınıfta kusursuz (16/16, 10/10, 9/9); yalnızca
diger sınıfında 5'te 3 tutturuyor. Laya bütün sınıflara dağılıyor.
Checkpoint seçimi sonucu değiştirmiyor
Laya bir yönlendirici taşıyor: isteğe göre checkpoint seçiyor. Üç yolu da aynı küme üzerinde ölçtük, çünkü "Laya %X aldı" demek hangi checkpoint'e gidildiğini söylemiyorsa eksik bir cümledir.
| çağrı | yönlendiği checkpoint | konu | acil | p50 |
|---|---|---|---|---|
lang="tr" | multilingual | %57,5 | %72,5 | ~500 ms |
model="typed-decisions" | typed-decisions | %57,5 | %60,0 | 1593 ms |
| hiçbiri (otomatik) | multilingual | %57,5 | %72,5 | 497 ms |
konu doğruluğu üçünde de birebir aynı. Adı umut veren typed-decisions checkpoint'i
ikili alanda daha kötü ve üç kat yavaş; Türkçe bir istekte otomatik yönlendirme zaten
multilingual'a gidiyor, yani lang="tr" vermek checkpoint'i değiştirmiyor — yalnızca
dil algılamasını atlıyor.
Güven skoru — kalibre değil
Sayfanın önceki sürümü Laya'nın ayırt edici özelliğini "kalibre olasılık" diye yazıyordu. Ölçtüğümüz şey bunu desteklemiyor, ve kütüphane bunu kendisi söylüyor; pod'da çıkan uyarı birebir şu:
RuntimeWarning: laya: this checkpoint ships invalid temperatures or values outside
[0.5, 5] ... Treat confidence from the affected entries as uncalibrated.40 örnekteki dağılım da aynı yere çıkıyor:
| n | en düşük | medyan | en yüksek | |
|---|---|---|---|---|
| doğru bildiğinde güven | 23 | 0,18 | 0,92 | 1,00 |
| yanlış bildiğinde güven | 17 | 0,07 | 0,42 | 0,99 |
Medyanlar ayrışıyor, uçlar ayrışmıyor: model 0,99 güvenle yanılabiliyor ve 0,18 güvenle doğru bilebiliyor. Yani "düşük güvenli olanları pahalı modele yönlendir" fikri makul, ama önce soru tipi başına kalibrasyon oturtmadan eşik koymak yanlış güven verir.
Hangisini ne zaman
Laya'yı seçin — sınıflandırma dar ve tanımlı, GPU bütçeniz yok, çıktı token'ı ödemek istemiyorsunuz, ve doğruluğun taban çizgisinin bir miktar üstünde olması yeterli.
LLM'i seçin — doğruluk önemliyse. Bu görevde aradaki fark 37,5 puan ve Qwen ağ gecikmesine rağmen daha hızlı cevapladı.
Hiçbirini çağırmayın — acil gibi, taban çizgisinin zaten yüksek olduğu dengesiz bir
alanda. Orada model kazandırmıyor.
"Dar ve tanımlı" derken ne kadar dar? Bunu ayrıca ölçtük: aşağıdaki ikinci küme tek soruluk bir ikili kapı ve Laya orada da taban çizgisinin yalnızca 5 puan üstünde kaldı. Yani görevi daraltmak tek başına farkı kapatmıyor.
İkinci küme — dar bir ikili kapı
Yukarıdaki küme dört sınıflı bir görev ve Laya orada kaybediyor. Buna iki itiraz yapılabilir, ikisi de haklı: çok sınıflı sınıflandırma 421M'lik bir model için yanlış biçim olabilir — dar ikili kararlar bu model sınıfının güçlü olduğu yer diye bilinir — ve bir küme yalnızca bir kümedir. O yüzden şekli farklı, ikinci bir görev kurup onu da yayınlıyoruz.
Görev uydurma değil: Gao Kaptan'ın exec denetim kaydı komut satırlarını düz metin saklıyor
(aranabilir olması için) ve içinde mysql -pSIFRE gibi bir şey geçebilir. "Bu satır sır
taşıyor mu?" bizim gerçekten ihtiyaç duyduğumuz bir kapı.
Küme (40 komut satırı)
Dağılım 15 sır / 25 temiz → çoğunluk sınıfı tabanı %62,5, rastgele %50,0.
Negatifler bilerek zor seçildi: mysql -p parolayı sorar, satırda sır yoktur;
echo $API_KEY bir değişken adıdır, değer değil; ssh-keygen -y açık anahtarı yazdırır.
"-p görürsen sır vardır" diyen bir kapı bunların hepsinde yanılır.
# sır İÇEREN (15) — buradaki bütün sırlar uydurma
mysql -u root -pS3cretPass! -e 'show databases'
psql postgresql://kaptan:hunter2@10.0.0.5:5432/app -c 'select 1'
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI2K7MDENGbPxRfiCYEXAMPLEKEY
curl -H 'Authorization: Bearer sk-proj-4f9a2b7c1d8e3f6a0b5c9d2e' https://api.ornek.com/v1/me
git clone https://kaptan:ghp_9xQ2LmNbVc7Ka1Ps@github.com/ornek/repo.git
redis-cli -a 'Tr0ub4dor&3' ping
docker login -u kaptan -p dckr_pat_7Hs2Kq9Zx1Lm registry.ornek.com
ssh -i /dev/null user@host 'echo BEGIN RSA PRIVATE KEY MIIEpAIBAAKCAQEA'
kubectl create secret generic db --from-literal=password=Yaz2026Kaptan!
mongosh 'mongodb://admin:M0ng0Pass@db:27017/admin' --eval 'db.stats()'
printf 'PGPASSWORD=Qw3rty!2026\n' >> /etc/environment
aws configure set aws_access_key_id AKIAIOSFODNN7EXAMPLE
openssl enc -aes-256-cbc -pass pass:BenimGizliParolam -in a.txt -out a.enc
curl -u kaptan:P@rola123 https://ornek.com/api/rapor
echo 'token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.abc.def' > /tmp/t
# sır İÇERMEYEN (25)
mysql -u root -p -e 'show databases'
echo $API_KEY
curl -H "Authorization: Bearer $TOKEN" https://api.ornek.com/v1/me
psql -h db -U kaptan -d app -c 'select count(*) from pods'
kubectl get pods -n kaptan-ornek
nvidia-smi
df -h /workspace
pip install --no-cache-dir torch
tail -f /var/log/app.log
systemctl restart nginx
git pull origin main
docker login registry.ornek.com
aws s3 ls s3://kaptan-yedek/
redis-cli ping
cat /etc/hosts
ps aux | grep python
chmod +x /usr/local/bin/baslat.sh
kubectl logs deploy/workload-service --tail=100
openssl x509 -in cert.pem -noout -subject
ssh-keygen -y -f ~/.ssh/id_rsa
env | grep -c PATH
apt-get update && apt-get install -y curl
python -c 'import torch; print(torch.cuda.is_available())'
mongosh --host db --eval 'db.stats()'
tar -czf /workspace/yedek.tgz /workspace/veriSorulan soru her iki modele de birebir aynı metinle gitti:
Bu komut satırı bir parola, API anahtarı, token ya da özel anahtar DEĞERİ içeriyor mu? Değişken adı (örneğin $TOKEN) ya da parolanın sorulacağı bir bayrak (örneğin -p) içermesi sır İÇERMESİ anlamına gelmez.Sonuç — ilk kümenin sonucunu değiştirmiyor
| doğruluk | yanlış alarm | kaçırdığı sır | p50 | p95 | |
|---|---|---|---|---|---|
| taban çizgisi (hep "sır yok" de) | %62,5 | 0 | 15 / 15 | — | — |
Laya, choice iki kriter, CPU | %67,5 | 7 / 25 | 6 / 15 | 407 ms | 808 ms |
| Qwen3.8-27B, JSON şema, GPU | %95,0 | 0 / 25 | 2 / 15 | 299 ms | 922 ms |
Okunması gerekenler:
- "Dar ikili karar bu modelin güçlü yanıdır" beklentisi bu ölçümde doğrulanmadı. Laya
tabanın yalnızca 5,0 puan üstünde (%67,5 / %62,5) — ilk kümedeki
konualanında (17,5 puan) elde ettiği farkın altında. - Bir kapı olarak konuşlandırılamaz: 15 sırrın 6'sını geçiriyor. Bir sır kaçırmak, temiz bir komutu işaretlemekten pahalıdır; doğruluk tek başına bunu göstermez, o yüzden yanlış alarm ile kaçırma ayrı sütunlarda.
- Qwen 25 temiz komutun hiçbirinde yanlış alarm vermedi ve 15 sırdan 2'sini kaçırdı.
- Laya yine daha hızlı değil (407 ms CPU'da, Qwen ağ üzerinden 299 ms).
Yayınlamadığımız sayı: noul sıkıştı
Aynı soruyu ilk olarak noul (ikili) alanı olarak sorduk ve Laya %37,5 aldı — tabanın
ve rastgelenin altında. Bu sayıyı "Laya başarısız" diye yazmak yanlış olurdu: 40 örneğin
40'ına "sır var" demişti, ve yanına koyduğumuz kontrol kümesi — "merhaba nasılsın",
"iki kere iki dört eder", "kedim balık sever" gibi sekiz tamamen zararsız metin — sekiz
kere de "sır var" aldı. Girdiden bağımsız sabit cevap, görevin değil kurulumun
ölçüldüğünün kanıtıdır.
| kurulum | doğruluk | "sır var" dediği | kontrolde yanlış alarm |
|---|---|---|---|
noul, uzun talimat | %37,5 | 40 / 40 | 8 / 8 |
noul, girdi anahtarı message | %37,5 | 40 / 40 | — |
noul, kısa talimat | %67,5 | 28 / 40 | — |
choice, iki kriter | %67,5 | 16 / 40 | 0 / 8 |
Sıkışmanın sebebi talimattaki olumsuzlama görünüyor ("bayrak içermesi sır içermesi
anlamına gelmez"); kısa talimat da, iki kriterli choice da bunu çözüyor. Çıkarılacak ders
modelle ilgili değil: bariz negatiflerden oluşan bir kontrol kümesi, sekiz çağrıya mal
olur ve yayınlanmaması gereken bir sayıyı yakalar.
İki modelin birlikte itiraz ettiği satır
Qwen'in kaçırdığı iki satırın ikisi de Laya'nın kaçırdıkları arasında, ve biri kendi etiketimizi sorgulatıyor:
aws configure set aws_access_key_id AKIAIOSFODNN7EXAMPLEaws_access_key_id bir AWS erişim anahtarının açık yarısıdır — kimlik, kimlik bilgisi
değil; gizli olan aws_secret_access_key. İki model de "sır yok" dedi ve bu okuma
savunulabilir. Etiketi tahminleri gördükten sonra değiştirmedik — sonuca göre etiket
düzeltmek, ölçümü sonuca uydurmaktır. İki okumayı da veriyoruz:
| etiket olduğu gibi | o satır temiz sayılırsa | |
|---|---|---|
| taban çizgisi | %62,5 | %65,0 |
Laya (choice) | %67,5 | %70,0 |
| Qwen3.8-27B | %95,0 | %97,5 |
Sonuç iki okumada da aynı: Laya taban çizgisinin 5 puan üstünde, Qwen'in 27,5 puan gerisinde.
Güven skoru — ilk kümedeki tablonun aynısı
| n | en düşük | medyan | en yüksek | |
|---|---|---|---|---|
| doğru bildiğinde güven | 27 | 0,00 | 0,65 | 1,00 |
| yanlış bildiğinde güven | 13 | 0,00 | 0,19 | 0,98 |
Medyanlar ilk kümeden daha net ayrışıyor, ama uçlar yine ayrışmıyor: yukarıdaki AWS satırını
0,98 güvenle kaçırdı, echo $API_KEY için 0,95 güvenle yanlış alarm verdi. Eşik
koymadan önce kalibrasyon gerekir, ve bu iki kümede de aynı çıktı.
Kendi ucunuzu kurun
Yukarıdaki ölçümler pod'un içinde Python'dan yapıldı. Kendi uygulamanızın Laya'ya
istek atması için şablon var: katalogdan Laya (karar modeli) deyip kurun, başka adım
yok. Laya bir kütüphane ama paketin içinde bir HTTP sunucusu geliyor
(pip install "laya[serve]" → laya-serve), yani araya bizim yazdığımız bir katman
girmiyor.
Kurulum bittiğinde iki uç açık: GET /health ve POST /v1/systemone. Uç bir bearer
anahtarıyla korunuyor (anahtar kurulumda üretilir, pod ayrıntı sayfasında LAYA_API_KEY
olarak durur) — anahtarsız istek 401 alır. Asıl kullanım küme içinden: uygulama
pod'unuz servis adıyla çağırır.
curl -s http://<pod-adi>-svc:8000/v1/systemone \
-H "Authorization: Bearer $LAYA_API_KEY" \
-H 'content-type: application/json' \
-d '{
"state": {"message": "Bakiye yukledim ama hesabima gecmedi."},
"questions": {
"konu": {"type": "choice", "instructions": "Talep hangi konuda?",
"criteria": {"teknik": "pod, GPU, disk, ag",
"fatura": "odeme, bakiye, iade",
"hesap": "giris, sifre, rol",
"diger": "hicbiri"}},
"acil": {"type": "noul", "instructions": "Zaman baskisi iceriyor mu?"}
}
}'Cevap predict()'in döndürdüğünün aynısı: answers altında her soru için choice /
noul ve olasılıklar, bir de usage. output_tokens 0 — modelin metin üretmemesi
burada somut olarak görünüyor.
Varsayılan şekilde ölçülenler
Şablonun varsayılanı 2 vCPU / 4 GB (cpu.std-2), GPU yok. Gerçek bir pod'da ölçüldü:
| süre | |
|---|---|
| ilk istek, ısıtma yapılmadan | 94 835 ms |
| ilk istek, ısıtmalı (şablonun yaptığı) | 2 273 ms |
| sonraki istekler (yukarıdaki iki soruluk gövde) | 1 851 – 2 059 ms |
| tek soruluk gövde | 1 018 – 1 171 ms |
Okunması gerekenler:
- Isıtma şart, ve şablon onu kendisi yapıyor.
LAYA_PRELOAD=1checkpoint'i belleğe alıyor ama ileri geçişi ısıtmıyor: ısıtılmamış ilk istek 94,8 saniye sürdü. Açılış betiği sunucu ayağa kalkınca bir kez sahte istek atıyor, böylece ilk gerçek istek 2,3 saniyeye iniyor. Bu olmasa ilk kullanıcı çalışmayan bir ucu yavaş bir uçtan ayırt edemezdi. - Bu sayfanın üstündeki ~500 ms'lik gecikmeler bu şekilde alınmadı. Onlar çok daha büyük bir CPU kotasına sahip bir pod'da ölçüldü. 2 vCPU'da karar başına ~2 saniye bekleyin; daha hızlısını istiyorsanız CPU'yu artırın.
- Tek seferde tek çıkarım. Sunucu tek işçilik bir havuz ve bir kilit kullanıyor (paket kaynağında böyle), yani istekler sıraya giriyor. Eşzamanlı yük bekliyorsanız gecikme değil kuyruk ölçün.
Şablonun sizin için sabitlediği iki ayar
LAYA_MODELS=multilingual — varsayılan davranış üç checkpoint'i birden yüklemek.
Checkpoint başına ~1,7 GB, üçü 4 GB'lik şekle sığmaz; üstelik bu sayfada ölçüldü:
Türkçe istek zaten otomatik multilingual'a gidiyor ve typed-decisions ikili alanda
daha kötü, üç kat da yavaş. İngilizce ağırlıklı bir yük için english yazın.
LAYA_THREADS — boş bırakılırsa modül hiç sınır koymuyor ve torch kendi varsayılanını
kullanıyor. Bu platformda konteyner kendi kotasından çok daha fazla çekirdek görüyor:
cpu.std-2'de kota 2 çekirdek ama nproc 32 diyor, yani varsayılan 16 kat aşırı
abone olurdu — laya-serve'in kendi belgesi bunu "a large regression" diye yazıyor.
Açılış betiği değeri pod'un gerçek cgroup kotasından türetiyor. Elle bir değer yazarsanız
ona dokunulmuyor; fiziksel çekirdek sayısının üstüne çıkmayın.
Kalıcı disk boşuna değil. Checkpoint'ler HuggingFace'ten iniyor ve pip paketleri de
her açılışta kuruluyor; şablon bir disk istiyor ve platform HF_HOME ile
PIP_CACHE_DIR'i oraya yönlendiriyor (ölçüldü: 1,5 GB önbellek diskte). Disksiz kurarsanız
her uyandırma indirmeyi baştan yapar.
Ölçümün sınırları
- Küme 40 örnek ve tek bir alandan (Gao Kaptan destek talepleri). Küçük bir kümede birkaç örneklik fark yüzdeye büyük yansır; bu sayıları kendi verinizde doğrulayın.
- Etiketler elle verildi ve sınır vakaları bilerek konuldu (örneğin "fatura gelmiyor, e-posta
adresim yanlış olabilir" hem
faturahemhesapokunabilir). - Laya CPU'da, Qwen GPU'da ölçüldü. Bu bir "aynı donanım" karşılaştırması değil; her iki modelin gerçekte konuşlandırılacağı biçim karşılaştırıldı.
- Qwen tarafında düşünme kapalı (
enable_thinking: false). Açıkken model çıktı bütçesini düşünmeye harcayıp boşcontentdöndürüyor; ilk koşumda 40 isteğin 21'i bu yüzden düştü ve o düşen istekler yanlışlıkla "yanlış cevap" sayılsaydı doğruluk sessizce yarılanırdı. - İkinci küme de 40 örnek ve tek bir alandan (komut satırları). Aynı uyarı geçerli.
- İkinci kümede Laya'ya soru
choiceolarak soruldu,noulolarak değil;noulkurulumu girdiden bağımsız sabit cevap verdiği için ölçüm sayılmadı (yukarıda gerekçesiyle var). - İkinci kümedeki bütün sırlar uydurma. Gerçek bir sır hiçbir ölçüme, hiçbir sayfaya girmez.
Qwen3.8 27B (FP8, vLLM)
27B'lik bir modeli tek MIG dilimine FP8 ile sığdırın, vLLM ile sunun ve gerçek gecikme/verim sayılarını ölçün.
FreeToken: az VRAM ile büyük MoE modelleri
35B parametreli bir MoE modeli GPU'nun 1/7'lik diliminde çalıştırın. Uzmanlar RAM'de durur, GPU'ya akar. Kurulum, ayar ve ölçülmüş rakamlar.

Gao Kaptan Docs