ci(mlx): materialize A on sorted gather_mm + A-characterize + v9 #30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: MLX PR check (fork) | |
| # CAMPAGNE v9 — caractériser A pour le rapport amont, ET valider le | |
| # correctif sur la suite complète. | |
| # | |
| # Acquis (v8.2) : synth_on_delegate_stream ~0 (contexte/stream innocent), | |
| # materialized A~0 B=33 idx=33 ALL~0 -> le chemin trié de MLX lit mal `a` | |
| # quand `a` est une vue sur mémoire externe (entrées ET zero-copy). | |
| # Rappel : copy() ne ré-alloue pas (copyBrc=0), d'où le faux négatif de | |
| # v7 sur la provenance. | |
| # | |
| # Étape 1 (sondes) : caractérisation de A (shape/strides/flags) + | |
| # A_add / A_flat / sq_mat_ed. sq_mat_ed est le discriminant : | |
| # ~0 -> le déclencheur est le buffer externe (provenance) | |
| # >>0 -> le déclencheur est la structure de vue expand_dims | |
| # A_add valide la forme retenue par le correctif ; A_flat dit si un | |
| # simple flatten aurait suffi (gratuit si A est déjà contigu). | |
| # | |
| # Étape 2 (validation) : suite COMPLÈTE, sans ET_MLX_GMM_PROBE, avec le | |
| # correctif en place. Les deux configs *_sorted doivent passer au vert | |
| # et rien d'autre ne doit régresser. C'est cette étape qui décide si | |
| # le correctif part sur la PR. | |
| # | |
| # Prérequis branche ci-mlx-check : sondes v1..v3 + runner-t (+fix) + | |
| # sweep + contig + ctx-prov, puis probe-A-characterize.patch, puis | |
| # fix-materialize-A.patch. | |
| on: | |
| workflow_dispatch: | |
| push: | |
| branches: | |
| - ci-mlx-check | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| jobs: | |
| characterize-and-validate: | |
| runs-on: macos-14 | |
| timeout-minutes: 300 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Preuve — commit, sonde + correctif présents | |
| run: | | |
| set -eux | |
| git log --oneline -3 | |
| grep -c "GMM-PROBE" backends/mlx/runtime/MLXInterpreter.h | |
| grep -n "array a_in = sorted" backends/mlx/runtime/MLXInterpreter.h | |
| - name: Install ExecuTorch | |
| run: | | |
| set -eux | |
| python -m pip install --upgrade pip | |
| python install_executorch.py | |
| - name: Configure + build op_test_runner | |
| id: build | |
| run: | | |
| set -eux | |
| cmake --preset mlx-release \ | |
| -DEXECUTORCH_BUILD_TESTS=ON \ | |
| -DEXECUTORCH_MLX_ENABLE_SANITIZERS=OFF | |
| cmake --build cmake-out --target op_test_runner -j2 | |
| df -h / | |
| # ÉTAPE 1 — caractérisation (le correctif s'applique APRÈS le bloc | |
| # sonde, donc la sonde mesure toujours le A brut). | |
| - name: SONDE — caractérisation de A | |
| if: steps.build.outcome == 'success' | |
| continue-on-error: true | |
| run: | | |
| set -eux | |
| export ET_MLX_GMM_PROBE=1 | |
| python -m executorch.backends.mlx.test.run_all_tests gather_mm -v \ | |
| 2>&1 | tee /tmp/probe.log | |
| echo "=== caractérisation ===" | |
| grep -nE 'GMM-PROBE\] A |A_add=|materialized|synth_on' /tmp/probe.log \ | |
| || echo "AUCUNE" | |
| # ÉTAPE 2 — validation propre, suite complète, sans sonde. | |
| - name: VALIDATION — suite complète avec le correctif | |
| if: steps.build.outcome == 'success' | |
| continue-on-error: true | |
| run: | | |
| set -eux | |
| unset ET_MLX_GMM_PROBE | |
| python -m executorch.backends.mlx.test.run_all_tests -v \ | |
| 2>&1 | tee /tmp/full.log | |
| echo "=== configs sorted ===" | |
| grep -nE 'sorted' /tmp/full.log | tail -20 | |
| echo "=== bilan ===" | |
| grep -nE 'PASSED|FAILED|passed|failed' /tmp/full.log | tail -20 | |
| - name: Diagnostics finaux | |
| if: always() | |
| run: df -h / |