Membuat profil workload TensorFlow
Untuk membuat profil model TensorFlow di Cloud TPU, gunakan TensorBoard dan plugin TPU TensorBoard. TensorBoard sudah diinstal sebelumnya di VM TPU. Untuk mengetahui informasi cara menginstal plugin TPU TensorBoard dan merekam profil performa, lihat Membuat profil model dengan alat Cloud TPU. Untuk mengetahui informasi umum tentang performa Cloud TPU, lihat panduan performa Cloud TPU.
Untuk mengetahui informasi selengkapnya, lihat callback TensorBoard.
Catatan performa fungsi TensorFlow
Lihat daftar lengkap operasi TensorFlow yang tersedia di Cloud TPU.
tf.matmul
- Transpose hasil dari salah satu operand secara efektif bebas.
- Perhatikan bahwa
tf.matmul
mendukung penggabungan ke input dan output. Artinya, fungsi atau bias aktivasi yang diterapkan langsung ke outputtf.matmul
memiliki overhead yang rendah.
tf.nn.conv_n_d
, tf.nn.depthwise_conv2d
, tf.nn.separable_conv2d
- Untuk aktivasi, dimensi fitur dan batch diberi padding ke
kelipatan 8 atau 128.
- XLA pertama melacak ukuran dimensi batch yang paling umum untuk konvolusi dalam modul. Ini akan membantu membedakan antara konvolusi maju, konvolusi gradien aktivasi, dan konvolusi gradien kernel.
- Jika ukuran tumpukan yang paling umum lebih besar dari atau sama dengan 64:
- Batch ditambahkan ke kelipatan 128 dan fitur diberi padding ke kelipatan 8 untuk konvolusi maju dan mundur.
- Batch ditambahkan ke kelipatan 8 dan fitur ditambahkan ke beberapa 128 untuk konvolusi update gradien.
- Jika ukuran tumpukan yang paling umum kurang dari 64:
- Batch ditambahkan ke kelipatan 8 dan fitur ditambahkan ke kelipatan 128 untuk konvolusi maju dan mundur.
- Batch ditambahkan ke kelipatan 128 dan fitur diberi padding ke kelipatan 8 untuk konvolusi update gradien.
- Transpose aktivasi tepat sebelum mengirimkannya ke konvolusi tidak dikenai biaya jika transposisi hanya menukar fitur input dan dimensi batch.
- Untuk kernel, dimensi fitur input dan fitur output diberi padding
ke kelipatan 8 atau 128. Penentuan yang tepat dipengaruhi oleh
produsen dan konsumen kernel lainnya.
- Transpose kernel tepat sebelum mengirimkannya ke konvolusi tidak akan dikenai biaya jika transposisi hanya menukar dimensi fitur input dan output.
- Hasilnya, dimensi fitur dan batch ditambahkan ke kelipatan 8 atau 128.
- Transpose hasil konvolusi tidak dikenakan biaya jika transposisi hanya menukar dimensi fitur batch dan output.
- Perhatikan bahwa
tf.nn.conv_n_d
mendukung penggabungan ke hasilnya, yaitu aktivasi dan/atau kernel. Artinya, fungsi atau bias aktivasi yang diterapkan langsung ke output memiliki overhead yang rendah.
tf.nn.avg_pool
, tf.nn.max_pool
- Aturan padding berlaku: dimensi spasial lebih penting daripada batch dan fitur. Setiap batch dan fitur dapat ditambahkan ke kelipatan 8 atau 128.
- Biasanya, tata letak operasi kumpulan cocok dengan konvolusi yang mengalir di dalam atau keluar dari operasi kumpulan tersebut.
- Penghitungan gradien untuk
tf.nn.max
_pool mungkin lebih lambat daritf.nn.avg_pool
yang setara. Pertimbangkan untuk beralih dari penggabungan nilai maksimum ke penggabungan rata-rata jika memungkinkan.
tf.concat
, tf.slice
, tf.strided_slice
- Hindari potongan dan penyambungan yang tidak perlu. Slice dan penggabungan dalam
dimensi yang telah diberi padding menjadi jauh lebih mahal.
- Perpindahan data diminimalkan jika dimensi irisan tidak memiliki overhead padding.
tf.transpose
- Melakukan transposisi salah satu operand dari
tf.matmul
atau hasilnya bebas biaya. - Transisi aktivasi
tf.conv_n_d
tidak dikenai biaya jika menukar dimensi fitur batch dan input. - Transposisi kernel
tf.conv_n_d
tidak dikenai biaya jika menukar dimensi fitur input dan output. - Transposisi hasil
tf.conv_n_d
tidak dikenakan biaya jika menukar dimensi fitur batch dan output.
tf.batch_to_space
, tf.space_to_batch
, tf.space_to_depth
, tf.depth_to_space
- Biaya ini mahal karena melibatkan pemindahan data dari dimensi dengan padding ke tanpa padding, dan sebaliknya.
tf.reshape
- Pembentukan ulang di Cloud TPU mungkin mahal saat memindahkan data dalam dimensi dengan padding.
- Ada baiknya Anda membentuk ulang data ke R1 di host dan membentuknya kembali
ke beberapa bentuk dimensi yang lebih tinggi pada perangkat jika ada padding
yang substansial. Hal ini dapat membuat transfer antara host dan perangkat lebih efisien.
- Hal ini juga dapat membantu puncak pemakaian memori karena parameter yang dikemas dapat dibuka secara on demand.
tf.random_uniform
, tf.distributions.Bernoulli
, tf.random_normal
, tf.multinomial
- Pembuatan angka acak semu untuk distribusi uniform atau Bernoulli sangat cepat.
- Distribusi normal sedikit lebih mahal daripada distribusi seragam atau Bernoulli.
- Pembuatan angka acak Pseudo untuk distribusi Kategori dan Multinomial jauh lebih mahal.
tf.reduce_all
, tf.reduce_any
, tf.reduce_logsumexp
, tf.reduce_max
, tf.reduce_min
, tf.reduce_prod
, tf.reduce_sum
- Beberapa pengurangan dengan bentuk input dan output yang sama dapat dilakukan
secara paralel menggunakan fusi operasi.
- Coba tulis ulang rantai pengurangan berurutan menjadi paralel, jika memungkinkan.
Pengurangan mendukung penggabungan operasi elementwise ke dalam input, tetapi tidak mendukung output-nya. Jika memungkinkan, tulis ulang ekspresi untuk mendukung fusi. Contoh:
tf.multiply(tf.reduce_sum(x), y)
Ke:
tf.reduce_sum(tf.multiply(x, y))
tf.nn.batch_normalization
, tf.nn.fused_batch_norm
, tf.layers.batch_normalization
Compiler XLA dapat secara efisien menurunkan varian gabungan TensorFlow dari normalisasi batch. Menggunakannya dapat jauh lebih efisien daripada alternatifnya.
- Lebih memilih
tf.nn.fused_batch_norm
daripadatf.nn.batch_normalization
. - Untuk
tf.layers.batch_normalization
, tetapkan argumen "fusi" ke benar.
- Lebih memilih