Qu’est-ce que le partitionnement des modèles et pourquoi est-il important pour les limites de mémoire de l’IA domestique ?

Eva Wong est la rédactrice technique et bricoleuse résidente chez ZimaSpace. Geek depuis toujours, passionnée par les homelabs et les logiciels open source, elle se spécialise dans la traduction de concepts techniques complexes en guides accessibles et pratiques. Eva croit que l’auto-hébergement doit être amusant, pas intimidant. À travers ses tutoriels, elle donne à la communauté les moyens de démystifier les configurations matérielles, depuis la construction de leur premier NAS jusqu’à la maîtrise des conteneurs Docker.

Le partitionnement d’un modèle répartit l’état requis du modèle entre plusieurs appareils afin qu’un modèle dépassant la mémoire d’un seul accélérateur puisse tout de même être chargé et exécuté.

Pour un serveur d’IA domestique, la question importante n’est pas de savoir si un checkpoint est arrivé sous la forme de plusieurs fichiers, mais si les poids, couches, tenseurs ou autres éléments d’état utilisés à l’exécution sont effectivement placés sur différents appareils. Le partitionnement peut transformer un besoin impossible en mémoire sur un seul GPU en un déploiement multi-appareils réalisable, mais les fragments doivent tout de même échanger des données ou se transmettre le travail entre les étapes. La bande passante de l’interconnexion, le déséquilibre entre les appareils et la prise en charge par l’environnement d’exécution deviennent alors les nouvelles limites.

Le partitionnement à l’exécution répartit l’état du modèle entre les appareils

Un modèle en cours d’exécution contient des tenseurs qui doivent être disponibles au moment où ses couches sont exécutées. Le partitionnement modifie leur emplacement afin que différents appareils possèdent différentes portions, au lieu de répliquer l’intégralité de l’état partout.

Un tenseur distribué peut utiliser le placement de tenseurs partitionnés, qui répartit les dimensions distribuées sur une grille d’appareils au lieu de les stocker à l’identique sur chaque rang.

Le bénéfice direct est une occupation moindre de la mémoire de chaque appareil. Le coût au niveau du système est qu’aucun appareil ne dispose désormais de toutes les données nécessaires à chaque opération : la coordination devient donc une composante de l’inférence.

Les fragments d’un checkpoint ne sont pas la même chose qu’un modèle en cours d’exécution partitionné

Les grands dépôts de modèles divisent souvent un checkpoint en de nombreux fichiers afin de permettre leur téléchargement et leur chargement progressifs. Ce choix de conditionnement ne détermine pas à lui seul l’emplacement des tenseurs une fois le chargement terminé.

Le partitionnement au niveau des fichiers et le placement à l’exécution restent distincts, car un chargeur peut combiner des checkpoints partitionnés avec une distribution sur plusieurs appareils.

Un utilisateur à domicile peut donc voir des dizaines de fragments `.safetensors` sur son disque alors que l’environnement d’exécution tente toujours de placer le modèle complet sur un seul GPU. À l’inverse, un environnement d’exécution peut repartitionner un checkpoint selon une autre configuration multi-appareils pendant le chargement.

La planification de la capacité doit examiner la carte réelle des appareils et les allocations résidentes après le démarrage, plutôt que de supposer que le nombre de fichiers du dépôt révèle la topologie d’inférence.

Le partitionnement introduit des communications ou des transferts entre étapes

Lorsqu’un appareil produit des valeurs dont un autre fragment a besoin, les données doivent traverser une interconnexion ou être synchronisées au moyen d’une opération collective. Le trafic exact dépend de la façon dont l’environnement d’exécution répartit les tenseurs à l’intérieur des couches, place différentes plages de couches sur différents appareils ou ne rassemble l’état partitionné qu’en cas de besoin.

Les différentes stratégies d’inférence multi-appareils font des compromis différents entre les schémas de communication et le placement en mémoire.

C’est pourquoi deux GPU disposant d’une VRAM totale suffisante peuvent tout de même servir un modèle lentement. Le déplacement des activations ou la synchronisation des résultats partiels peut devenir prépondérant lorsque le PCIe ou une autre liaison est beaucoup plus lent que la mémoire locale de l’accélérateur.

Des appareils inégaux peuvent transformer un fragment en goulet d’étranglement

Un serveur domestique hétérogène peut associer des GPU dotés de capacités mémoire, de vitesses de calcul, de largeurs de liaison ou de générations différentes. Une répartition mathématiquement équilibrée peut tout de même laisser l’appareil le plus lent ou le moins doté en mémoire déterminer le rythme de toute la requête.

Les outils de placement des couches et de déport doivent donc tenir compte de la capacité réelle de chaque appareil, au lieu de supposer un matériel symétrique. L’exécution distribuée des modèles explicite utilise une configuration du parallélisme plutôt qu’une abstraction automatique de mémoire mutualisée.

Une configuration pratique peut attribuer davantage de couches à un GPU plus puissant ou conserver les composants sensibles à la latence sur le chemin le plus rapide. L’objectif n’est pas d’obtenir un nombre égal de fragments, mais un chemin critique équilibré qui tient sur chaque appareil.

Mesurez la mémoire utilisée par appareil, l’utilisation, le temps de transfert et les périodes d’inactivité avec le même prompt. Un fragment qui attend constamment ou déborde vers une autre mémoire indique que la topologie, et non la VRAM totale combinée, limite les performances.

Le partitionnement du modèle est d’abord un outil de faisabilité mémoire

Le partitionnement est surtout utile lorsque le modèle non partitionné ne peut absolument pas tenir sur un seul appareil. Une fois le modèle chargeable, l’optimisation se déplace vers le coût de l’interconnexion, le traitement par lots, le placement du cache KV et la question de savoir si un modèle plus petit ou quantifié serait plus simple.

Une stratégie de calcul particulière est l’inférence en parallélisme tensoriel ; le partitionnement du modèle est le problème de placement plus large qui consiste à déterminer quel état requis doit résider sur quel appareil.

Ne considérez pas la VRAM totale comme un seul pool transparent. Le partitionnement peut faire coopérer des mémoires distinctes, mais chaque environnement d’exécution possède toujours des règles de placement et des coûts de communication qui déterminent si le déploiement obtenu est réellement utile.

FAQ

Un checkpoint partitionné est-il la même chose qu’un modèle en cours d’exécution partitionné ?

Non. Les fragments d’un checkpoint divisent les fichiers pour le stockage ou le chargement ; le partitionnement à l’exécution détermine quelle partie de l’état du modèle réside sur quel appareil pendant l’inférence.

Le partitionnement du modèle est-il la même chose que le parallélisme tensoriel ?

Non. Le parallélisme tensoriel est une manière d’exécuter un modèle partitionné en divisant les opérations sur les tenseurs ; le partitionnement inclut également les stratégies de placement par couches, étapes, paramètres ou autres éléments.

Deux GPU de 12 Go fournissent-ils automatiquement un pool utilisable unique de 24 Go ?

Non. Un environnement d’exécution doit partitionner explicitement le modèle, et les communications, l’état dupliqué, le cache KV et la marge nécessaire sur chaque appareil réduisent la capacité combinée réellement exploitable.

Centre Tech & IA

Plus à lire

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.