mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-11 17:26:57 +02:00
Image : CUDA 12.8 pour Blackwell, architectures bornées, cache des couches
Le build ne mourait plus, mais tournait encore après trente-sept minutes. Et il aurait produit un binaire inutilisable sur la moitié du matériel visé. Les GPU de la machine cible sont une RTX 5060 Ti (Blackwell, sm_120) et une RTX 3060 (Ampere, sm_86). L'étape de compilation était épinglée sur nvidia/cuda:12.4.1 : ce nvcc-là ne CONNAÎT pas Blackwell. Il refuse l'architecture, et le binaire ne tournerait au mieux que par recompilation PTX au chargement. 12.8.1 sur Ubuntu 24.04 est désormais utilisé — exactement ce avec quoi llama.cpp bâtit l'image amont qui fournit libcudart. Pour la durée, deux causes distinctes : - Sans borne, ggml compile pour TOUTES les architectures qu'il connaît, de Maxwell à Blackwell. CMAKE_CUDA_ARCHITECTURES ramène le travail à quatre (Turing → Blackwell), et l'ARG CUDA_ARCHS permet d'élargir sans toucher au fichier pour un GPU plus ancien. - Surtout : ce binaire ne dépend d'AUCUN fichier du dépôt, et il était pourtant recompilé à chaque push. Le cache de couches GitHub Actions le réutilise tant que ses lignes du Dockerfile ne bougent pas ; seuls le code Go et l'assemblage de l'image se refont. Un test vérifie le plancher CUDA et la présence de la borne d'architectures : ces deux fautes ne se voient pas à la lecture et coûtent quarante minutes à découvrir. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W3ewMAsXhkw9RY11kb9Dc9
This commit is contained in:
1 parent
748328db25
commit
d8ed86bbba
3 files changed
+57
-4
No files matched your search
@@ -3,6 +3,7 @@ package loki
|
||||
import (
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
@@ -122,6 +123,38 @@ func TestDockerfileDeuxBinairesWhisper(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// L'étape CUDA doit être bâtie avec un nvcc qui CONNAÎT les GPU visés. CUDA
|
||||
// 12.4 ignore Blackwell (RTX 50xx, sm_120) : il refuse l'architecture, et le
|
||||
// binaire ne tournerait au mieux que par recompilation PTX au chargement.
|
||||
// 12.8 est le plancher, et c'est aussi la version avec laquelle llama.cpp bâtit
|
||||
// l'image amont qui fournit libcudart.
|
||||
func TestDockerfileCudaAssezRecent(t *testing.T) {
|
||||
const majeurMin, mineurMin = 12, 8
|
||||
trouve := false
|
||||
for nom, txt := range etapesWhisperbuild(t) {
|
||||
m := regexp.MustCompile(`nvidia/cuda:(\d+)\.(\d+)`).FindStringSubmatch(txt)
|
||||
if m == nil {
|
||||
continue
|
||||
}
|
||||
trouve = true
|
||||
maj, _ := strconv.Atoi(m[1])
|
||||
min, _ := strconv.Atoi(m[2])
|
||||
if maj < majeurMin || (maj == majeurMin && min < mineurMin) {
|
||||
t.Errorf("étape %s : CUDA %s.%s — trop ancien pour Blackwell (sm_120), il faut au moins %d.%d",
|
||||
nom, m[1], m[2], majeurMin, mineurMin)
|
||||
}
|
||||
// Sans borne d'architectures, ggml compile de Maxwell à Blackwell :
|
||||
// chaque architecture multiplie le temps de compilation, et le build
|
||||
// dépassait quarante minutes.
|
||||
if !strings.Contains(txt, "CMAKE_CUDA_ARCHITECTURES") {
|
||||
t.Errorf("étape %s : aucune borne CMAKE_CUDA_ARCHITECTURES — la compilation vise toutes les architectures connues", nom)
|
||||
}
|
||||
}
|
||||
if !trouve {
|
||||
t.Error("aucune étape whisperbuild ne part d'une image nvidia/cuda")
|
||||
}
|
||||
}
|
||||
|
||||
func clefs(m map[string]string) []string {
|
||||
out := make([]string, 0, len(m))
|
||||
for k := range m {
|
||||
|
||||
Reference in new issue
Block a user