MatMulFree#2
Conversation
|
"Egy hagyományos nn.Linear réteg a következő műveletet végzi:" "Ez egy lebegőpontos mátrixszorzás, " " bonyolultsága írod, hogy "a súlyokat ternáris értékekre Olvasóként ez merülne fel, de te ezeket lentebb írod, az RMS normalizáció alatt. Egy átvezető mondat kellene ide pl.: Az RMS normalizációval meg kellene cserélni. "Egy nagy modellben ezek teszik ki a számítás ~95%-át." ezt honnan tudod? kiszámoltad? elmondható, hogy minden modell 95%-a ez? ha nem, akkor ne írd, hogy 95% a RMSNorm-nál nem kellenek a lépések a képlet magáért beszél, de tüntesd fel, hogy az ez a cella nem kell: x_test = torch.randn(2, 10, config.d_model)
norm = RMSNorm(config.d_model)
x_normed = norm(x_test)a "Súlykvantálás – ternáris értékekre ( "Hagyományosan ezek tetszőleges lebegőpontos számok," "−1 esetén az érték negálódik (ellentétes hatás), 0 esetén teljesen figyelmen kívül marad (nincs hatás), +1 esetén pedig változatlanul átmegy (pozitív hatás). " Valódi hardveres implementációban (pl. Loihi 2) ez a lépés elhagyható." "Skálafaktor: az abszolút értékek átlaga:" " A
Írd oda, hogy ezt a round függvény implementálja. A clamp(...) szintén informális/programozási jelölés, a pontos matematikai jelölés / szintaxist add meg kérlek, Értem, hogy a " ez az ok-okozati leírás nem tűnik helyesnek. A ## Aktivációkvantálás – 8 bitre "Az aktivációkat, azaz a réteg bemeneti vektorait" A modell "8-bites egészekre, a [-128, 127] tartományba." "Lépések:" "az adott token feature-vektorának" ezt scale = 127.0 / x.abs().max(dim=-1, keepdim=True).values.clamp_(min=1e-5)úgy írd le, ahogy a lépésekben megadod, tehát 3. sorban legyenek ez itt nem világos: mire gondolsz ez alatt? erre: ha a ? ha jól látom a kódot, akkor igen, kérlek pontosítsd. " "visszaosztatlanul" a = torch.tensor(38, dtype=torch.int8)
b = torch.tensor(0.5, dtype=torch.float32)
print(a + b) # tensor(38.5000), torch.float32"a modell teljesen félreértelmezné őket és a tanítás összeomolna." |
|
" "A probléma: A matematika szabályai szerint a valódi gradienst így kéne kiszámolni:" "Forward pass: A .detach() az értékeket nem bántja, így az eredmény egyszerűen " "gradiens úgy folyik vissza a súlyokhoz" a pytorchban inkább kompozíciót használnak és nem öröklődést: "Straight-Through Estimator (STE)" "activation_quant(x_norm) - x_norm" "total_weights * 1.58 / 8:.0f}" "hagyományos önfigyelem (self-attention) legnagyobb szűk keresztmetszete" "vetítések" "self-attention" "elem-szintű" "ami lehetetlenné tenné a MatMul-mentes működést." "egy kapuzott lineáris rekurrens egységgel (MLGRU) váltja ki." |
|
"összeadásokat használ" "maradéktalanul eltűnik a folyamatból." " A matematika szabályai szerint a valódi gradienst így kéne kiszámolni" "blokkja tartalmaz egy Feed-Forward hálózatot (MLP) " "Míg az önfigyelem (vagy az MLGRU) az időben keveri az információt a szavak között, addig az MLP a szavak saját, belső tulajdonságait (dimenzióit) keveri újra, pozíciónként függetlenül." "A hagyományos transzformerekben ez két egyszerű lineáris vetítésből és egy ReLU aktivációból áll:" " felskálázza a bemenetet nagyobb dimenzióba" "drága lebegőpontos rétegeket" "lebegőpontos rétegeket" "A belső kiterjesztett dimenzió az alapdimenzió többszöröse (általában" "mint egy gondolkodási folyamat ahol kiterjesztjük a lehetőségeket, majd visszasűrítjük a lényeget." "A SwiGLU két párhuzamos réteget használ (A SwiGLU két párhuzamos réteget használ (..." "Ez a korrekció minden SwiGLU-t használó modellnél szükséges." "Véletlen mini-batch kivágása az adatból" |
MatMulFree modell.