Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Mengoptimalkan performa TensorFlow menggunakan Profiler

Gunakan fitur yang tersedia dengan Profiler untuk melacak performa model TensorFlow Anda. Lihat bagaimana model Anda bekerja pada host (CPU), perangkat (GPU), atau kombinasi dari host dan perangkat.

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

Panduan ini akan memandu Anda tentang cara memasang Profiler, berbagai alat yang tersedia, berbagai mode tentang cara Profiler mengumpulkan data kinerja, dan beberapa praktik terbaik yang disarankan untuk mengoptimalkan kinerja model.

Jika Anda ingin membuat profil performa model Anda di Cloud TPUs, lihat panduan Cloud TPU .

Instal prasyarat Profiler dan GPU

Instal Profiler dengan mendownload dan menjalankan script install_and_run.py dari repositori GitHub .

Untuk membuat profil di GPU, Anda harus:

  1. Instal CUDA® Toolkit 10.1 atau yang lebih baru. CUDA® Toolkit 10.1 hanya mendukung satu profil GPU. Untuk membuat profil beberapa GPU, lihat Membuat profil beberapa GPU . Pastikan bahwa versi driver CUDA® yang Anda instal setidaknya 440.33 untuk Linux atau 441.22 untuk Windows.
  2. Pastikan CUPTI ada di jalur:
 /sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH) | \
grep libcupti
 

Jika Anda tidak memiliki CUPTI di jalurnya, tambahkan direktori penginstalannya ke variabel lingkungan $LD_LIBRARY_PATH dengan menjalankan:

 export LD_LIBRARY_PATH=/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
 

Jalankan kembali perintah ldconfig atas untuk memverifikasi bahwa perpustakaan CUPTI ditemukan.

Profil beberapa GPU

TensorFlow saat ini mendukung beberapa profil GPU hanya untuk sistem host tunggal. Profil multi-GPU untuk sistem multi-host saat ini tidak didukung. Instal CUDA® Toolkit 10.2 atau yang lebih baru untuk membuat profil beberapa GPU. Karena TensorFlow hanya mendukung versi CUDA® Toolkit hingga 10.1, buat tautan simbolis ke libcudart.so.10.1 dan libcupti.so.10.1 .

 sudo ln -s /usr/local/cuda/lib64/libcudart.so.10.2 /usr/local/cuda/lib64/libcudart.so.10.1
sudo ln -s /usr/local/cuda/extras/CUPTI/lib64/libcupti.so.10.2 /usr/local/cuda/extras/CUPTI/lib64/libcupti.so.10.1
 

Untuk membuat profil konfigurasi GPU multi-pekerja, buat profil pekerja individu secara independen.

Selesaikan masalah hak istimewa

Saat Anda menjalankan pembuatan profil dengan CUDA® Toolkit 10.1 di lingkungan Docker atau di Linux, Anda mungkin mengalami masalah terkait dengan hak CUPTI yang tidak memadai ( CUPTI_ERROR_INSUFFICIENT_PRIVILEGES ). Lihat Dokumen Pengembang NVIDIA untuk mempelajari lebih lanjut tentang bagaimana Anda dapat menyelesaikan masalah ini di Linux.

Untuk mengatasi masalah hak istimewa CUPTI di lingkungan Docker, jalankan

 docker run option '--privileged=true'
 

Alat profiler

Akses Profiler dari tab Profile di TensorBoard yang muncul hanya setelah Anda mengambil beberapa data model.

Profiler memiliki pilihan alat untuk membantu analisis kinerja:

  • Halaman ikhtisar
  • Penganalisis pipa masukan
  • Statistik TensorFlow
  • Trace viewer
  • Statistik kernel GPU
  • Alat profil memori

Halaman ikhtisar

Halaman ikhtisar memberikan tampilan tingkat atas tentang kinerja model Anda selama menjalankan profil. Halaman tersebut menampilkan halaman ringkasan gabungan untuk host Anda dan semua perangkat, dan beberapa rekomendasi untuk meningkatkan performa pelatihan model Anda. Anda juga dapat memilih host individu di menu tarik-turun Host.

Halaman ikhtisar menampilkan data sebagai berikut:

