Sonundan Sonuna Eval Koşucu
Type: Build
Languages: Python
Prerequisites: Phase 19 Track B foundations, lessons 70 through 74
Time: ~90 min
Öğrenme hedefleri
- Define et
ModelAdapterHerhangi bir modelin (sahte, yerel, API) küçük bir yöntem yüzeyi ile tatmin edebileceği bir arayüz. - Çalışanlar havuzunda paralel görev yürütmesi ile sabit bir JSONL dosyası üzerinde eval çalıştırın.
- Bir geçit içinde kalibrasyon katmanı ile metrik katmanı (exact_match, F1, BLEU-4, ROUGE-L, code_exec) birleştirin.
- Modelle göre emit
EvalRunKayıtlar ve doğrudan sıralama çizelgesine ekler. - Hem JSON raporunu hem de bir markdown tablosunu çıkart; temiz bir çalışmada sıfır çıkışla kendiliğinden bitir, doğrulama veya çalıştırma süresi başarısızlığı sırasında sıfır dışı.
- Boru hattı
flowchart TD
A[tasks.jsonl from lesson 70] --> B[validate]
B --> C[render prompts]
C --> D[model adapter generate]
D --> E[post_process]
E --> F{metric_name}
F -->|exact_match/f1/bleu_4/rouge_l/accuracy| G[score from lesson 71]
F -->|code_exec| H[run_candidate from lesson 72]
G --> R[EvalRun record]
H --> R
D --> S[confidence and per-token nll]
S --> T[CalibrationReport from lesson 73]
R --> U[aggregate from lesson 74]
T --> V[per-model calibration block]
U --> W[leaderboard JSON + markdown]
V --> WKoşucu, entegrasyon noktasıdır. 70 ila 74 dersleri arasında koşucu tarafından oluşturulan bir modül vardır. Koşucu bu modüllerden herhangi bir mantığı kopyalamaz: bunları ithal eder.
Adaptör arayüzü
Adaptör, koşucu ile herhangi bir model arasındaki dikiştir.
pythonclass ModelAdapter:
model_id: str
def generate(self, prompt: str, task: TaskSpec) -> Generation: ...Generationaşağıdaki bir veri sınıfıdır:
text: modelin serbest biçim çıkışıconfidence: bir yüzer[0, 1]Modelin yanıt için kendi kendine bildirilen olasılıklarını temsil edentoken_nll: oluşturulan tokenler üzerindeki negatif log olasılığının seçmeli toplamıtoken_count: Yaratılan tokenlerin seçeneği
Koşucuda bulunan sahte adaptörler üç tat sağlar: RuleBasedAdapter(determinist, neredeyse mükemmel),NoisyAdapter(çok kendine güvenen, çoğu zaman yanlış) veBiasedAdapterDemo, ders 70'li takımın her üçü üzerinde çalışıyor.
Paralel yürütme
Koşucu kullanır concurrent.futures.ThreadPoolExecutorİşçi sayısı öntanımlı olarak sekizden küçük olan ve görev sayısına kadar. Düzgün model çağrıları için şişe boğazı ağ I/O olduğu için yeterlidir. Kod-execute yolu görevin içinde kendi alt işlemini oluşturur ve uygulayıcı sadece bekleme programını programlar.
Determinizm testleri için, koşucu ortaya çıkarır run_eval(adapters, tasks, parallel=False)Böylece testler idam emri belirleyebilir.
Tek geçiş puanlama döngüsü
Her görev için:
- İndirme işaretini gönderin (belirli bir kaç atışla birlikte, iptal etme işaretini ekleyin).
- Adaptörü arayın ve çağrı zamanı belirleyin.
- Görev kuralına göre nesneyi sonrası işlem.
- Metrik katmanına gönder.
- Bir tane yapın.
EvalRunNot ve metrik metadata ile kayıt. - Ekle
(confidence, correct)Kalibrasyon tamponu ile çiftleştir.
- Evet .
correctSinyalscore >= 1.0exact_match stilli ölçümler için (exact_match- Evet .accuracy- Evet .code_exec) vescore >= 0.5Sınıf ölçümleri için._correct_from_scoreKoşucu bir kamu baskısını ortaya çıkarmaz.
Toplantı
Her görevin sonucu olduğunda, koşucu arar.aggregateve pairwise_diffsDers 74 ve CalibrationReport.from_predictionsDersi 73. çıkış tek bir JSON zarfıdır:
json{
"leaderboard": [...],
"pairwise": [...],
"calibration": {
"model_id_a": {"ece": 0.04, "brier": 0.10, "populated_bins": 8, ...},
...
},
"summary": {
"tasks": 10,
"models": 3,
"wall_seconds": 1.2
}
}Koşucu ayrıca kullanıcının sonuçları bir PR incelemesine yapıştırması için stdout'a bir işaretleme tablosu yazar.
Kendini yok eden demo
Demo ders 70'den on sabit görev boyunca üç sahte adaptör çalıştırır. Duvar süresi 10 saniyeden az olmalıdır.
Temizlik kriterleri şunlardır:
- Her görev ders 70'e göre doğrulanmış.
- Her görev 71 ve 72 ders altında puanlandı.
- Kalibrasyon raporu hata olmadan ders 73'e göre toplanmıştır.
- Randej tablosu kurallara dayalı adaptörü rastgele adaptörden kesinlikle üst düzeyde sıraladı.
Bu kırıklardan herhangi biri olursa, JSON zarfında yapılandırılmış bir hata ile koşucun sıfır dışı çıkması gerekir.
Bu ders neyi yapmaz
Bu, gerçek bir model çağırmaz. API anahtar akışı veya hız limitini işlemeyi uygulamıyor. Akış veya kısmi jenerasyon uygulamıyor; adaptör her çağrıda bir nesil gönderir. Geri denemeleri veya önbelleği yapmıyor. Bu sorunlar adaptör katmanında yaşar; koşucu metrik-agnostik ve sağlayıcı-agnostiktir.
Şifreyi nasıl okuyabilirsiniz
main.pyDiğer beş ders modülünden küçük bir_load_siblingBu, bir yardımcı olarak göreceli yolla çözülür.Generation- Evet .EvalReportveModelAdapterSahte adaptörler dosyanın alt tarafında.
Oku main.pyÜstüne aşağıya.run_evalO zaman ..._score_oneSonunda gösterim giriş noktasıdır.
Testler code/tests/test_runner.pyAdaptör arayüzünü, tek geçiş döngüsünü, paralel karşı sıralama eşdeğerliğini, kalibrasyon tamponu ve JSON zarf şeklini pinle.
Daha ileri gitmeye çalışıyorum .
Bu koşucun zemini. Bir üretim değerlendirme sistemi ekler: sonuçlar önbelleği kilitlenmiş (task_id, model_id, model_version)Bu, bir süre boyunca dolar ve jetonları takip eden bir maliyet defteri, oran sınırlarını destekleyen bir yeniden deneme katmanı, geçiş-at-k görevleri için örnekleme politikası ve uzun sıralar için akış çıkış biçimi.
Sahteliklerin çalışmasından sonra gerçek bir sağlayıcı için bir adaptör ekleyin. Bir tane ücretsiz bir katman ile seçin, otuz satır yapıştırıcı yazın, lider tablosunun ışığını izleyin. Sonra ikinci sağlayıcı ekleyin ve harness'in işini yapmasına izin verin.
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.