Le format numérique bfloat16

L'utilisation de nombres à virgule flottante à faible précision est une méthode courante utilisée pour réduire le temps de convergence sans perdre en précision. Les TPU utilisent le format de nombre bfloat16 lors de l'exécution d'opérations matricielles. Les opérations de multiplication matricielle sont effectuées sur les valeurs bfloat16, et les accumulations sont effectuées sur les valeurs float32 IEEE.

bfloat16 est un format de virgule flottante personnalisé de 16 bits pour le machine learning. Il est composé d'un bit de signe, de huit bits d'exposant et de sept bits de mantissa. Le schéma suivant illustre les composants internes de trois formats à virgule flottante : float32: IEEE à simple précision, float16: IEEE demi-précision et bfloat16.

image

La plage dynamique de bfloat16 et float32 est équivalente. Cependant, bfloat16 occupe la moitié de l'espace mémoire. Pour en savoir plus sur les performances de bfloat16, consultez le livre blanc A Study of BFLOAT16 for Deep Learning Training (Étude du BFLOAT16 sur le deep learning).

Choisir bfloat16

L'équipe matérielle de Google a choisi bfloat16 pour les Cloud TPU afin d'améliorer l'efficacité matérielle tout en conservant la possibilité d'entraîner les modèles de deep learning avec précision, le tout avec des coûts de basculement minimaux de float32. La taille physique d'un multiplicateur matériel s'adapte au carré de la largeur de la mantisse. Avec un nombre de bits de mantisse inférieur à celui de FP16, les multiplicateurs bfloat16 sont environ de la moitié de la taille d'un multiplicateur FP16 classique, et ils sont huit fois plus petits qu'un multiplicateur float32.

Les réseaux de neurones sont plus sensibles à la taille de l'excédant que la mantissa. Afin de garantir un comportement identique pour les sous-exécutions, les sur-exécutions et les NaN, bfloat16 a la même taille d'exposant que float32. bfloat16 traite les dénormalisations différemment de float32, et les remet à zéro. Contrairement à float16, qui nécessite généralement un traitement spécial comme la mise à échelle des pertes, bfloat16 est une option de remplacement pour float32 lors de l'entraînement et de l'exécution de réseaux de neurones profonds.

Entraînement de précision mixte

La plupart des calculs au sein d'un réseau de neurones profond peuvent accomplir une tâche avec la même précision à l'aide de valeurs moins précises. Certains modèles peuvent même atteindre une plus grande précision avec des valeurs de précision inférieure.

Lors de la programmation de Cloud TPU, le compilateur XLA convertit automatiquement les valeurs entre float32 et bfloat16.

Portabilité des modèles

Les valeurs de paramètres et d'activations dans un modèle peuvent être stockées au format 32 bits, car le matériel TPU peut automatiquement caster ces valeurs dans bfloat16. Les points de contrôle obtenus à partir d'un modèle entraîné sur Cloud TPU peuvent être déployés sur d'autres plates-formes matérielles (par exemple, des inférences ou des réglages sur des processeurs ou des GPU) sans conversions manuelles approfondies.

Améliorer les performances avec bfloat16

Bien que la conversion automatique de format dans les TPU vous permette d'éviter de penser à la précision numérique, vous pouvez améliorer davantage les performances en convertissant explicitement des valeurs en bfloat16. Deux raisons pour lesquelles vous devez explicitement caster des valeurs sur bfloat16 :

  1. Le stockage de valeurs au format bfloat16 permet d'économiser de la mémoire sur puce, permettant ainsi aux Cloud TPU d'entraîner des modèles plus volumineux ou d'utiliser des tailles de lot plus importantes.

  2. Certaines opérations sont associées à la bande passante mémoire, ce qui signifie que le temps nécessaire au chargement des données à partir de la mémoire peut ralentir le temps global d'exécution du calcul. Le stockage des opérandes et des sorties de ces opérations au format bfloat16 réduit la quantité de données à transférer, améliorant ainsi la vitesse globale.

Pour commencer, nous vous recommandons de vous familiariser avec l'un des modèles de référence compatibles bfloat16 qui ont été optimisés pour les Cloud TPU. Consultez ensuite notre guide sur les performances, notre guide des outils de profilage et notre guide de dépannage qui vous fourniront des informations techniques détaillées sur la façon de créer et d'optimiser vos modèles de machine learning.