gambar

  • Ringkasan kinerja - Menampilkan ringkasan tingkat tinggi dari kinerja model Anda. Ringkasan kinerja memiliki dua bagian:

    1. Rincian waktu langkah - Menguraikan waktu langkah rata-rata menjadi beberapa kategori tempat waktu dihabiskan:

      • Kompilasi - Waktu yang dihabiskan untuk menyusun kernel
      • Input - Waktu yang dihabiskan untuk membaca data input
      • Output - Waktu yang dihabiskan untuk membaca data output
      • Peluncuran kernel - Waktu yang dihabiskan oleh host untuk meluncurkan kernel
      • Menghosting waktu komputasi
      • Waktu komunikasi perangkat-ke-perangkat
      • Waktu komputasi di perangkat
      • Semua lainnya, termasuk overhead Python
    2. Presisi komputasi perangkat - Melaporkan persentase waktu komputasi perangkat yang menggunakan komputasi 16 dan 32-bit

  • Grafik waktu langkah - Menampilkan grafik waktu langkah perangkat (dalam milidetik) di semua langkah yang diambil sampelnya. Setiap langkah dipecah menjadi beberapa kategori (dengan warna berbeda) di mana waktu dihabiskan. Area merah menunjukkan porsi waktu langkah perangkat diam menunggu input data dari host. Area hijau menunjukkan berapa lama perangkat benar-benar berfungsi

  • 10 operasi TensorFlow teratas di perangkat - Menampilkan operasi di perangkat yang berjalan paling lama.

    Setiap baris menampilkan waktu mandiri operasi (sebagai persentase waktu yang dibutuhkan oleh semua operasi), waktu kumulatif, kategori, dan nama.

  • Lingkungan proses - Menampilkan ringkasan tingkat tinggi dari lingkungan proses model termasuk:

    • Jumlah host yang digunakan
    • Jenis perangkat (GPU / TPU)
    • Jumlah inti perangkat
  • Rekomendasi untuk langkah selanjutnya - Melaporkan ketika model terikat dengan input dan merekomendasikan alat yang dapat Anda gunakan untuk menemukan dan mengatasi hambatan kinerja model

Penganalisis pipa masukan

Saat program TensorFlow membaca data dari file, program tersebut dimulai di bagian atas grafik TensorFlow secara pipelined. Proses pembacaan dibagi menjadi beberapa tahap pengolahan data yang dihubungkan secara seri, dimana keluaran dari satu tahap adalah masukan ke tahap berikutnya. Sistem pembacaan data ini disebut pipa masukan .

Pipeline tipikal untuk membaca record dari file memiliki tahapan berikut:

  1. Pembacaan file
  2. File preprocessing (opsional)
  3. Transfer file dari host ke perangkat

Pipeline masukan yang tidak efisien dapat sangat memperlambat aplikasi Anda. Sebuah aplikasi dianggap masukan terikat ketika menghabiskan sebagian besar waktu dalam pipa masukan. Gunakan wawasan yang diperoleh dari penganalisis jalur input untuk memahami di mana jalur pipa input tidak efisien.

Penganalisis pipeline masukan segera memberi tahu Anda apakah program Anda terikat dengan masukan dan memandu Anda melalui analisis sisi perangkat dan host untuk men-debug kemacetan performa pada tahap mana pun dalam pipeline masukan.

Lihat panduan tentang performa pipeline input untuk mengetahui praktik terbaik yang direkomendasikan guna mengoptimalkan pipeline masukan data Anda.

Dasbor saluran masukan

Untuk membuka input pipeline analyzer, pilih Profile , lalu pilih input_pipeline_analyzer dari menu dropdown Tools .

gambar

Dasbor berisi tiga bagian:

  1. Ringkasan - Meringkas pipeline input keseluruhan dengan informasi apakah aplikasi Anda terikat input dan, jika demikian, seberapa banyak
  2. Analisis sisi perangkat - Menampilkan hasil analisis sisi perangkat yang mendetail, termasuk waktu langkah perangkat dan rentang waktu perangkat yang dihabiskan menunggu data input di seluruh inti di setiap langkah
  3. Analisis sisi host - Menampilkan analisis mendetail di sisi host, termasuk perincian waktu pemrosesan input pada host

Ringkasan masukan pipeline

Ringkasan melaporkan jika program Anda terikat dengan input dengan menyajikan persentase waktu perangkat yang dihabiskan untuk menunggu input dari host. Jika Anda menggunakan pipeline masukan standar yang telah diinstrumentasi, alat akan melaporkan tempat sebagian besar waktu pemrosesan masukan dihabiskan.

