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