chantier dense-HMX: avancement #2 (replay) — root = fault HMX non-déterministe, instrumentation DSP requise (bloquée sans root). Tools committés.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
224b375a10
commit
464d4e69c0
|
|
@ -53,6 +53,30 @@ Hypothèses **éliminées** par mesure (OPLOG + isolation) :
|
|||
**Conclusion** : crash **value/context-spécifique** — un pattern de valeurs réelles (non reproduit par du random
|
||||
synthétique), OU un état de contexte/VTCM/session hérité des ops précédentes (FA), qui fait fauter le MAC HMX.
|
||||
|
||||
## Avancement #2 (dump-and-replay) — signature NON-DÉTERMINISME / mémoire non-initialisée
|
||||
- **Replay** : l'activation réelle du o_proj injectée dans le matmul isolé (test-backend-ops, poids q4_0
|
||||
aléatoire) → **HTP0=NaN** en sortie (vs random→fini), MAIS **pas de crash** en isolation. Donc le matmul
|
||||
ne crashe pas seul ; il PRODUIT/propage un NaN à partir de cette activation, et le crash 0x2e est en aval.
|
||||
- **Analyse de l'activation capturée** (`kz_act.bin`, f32 [4096,38]) : **94% de zéros + 8987 −inf**.
|
||||
MAIS un run OPLOG précédent du MÊME op disait `inf=0 amax=9.8`. → **non-déterminisme** (le prefill HTP est
|
||||
non-déterministe, déjà observé : 1er token 271 vs 15 selon les runs) ET/OU **capture peu fiable** si le
|
||||
src1 du o_proj est une **view non-contiguë** (lire `ggml_nbytes` octets attrape de la mémoire non-init).
|
||||
- **OPFILTER=FLASH_ATTN_EXT** (FA→CPU) : **ne stoppe PAS** le crash. Donc le −inf ne vient pas (que) de FA.
|
||||
- **Seuil** : n≤32 (~12 mots, 1 tuile N) OK ; n>32 (~16 mots, 2 tuiles) crashe. Mais le synthétique n=38
|
||||
(2 tuiles) ne crashe pas → ce n'est pas le multi-tuile seul.
|
||||
|
||||
**Faisceau d'indices → mémoire non-initialisée lue par le chemin HTP** (la non-déterminisme en est la
|
||||
signature classique ; le « 94% zéros + qq −inf » ressemble à un buffer partiellement écrit). Candidats :
|
||||
staging activation/poids VTCM non zéro-paddé pour n>32 multi-tuiles, ou un buffer de sortie/accumulateur
|
||||
réutilisé sans reset entre ops dans la séquence du modèle (absent en isolation synthétique).
|
||||
|
||||
## Limite atteinte (honnête)
|
||||
Le root cause est un **fault HMX non-déterministe** (mémoire non-init probable) dans la région o_proj/FA à n>32,
|
||||
qui ne se reproduit pas en isolation synthétique. Le **pinner exactement demande de l'instrumentation côté DSP**
|
||||
(dump des buffers VTCM/activation DANS le skel, au moment du MAC) — **bloquée sans root** (FARF inaccessible,
|
||||
getenv inopérant côté skel). C'est du debug niveau backend Qualcomm. Outils CPU-side (OPLOG/DUMP) committés et
|
||||
réutilisables ; la suite nécessite soit un device rooté (capture FARF), soit un log-vers-buffer-hôte ajouté au skel.
|
||||
|
||||
## Prochaines étapes (révisées après l'avancement ci-dessus)
|
||||
1. **Dump-and-replay** (tranche value-vs-context) : capturer la vraie activation `[4096,38]` + le poids q4_0
|
||||
du o_proj fautif (CPU-side dans `enqueue_op`, écrire en fichier), puis rejouer EXACTEMENT ces octets dans un
|
||||
|
|
|
|||
Binary file not shown.
2
ql
2
ql
|
|
@ -1 +1 @@
|
|||
Subproject commit 5e054eed6ae3eff3bc5c45f7a12a6edc1daf0872
|
||||
Subproject commit 956f72ffe4fe2758e7c5236ac8ea84752a48f7e3
|
||||
Loading…
Reference in New Issue