Analisis sisi perangkat

Analisis sisi perangkat memberikan wawasan tentang waktu yang dihabiskan di perangkat versus di host dan berapa banyak waktu perangkat yang dihabiskan untuk menunggu data input dari host.

  1. Waktu langkah diplotkan terhadap nomor langkah - Menampilkan grafik waktu langkah perangkat (dalam milidetik) di semua langkah yang diambil sampelnya. Setiap langkah dipecah menjadi beberapa kategori (dengan warna berbeda) di mana waktu dihabiskan. Area merah menunjukkan porsi waktu langkah perangkat diam menunggu input data dari host. Area hijau menunjukkan berapa lama perangkat benar-benar berfungsi
  2. Statistik waktu langkah - Melaporkan rata-rata, deviasi standar, dan rentang ([minimum, maksimum]) waktu langkah perangkat

Analisis sisi tuan rumah

Analisis sisi host melaporkan perincian waktu pemrosesan input (waktu yang dihabiskan untuk tf.data API tf.data ) pada host menjadi beberapa kategori:

  • Membaca data dari file sesuai permintaan - Waktu yang dihabiskan untuk membaca data dari file tanpa caching, prefetching, dan interleaving
  • Membaca data dari file sebelumnya - Waktu yang dihabiskan untuk membaca file, termasuk caching, prefetching, dan interleaving
  • Data preprocessing - Waktu yang dihabiskan untuk operasi preprocessing, seperti dekompresi gambar
  • Mengantrekan data untuk ditransfer ke perangkat - Waktu yang dihabiskan untuk memasukkan data ke antrean pengisian sebelum mentransfer data ke perangkat

Perluas Statistik Operasi Input untuk melihat statistik operasi input individu dan kategorinya yang dikelompokkan berdasarkan waktu eksekusi.

gambar

Tabel data sumber muncul dengan setiap entri yang berisi informasi berikut:

  1. Input Op - Menampilkan nama op TensorFlow dari op input
  2. Count - Menampilkan jumlah total dari eksekusi op selama periode pembuatan profil
  3. Total Waktu (dalam md) - Menunjukkan jumlah kumulatif waktu yang dihabiskan untuk masing-masing instance tersebut
  4. Total Waktu% - Menampilkan total waktu yang dihabiskan untuk operasi sebagai bagian dari total waktu yang dihabiskan dalam pemrosesan input
  5. Total Waktu Mandiri (dalam md) - Menampilkan jumlah kumulatif waktu mandiri yang dihabiskan untuk masing-masing contoh tersebut. Waktu mandiri di sini mengukur waktu yang dihabiskan di dalam badan fungsi, tidak termasuk waktu yang dihabiskan dalam fungsi yang dipanggilnya.
  6. Total Waktu Mandiri% . Menunjukkan total waktu mandiri sebagai bagian dari total waktu yang dihabiskan untuk pemrosesan masukan
  7. Kategori . Menunjukkan kategori pemrosesan dari operasi masukan

Statistik TensorFlow

Fitur TensorFlow Stats menampilkan performa setiap operasi (op) TensorFlow yang dijalankan pada host atau perangkat selama sesi pembuatan profil.

gambar

Alat ini menampilkan informasi kinerja dalam dua panel:

  • Panel atas menampilkan hingga empat diagram lingkaran:

    1. Distribusi waktu eksekusi sendiri dari setiap operasi di host
    2. Distribusi waktu eksekusi sendiri dari setiap jenis operasi di host
    3. Distribusi waktu eksekusi sendiri dari setiap operasi di perangkat
    4. Distribusi waktu eksekusi sendiri dari setiap jenis operasi di perangkat
  • Panel bawah menampilkan tabel yang melaporkan data tentang operasi TensorFlow dengan satu baris untuk setiap operasi dan satu kolom untuk setiap jenis data (urutkan kolom dengan mengklik judul kolom). Klik tombol Ekspor sebagai CSV di sisi kanan panel atas untuk mengekspor data dari tabel ini sebagai file CSV.

    Perhatikan bahwa:

    • Jika ada operasi yang memiliki operasi anak:

      • Total waktu "terakumulasi" dari sebuah operasi termasuk waktu yang dihabiskan di dalam operasi turunan

      • Total waktu "sendiri" dari sebuah operasi tidak termasuk waktu yang dihabiskan di dalam operasi turunan

    • Jika sebuah op dijalankan pada host:

      • Persentase total waktu mandiri di perangkat yang dilakukan oleh operasi akan menjadi 0
      • Persentase kumulatif dari total waktu mandiri di perangkat hingga dan termasuk operasi ini akan menjadi 0
    • Jika sebuah operasi dijalankan di perangkat:

      • Persentase total waktu mandiri di host yang dilakukan oleh operasi ini akan menjadi 0
      • Persentase kumulatif dari total waktu mandiri pada host hingga dan termasuk operasi ini akan menjadi 0

