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 output tf.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 daripada tf.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 daripada tf.nn.batch_normalization.
    • Untuk tf.layers.batch_normalization, tetapkan argumen "fused" ke benar.