int8_quantize_kernel truncates toward zero instead of rounding (the ±0.5 offset is cast to int8 before being added)
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- python
- Ambito
- machine-learning
Direzione di ricerca
Il bug si trova in int8_quantize_kernel in wan/triton_kernels.py, intorno alle righe 29-31, dove l'offset di arrotondamento ±0.5 viene convertito in int8 prima di essere sommato, quindi diventa 0. Leggi il kernel circostante per capire come vengono usati x_scale e la maschera di store, poi verifica se l'output è limitato a [-127, 127]. È completato quando l'offset viene sommato in float prima della conversione in int8 e un piccolo test che confronta l'output del kernel con l'arrotondamento a metà allontanandosi da zero dà risultati corretti su input di esempio.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
x_scaled = x * x_scale
x_scaled += (0.5 * tl.where(x_scaled >= 0, 1, -1)).to(tl.int8)
tl.store(out_ptr + h_offset, x_scaled, mask=h_offset < HDIM)
What happens: (0.5 * sign).to(tl.int8) evaluates to 0, so nothing is added. The float x_scaled is then stored into the int8 output, which truncates toward zero. The intended rounding (half away from zero) is lost and every activation is biased toward zero.
Suggested fix: add the offset in float before the cast:
x_scaled = x_scaled + 0.5 * tl.where(x_scaled >= 0, 1.0, -1.0)
tl.store(out_ptr + h_offset, x_scaled.to(tl.int8), mask=h_offset < HDIM)
(or use a round-to-nearest intrinsic). Since x_scale = 127 / max|x|, the rounded value stays within [-127, 127].
Measured impact (our replication, Matrix-Game-3.0 distilled, --use_int8 path on the 240 attention q/k/v/o layers, real activations from one rollout):
- Mean relative output MSE vs BF16: 3.68e-3 with the current kernel vs 6.44e-4 with round-to-nearest (about 5.7x lower).
- The current kernel's error is a systematic magnitude shrinkage (cosine between error and output between -0.62 and -0.85; about 0 with rounding).
- Other factors (int32 accumulation, bf16 weight scales, per-token / per-channel granularity) change the error by less than 2%.
- In our closed-loop rollouts (352x640 and 704x1280) we did not detect visible degradation from the current kernel with our metrics, so this is a precision issue rather than an obvious quality break; fixing it should still reduce error at no cost.
Happy to share the per-layer measurements if useful.
- Lingua principale
- Python
- Stelle
- 2.4k
- Fork
- 257
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di SkyworkAI/Matrix-Game
-
Replace deprecated v2.ToTensor() in Matrix-Game-2/inference.py with v2.ToImage() + v2.ToDtype(scale=True)Forse già presa @xyf5432 l’ha presa 55 giorni fa. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
SkyworkAI/Matrix-Game#82 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
SkyworkAI/Matrix-Game#80 ·
-
run logic error when finishForse già presa @Arison591 l’ha presa 92 giorni fa. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
SkyworkAI/Matrix-Game#77 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 12/100
SkyworkAI/Matrix-Game#88 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 12/100
SkyworkAI/Matrix-Game#87 · 1 commento ·
Tutte le issue di SkyworkAI/Matrix-Game
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
ok-oldking/ok-wuthering-waves#1785 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
healthchecks/healthchecks#1349 ·
-
deployment release-lag
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 68/100
nolte/kamerplanter#2374 ·
I maintainer di solito rispondono entro 1 giorno
-
bug v1 v2
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
modelcontextprotocol/python-sdk#3725 ·
I maintainer di solito rispondono entro 1 giorno
-
batchterms() drops queries without a similar() clause, misaligning results with inputsForse già presa @MohammadHijjawi97 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
I maintainer di solito rispondono entro 1 giorno