Anda dapat memilih untuk menyertakan atau mengecualikan waktu Idle di diagram lingkaran dan tabel.

Trace viewer

Penampil jejak menampilkan garis waktu yang menunjukkan:

  • Durasi operasi yang dijalankan oleh model TensorFlow Anda
  • Bagian mana dari sistem (host atau perangkat) yang menjalankan operasi. Biasanya, host menjalankan operasi masukan, memproses data pelatihan sebelumnya dan mentransfernya ke perangkat, sementara perangkat menjalankan pelatihan model yang sebenarnya

Penampil jejak memungkinkan Anda mengidentifikasi masalah kinerja dalam model Anda, kemudian mengambil langkah untuk mengatasinya. Misalnya, pada tingkat tinggi, Anda dapat mengidentifikasi apakah pelatihan model atau input menghabiskan sebagian besar waktu. Mendalami, Anda dapat mengidentifikasi operasi mana yang membutuhkan waktu paling lama untuk dieksekusi. Perhatikan bahwa penampil jejak dibatasi hingga 1 juta acara per perangkat.

Antarmuka penampil jejak

Saat Anda membuka penampil jejak, itu muncul menampilkan proses terbaru Anda:

gambar

Layar ini berisi elemen utama berikut:

  1. Panel Timeline - Menunjukkan operasi yang dijalankan perangkat dan host dari waktu ke waktu
  2. Panel detail - Menampilkan informasi tambahan untuk operasi yang dipilih di panel Timeline

Panel Timeline berisi elemen-elemen berikut:

  1. Bilah atas - Berisi berbagai kontrol tambahan
  2. Sumbu waktu - Menampilkan waktu relatif terhadap awal jejak
  3. Label bagian dan track - Setiap bagian berisi beberapa track dan memiliki segitiga di sebelah kiri yang dapat Anda klik untuk memperluas dan menciutkan bagian tersebut. Ada satu bagian untuk setiap elemen pemrosesan dalam sistem
  4. Alat pemilih - Berisi berbagai alat untuk berinteraksi dengan penampil jejak seperti Zoom, Pan, Pilih, dan Waktu. Gunakan alat Timing untuk menandai interval waktu.
  5. Peristiwa - Ini menunjukkan waktu selama operasi dijalankan atau durasi peristiwa meta, seperti langkah-langkah pelatihan
Bagian dan trek

Penampil jejak berisi bagian-bagian berikut:

  • Satu bagian untuk setiap node perangkat , diberi label dengan nomor chip perangkat dan node perangkat di dalam chip (misalnya, /device:GPU:0 (pid 0) ). Setiap bagian node perangkat berisi trek berikut:
    • Langkah - Menampilkan durasi langkah pelatihan yang sedang berjalan di perangkat
    • Operasi TensorFlow - . Menunjukkan operasi yang dijalankan di perangkat
    • XLA Ops - Menampilkan operasi XLA (ops) yang berjalan di perangkat jika XLA adalah compiler yang digunakan (setiap op TensorFlow diterjemahkan ke dalam satu atau beberapa ops XLA. Compiler XLA menerjemahkan ops XLA menjadi kode yang berjalan di perangkat).
  • Satu bagian untuk thread yang berjalan pada CPU mesin host, berlabel "Host Threads" . Bagian ini berisi satu track untuk setiap thread CPU. Perhatikan bahwa Anda dapat mengabaikan informasi yang ditampilkan di samping label bagian.
Acara

Peristiwa dalam garis waktu ditampilkan dalam berbagai warna; warna itu sendiri tidak memiliki arti khusus.

