Dictée : whisper-cli compilé pour la machine de build, pas pour la tienne

La dictée n'a jamais transcrit une seule phrase. Le micro enregistrait bien —
contexte HTTPS, autorisation accordée, bouton rouge — mais le serveur répondait
500 sur chaque envoi :

    whisper-cli : AMX is not ready to be used!
    read_audio_data: reading audio data from '/tmp/loki-dictee-...wav' ...
    read_audio_data: trying to decode with miniaudio

Deux indices dans ces trois lignes. « AMX is not ready to be used » ne sort que
d'un binaire COMPILÉ avec les instructions AMX, celles d'un Xeon récent — le
runner GitHub. Et le journal s'arrête net : ni « failed to decode », ni texte
transcrit. Le processus ne renvoie pas une erreur, il meurt.

ggml compile en -march=native par défaut. Le binaire partait donc taillé pour
le processeur qui l'avait construit, et rencontrait une instruction illégale
dès qu'on le posait ailleurs.

- GGML_NATIVE=OFF à l'étape whisperbuild, AVX-512 et AMX explicitement coupés.
  Reste la ligne de base AVX2/FMA/F16C de ggml, présente sur tout x86-64 depuis
  2013. Un test lit le Dockerfile et garde ces drapeaux : rien à l'exécution ne
  rappellerait leur raison d'être au prochain qui touchera cette étape.
- Le handler ne renvoyait que la dernière ligne de stderr. Sur une mort par
  signal, cette ligne est celle d'AVANT le coup fatal : elle ressemble à une
  explication sans en être une, et envoie chercher du côté de l'audio. Il dit
  maintenant comment le processus a fini — « signal: illegal instruction » vaut
  diagnostic à lui seul.

L'image doit être reconstruite : whisper-cli y est compilé.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W3ewMAsXhkw9RY11kb9Dc9
This commit is contained in:
MichaelandClaude Opus 5 committed 2026-08-21 16:27:46 +02:00
1 parent 393986faa6
commit a19b490b6a
3 files changed
+96 -3

No files matched your search

+10
View File
@@ -36,6 +36,14 @@ RUN GOBIN=/out GOTOOLCHAIN=auto go install golang.org/x/tools/gopls@latest
# trimballer, et pas de compilation CUDA (des minutes de build pour un gain
# nul sur des dictées de quelques secondes). Ubuntu 22.04 : glibc plus
# ancienne que l'image runtime, donc compatible quoi qu'elle embarque.
#
# ⚠️ GGML_NATIVE=OFF est OBLIGATOIRE. Par défaut ggml compile en -march=native,
# c'est-à-dire pour le processeur DU RUNNER DE BUILD — un Xeon récent chez
# GitHub, avec AVX-512 et AMX. Le binaire partait alors sur une machine qui
# n'a pas ces instructions et mourait d'un SIGILL en pleine transcription :
# « AMX is not ready to be used! », puis plus rien, l'interface affichant un
# échec sans raison. OFF retombe sur la ligne de base AVX2/FMA/F16C de ggml,
# présente sur tout x86-64 depuis 2013.
FROM ubuntu:22.04 AS whisperbuild
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential cmake git ca-certificates \
@@ -43,6 +51,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
RUN git clone --depth 1 https://github.com/ggml-org/whisper.cpp /w \
&& cmake -S /w -B /w/build -DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF -DWHISPER_BUILD_TESTS=OFF \
-DGGML_NATIVE=OFF -DGGML_AVX512=OFF -DGGML_AMX_TILE=OFF \
-DGGML_AMX_INT8=OFF -DGGML_AMX_BF16=OFF \
&& cmake --build /w/build -j --target whisper-cli
# ── Étape 2 : runtime sur l'image serveur CUDA officielle ───────────────