mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-23 15:08:16 +02:00
Image : le build CUDA était tué par l'OOM, pas en échec de compilation
Le premier build de l'image avec whisper CUDA a échoué après huit minutes sans écrire une seule ligne d'erreur : le journal s'arrête à 92 % de la compilation, puis « Complete job ». Un compilateur qui échoue dit pourquoi ; un compilateur tué ne dit rien. Ces 92 % étaient atteints en TREIZE secondes. Ce ne sont pas des compilations terminées, ce sont des nvcc lancés simultanément. « cmake --build -j » sans nombre autorise chez Make un parallélisme illimité. ggml-cuda compte environ 200 fichiers d'instanciation de gabarits et chaque nvcc réclame 1 à 2 Go : le runner (16 Go) mourait d'un OOM. L'étape CPU y survivait — peu de fichiers, compilation légère — ce qui a rendu le piège invisible jusqu'à l'arrivée de CUDA. - -j"$(nproc)" sur les deux étapes, et un test le vérifie désormais : cette faute est indétectable à la lecture et ne se manifeste qu'en CI. - Le runner libère dotnet, android et ghc avant de bâtir. L'empilement nvidia/cuda-devel + runtime CUDA + Chromium approche les 14 Go disponibles ; cette part-là reste une hypothèse, mais elle coûte une minute à écarter. - whisper-server CUDA est strippé : les symboles de débogage d'un binaire ggml-cuda pèsent plusieurs centaines de mégaoctets dans l'image finale. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W3ewMAsXhkw9RY11kb9Dc9
This commit is contained in:
1 parent
f4969de9f7
commit
8e88a73d91
3 files changed
+34
-2
No files matched your search
@@ -2,6 +2,7 @@ package loki
|
||||
|
||||
import (
|
||||
"os"
|
||||
"regexp"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
@@ -80,6 +81,18 @@ func TestDockerfileWhisperNonNatif(t *testing.T) {
|
||||
if !strings.Contains(txt, "whisper-server") {
|
||||
t.Errorf("étape %s : ne construit pas la cible whisper-server", nom)
|
||||
}
|
||||
// « -j » nu autorise un parallélisme ILLIMITÉ chez Make. Sur l'étape
|
||||
// CUDA (~200 nvcc à 1-2 Go pièce), le runner GitHub était tué par
|
||||
// l'OOM sans écrire une ligne d'erreur. L'étape CPU y survivait, ce
|
||||
// qui rendait le piège invisible.
|
||||
for _, ligne := range strings.Split(txt, "\n") {
|
||||
if !strings.Contains(ligne, "cmake --build") {
|
||||
continue
|
||||
}
|
||||
if regexp.MustCompile(`-j(\s|$|\\)`).MatchString(ligne) {
|
||||
t.Errorf("étape %s : « cmake --build -j » sans nombre — parallélisme illimité, le runner sera tué par l'OOM. Utiliser -j\"$(nproc)\".", nom)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user