Penampil jejak juga dapat menampilkan jejak panggilan fungsi Python dalam program TensorFlow Anda. Jika Anda menggunakan API tf.profiler.experimental.start() , Anda bisa mengaktifkan pelacakan Python dengan menggunakan ProfilerOptions bernamatuple saat memulai pembuatan profil. Alternatifnya, jika Anda menggunakan mode pengambilan sampel untuk pembuatan profil, Anda dapat memilih tingkat penelusuran dengan menggunakan opsi tarik-turun dalam dialog Capture Profile .

gambar

Statistik kernel GPU

Alat ini menunjukkan statistik kinerja dan operasi asal untuk setiap kernel yang dipercepat GPU.

gambar

Alat ini menampilkan informasi dalam dua panel:

  • Panel atas menampilkan diagram lingkaran yang menampilkan kernel CUDA yang memiliki total waktu berlalu tertinggi

  • Panel bawah menampilkan tabel dengan data berikut untuk setiap pasangan operasi kernel yang unik:

    • Peringkat dalam urutan menurun dari total durasi GPU yang berlalu yang dikelompokkan berdasarkan pasangan operasi kernel
    • Nama kernel yang diluncurkan
    • Jumlah register GPU yang digunakan oleh kernel
    • Ukuran total memori bersama (statis + dinamis bersama) yang digunakan dalam byte
    • Dimensi blok dinyatakan sebagai blockDim.x, blockDim.y, blockDim.z
    • Dimensi kisi dinyatakan sebagai gridDim.x, gridDim.y, gridDim.z
    • Apakah operasi memenuhi syarat untuk menggunakan TensorCores
    • Apakah kernel berisi instruksi TensorCore
    • Nama operasi yang meluncurkan kernel ini
    • Jumlah kemunculan pasangan kernel-op ini
    • Total waktu GPU yang berlalu dalam mikrodetik
    • Rata-rata waktu GPU yang berlalu dalam mikrodetik
    • Waktu GPU minimum yang berlalu dalam mikrodetik
    • Waktu GPU maksimum yang berlalu dalam mikrodetik

Alat profil memori

Alat Profil Memori memantau penggunaan memori host atau perangkat Anda selama interval pembuatan profil. Anda dapat menggunakan alat ini untuk:

  • Debug masalah kehabisan memori (OOM) dengan menunjukkan penggunaan memori puncak dan alokasi memori yang sesuai ke operasi TensorFlow. Anda juga dapat men-debug masalah OOM yang mungkin muncul saat Anda menjalankan inferensi multi-tenancy
  • Debug masalah fragmentasi memori

Alat profil memori menampilkan data dalam tiga bagian:

  1. Ringkasan Profil Memori
  2. Grafik Garis Waktu Memori
  3. Tabel Rincian Memori

Ringkasan profil memori

Bagian ini menampilkan ringkasan level tinggi dari profil memori program TensorFlow Anda seperti yang ditunjukkan di bawah ini:

Ringkasan profil memori memiliki enam bidang:

  1. ID Memori - Dropdown yang mencantumkan semua sistem memori yang tersedia (host dan perangkat). Pilih sistem memori yang ingin Anda lihat dari dropdown. Perhatikan bahwa host terdaftar sebagai gpu_host_bfc
  2. #Allocation - Jumlah alokasi memori yang dibuat selama interval pembuatan profil
  3. #Deallocation - Jumlah deallocations memori dalam interval pembuatan profil
  4. Kapasitas Memori - Total kapasitas (dalam GiB) dari sistem memori yang Anda pilih
  5. Peak Heap Usage - Penggunaan memori puncak (dalam GiB) sejak model mulai berjalan
  6. Penggunaan Memori Puncak - Penggunaan memori puncak (dalam GiB) dalam interval pembuatan profil. Bidang ini berisi sub-bidang berikut:
    1. Timestamp - Stempel waktu saat penggunaan memori puncak terjadi di Grafik Garis Waktu
    2. Stack Reservation - Jumlah memori yang dicadangkan di stack (dalam GiB)
    3. Heap Allocation - Jumlah memori yang dialokasikan di heap (dalam GiB)
    4. Memori Bebas - Jumlah memori bebas (dalam GiB). Kapasitas Memori adalah jumlah total dari Reservasi Stack, Alokasi Heap, dan Memori Gratis
    5. Fragmentasi - Persentase fragmentasi (lebih rendah lebih baik). Ini dihitung sebagai persentase dari (1 - Ukuran bagian terbesar dari memori bebas / Total memori bebas)

