eval_chat_quality() Było Podłączone do Złego Runnera
10-Dniowa Awaria, Która Powinna Zatrzymać Się po 3 Dniach
ANDREA-120M v1 trenował przez 16,1 dnia na RTX 4090 przy 130W ciągłym. Próbki wyjść były zapisywane co 200 kroków, ale nigdy nie analizowane podczas treningu. Na kroku 80K (dzień 4) próbki brzmiały region region region region region. Na kroku 110K: ''''' ''''' '' ''' ''. Trening kontynuowano przez kolejne 11 dni, zanim ręcznie zatrzymano na kroku 165K.
Co Poszło Nie Tak z Czujnikiem Dymu
eval_chat_quality() istniał w kodzie. Oceniał jakość próbek. Działał nawet poprawnie. Ale był podłączony tylko do starego wieloetapowego runnera. v1 firehose curriculum używał innej ścieżki kodu i nigdy nie wywoływał eval. Czujnik dymu stał w innym pokoju z zamkniętymi drzwiami.
Koszt
16,1 dni obliczeń. 130W ciągłe. ~50 kWh prądu. Model nie wyprodukował użytecznego wyjścia w żadnym momencie. EMA straty spadła do 3,23 w kroku 110K, potem wzrosła do 4,54 w kroku 165K, gdy trening się zatrzymał. Numerycznie rozsądne; semantycznie puste.
Losowa szansa dla słownika 8449-tokenów to 9,04. v1 osiągnął stratę EMA 3,23, produkując region region region. Sama strata nie może wykryć załamania spójności. Model, który minimalizuje entropię krzyżową powtarzając jeden wysoko-frequentny token, jest numerycznie nagradzany za ten tryb awarii.
Dlaczego Krzywe Strat Okłamały
Oceń Każdą Próbkę na Czterech Osiach
Złożony Wynik
v2 wprowadza bramkę spójności, która ocenia każdą próbkę (pobraną co 100 kroków podczas treningu firehose) na czterech metrykach:
| Metryka | Zakres | Co wykrywa |
|---|---|---|
| Różnorodność bigramów | 0-35 | Powtarzanie na poziomie dwóch tokenów (region region) |
| Różnorodność trigramów | 0-35 | Powtarzanie na poziomie trzech tokenów (a, b, a, b, a, b) |
| Obecność słów angielskich | 0-20 | Dryfowanie w nieangielski (CJK, cyrylica, bełkot) |
| Różnorodność znaków | 0-10 | Kolaps do pojedynczego znaku (''''', ... ... ...) |
Maksymalnie możliwe: 100. Próg: 30.
Dlaczego cztery metryki, a nie jedna
Każda metryka wychwytuje inny tryb awarii:
- Model zapadający się do jednego bigramu nie przejdzie Różnorodności bigramów, ale przejdzie Różnorodność znaków.
- Model generujący szum interpunkcyjny (''''' ''''' '') nie przejdzie Różnorodności znaków, ale może przejść Różnorodność bigramów, jeśli pary interpunkcyjne się różnią.
- Model dryfujący w stronę nieangielskiego (zanieczyszczenie treningiem tłumaczeniowym) nie przechodzi obecności angielskich słów, ale przechodzi różnorodność Bigramów i Trigramów, jeśli produkuje gramatyczny mandaryński.
- Model produkujący a, b, a, b, a, b przechodzi Bigram (a-b i b-a występują), ale nie przechodzi Trigram (a-b-a, b-a-b dominują).
Razem cztery metryki obejmują przestrzeń awarii. Złożony wynik poniżej 30 oznacza, że co najmniej jedna oś zawaliła się na tyle źle, by pociągnąć całą próbkę w dół.
Licznik Konsekutywny
Auto-halt uruchamia się po 5 konsekutywnych próbkach z wynikiem poniżej 30. Pojedyncze złe próbki mogą wystąpić podczas przejść fazowych lub rzadkich pobrań ze źródła; pięć z rzędu oznacza, że model przestał się regenerować. Z próbkami pobieranymi co 100 kroków, 5 konsekutywnych zdegenerowanych próbek = 500 kroków potwierdzonego załamania spójności.
Oblicz Wynik
Jak wyglądałby v1
Testowany wstecznie wyzwalacz
Na podstawie zapisanych próbek v1, zastosowanie wstecz bramki spójności v2 pokazuje, że bramka uruchomiłaby się w kroku 132K. v1 działał do kroku 165K przed ręcznym zatrzymaniem. Bramka zatrzymałaby trening 33 000 kroków wcześniej.
Obliczone Oszczędności
RTX 4090 trenowana z prędkością ~6 kroków/min w FP16 cuBLAS. 33 000 kroków / 6 kroków/min = 5500 minut = 91,6 godziny = 3,8 dni obliczeń oszczędzonych. Przy 130 W ciągłym, to ~12 kWh prądu, plus 3,8 dnia zużycia GPU.
Dlaczego Krok 132 tys. a Nie 80 tys.
v1 wygenerowała region region region w kroku 80 tys. Dlaczego mechanizm nie zadziałał wtedy?
Ponieważ sporadycznie pojawiały się dobre próbki pomiędzy złymi. Bandyt przechodził przez źródła co 7-42 kroki. Nawet zdegenerowany model czasami produkował bardziej zróżnicowane wyjścia, gdy samplowano z innego źródła, co chwilowo resetowało licznik kolejnych. Do kroku 132 tys. model zapadł się na tyle głęboko, że 5 kolejnych zdegenerowanych próbek (500 kroków) stało się nieuniknione.
Lekcja: Podłącz detektor dymu do każdego kanału
v2 podłącza eval_chat_quality() bezpośrednio do kodu obsługi próbek w firehose curriculum, nie tylko do legacy runnera. Każda próbka, każdy run, każdy kod ścieżki: ta sama brama. Poprawka zajęła ~30 linii kodu.