Mengoptimalkan performa TensorFlow menggunakan XProf

Panduan ini menunjukkan cara menggunakan alat yang tersedia dengan XProf untuk melacak performa model TensorFlow Anda di host (CPU), perangkat (GPU), atau di kombinasi host dan perangkat.

Pembuatan profil membantu memahami penggunaan resource hardware (waktu dan memori) dari berbagai operasi (ops) TensorFlow dalam model Anda, mengatasi hambatan performa, dan pada akhirnya membuat model dieksekusi lebih cepat.

Panduan ini akan memandu Anda cara menggunakan berbagai alat yang tersedia dan berbagai mode cara Profiler mengumpulkan data performa.

Jika Anda ingin memprofilkan performa model di Cloud TPU, lihat panduan Cloud TPU.

Mengumpulkan data performa

XProf mengumpulkan aktivitas host dan rekaman aktivitas GPU model TensorFlow Anda. Anda dapat mengonfigurasi XProf untuk mengumpulkan data performa melalui mode terprogram atau mode pengambilan sampel.

API Pembuatan Profil

Anda dapat menggunakan API berikut untuk melakukan pembuatan profil.

  • Mode terprogram menggunakan TensorBoard Keras Callback (tf.keras.callbacks.TensorBoard)

    # Profile from batches 10 to 15
    tb_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir,
                                                 profile_batch='10, 15')
    
    # Train the model and use the TensorBoard Keras callback to collect
    # performance profiling data
    model.fit(train_data,
              steps_per_epoch=20,
              epochs=5,
              callbacks=[tb_callback])
    
  • Mode terprogram menggunakan API Fungsi tf.profiler

    tf.profiler.experimental.start('logdir')
    # Train the model here
    tf.profiler.experimental.stop()
    
  • Mode terprogram menggunakan pengelola konteks

    with tf.profiler.experimental.Profile('logdir'):
        # Train the model here
        pass
    
  • Mode pengambilan sampel: Lakukan pembuatan profil sesuai permintaan dengan menggunakan tf.profiler.experimental.server.start untuk memulai server gRPC dengan TensorFlow model Anda. Setelah memulai server gRPC dan menjalankan model, Anda dapat merekam profil melalui tombol Capture Profile di XProf. Gunakan skrip di bagian Menginstal profiler di atas untuk meluncurkan instance TensorBoard jika belum berjalan.

    Sebagai contoh,

    # Start a profiler server before your model runs.
    tf.profiler.experimental.server.start(6009)
    # (Model code goes here).
    #  Send a request to the profiler server to collect a trace of your model.
    tf.profiler.experimental.client.trace('grpc://localhost:6009',
                                          'gs://your_tb_logdir', 2000)
    

    Contoh untuk membuat profil beberapa pekerja:

    # E.g., your worker IP addresses are 10.0.0.2, 10.0.0.3, 10.0.0.4, and you
    # would like to profile for a duration of 2 seconds.
    tf.profiler.experimental.client.trace(
        'grpc://10.0.0.2:8466,grpc://10.0.0.3:8466,grpc://10.0.0.4:8466',
        'gs://your_tb_logdir',
        2000)
    

Dialog Profil Pengambilan

Gunakan dialog Capture Profile untuk menentukan:

  • Daftar URL layanan profil atau nama TPU yang dipisahkan koma.
  • Durasi pembuatan profil.
  • Tingkat pelacakan panggilan fungsi Python, host, dan perangkat.
  • Berapa kali Anda ingin Profiler mencoba lagi merekam profil jika tidak berhasil pada awalnya.

Membuat profil loop pelatihan kustom

Untuk membuat profil loop pelatihan kustom dalam kode TensorFlow, instrumentasikan loop pelatihan dengan tf.profiler.experimental.Trace API untuk menandai batas langkah untuk XProf.

Argumen name digunakan sebagai awalan untuk nama langkah, argumen kata kunci step_num ditambahkan dalam nama langkah, dan argumen kata kunci _r membuat peristiwa rekaman aktivitas ini diproses sebagai peristiwa langkah oleh XProf.

Sebagai contoh,

for step in range(NUM_STEPS):
    with tf.profiler.experimental.Trace('train', step_num=step, _r=1):
        train_data = next(dataset)
        train_step(train_data)

Tindakan ini akan mengaktifkan analisis performa berbasis langkah XProf dan menyebabkan peristiwa langkah muncul di pelihat rekaman aktivitas.

Pastikan Anda menyertakan iterator set data dalam konteks tf.profiler.experimental.Trace untuk analisis yang akurat pada pipeline input.

Cuplikan kode di bawah adalah anti-pola:

for step, train_data in enumerate(dataset):
    with tf.profiler.experimental.Trace('train', step_num=step, _r=1):
        train_step(train_data)

Kasus penggunaan pembuatan profil

Profiler mencakup sejumlah kasus penggunaan di sepanjang empat sumbu yang berbeda. Beberapa kombinasi saat ini didukung dan kombinasi lainnya akan ditambahkan pada masa mendatang. Beberapa kasus penggunaan adalah:

  • Pembuatan profil lokal vs. jarak jauh: Ini adalah dua cara umum untuk menyiapkan lingkungan pembuatan profil Anda. Dalam pembuatan profil lokal, API pembuatan profil dipanggil di mesin yang sama dengan tempat model Anda dieksekusi, misalnya, workstation lokal dengan GPU. Dalam pembuatan profil jarak jauh, API pembuatan profil dipanggil di mesin yang berbeda dari tempat model Anda dieksekusi, misalnya, di Cloud TPU.
  • Membuat profil beberapa pekerja: Anda dapat membuat profil beberapa mesin saat menggunakan kemampuan pelatihan terdistribusi TensorFlow.
  • Platform hardware: Buat profil CPU, GPU, dan TPU.

Tabel di bawah ini memberikan ringkasan singkat tentang kasus penggunaan yang didukung TensorFlow yang disebutkan di atas:

Profiling API Lokal Eksternal Beberapa pekerja Platform Hardware
Callback TensorBoard Keras Didukung Tidak Didukung Tidak Didukung CPU, GPU
tf.profiler.experimental start/stop API Didukung Tidak Didukung Tidak Didukung CPU, GPU
tf.profiler.experimental client.trace API Didukung Didukung Didukung CPU, GPU, TPU
API pengelola konteks Didukung Tidak didukung Tidak Didukung CPU, GPU

Referensi lainnya