Grafik garis waktu memori

Bagian ini menampilkan plot penggunaan memori (dalam GiB) dan persentase fragmentasi terhadap waktu (dalam ms).

gambar

Sumbu X mewakili garis waktu (dalam md) dari interval pembuatan profil. Sumbu Y di sebelah kiri mewakili penggunaan memori (dalam GiB) dan sumbu Y di sebelah kanan mewakili persentase fragmentasi. Pada setiap titik waktu pada sumbu X, total memori dipecah menjadi tiga kategori: stack (merah), heap (oranye), dan free (hijau). Arahkan kursor ke atas stempel waktu tertentu untuk melihat detail tentang alokasi memori / peristiwa deallocation pada saat itu seperti di bawah ini:

gambar

Jendela pop-up menampilkan informasi berikut:

  • timestamp (md) - Lokasi acara yang dipilih di garis waktu
  • acara - Jenis acara (alokasi atau deallocation)
  • request_size (GiBs) - Jumlah memori yang diminta. Ini akan menjadi angka negatif untuk acara deallocation
  • alokasi_size (GiBs) - Jumlah sebenarnya dari memori yang dialokasikan. Ini akan menjadi angka negatif untuk peristiwa deallocation
  • tf_op - Operasi TensorFlow yang meminta alokasi / deallocation
  • step_id - Langkah pelatihan tempat peristiwa ini terjadi
  • region_type - Jenis entitas data yang mengalokasikan memori ini. Nilai yang mungkin adalah temp untuk temporaries, output untuk aktivasi dan gradien, dan persist / dynamic untuk bobot dan konstanta
  • data_type - Jenis elemen tensor (misalnya, uint8 untuk integer 8-bit unsigned)
  • tensor_shape - Bentuk tensor yang dialokasikan / dialokasikan
  • memory_in_use (GiBs) - Total memori yang digunakan pada saat ini

Tabel rincian memori

Tabel ini menunjukkan alokasi memori aktif pada titik penggunaan memori puncak dalam interval pembuatan profil.

gambar

Ada satu baris untuk setiap Operasi TensorFlow dan setiap baris memiliki kolom berikut:

  • Nama Operasi - Nama operasi TensorFlow
  • Allocation Size (GiBs) - Jumlah total memori yang dialokasikan untuk operasi ini
  • Ukuran yang Diminta (GiB) - Jumlah total memori yang diminta untuk operasi ini
  • Occurrences - Jumlah alokasi untuk operasi ini
  • Tipe wilayah - Tipe entitas data untuk alokasi memori ini. Nilai yang memungkinkan adalah temp untuk temporaries, output untuk aktivasi dan gradien, dan persist / dynamic untuk bobot dan konstanta
  • Tipe data - Tipe elemen tensor
  • Bentuk - Bentuk tensor yang dialokasikan

Kumpulkan data kinerja

TensorFlow Profiler mengumpulkan aktivitas host dan jejak GPU dari model TensorFlow Anda. Anda dapat mengonfigurasi Profiler untuk mengumpulkan data performa baik melalui mode terprogram atau mode pengambilan sampel.

Profiling API

Anda dapat menggunakan API berikut untuk melakukan pembuatan profil.

 # 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])
 
 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 saat diminta menggunakan tf.profiler.experimental.server.start() untuk memulai server gRPC dengan menjalankan model TensorFlow Anda. Setelah memulai server gRPC dan menjalankan model Anda, Anda dapat mengambil profil melalui tombol Capture Profile di plugin profil TensorBoard. Gunakan skrip di bagian Instal profiler di atas untuk meluncurkan instance TensorBoard jika belum berjalan.

    Sebagai contoh,

 # Start a gRPC server at port 6009
tf.profiler.experimental.server.start(6009)
# ... TensorFlow program ...
 

Gunakan dialog Capture Profile untuk menentukan:

  • URL Layanan profil atau nama TPU
  • Durasi pembuatan profil
  • Tingkat pelacakan panggilan fungsi perangkat, host, dan fungsi Python
  • Berapa kali Anda ingin Profiler mencoba mengambil kembali profil jika tidak berhasil pada awalnya

Membuat profil loop pelatihan khusus

