Récemment, j'ai effectué un fine-tuning du modèle FLUX 1-dev (12B) pour créer un modèle de personnage à utiliser dans un service. Je partage ici les données et les erreurs que j'ai rencontrées en entraînant ce modèle massif de 12 milliards de paramètres sur le DGX Spark, qui est basé sur ARM et à faible consommation d'énergie.
1. Environnement et configuration d'apprentissage
-
Matériel : DGX Spark (120 Go de mémoire unifiée)
-
Modèle : FLUX 1-dev (12B Paramètres)
-
Ensemble de données : 40 images de personnages (résolution 1024px)
-
Configuration d'apprentissage :
-
Taille du lot : 1
-
Accumulation de gradients : 4
-
Époques : 100
-
Étapes Totales : 1000
-
2. Attentes vs Réalité : Échec dans la gestion du temps
Dans la référence de NVIDIA, il était spécifié "Entraînement avec 13 images, environ 90 minutes pour 1000 étapes". En me basant là-dessus, j'ai estimé que pour 40 images, cela prendrait au moins 4 à 5 heures, et peut-être même 2 à 3 heures dans le meilleur des cas.
Cependant, le temps réel requis était d'environ 8 heures.
Analyse : > Nombre d'images et résolution : L'ensemble de données de 40 images et la configuration de haute résolution de 1024px ont augmenté la charge de travail.
- Temps par étape : Il a fallu en moyenne 28 secondes pour traiter 1 époque (10 étapes). Cela signifie qu'il a fallu environ 7 secondes pour entraîner 1 image.
3. OOM (Out of Memory) et gestion de la mémoire
J'ai commis ma première erreur en me fiant à la mémoire unifiée de 120 Go.
Ce qui posait problème, ce sont les services qui tournent déjà sur le serveur.
-
GPT-OSS (20B) : Allocation réservée de 32 Go
-
ComfyUI : Allocation de 16 Go
En commençant l'entraînement dans cet état, le noyau Linux a forcé l'arrêt du processus. Avec environ 66 Go d'espace libre, cela ne suffisait pas pour soutenir l'apprentissage du modèle 12B (calculs de gradients, etc.). Finalement, j'ai dû arrêter tous les services en arrière-plan pour permettre un apprentissage stable.
- Taux d'utilisation mémoire pendant l'apprentissage : environ 71,4 Go (maintenu en continu)

4. L'incroyable efficacité énergétique de l'architecture ARM
Si cela avait été un GPU hautes performances basé sur x86, la consommation d'énergie aurait été significative, mais l'efficacité du DGX Spark était surprenante.
-
Puissance de pointe : 89 à 90W
-
Température : 84 à 86°C (stabilisée à 81 à 83°C après utilisation d'un petit ventilateur)
Le fait que l'entraînement du modèle 12B à pleine charge consomme seulement environ 90W est un chiffre encourageant qui montre le potentiel des serveurs AI sur appareils ou en Edge.
5. Découverte de goulets d'étranglement : Détournement de CPU du Text Encoder (TE)
J'ai découvert l'une des raisons déterminantes pour lesquelles le temps d'apprentissage était plus long que prévu.
Le modèle FLUX utilise deux encodeurs de texte : CLIP-L et T5-XXL. Lors de la surveillance, il s'est avéré que l'un d'eux était affecté au CPU au lieu de CUDA.
-
Phénomène : 1 TE assigné à CUDA, 1 TE assigné au CPU
-
Impact : Goulet d'étranglement causé par la différence de vitesse de transmission de données et de calcul entre le CPU et le GPU
Il est nécessaire d'analyser pourquoi il y a eu un détournement vers le CPU même s'il n'y avait pas de pénurie de mémoire (OOM). Lors de la prochaine session d'apprentissage, je prévois d'assigner les deux encodeurs à CUDA pour tenter d'améliorer la vitesse.
6. Conclusion et projets futurs
Avec ce test, j'ai réalisé que 100 époques / 1000 étapes étaient une configuration excessive.
-
Veille d'amélioration : Il serait efficace de réduire le nombre d'images à environ 30 ou, même en maintenant ce nombre, d'ajuster le volume d'apprentissage à environ 300 à 400 étapes.
-
Matériel : Le fait qu'un fine-tuning de grands modèles soit possible avec 90W est très séduisant, mais une solution de refroidissement (comme un petit ventilateur) est essentielle. J'avoue que faire fonctionner à 86 à 87 degrés pendant 8 heures était légèrement effrayant.
Prochaine étape : Il reste environ 2 heures et 30 minutes jusqu'à l'achèvement de l'apprentissage. Dès que l'apprentissage sera terminé, je monterai l'adaptateur LoRA généré sur FLUX et partagerai les résultats des tests de performance. Restez à l'écoute pour le prochain article.
Aucun commentaire.