Profiler les charges de travail TensorFlow
Pour profiler un modèle TensorFlow sur des Cloud TPU, vous devez utiliser TensorBoard et le plug-in TensorBoard TPU. TensorBoard est préinstallé sur les VM TPU. Pour savoir comment installer le plug-in TensorBoard TPU et capturer un profil de performances, consultez Profiler votre modèle avec les outils Cloud TPU. Pour en savoir plus sur les performances générales de Cloud TPU, consultez le guide des performances de Cloud TPU.
Pour en savoir plus, consultez la section Rappels TensorBoard.
Remarques sur les performances des fonctions TensorFlow
Consultez la liste complète des opérations TensorFlow disponibles sur Cloud TPU.
tf.matmul
- La transposition du résultat de l'un des opérandes est gratuite.
- Notez que
tf.matmul
accepte la fusion dans son entrée et dans sa sortie. Ainsi, les fonctions d'activation ou les biais appliqués directement à la sortie detf.matmul
ont de faibles coûts.
tf.nn.conv_n_d
, tf.nn.depthwise_conv2d
, tf.nn.separable_conv2d
- Pour les activations, les dimensions de lot et de caractéristique sont complétées jusqu'à un multiple de 8 ou de 128.
- Tout d'abord, XLA détecte la taille la plus courante de dimensions de lot pour les convolutions dans le module. Cette procédure permet de distinguer les convolutions avant, les convolutions de gradient d'activation et les convolutions de gradient du noyau.
- Si la taille de lot la plus courante est supérieure ou égale à 64 :
- Le lot est complété jusqu'à un multiple de 128, et la caractéristique jusqu'à un multiple de 8, pour les convolutions avant et arrière.
- Le lot est complété jusqu'à un multiple de 128, et la caractéristique jusqu'à un multiple de 8, pour les convolutions de mise à jour du gradient.
- Si la taille de lot la plus courante est inférieure à 64 :
- Le lot est complété jusqu'à un multiple de 8, et la caractéristique jusqu'à un multiple de 128, pour les convolutions avant et arrière.
- Le lot est complété jusqu'à un multiple de 128, et la caractéristique jusqu'à un multiple de 8, pour les convolutions de mise à jour du gradient.
- La transposition des activations juste avant leur envoi à une convolution est gratuite, si la transposée ne permute que les dimensions de lot et de caractéristique d'entrée.
- Pour le noyau, les dimensions de caractéristique d'entrée et de sortie sont complétées jusqu'à un multiple de 8 ou de 128. La détermination exacte est influencée par les émetteurs et les destinataires du noyau.
- La transposition d'un noyau juste avant son envoi à une convolution est gratuite, si la transposée ne permute que les dimensions de caractéristique d'entrée et de sortie.
- Pour le résultat, les dimensions de lot et de caractéristique sont complétées jusqu'à un multiple de 8 ou de 128.
- La transposition du résultat d'une convolution est gratuite, si la transposée ne permute que les dimensions de lot et de caractéristique de sortie.
- Notez que
tf.nn.conv_n_d
accepte la fusion dans son résultat, les activations et/ou le noyau. Ainsi, les fonctions d'activation ou les biais appliqués directement à la sortie ont de faibles coûts.
tf.nn.avg_pool
tf.nn.max_pool
- Les règles de remplissage s'appliquent : les dimensions spatiales sont plus importantes que les dimensions de lot et de caractéristique. Chaque lot et caractéristique peut être complété jusqu'à un multiple de 8 ou de 128.
- En règle générale, la disposition d'une opération de pool correspond aux convolutions qui en découlent.
- Le calcul du gradient pour
tf.nn.max
_pool peut être plus lent que pour son équivalenttf.nn.avg_pool
. Envisagez de passer du pooling maximal au pooling moyen lorsque cela est possible.
tf.concat
, tf.slice
, tf.strided_slice
- Évitez les tranches et les concaténations inutiles. Les tranches et les concaténations présentes dans une dimension ayant fait l'objet d'un remplissage sont considérablement plus onéreuses.
- Le déplacement des données est réduit au minimum si la dimension de tranche n'entraîne pas de surcharge système due au remplissage.
tf.transpose
- La transposition de l'un des opérandes d'une fonction
tf.matmul
ou de son résultat est gratuite. - La transposition des activations d'une fonction
tf.conv_n_d
est gratuite si elle permute les dimensions de lot et de caractéristique d'entrée. - La transposition du noyau d'une fonction
tf.conv_n_d
est gratuite si elle permute les dimensions de caractéristique d'entrée et de sortie. - La transposition du résultat d'une fonction
tf.conv_n_d
est gratuite si elle permute les dimensions de lot et de caractéristique de sortie.
tf.batch_to_space
, tf.space_to_batch
, tf.space_to_depth
, tf.depth_to_space
- Ces fonctions sont coûteuses, car elles impliquent le déplacement de données de dimensions avec remplissage vers des dimensions sans remplissage, et inversement.
tf.reshape
- Le remodelage peut être coûteux sur Cloud TPU lors du déplacement de données dans une dimension avec remplissage.
- Il peut être avantageux de remodeler les données en R1 sur l'hôte, puis de leur redonner la forme d'une dimension plus élevée sur l'appareil si le remplissage est important. Ce procédé peut rendre les transferts entre l'hôte et l'appareil plus efficaces.
- Cela peut également être utile en cas de pic d'utilisation de la mémoire, car le paramètre compressé peut être décompressé à la demande.
tf.random_uniform
, tf.distributions.Bernoulli
, tf.random_normal
, tf.multinomial
- La génération de nombres pseudo-aléatoires pour les distributions uniformes ou de Bernoulli est très rapide.
- Les distributions normales sont légèrement plus coûteuses que les distributions uniformes ou de Bernoulli.
- La génération de nombres pseudo-aléatoires pour les distributions catégorielles et multinomiales est considérablement plus onéreuse.
tf.reduce_all
, tf.reduce_any
, tf.reduce_logsumexp
, tf.reduce_max
, tf.reduce_min
, tf.reduce_prod
, tf.reduce_sum
- Plusieurs réductions ayant la même forme d'entrée et de sortie peuvent être effectuées en parallèle à l'aide de la fusion d'opérations.
- Essayez de réécrire les chaînes séquentielles de réductions en chaînes parallèles, si possible.
Les réductions acceptent la fusion des opérations élément par élément dans leur entrée, mais pas dans leur sortie. Si possible, réécrivez les expressions de façon à promouvoir la fusion. Exemple :
tf.multiply(tf.reduce_sum(x), y)
en :
tf.reduce_sum(tf.multiply(x, y))
tf.nn.batch_normalization
, tf.nn.fused_batch_norm
, tf.layers.batch_normalization
Le compilateur XLA peut réduire efficacement les variantes fusionnées de la normalisation des lots de TensorFlow. Leur utilisation peut être considérablement plus efficace que l'alternative.
- Préférez
tf.nn.fused_batch_norm
àtf.nn.batch_normalization
. - Pour
tf.layers.batch_normalization
, définissez l'argument "fused" sur "vrai".
- Préférez