Untuk membuat profil loop pelatihan khusus dalam kode TensorFlow Anda, lengkapi loop pelatihan dengan tf.profiler.experimental.Trace API untuk menandai batas langkah untuk Profiler. Argumen name digunakan sebagai awalan untuk nama langkah, argumen kata kunci step_num ditambahkan dalam nama langkah, dan argumen kata kunci _r membuat peristiwa jejak ini diproses sebagai peristiwa langkah oleh Profiler.

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)
 

Ini akan mengaktifkan analisis performa berbasis langkah Profiler dan menyebabkan peristiwa langkah tersebut muncul di penampil jejak.

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

Potongan kode di bawah ini 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 dalam empat sumbu berbeda. Beberapa kombinasi saat ini didukung dan yang lainnya akan ditambahkan di 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 profil dipanggil pada mesin yang sama dengan yang dijalankan model Anda, misalnya, stasiun kerja lokal dengan GPU. Dalam pembuatan profil jarak jauh, API profiling dipanggil pada mesin yang berbeda dari tempat model Anda dieksekusi, misalnya, pada Cloud TPU.
  • Membuat profil beberapa pekerja: Anda dapat membuat profil beberapa mesin saat menggunakan kemampuan pelatihan TensorFlow yang didistribusikan.
  • Platform hardware: Profil CPU, GPU, dan TPU.

Tabel di bawah ini adalah ringkasan singkat kasus penggunaan mana di atas yang didukung oleh berbagai API pembuatan profil di TensorFlow 2.3:

Profiling API Lokal Terpencil Banyak pekerja Platform Perangkat Keras
TensorBoard Keras Callback Didukung Tidak didukung Tidak didukung CPU, GPU
API Fungsi tf.experimental.profiler Didukung Tidak didukung Tidak didukung CPU, GPU
API pengelola konteks Didukung Tidak didukung Tidak didukung CPU, GPU
API sesuai permintaan Tidak didukung Didukung Dukungan Terbatas CPU, GPU, TPU

Praktik terbaik untuk kinerja model yang optimal

Gunakan rekomendasi berikut sebagaimana berlaku untuk model TensorFlow Anda untuk mencapai performa yang optimal.

Secara umum, lakukan semua transformasi pada perangkat dan pastikan Anda menggunakan versi terbaru pustaka yang kompatibel seperti cuDNN dan Intel MKL untuk platform Anda.

Optimalkan pipeline data masukan

Pipeline input data yang efisien dapat secara drastis meningkatkan kecepatan eksekusi model Anda dengan mengurangi waktu idle perangkat. Pertimbangkan untuk menggabungkan praktik terbaik berikut seperti yang dijelaskan di sini untuk membuat pipeline input data Anda lebih efisien:

  • Ambil data lebih dulu
  • Paralelkan ekstraksi data
  • Memparalelkan transformasi data
  • Cache data dalam memori
  • Membuat vektor fungsi yang ditentukan pengguna
  • Kurangi penggunaan memori saat menerapkan transformasi

Selain itu, coba jalankan model Anda dengan data sintetis untuk memeriksa apakah pipeline input merupakan penghambat performa.

Tingkatkan kinerja perangkat

  • Tingkatkan ukuran batch mini pelatihan (jumlah sampel pelatihan yang digunakan per perangkat dalam satu iterasi loop pelatihan)
  • Gunakan TF Stats untuk mengetahui seberapa efisien operasi di perangkat dijalankan
  • Gunakan tf.function untuk melakukan perhitungan dan opsional, memungkinkan experimental_compile bendera
  • Minimalkan operasi Python host di antara langkah-langkah dan kurangi callback. Hitung metrik setiap beberapa langkah, bukan di setiap langkah
  • Buat unit komputasi perangkat sibuk
  • Kirim data ke beberapa perangkat secara paralel
  • Optimalkan tata letak data untuk lebih memilih saluran terlebih dahulu (mis. NCHW daripada NHWC). GPU tertentu seperti NVIDIA® V100 bekerja lebih baik dengan tata letak data NHWC.
  • Pertimbangkan untuk menggunakan representasi numerik 16-bit seperti fp16 , format titik mengambang setengah presisi yang ditentukan oleh IEEE atau format bfloat16 titik mengambang Brain
  • Pertimbangkan untuk menggunakan API presisi campuran Keras
  • Saat melatih GPU, gunakan TensorCore. Kernel GPU menggunakan TensorCore jika presisi adalah fp16 dan dimensi input / output dapat dibagi 8 atau 16 (untuk int8)

Sumber daya tambahan