Profila i carichi di lavoro TensorFlow
Per profilare un modello TensorFlow sulle Cloud TPU, utilizza TensorBoard e il plug-in TPU TensorBoard. TensorBoard è preinstallato sulle VM TPU. Per informazioni su come installare il plug-in TensorBoard TPU e acquisire un profilo delle prestazioni, consulta Profilo del modello con gli strumenti di Cloud TPU. Per informazioni generali sulle prestazioni di Cloud TPU, consulta la guida alle prestazioni di Cloud TPU.
Per ulteriori informazioni, consulta la sezione Callback di TensorBoard.
Note sulle prestazioni della funzione TensorFlow
Consulta l'elenco completo delle operazioni di TensorFlow disponibili su Cloud TPU.
tf.matmul
- Il trasposizione del risultato di uno degli operandi è effettivamente gratuito.
- Tieni presente che
tf.matmul
supporta l'integrazione nei suoi input e nei suoi output. Ciò significa che le funzioni di attivazione o i bias applicati direttamente all'output ditf.matmul
hanno un overhead ridotto.
tf.nn.conv_n_d
, tf.nn.depthwise_conv2d
, tf.nn.separable_conv2d
- Per le attivazioni, le dimensioni del batch e delle funzionalità vengono riempite in un multiplo di 8 o 128.
- First XLA monitora le dimensioni più comuni delle dimensioni batch per le convoluzioni nel modulo. Ciò consente di distinguere tra convoluzioni in avanti, convoluzioni dei gradienti di attivazione e convoluzioni dei gradienti del kernel.
- Se la dimensione del batch più comune è maggiore o uguale a 64:
- Batch è imbottito a un multiplo di 128 e la funzionalità a un multiplo di 8 è per convoluzioni avanti e indietro.
- Il batch viene riempito fino a un multiplo di 8 e le caratteristiche corrispondono a un multiplo di 128 per le convoluzioni di aggiornamento del gradiente.
- Se la dimensione del batch più comune è inferiore a 64:
- Batch è imbottito a un multiplo di 8 e la caratteristica è a un multiplo di 128 per le convoluzioni avanti e indietro.
- Batch viene riempito fino a un multiplo di 128 e le caratteristiche in un multiplo di 8 per le convoluzioni di aggiornamento del gradiente.
- La trasposizione delle attivazioni immediatamente prima di inviarla in una convoluzione è gratuita se la trasposizione scambia solo la funzionalità di input e le dimensioni batch.
- Per il kernel, le dimensioni delle funzionalità di input e di output vengono aggiunte a un multiplo di 8 o 128. La determinazione esatta è influenzata
dai producer e dagli altri consumatori del kernel.
- La trasposizione di un kernel immediatamente prima di inviarlo a una convoluzione è gratuita se la trasposizione scambia solo le dimensioni delle caratteristiche di input e output.
- Per il risultato, le dimensioni del batch e delle caratteristiche vengono riempite a multiplo di 8 o 128.
- La trasposizione del risultato di una convoluzione è gratuita se la trasposizione cambia solo le dimensioni delle funzionalità batch e di output.
- Tieni presente che
tf.nn.conv_n_d
supporta l'integrazione nel risultato, le attivazioni e/o il kernel. Ciò significa che le funzioni di attivazione o i bias applicati direttamente all'output hanno un overhead ridotto.
tf.nn.avg_pool
, tf.nn.max_pool
- Si applicano le regole di spaziatura interna: le dimensioni spaziali sono più importanti delle funzionalità batch e delle funzionalità. Ogni batch e funzionalità può essere riempito con un multiplo di 8 o 128.
- In genere, il layout di un'operazione di pool corrisponde alle convoluzioni che fluiscono dentro o fuori il pool.
- Il calcolo del gradiente per
tf.nn.max
_pool potrebbe essere più lento rispetto all'equivalentetf.nn.avg_pool
. Se possibile, valuta di passare dal pooling massimo al pooling medio.
tf.concat
, tf.slice
, tf.strided_slice
- Evita sezioni e concatenazioni inutili. Le sezioni e le concatenazioni in una
dimensione imbottita sono molto più costose.
- Lo spostamento dei dati viene ridotto al minimo se la dimensione della sezione non ha un overhead di spaziatura interna.
tf.transpose
- Il trasposizione di uno qualsiasi degli operandi di un elemento
tf.matmul
o del suo risultato è gratuito. - La trasposizione delle attivazioni di un
tf.conv_n_d
è gratuita se scambia le dimensioni delle funzionalità batch e di input. - La trasposizione del kernel di un
tf.conv_n_d
è gratuita se scambia le dimensioni delle funzionalità di input e output. - La trasposizione del risultato di un elemento
tf.conv_n_d
è gratuita se scambia le dimensioni della funzionalità di output e batch.
tf.batch_to_space
, tf.space_to_batch
, tf.space_to_depth
, tf.depth_to_space
- Sono costosi perché comportano lo spostamento dei dati da dimensioni non riempite a quelle non imbottite e viceversa.
tf.reshape
- La rimodellazione può essere costosa su Cloud TPU quando si spostano i dati in una dimensione con spaziatura interna.
- Può essere utile rimodellare i dati in R1 sull'host e rimodellarli
in modo da avere dimensioni più elevate sul dispositivo se disponi di una
spaziatura sostanziale. Ciò può rendere più efficienti i trasferimenti tra l'host e il dispositivo.
- Può anche essere utile per i picchi di utilizzo della memoria, perché il parametro pacchettizzato può essere decompresso on demand.
tf.random_uniform
, tf.distributions.Bernoulli
, tf.random_normal
, tf.multinomial
- La generazione di pseudo-numeri casuali per le distribuzioni uniformi o di Bernoulli è molto rapida.
- Le distribuzioni normali sono leggermente più costose di quelle uniformi o di Bernoulli.
- La generazione di pseudo-numeri casuali per le distribuzioni categoriche e multinomiali è notevolmente più costosa.
tf.reduce_all
, tf.reduce_any
, tf.reduce_logsumexp
, tf.reduce_max
, tf.reduce_min
, tf.reduce_prod
e tf.reduce_sum
- È possibile eseguire più riduzioni con la stessa forma di input e output in parallelo utilizzando la fusione delle operazioni.
- Prova a riscrivere le catene sequenziali di riduzioni in parallele, se possibile.
Le riduzioni consentono di fondere operazioni a livello di elemento nei loro input, ma non nell'output. Se possibile, riscrivi le espressioni per favorire la fusione. Ad esempio:
tf.multiply(tf.reduce_sum(x), y)
In:
tf.reduce_sum(tf.multiply(x, y))
tf.nn.batch_normalization
, tf.nn.fused_batch_norm
, tf.layers.batch_normalization
Il compilatore XLA può ridurre in modo efficiente le varianti unite di TensorFlow, Il loro utilizzo può essere notevolmente più efficiente dell'alternativa.
- Preferisco
tf.nn.fused_batch_norm
rispetto atf.nn.batch_normalization
. - Per
tf.layers.batch_normalization
, imposta l'argomento "fused" su true.
- Preferisco