Membuat profil workload TensorFlow
Untuk membuat profil model TensorFlow di Cloud TPU, Anda menggunakan TensorBoard dan plugin TPU TensorBoard. TensorBoard sudah diinstal sebelumnya di VM TPU. Untuk informasi tentang cara menginstal plugin TPU TensorBoard dan mengambil profil performa, lihat Membuat profil model dengan alat Cloud TPU. Untuk informasi performa Cloud TPU umum, 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
- Mentranspos hasil salah satu operand secara efektif gratis.
- Perhatikan bahwa
tf.matmul
mendukung penggabungan ke input dan output-nya. Artinya, fungsi aktivasi atau bias 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 batch dan fitur diisi dengan
kelipatan 8 atau 128.
- XLA pertama melacak ukuran dimensi batch yang paling umum untuk konvolusi dalam modul. Hal ini membantu membedakan antara konvolusi maju, konvolusi gradien aktivasi, dan konvolusi gradien kernel.
- Jika ukuran batch yang paling umum lebih besar dari atau sama dengan 64:
- Batch ditambahkan ke kelipatan 128 dan fitur ditambahkan ke kelipatan 8 untuk konvolusi maju dan mundur.
- Batch ditambahkan ke kelipatan 8 dan fitur ditambahkan ke kelipatan 128 untuk konvolusi update gradien.
- Jika ukuran batch 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 ditambahkan ke kelipatan 8 untuk konvolusi update gradien.
- Mentranspos aktivasi tepat sebelum mengirimkannya ke konvolusi tidak dikenai biaya jika transposisi hanya menukar fitur input dan dimensi batch.
- Untuk kernel, dimensi fitur input dan dimensi fitur output diisi
dengan kelipatan 8 atau 128. Penentuan yang tepat dipengaruhi oleh
produser dan konsumen kernel lainnya.
- Mentranspos kernel tepat sebelum mengirimkannya ke konvolusi tidak dikenai biaya jika transpos hanya menukar dimensi fitur input dan output.
- Untuk hasilnya, dimensi batch dan fitur diisi dengan kelipatan
8 atau 128.
- Mentranspos hasil konvolusi bebas biaya jika transposisi hanya menukar dimensi fitur batch dan output.
- Perhatikan bahwa
tf.nn.conv_n_d
mendukung penggabungan ke dalam hasilnya, aktivasi dan/atau kernel. Artinya, fungsi aktivasi atau bias yang diterapkan langsung ke output memiliki overhead yang rendah.
tf.nn.avg_pool
, tf.nn.max_pool
- Aturan padding berlaku: dimensi spasial lebih utama daripada batch dan fitur. Setiap batch dan fitur dapat ditambahkan padding ke kelipatan 8 atau 128.
- Biasanya, tata letak operasi kumpulan cocok dengan konvolusi yang mengalir ke dalam atau keluar darinya.
- Penghitungan gradien untuk
tf.nn.max
_pool mungkin lebih lambat daripadatf.nn.avg_pool
yang setara. Pertimbangkan untuk beralih dari max-pooling ke average-pooling jika memungkinkan.
tf.concat
, tf.slice
, tf.strided_slice
- Hindari slice dan penyambungan yang tidak perlu. Slice dan penyambungan dalam dimensi yang telah ditambahkan padding akan jauh lebih mahal.
- Pemindahan data diminimalkan jika dimensi slice tidak memiliki overhead padding.
tf.transpose
- Transposisi operand
tf.matmul
atau hasilnya gratis. - Mentranspos aktivasi
tf.conv_n_d
bebas biaya jika menukar dimensi fitur batch dan input. - Mentranspos kernel
tf.conv_n_d
bebas biaya jika menukar dimensi fitur input dan output. - Mentranspos hasil
tf.conv_n_d
bebas biaya jika menukar dimensi fitur batch dan output.
tf.batch_to_space
, tf.space_to_batch
, tf.space_to_depth
, tf.depth_to_space
- Hal ini berbiaya mahal karena melibatkan pemindahan data dari dimensi yang ditambahkan padding ke dimensi tanpa padding dan sebaliknya.
tf.reshape
- Pembentukan ulang mungkin mahal di Cloud TPU saat memindahkan data dalam dimensi yang ditambahkan padding.
- Sebaiknya bentuk ulang data ke R1 di host dan bentuk ulang kembali
ke beberapa bentuk dimensi yang lebih tinggi di perangkat jika ada padding
yang substansial. Hal ini dapat membuat transfer antara host dan perangkat menjadi lebih efisien.
- Hal ini juga dapat membantu penggunaan memori puncak karena parameter yang dikemas dapat diekstrak sesuai permintaan.
tf.random_uniform
, tf.distributions.Bernoulli
, tf.random_normal
, tf.multinomial
- Pembuatan angka pseudo-acak untuk distribusi seragam atau Bernoulli sangat cepat.
- Distribusi normal sedikit lebih mahal daripada distribusi seragam atau Bernoulli.
- Pembuatan angka pseudo-random untuk distribusi Kategoris 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 penggabungan operasi.
- Coba tulis ulang rantai pengurangan berurutan menjadi paralel, jika memungkinkan.
Pengurangan mendukung penggabungan operasi elemen ke dalam inputnya, tetapi tidak ke outputnya. Jika memungkinkan, tulis ulang ekspresi untuk mendorong penggabungan. Contoh:
tf.multiply(tf.reduce_sum(x), y)
Ke dalam:
tf.reduce_sum(tf.multiply(x, y))
tf.nn.batch_normalization
, tf.nn.fused_batch_norm
, tf.layers.batch_normalization
Compiler XLA dapat menurunkan varian gabungan normalisasi batch TensorFlow secara efisien. 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 "fused" ke benar.
- Lebih memilih