Pourquoi ajouter davantage de GPU à l’entraînement ne le rend-il pas toujours plus rapide ?
Le problème de la bulle dans le pipeline.
Lorsque vous répartissez un modèle sur plusieurs machines (parallélisme en pipeline), chaque étape reste inactive en attendant la sortie de l’étape précédente. Ce temps mort, pendant lequel le matériel ne fait littéralement rien ? C’est votre bulle.
En gros : la machine 2 ne peut pas démarrer tant que la machine 1 n’a pas terminé sa passe avant. La machine 3 attend la machine 2. Cette dépendance séquentielle crée des périodes creuses pendant lesquelles des ressources de calcul coûteuses ne font que gaspiller de l’argent.
C’est pourquoi le parallélisme de modèle naïf entraîne souvent une très mauvaise utilisation des GPU : vous payez pour 8 GPU, mais seuls 2 ou 3 fonctionnent réellement à un moment donné. Les autres attendent dans la file du pipeline.
Les solutions consistent à utiliser le micro-batching (diviser les lots en fragments plus petits pour garder les pipelines occupés) ou à entrelacer les passes avant et arrière. Mais la contrainte fondamentale demeure : les étapes du pipeline imposent une sérialisation inhérente qui nuit à l’efficacité de la montée en charge.
Le problème de la bulle dans le pipeline.
Lorsque vous répartissez un modèle sur plusieurs machines (parallélisme en pipeline), chaque étape reste inactive en attendant la sortie de l’étape précédente. Ce temps mort, pendant lequel le matériel ne fait littéralement rien ? C’est votre bulle.
En gros : la machine 2 ne peut pas démarrer tant que la machine 1 n’a pas terminé sa passe avant. La machine 3 attend la machine 2. Cette dépendance séquentielle crée des périodes creuses pendant lesquelles des ressources de calcul coûteuses ne font que gaspiller de l’argent.
C’est pourquoi le parallélisme de modèle naïf entraîne souvent une très mauvaise utilisation des GPU : vous payez pour 8 GPU, mais seuls 2 ou 3 fonctionnent réellement à un moment donné. Les autres attendent dans la file du pipeline.
Les solutions consistent à utiliser le micro-batching (diviser les lots en fragments plus petits pour garder les pipelines occupés) ou à entrelacer les passes avant et arrière. Mais la contrainte fondamentale demeure : les étapes du pipeline imposent une sérialisation inhérente qui nuit à l’efficacité de la montée en charge.