Améliorer les performances de votre modèle avec bfloat16

Par défaut, les TPU effectuent des opérations de multiplication matricielle avec des valeurs bfloat16 et des accumulations avec des valeurs IEEE float32. L'utilisation de nombres à virgule flottante à précision réduite diminue le temps de convergence sans perte de précision.

bfloat16 et float32 ont une plage dynamique équivalente. Toutefois, bfloat16 utilise la moitié de l'espace mémoire. Pour en savoir plus sur les performances de bfloat16, consultez l'article A Study of BFLOAT16 for Deep Learning Training (Étude de BFLOAT16 pour l'entraînement deep learning).

Utiliser explicitement 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 les performances en convertissant explicitement des valeurs en bfloat16. Il existe deux raisons de convertir explicitement des valeurs en 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 subordonné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 d'acquérir de l'expérience avec l'un des modèles de référence Cloud TPU. Ensuite, le guide des outils de profilage et le guide de dépannage fournissent des informations techniques détaillées qui vous aideront à créer et à optimiser des modèles de machine learning par vous-même.

Détails relatifs à la conversion du format

La conversion du format float32 en bfloat16 est automatiquement insérée par le compilateur XLA. Sur TPU, le procédé d'arrondi de la conversion est un arrondi à l'entier pair le plus proche et le dépassement est défini sur inf. De plus, bfloat16 sur Cloud TPU n'est pas compatible avec les nombres inférieurs à la normale. Par conséquent, tous les nombres sous-normaux sont ramenés à zéro lors de la conversion. Les valeurs spéciales, telles que NaN et inf, sont conservées lors de la conversion.

La conversion du format bfloat16 en float32 est également insérée automatiquement par le compilateur XLA. Étant donné que float32 peut représenter toutes les valeurs exactes dans bfloat16, la conversion ajoute 16 zéros aux bits de mantisse. Les valeurs spéciales sont conservées lors de la conversion.

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 fins sur des processeurs ou des GPU) sans conversions manuelles approfondies.