Profiler'ı kullanarak TensorFlow performansını optimize edin

Bu kılavuz, TensorFlow modellerinizin performansını izlemek için TensorFlow Profiler'da bulunan araçların nasıl kullanılacağını gösterir. Modelinizin ana bilgisayarda (CPU), aygıtta (GPU) veya hem ana bilgisayar hem de aygıt(lar)ın birleşiminde nasıl performans gösterdiğini öğreneceksiniz.

Profil oluşturma, modelinizdeki çeşitli TensorFlow işlemlerinin (ops) donanım kaynak tüketimini (zaman ve bellek) anlamanıza ve performans darboğazlarını çözmenize ve nihayetinde modelin daha hızlı çalışmasını sağlamaya yardımcı olur.

Bu kılavuz, Profiler'ın nasıl kurulacağı, mevcut çeşitli araçlar, Profiler'ın performans verilerini nasıl topladığına ilişkin farklı modlar ve model performansını optimize etmek için önerilen bazı en iyi uygulamalar konusunda size yol gösterecektir.

Cloud TPU üzerinde modeli performans profili istiyorsanız, bakın Bulut TPU rehber .

Profiler ve GPU ön koşullarını yükleyin

TensorBoard için Profiler eklentisini pip ile yükleyin. Profiler'ın TensorFlow ve TensorBoard'un en son sürümlerini gerektirdiğini unutmayın (>=2.2).

pip install -U tensorboard_plugin_profile

GPU'da profil oluşturmak için şunları yapmalısınız:

  1. Tanışma listelenen NVIDIA® GPU sürücüleri ve CUDA® Toolkit gereksinimleri TensorFlow GPU desteği yazılım gereksinimleri .
  2. Emin olun NVIDIA® CUDA® profil Araçları Arabirimi (CUPTI) yolu üzerinde var:

    /sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH) | \
    grep libcupti
    

Eğer yolda CUPTI yoksa, onun kurulum dizini prepend $LD_LIBRARY_PATH çalıştırarak ortam değişkeni:

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

Ardından, koşmak ldconfig CUPTI kütüphanesi bulunduğunu doğrulamak için yukarıdaki komutu tekrar.

Ayrıcalık sorunlarını çözün

Bir Docker ortamında veya Linux CUDA® Toolkit ile profilleme çalıştırdığınızda, yetersiz CUPTI ayrıcalıkları (ilgili sorunlarla karşılaşabilir CUPTI_ERROR_INSUFFICIENT_PRIVILEGES ). Git NVIDIA Geliştirici Dokümanlar Linux üzerinde bu sorunların çözülmesini sağlayabilir hakkında daha fazla bilgi için.

Bir Docker ortamında CUPTI ayrıcalık sorunlarını çözmek için şunu çalıştırın:

docker run option '--privileged=true'

Profil oluşturucu araçları

Bazı model verileri ele geçirdi sonra görünür TensorBoard Profil sekmesinden gelen Profiler erişin.

Profiler, performans analizine yardımcı olacak çeşitli araçlara sahiptir:

  • Genel Bakış Sayfası
  • Giriş Boru Hattı Analizörü
  • TensorFlow İstatistikleri
  • İz Görüntüleyici
  • GPU Çekirdeği İstatistikleri
  • Bellek Profili Aracı
  • Pod Görüntüleyici

Genel bakış sayfası

Genel bakış sayfası, bir profil çalıştırması sırasında modelinizin nasıl performans gösterdiğine dair üst düzey bir görünüm sağlar. Sayfa, ana makineniz ve tüm cihazlar için toplu bir genel bakış sayfası ve model eğitim performansınızı iyileştirmeye yönelik bazı öneriler gösterir. Ayrıca Ana Bilgisayar açılır menüsünden ayrı ana bilgisayarları da seçebilirsiniz.

Genel bakış sayfası verileri aşağıdaki gibi görüntüler:

resim

  • Performans Özeti: görüntüler Modeliniz performansının üst düzey bir özet. Performans özeti iki bölümden oluşur:

    1. Adım-zaman dökümü: Ortalama adım süresini, zamanın harcandığı birden çok kategoriye ayırır:

      • Derleme: Çekirdekleri derlemek için harcanan zaman.
      • Giriş: Giriş verilerini okumak için harcanan zaman.
      • Çıktı: Çıktı verilerini okumak için harcanan zaman.
      • Çekirdek başlatma: Ana bilgisayar tarafından çekirdekleri başlatmak için harcanan süre
      • Ana bilgisayar hesaplama zamanı..
      • Cihazdan cihaza iletişim süresi.
      • Cihazda işlem süresi.
      • Python ek yükü dahil diğerleri.
    2. Aygıt hesaplama kesinlikleri - 16 ve 32 bit hesaplamaları kullanan aygıt hesaplama süresinin yüzdesini bildirir.

  • Aşama zamanlı Grafik: örneklenen tüm adımda gösterir (milisaniye olarak) adımında, cihaz bir zaman grafiğidir. Her adım, zamanın harcandığı birden fazla kategoriye (farklı renklerle) bölünür. Kırmızı alan, cihazların ana bilgisayardan giriş verilerini beklerken boşta oturdukları adım süresinin kısmına karşılık gelir. Yeşil alan, cihazın gerçekte ne kadar süre çalıştığını gösterir.

  • Cihazda Top 10 TensorFlow işlemleri (örneğin GPU): görüntüler en uzun koştu Cihazdaki ops.

    Her satır, bir operasyonun kendi zamanını (tüm operasyonlar tarafından geçen sürenin yüzdesi olarak), kümülatif zamanı, kategoriyi ve adı görüntüler.

  • Çalışma Ortamı: görüntüler dahil Model Çalışması ortamının üst düzey özet:

    • Kullanılan ana bilgisayar sayısı.
    • Cihaz tipi (GPU/TPU).
    • Cihaz çekirdeği sayısı.
  • Sonraki Adım şekli: Bir model girdi bağlı olduğunu ve araçları önerir Raporlar zaman bulup çözmek modeli performans darboğazları için kullanabilirsiniz.

Giriş boru hattı analizörü

Bir TensorFlow programı bir dosyadan veri okuduğunda, ardışık düzende TensorFlow grafiğinin en üstünde başlar. Okuma işlemi, bir aşamanın çıktısının bir sonraki aşamanın girişi olduğu, seri olarak bağlanmış birden çok veri işleme aşamasına bölünmüştür. Okuma Bu veri sistem giriş boru hattı denir.

Dosyalardan kayıtları okumak için tipik bir ardışık düzen aşağıdaki aşamalara sahiptir:

  1. Dosya okuma.
  2. Dosya ön işleme (isteğe bağlı).
  3. Ana bilgisayardan cihaza dosya aktarımı.

Verimsiz bir girdi işlem hattı, uygulamanızı ciddi şekilde yavaşlatabilir. Bir uygulama bu giriş boru hattında zaman önemli bir bölümünü geçirdiği zaman giriş bağlı olarak kabul edilir. Giriş işlem hattının nerede verimsiz olduğunu anlamak için giriş işlem hattı çözümleyicisinden elde edilen bilgileri kullanın.

Giriş işlem hattı çözümleyicisi, programınızın girişe bağlı olup olmadığını hemen söyler ve giriş işlem hattının herhangi bir aşamasında performans darboğazlarında hata ayıklamak için cihaz ve ana bilgisayar tarafı analizinde size yol gösterir.

Veri girişi işlem hatlarınızı optimize etmek için önerilen en iyi uygulamalar için giriş işlem hattı performansına ilişkin kılavuzu kontrol edin.

Giriş hattı kontrol paneli

Giriş boru hattı analizörü seçeneğini Profili açmak için, Araçlar açılır menüden input_pipeline_analyzer seçin.

resim

Kontrol paneli üç bölüm içerir:

  1. Özet: ne kadar tarafından, eğer öyleyse, uygulamanız girişi bağlı olup olmadığına bilgilerle genel giriş hattını özetler ve.
  2. Cihaz tarafındaki analiz: detaylı görüntüler, cihaz adım zaman ve her aşamada çekirdek arasında veri girişi için bekleyen harcanan cihaz zaman aralığında içeren cihaz tarafındaki analiz sonuçları.
  3. Sunucu tarafı analizi: Gösteriler ana bilgisayarda giriş işlem süresi dökümünü içeren konak tarafında detaylı analizi.

Giriş hattı özeti

Programınız ana bilgisayardan giriş beklemeden harcanan cihaz yüzdesini sunarak bağlı giriş ise Özeti bildirir. Enstrümantasyon yapılmış standart bir girdi ardışık düzeni kullanıyorsanız araç, girdi işleme süresinin çoğunun nerede harcandığını bildirir.

Cihaz tarafı analizi

Cihaz tarafı analizi, cihazda ana bilgisayarda harcanan süreye ve ana bilgisayardan giriş verilerini beklerken ne kadar cihaz süresi harcandığına ilişkin bilgiler sağlar.

  1. Aşama zaman basamağı numarası karşı çizilen: örneklenen tüm adımda gösterir (milisaniye olarak) adımında, cihaz bir zaman grafiğidir. Her adım, zamanın harcandığı birden fazla kategoriye (farklı renklerle) bölünür. Kırmızı alan, cihazların ana bilgisayardan giriş verilerini beklerken boşta oturdukları adım süresinin kısmına karşılık gelir. Yeşil alan, cihazın gerçekte ne kadar süre çalıştığını gösterir.
  2. Adım süresi istatistikleri: Cihaz aşaması zaman ortalama, standart sapma Reports, ve aralık ([minimum, maksimum]).

Ana bilgisayar tarafı analizi

Konak tarafı analizi giriş işlem süresi (harcanan zamanın bir dökümünü bildiriyor tf.data çeşitli kategoriler halinde ana bilgisayarda API ops):

  • Talep üzerine dosyalardan veri okuma: Zaman, önbelleğe alma olmadan dosyalardan veri okuma ön yükleme ve serpiştirilmesi üzerine geçirdi.
  • Önceden dosyalardan veri okuma: Zaman, önbelleğe alma dahil ön yükleme ve serpiştirilmesi, dosyaları okuma geçirdi.
  • Veri önişleme: Zaman böyle görüntü dekompresyon olarak ön işleme operasyonları, harcanan.
  • Enqueuing veri cihazına aktarılacak Zaman cihaza veri aktarmadan önce bir besleme sıraya verileri koyarak geçirdi.

Yürütme zaman göre ayrılmış, bağımsız bir giriş ops istatistikleri ve kategoriler incelemek için giriş Op İstatistik Expand.

resim

Aşağıdaki bilgileri içeren her girişle birlikte bir kaynak veri tablosu görünecektir:

  1. Girdi Op: Gösteriler giriş op TensorFlow op ismi.
  2. Sayısı: gösterir op yürütme örneklerin toplam sayısı profil döneminde.
  3. (Ms) Toplam Süre: bu örnekleri her zaman dikkate kümülatif toplamını gösterir.
  4. Toplam Süre:% Gösteriler giriş işlemlerinde harcanan toplam zamanın bir kesir olarak bir op harcanan toplam süreyi.
  5. (Ms) Toplam Öz Zaman: bu örnekleri her harcanan öz zamanın kümülatif toplamını gösterir. Buradaki self time, çağırdığı fonksiyonda harcanan zaman hariç, fonksiyon gövdesi içinde harcanan zamanı ölçer.
  6. Toplam Öz Zaman%. Toplam kendi kendine süreyi, girdi işlemeye harcanan toplam sürenin bir bölümü olarak gösterir.
  7. Kategori. Giriş işleminin işleme kategorisini gösterir.

TensorFlow istatistikleri

TensorFlow İstatistikleri aracı, bir profil oluşturma oturumu sırasında ana bilgisayar veya cihazda yürütülen her TensorFlow işleminin (op) performansını görüntüler.

resim

Araç, performans bilgilerini iki bölmede görüntüler:

  • Üst bölmede dört adede kadar pasta grafiği görüntülenir:

    1. Ana bilgisayardaki her işlemin kendi kendine yürütme süresinin dağılımı.
    2. Ana bilgisayardaki her op türünün kendi kendine yürütme süresinin dağılımı.
    3. Cihazdaki her işlemin kendi kendine yürütme süresinin dağılımı.
    4. Cihazdaki her op türünün kendi kendine yürütme süresinin dağılımı.
  • Alt bölmede, her işlem için bir satır ve her veri türü için bir sütun (sütun başlığına tıklayarak sütunları sıralayın) ile TensorFlow işlemleriyle ilgili verileri rapor eden bir tablo gösterilir. CSV dosyası olarak bu tablodan veri vermek için üst bölmede sağ tarafında İhracat CSV olarak düğmesini tıklayın.

    Dikkat:

    • Herhangi bir operasyonun alt operasyonları varsa:

      • Bir operasyonun toplam "birikmiş" süresi, alt operasyonlarda harcanan zamanı içerir.

      • Bir operasyonun toplam "self" süresi, alt operasyonlarda harcanan zamanı içermez.

    • Ana bilgisayarda bir işlem yürütülürse:

      • Op on tarafından yapılan cihazdaki toplam kendi kendine zamanın yüzdesi 0 olacaktır.
      • Bu operasyona kadar ve bu operasyon dahil olmak üzere cihazdaki toplam kendi kendine zamanın kümülatif yüzdesi 0 olacaktır.
    • Cihazda bir işlem yürütülürse:

      • Bu operasyonun ana bilgisayardaki toplam kendi kendine zaman yüzdesi 0 olacaktır.
      • Bu operasyona kadar ve bu operasyon dahil olmak üzere ana bilgisayarda toplam kendi kendine zamanın kümülatif yüzdesi 0 olacaktır.

Pasta grafiklere ve tabloya Boşta kalma süresini dahil etmeyi veya hariç tutmayı seçebilirsiniz.

İz görüntüleyici

İz görüntüleyici şunları gösteren bir zaman çizelgesi görüntüler:

  • TensorFlow modeliniz tarafından yürütülen operasyonların süreleri
  • Sistemin hangi bölümü (ana bilgisayar veya cihaz) bir işlemi yürütür. Tipik olarak, ana bilgisayar giriş işlemlerini yürütür, eğitim verilerini önceden işler ve cihaza aktarırken, cihaz gerçek model eğitimini yürütür.

İz görüntüleyici, modelinizdeki performans sorunlarını belirlemenize ve ardından bunları çözmek için adımlar atmanıza olanak tanır. Örneğin, yüksek düzeyde, zamanın çoğunu girdi eğitiminin mi yoksa model eğitiminin mi aldığını belirleyebilirsiniz. Detaya inerek, hangi operasyonların yürütülmesinin en uzun sürdüğünü belirleyebilirsiniz. İz görüntüleyicinin cihaz başına 1 milyon olayla sınırlı olduğunu unutmayın.

İz görüntüleyici arayüzü

İz görüntüleyiciyi açtığınızda, en son çalıştırmanızı görüntüleyen görünür:

resim

Bu ekran aşağıdaki ana öğeleri içerir:

  1. Zaman Çizelgesi bölmesi: Gösteriler ops o cihazı ve zamanla yürütülen konak.
  2. Ayrıntılar bölmesinde: Timeline bölmede seçilen operasyonlar için gösterir ek bilgiler.

Zaman Çizelgesi bölmesi aşağıdaki öğeleri içerir:

  1. Üst çubuğu: çeşitli yardımcı kontroller içerir.
  2. Zaman ekseni: iz başlangıcına gösterir zaman göreceli.
  3. Bölüm ve parça etiketler: Her bölüm birden fazla parçayı içerir ve genişletmek ve bölüm daraltmak için tıklayabilirsiniz o solda bir üçgen vardır. Sistemdeki her işleme elemanı için bir bölüm vardır.
  4. Aracı seçici: Zoom, Pan, Select ve Zamanlama olarak iz görüntüleyici ile etkileşim için çeşitli araçlar içerir. Bir zaman aralığını işaretlemek için Zamanlama aracını kullanın.
  5. Olaylar: Bunlar op çalıştırıldı süreyi veya eğitim adımlar gibi meta olaylar, süresini göstermektedir.
Bölümler ve parçalar

İz görüntüleyici aşağıdaki bölümleri içerir:

  • Cihaz çip sayısına ve çip içinde aygıt düğümü ile etiketlenmiş, her bir cihaz düğüm için bir bölümü (örneğin, /device:GPU:0 (pid 0) ). Her aygıt düğümü bölümü aşağıdaki parçaları içerir:
    • Adım: cihazda çalışan eğitim adımlarının süresini gösterir
    • TensorFlow Ops: Gösteriler cihazda çalıştırılan op
    • XLA Ops: Gösteriler XLA işlemleri (ops) XLA kullanılan derleyici ise cihazda o koştu (her TensorFlow op bir veya birkaç XLA ops çevrilir XLA derleyici söz konusu cihazda çalışır koduna XLA op çevirir.).
  • Ana makinenin CPU üzerinde çalışan iş parçacığı için bir bölümünde, "Ana konu" etiketli. Bölüm, her CPU iş parçacığı için bir iz içerir. Bölüm etiketlerinin yanında görüntülenen bilgileri yok sayabileceğinizi unutmayın.
Etkinlikler

Zaman çizelgesindeki olaylar farklı renklerde görüntülenir; renklerin kendilerinin belirli bir anlamı yoktur.

İz görüntüleyici, TensorFlow programınızdaki Python işlev çağrılarının izlerini de görüntüleyebilir. Eğer kullanırsanız tf.profiler.experimental.start API, sen kullanarak izleme Python etkinleştirebilirsiniz ProfilerOptions profil başlatırken namedtuple. Eğer profil için örnekleme modunu kullanmak eğer Alternatif olarak, Yakalama Profili iletişim açılan seçenekleri kullanarak izleme düzeyini seçebilirsiniz.

resim

GPU çekirdek istatistikleri

Bu araç, her GPU hızlandırmalı çekirdek için performans istatistiklerini ve kaynak işlemi gösterir.

resim

Araç, bilgileri iki bölmede görüntüler:

  • Üst bölme, geçen en yüksek toplam süreye sahip CUDA çekirdeklerini gösteren bir pasta grafiği görüntüler.

  • Alt bölme, her benzersiz çekirdek-op çifti için aşağıdaki verileri içeren bir tablo görüntüler:

    • Çekirdek-op çiftine göre gruplandırılmış toplam GPU süresinin azalan düzende bir sıralaması.
    • Başlatılan çekirdeğin adı.
    • Çekirdek tarafından kullanılan GPU kayıtlarının sayısı.
    • Bayt cinsinden kullanılan paylaşılan (statik + dinamik paylaşılan) belleğin toplam boyutu.
    • Blok boyutu olarak ifade blockDim.x, blockDim.y, blockDim.z .
    • Izgarası ebatları olarak ifade gridDim.x, gridDim.y, gridDim.z .
    • Op İster kullanılabileceği anlamına gelebilir tensör Çekirdekleri .
    • Çekirdeğin Tensor Core talimatları içerip içermediği.
    • Bu çekirdeği başlatan operasyonun adı.
    • Bu çekirdek-op çiftinin oluşum sayısı.
    • Mikrosaniye cinsinden toplam GPU süresi.
    • Mikrosaniye cinsinden ortalama GPU süresi.
    • Mikrosaniye cinsinden minimum GPU süresi.
    • Mikrosaniye cinsinden maksimum geçen GPU süresi.

Bellek profili aracı

Bellek Profili aracı monitörler profilleme aralığında cihazınızın bellek kullanımı. Bu aracı aşağıdakiler için kullanabilirsiniz:

  • En yüksek bellek kullanımını ve TensorFlow operasyonlarına karşılık gelen bellek tahsisini belirleyerek bellek yetersiz (OOM) sorunlarının hatalarını ayıklayın. Ayrıca çalıştırdığınızda ortaya çıkabilecek OOM sorunları debug çoklu kira çıkarım.
  • Hata ayıklama bellek parçalanma sorunları.

Bellek profili aracı, verileri üç bölümde görüntüler:

  1. Bellek Profili Özeti
  2. Bellek Zaman Çizelgesi Grafiği
  3. Bellek Döküm Tablosu

Bellek profili özeti

Bu bölüm, aşağıda gösterildiği gibi TensorFlow programınızın bellek profilinin üst düzey bir özetini görüntüler:

Bellek profili özeti altı alana sahiptir:

  1. Hafıza numarası: Açılan tüm kullanılabilir cihaz hafızası sistemlerini listeler. Açılır menüden görüntülemek istediğiniz bellek sistemini seçin.
  2. #Allocation: profil oluşturma aralığında yapılan bellek ayırma sayısı.
  3. #Deallocation: profil oluşturma aralığı bellek deallocations sayısı
  4. Bellek Kapasitesi: Seçtiğiniz o hafıza sisteminin (payandalı cinsinden) toplam kapasitesi.
  5. Tepe Öbek Kullanımı: (payandalı olarak) tepe bellek kullanımı modeli çalışmaya başlamasından bu yana.
  6. Tepe bellek kullanımı: (payandalı olarak) tepe bellek kullanımı profil birlikte döner. Bu alan aşağıdaki alt alanları içerir:
    1. Zaman Damgası: en yüksek bellek kullanımı Zaman Çizelgesi Grafiğinde meydana geldiği zaman damgası.
    2. Yığın Rezervasyon: (payandalı olarak) yığında ayrılan bellek miktarı.
    3. Yığın Ayırma: (payandalı olarak) yığın üzerinde ayrılan bellek miktarı.
    4. Ücretsiz Bellek: Boş bellek miktarı (payandalı olarak). Bellek Kapasitesi, Yığın Rezervasyonu, Yığın Tahsisi ve Boş Belleğin toplamıdır.
    5. Parçalanma: parçalanma yüzdesi (düşük daha iyidir). Bu bir yüzdesi olarak hesaplanır (1 - Size of the largest chunk of free memory / Total free memory) .

Bellek zaman çizelgesi grafiği

Bu bölüm, bellek kullanımının (GiB cinsinden) bir grafiğini ve zamana karşı parçalanma yüzdesini (ms cinsinden) görüntüler.

resim

X ekseni, profil oluşturma aralığının zaman çizelgesini (ms cinsinden) temsil eder. Soldaki Y ekseni bellek kullanımını (GiB'lerde) ve sağdaki Y ekseni parçalanma yüzdesini temsil eder. X eksenindeki her zaman noktasında, toplam bellek üç kategoriye ayrılır: yığın (kırmızı), yığın (turuncu) ve boş (yeşil). Aşağıdaki gibi o noktada bellek ayırma/serbest bırakma olaylarıyla ilgili ayrıntıları görüntülemek için belirli bir zaman damgasının üzerine gelin:

resim

Açılır pencere aşağıdaki bilgileri görüntüler:

  • zaman damgası (ms): zaman çizelgesinde seçilen olay yeri.
  • Olay: Etkinliğin türü (ayırma ya da serbest bırakma).
  • requested_size (Gibs): bellek miktarı talep etti. Bu, serbest bırakma olayları için negatif bir sayı olacaktır.
  • allocation_size (bağlamların) ayrılan bellek gerçek miktarı. Bu, serbest bırakma olayları için negatif bir sayı olacaktır.
  • tf_op: tahsisi / miktarda kaldırma istekleri TensorFlow op.
  • step_id: bu olayın gerçekleştiği eğitim adımını.
  • REGION_TYPE: Bu ayrılan bellek içindir veri varlık türü olduğunu. Olası değerler temp geçiciler için, output aktivasyon ve ölçüleri için ve persist / dynamic ağırlıkları ve sabitler için.
  • veri_türü: tensör elemanı tipi (örneğin, uint8 8-bit işaretsiz bir tamsayı için).
  • tensor_shape: tensörünün şekli / tahsis ayırmanın.
  • memory_in_use (payandalı) bu zaman noktasında kullanımda toplam bellek.

Bellek dökümü tablosu

Bu tablo, profil oluşturma aralığındaki en yüksek bellek kullanımı noktasındaki etkin bellek tahsislerini gösterir.

resim

Her TensorFlow Op için bir satır vardır ve her satırda aşağıdaki sütunlar bulunur:

  • Op Adı: TensorFlow op adı.
  • Tahsis Boyut (GIBS): Bu op ayrılan belleğin toplam miktarı.
  • Talep edilen Boyut (GIBS): Bu op için talep edilen toplam bellek miktarı.
  • Geçtiği: Bu op için ayırmaları sayısı.
  • Bölge türü: Bu ayrılan bellek için olduğunu veri varlık türü. Olası değerler temp geçiciler için, output aktivasyon ve ölçüleri için ve persist / dynamic ağırlıkları ve sabitler için.
  • Veri türü: tensör eleman türü.
  • Şekle: tahsis tansörleri şeklini.

Kapsül görüntüleyici

Pod Görüntüleyici aracı, tüm çalışanlar için bir eğitim adımının dökümünü gösterir.

resim

  • Üst bölmede, adım numarasını seçmek için bir kaydırıcı bulunur.
  • Alt bölmede yığılmış bir sütun grafiği görüntülenir. Bu, birbirinin üzerine yerleştirilmiş parçalı adım-zaman kategorilerinin üst düzey bir görünümüdür. Yığılmış her sütun benzersiz bir çalışanı temsil eder.
  • Fareyle yığılmış bir sütunun üzerine geldiğinizde, sol taraftaki kart, adım dökümü hakkında daha fazla ayrıntı gösterir.

tf.data darboğaz analizi

tf.data darboğaz analiz aracı otomatik darboğazları tespit tf.data programınızda giriş boru hatları ve bunları düzeltmek için nasıl öneriler sağlar. Bu kullanarak herhangi bir program ile çalışır tf.data platformdan bağımsız olarak (CPU / GPU / TPU) arasında. Onun analizi ve öneriler bu dayanmaktadır rehber .

Aşağıdaki adımları izleyerek bir darboğaz tespit eder:

  1. En çok girdiye bağlı ana bilgisayarı bulun.
  2. Bir en yavaş yürütme bul tf.data giriş boru hattı.
  3. Profil oluşturucu izlemesinden girdi işlem hattı grafiğini yeniden oluşturun.
  4. Giriş boru hattı grafiğinde kritik yolu bulun.
  5. Kritik yoldaki en yavaş dönüşümü bir darboğaz olarak tanımlayın.

Performans Analizi Özeti Tüm Input Boru hatları ve Girdi Boru Hattı Grafik Özeti: UI üç bölüme ayrılmıştır.

Performans analizi özeti

resim

Bu bölüm, analizin özetini sunar. Yavaş raporları tf.data profilinde tespit girdi boru hatları. Bu bölüm ayrıca, en fazla girdiye bağlı ana bilgisayarı ve maksimum gecikme süresine sahip en yavaş girdi ardışık düzenini gösterir. En önemlisi, giriş hattının hangi bölümünün darboğaz olduğunu ve nasıl düzeltileceğini tanımlar. Darboğaz bilgisi, yineleyici türü ve uzun adı ile sağlanır.

tf.data yineleyicinin uzun adı nasıl okunur

Uzun adı olarak biçimlendirilir Iterator::<Dataset_1>::...::<Dataset_n> . Uzun adıyla, <Dataset_n> yineleyici türü ile eşleşen ve uzun adı diğer veri kümeleri mansap dönüşümleri temsil eder.

Örneğin, aşağıdaki giriş işlem hattı veri kümesini göz önünde bulundurun:

dataset = tf.data.Dataset.range(10).map(lambda x: x).repeat(2).batch(5)

Yukarıdaki veri kümesindeki yineleyiciler için uzun adlar şöyle olacaktır:

Yineleyici Türü Uzun isim
Aralık Yineleyici::Toplu::Tekrar::Harita::Aralık
Harita Yineleyici::Toplu::Tekrar::Harita
Tekrar et Yineleyici::Toplu::Tekrar
toplu Yineleyici::Toplu

Tüm giriş işlem hatlarının özeti

resim

Bu bölüm, tüm ana bilgisayarlardaki tüm girdi işlem hatlarının özetini sağlar. Tipik olarak bir giriş boru hattı vardır. Dağıtım stratejisi kullanırken, programın çalışan bir ana giriş boru hattı vardır tf.data kodu ve host giriş boru hattından veri alınırken ve cihazlara aktarılması Birden fazla cihaz giriş boru hatlarını.

Her girdi işlem hattı için yürütme süresinin istatistiklerini gösterir. Bir arama 50 μs'den uzun sürerse yavaş sayılır.

Giriş hattı grafiği

resim

Bu bölüm, yürütme süresi bilgisiyle birlikte giriş boru hattı grafiğini gösterir. Hangi ana makineyi ve giriş hattını göreceğinizi seçmek için "Ana Bilgisayar" ve "Giriş Hattı"nı kullanabilirsiniz. Giriş boru hattının İnfazlar Eğer Sıra açılan kullanarak seçebilir azalan sırada yürütme zamanına göre sıralanır.

resim

Kritik yol üzerindeki düğümlerin ana hatları kalındır. Kritik yol üzerinde en uzun kendi kendine kalma süresine sahip düğüm olan darboğaz düğümü kırmızı bir çerçeveye sahiptir. Diğer kritik olmayan düğümlerin gri kesikli ana hatları vardır.

Her düğüm içinde başlangıç zaman yürütme başlangıç zamanı gösterir. Bir varsa aynı düğüm, örneğin, birden çok kez yürütülebilmektedir Batch giriş hattı op. Birden çok kez yürütülürse, ilk yürütmenin başlangıç ​​zamanıdır.

Toplam Süre yürütme duvar zamanıdır. Birden çok kez yürütülürse, tüm yürütmelerin duvar sürelerinin toplamıdır.

Kendinden Zaman onun hemen alt düğümlerle örtüşen zaman olmadan Toplam Süre olduğunu.

"# Çağrılar", giriş işlem hattının yürütülme sayısıdır.

Performans verilerini toplayın

TensorFlow Profiler, TensorFlow modelinizin ana bilgisayar etkinliklerini ve GPU izlerini toplar. Profiler'ı programatik mod veya örnekleme modu aracılığıyla performans verilerini toplayacak şekilde yapılandırabilirsiniz.

Profil oluşturma API'leri

Profil oluşturma işlemini gerçekleştirmek için aşağıdaki API'leri kullanabilirsiniz.

  • TensorBoard Keras Geri arama (kullanarak Program modu 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])
    
  • Kullanarak Programlı modu tf.profiler Fonksiyon API

    tf.profiler.experimental.start('logdir')
    # Train the model here
    tf.profiler.experimental.stop()
    
  • Bağlam yöneticisini kullanan programlı mod

    with tf.profiler.experimental.Profile('logdir'):
        # Train the model here
        pass
    

  • Modunu örnekleme: on-demand kullanarak profilleme gerçekleştirin tf.profiler.experimental.server.start sizin TensorFlow modeli vadede bir gRPC sunucusu başlatmak için. GRPC sunucusunu başlayan ve modelinizi çalıştırdıktan sonra, TensorBoard profil eklenti Yakalama profili diyalog yoluyla bir profil yakalayabilir. Zaten çalışmıyorsa, bir TensorBoard örneğini başlatmak için yukarıdaki Profil oluşturucuyu yükle bölümündeki komut dosyasını kullanın.

    Örnek olarak,

    # 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)
    

    Birden çok çalışanın profilini çıkarmaya bir örnek:

    # 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)
    

Belirtmek için Yakalama Profili iletişim kutusunu kullanın:

  • Profil hizmeti URL'lerinin veya TPU adlarının virgülle ayrılmış listesi.
  • Bir profil oluşturma süresi.
  • Cihaz, ana bilgisayar ve Python işlev çağrısı izleme düzeyi.
  • İlk başta başarısız olursa Profil Oluşturucunun profilleri yakalamayı kaç kez yeniden denemesini istersiniz.

Özel eğitim döngülerinin profilini çıkarma

Senin TensorFlow kodundaki özel eğitim döngüler profilini oluşturmak için alet ile eğitim döngü tf.profiler.experimental.Trace API Profiler için adım sınırlarını işaretlemek için.

name argümanı adım adları için bir önek olarak kullanılır, step_num kelime argüman adım adlarında eklenmeli ve _r kelime argüman bu iz olay Profiler bir adım olay olarak işlenmiş olsun yapar.

Örnek olarak,

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)

Bu, Profiler'ın adım tabanlı performans analizini etkinleştirecek ve adım olaylarının iz görüntüleyicide görünmesine neden olacaktır.

Emin içinde veri kümesi liste koleksiyonunun emin olun tf.profiler.experimental.Trace girdi boru hattının doğru analiz için bağlam.

Aşağıdaki kod parçacığı bir anti-kalıptır:

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

Profil oluşturma kullanım durumları

Profil oluşturucu, dört farklı eksen boyunca bir dizi kullanım durumunu kapsar. Bazı kombinasyonlar şu anda desteklenmektedir ve diğerleri gelecekte eklenecektir. Kullanım durumlarından bazıları şunlardır:

  • Yerel vs uzak profilleme: Bunlar profilleme ortamı hazırlar iki genel yolu vardır. Yerel profil oluşturmada, profil oluşturma API'si, modelinizin yürüttüğü aynı makinede, örneğin GPU'lara sahip yerel bir iş istasyonunda çağrılır. Uzaktan profil oluşturmada, profil oluşturma API'si, modelinizin yürütüldüğü yerden farklı bir makinede, örneğin bir Cloud TPU'da çağrılır.
  • Birden işçileri profil oluşturma: TensorFlow dağıtılmış eğitim yeteneklerini kullanırken birden makineleri profil olabilir.
  • Donanım platformu: Profil CPU'lar, GPU'lar ve TPU.

Aşağıdaki tablo, yukarıda bahsedilen TensorFlow destekli kullanım örneklerine hızlı bir genel bakış sağlar:

Profil Oluşturma API'sı Yerel uzak Birden çok işçi Donanım Platformları
TensorBoard Keras Geri Arama Desteklenen Desteklenmiyor Desteklenmiyor CPU, GPU
tf.profiler.experimental çalıştırma / durdurma API Desteklenen Desteklenmiyor Desteklenmiyor CPU, GPU
tf.profiler.experimental client.trace API Desteklenen Desteklenen Desteklenen CPU, GPU, TPU
Bağlam yöneticisi API'si Desteklenen Desteklenmiyor Desteklenmiyor CPU, GPU

Optimum model performansı için en iyi uygulamalar

Optimum performans elde etmek için aşağıdaki önerileri TensorFlow modellerinize uygun olarak kullanın.

Genel olarak, cihaz üzerinde tüm dönüşümleri gerçekleştirin ve platformunuz için cuDNN ve Intel MKL gibi kitaplıkların en son uyumlu sürümlerini kullandığınızdan emin olun.

Giriş verileri ardışık düzenini optimize edin

Veri girişi ardışık düzeninizi optimize etmek için [#input_pipeline_analyzer] içindeki verileri kullanın. Verimli bir veri girişi ardışık düzeni, aygıt boşta kalma süresini azaltarak model yürütme hızınızı önemli ölçüde artırabilir. Ayrıntılı iyi uygulamaları dahil etmek deneyin tf.data API ile daha iyi performans veri girişi boru hattı daha verimli kılmak için kılavuz ve aşağıdaki.

  • Genel olarak, sırayla yürütülmesi gerekmeyen herhangi bir işlemi paralel hale getirmek, veri girişi ardışık düzenini önemli ölçüde optimize edebilir.

  • Çoğu durumda, bazı çağrıların sırasını değiştirmek veya argümanları modeliniz için en iyi şekilde çalışacak şekilde ayarlamak yardımcı olur. Giriş verileri ardışık düzenini optimize ederken, optimizasyonların etkisini bağımsız olarak ölçmek için eğitim ve geri yayılım adımları olmadan yalnızca veri yükleyiciyi kıyaslayın.

  • Giriş işlem hattının bir performans darboğazı olup olmadığını kontrol etmek için modelinizi sentetik verilerle çalıştırmayı deneyin.

  • Kullanım tf.data.Dataset.shard çoklu GPU eğitim için. Verimdeki azalmaları önlemek için giriş döngüsünde çok erken parçaladığınızdan emin olun. TFRecords ile çalışırken, TFRecords'un içeriğini değil, TFRecords listesini parçaladığınızdan emin olun.

  • Dinamik değerini ayarlayarak çeşitli op parallelize num_parallel_calls kullanarak tf.data.AUTOTUNE .

  • Kullanımını sınırlayıcı düşünün tf.data.Dataset.from_generator daha yavaş saf TensorFlow ops olarak karşılaştırılır.

  • Kullanımını sınırlayan düşünün tf.py_function o getirilemez ve dağıtılmış TensorFlow çalışmasına desteklenmez olarak.

  • Kullanım tf.data.Options giriş boru hattına statik optimizasyonları kontrol etmek.

Ayrıca okuma tf.data performans analizi kılavuzu girişinizi boru hattı optimize etmek için detaylı bilgi için.

Veri artırmayı optimize edin

Görüntü verileri ile çalışırken, sizin yapmak veri büyütme , vb kırpma, böyle saygısız olarak mekansal dönüşümler, uygulandıktan sonra farklı veri türlerine döküm çevirerek daha verimli

NVIDIA® DALI kullanın

GPU/CPU oranı yüksek bir sisteminiz olduğu gibi bazı durumlarda, yukarıdaki optimizasyonların tümü, CPU döngülerinin sınırlamalarından kaynaklanan veri yükleyicideki darboğazları ortadan kaldırmak için yeterli olmayabilir.

Veri Yükleniyor Kütüphanesi (kullanarak, bilgisayar vizyonu ve ses derin öğrenme uygulamaları için NVIDIA® GPU'ları düşünün kullanıyorsanız DALI veri boru hattı hızlandırmak için).

Kontrol Operasyonları: NVIDIA® DALI desteklenen DALI ops listesi için belgeleri.

İş parçacığı ve paralel yürütme kullanın

İle birden işlemci parçacığı üzerinde çalıştırın op tf.config.threading API hızlı çalıştırmak.

TensorFlow, varsayılan olarak paralellik iş parçacığı sayısını otomatik olarak ayarlar. TensorFlow işlemlerini çalıştırmak için kullanılabilen iş parçacığı havuzu, mevcut CPU iş parçacığı sayısına bağlıdır.

Kullanarak tek bir op için maksimum paralel bir hıza kontrol tf.config.threading.set_intra_op_parallelism_threads . Birden fazla işlemi paralel olarak çalıştırırsanız, hepsinin mevcut iş parçacığı havuzunu paylaşacağını unutmayın.

Eğer (grafikte aralarında yönlendirilmiş yol ile operatörleri) bağımsız engellenmeyen ops varsa, kullanım tf.config.threading.set_inter_op_parallelism_threads eşzamanlı mevcut parçacığı havuzu kullanarak bunları çalıştırmak için.

Çeşitli

NVIDIA® GPU'larında küçük modellerle çalışırken, ayarlayabilirsiniz tf.compat.v1.ConfigProto.force_gpu_compatible=True bütün CPU tensörleri zorlamak için bir model performansı ciddi oranda artıracağını üzere CUDA tutturulmuş bellekle tahsis edilecek. Ancak, ana bilgisayar (CPU) performansını olumsuz etkileyebileceğinden, bilinmeyen/çok büyük modeller için bu seçeneği kullanırken dikkatli olun.

Cihaz performansını iyileştirin

Burada ve ayrıntıları en iyi uygulamaları izleyin GPU performans optimizasyonu kılavuz optimize Cihazdaki TensorFlow modeli performansına.

NVIDIA GPU'ları kullanıyorsanız, aşağıdakileri çalıştırarak GPU ve bellek kullanımını bir CSV dosyasına kaydedin:

nvidia-smi
--query-gpu=utilization.gpu,utilization.memory,memory.total,
memory.free,memory.used --format=csv

Veri düzenini yapılandır

Kanal bilgilerini (görüntüler gibi) içeren verilerle çalışırken, en son kanalları tercih etmek için veri düzeni biçimini optimize edin (NCHW yerine NHWC).

Kanal-son veri formatları geliştirmek tensör Çekirdek kullanımı ve AMP ile birleştiğinde özellikle kıvrışımlı modellerinde önemli performans iyileştirmeleri sağlamaktadır. NCHW veri düzenleri hala Tensör Çekirdekleri tarafından çalıştırılabilir, ancak otomatik transpoze işlemleri nedeniyle ek yük getirir.

Sen ayarlayarak NHWC düzenleri tercih veri düzenini optimize edebilirsiniz data_format="channels_last" gibi katmanları için tf.keras.layers.Conv2D , tf.keras.layers.Conv3D ve tf.keras.layers.experimental.preprocessing.RandomRotation .

Kullanım tf.keras.backend.set_image_data_format Keras arka uç API için varsayılan veri düzeni biçimini ayarlamak için.

L2 önbelleğini maksimuma çıkarın

When working with NVIDIA® GPUs, execute the code snippet below before the training loop to max out the L2 fetch granularity to 128 bytes.

import ctypes

_libcudart = ctypes.CDLL('libcudart.so')
# Set device limit on the current device
# cudaLimitMaxL2FetchGranularity = 0x05
pValue = ctypes.cast((ctypes.c_int*1)(), ctypes.POINTER(ctypes.c_int))
_libcudart.cudaDeviceSetLimit(ctypes.c_int(0x05), ctypes.c_int(128))
_libcudart.cudaDeviceGetLimit(pValue, ctypes.c_int(0x05))
assert pValue.contents.value == 128

Configure GPU thread usage

The GPU thread mode decides how GPU threads are used.

Set the thread mode to gpu_private to make sure that preprocessing does not steal all the GPU threads. This will reduce the kernel launch delay during training. You can also set the number of threads per GPU. Set these values using environment variables.

import os

os.environ['TF_GPU_THREAD_MODE']='gpu_private'
os.environ['TF_GPU_THREAD_COUNT']='1'

Configure GPU memory options

In general, increase the batch size and scale the model to better utilize GPUs and get higher throughput. Note that increasing the batch size will change the model's accuracy so the model needs to be scaled by tuning hyperparameters like the learning rate to meet the target accuracy.

Also, use tf.config.experimental.set_memory_growth to allow GPU memory to grow to prevent all the available memory from being fully allocated to ops that require only a fraction of the memory. This allows other processes which consume GPU memory to run on the same device.

To learn more, check out the Limiting GPU memory growth guidance in the GPU guide to learn more.

Miscellaneous

  • Increase the training mini-batch size (number of training samples used per device in one iteration of the training loop) to the maximum amount that fits without an out of memory (OOM) error on the GPU. Increasing the batch size impacts the model's accuracy—so make sure you scale the model by tuning hyperparameters to meet the target accuracy.

  • Disable reporting OOM errors during tensor allocation in production code. Set report_tensor_allocations_upon_oom=False in tf.compat.v1.RunOptions .

  • For models with convolution layers, remove bias addition if using batch normalization. Batch normalization shifts values by their mean and this removes the need to have a constant bias term.

  • Use TF Stats to find out how efficiently on-device ops run.

  • Use tf.function to perform computations and optionally, enable the jit_compile=True flag ( tf.function(jit_compile=True ). To learn more, go to Use XLA tf.function .

  • Minimize host Python operations between steps and reduce callbacks. Calculate metrics every few steps instead of at every step.

  • Keep the device compute units busy.

  • Send data to multiple devices in parallel.

  • Consider using 16-bit numerical representations , such as fp16 —the half-precision floating point format specified by IEEE—or the Brain floating-point bfloat16 format.

Additional resources

Known limitations

Profiling multiple GPUs on TensorFlow 2.2 and TensorFlow 2.3

TensorFlow 2.2 and 2.3 support multiple GPU profiling for single host systems only; multiple GPU profiling for multi-host systems is not supported. To profile multi-worker GPU configurations, each worker has to be profiled independently. From TensorFlow 2.4 multiple workers can be profiled using the tf.profiler.experimental.client.trace API.

CUDA® Toolkit 10.2 or later is required to profile multiple GPUs. As TensorFlow 2.2 and 2.3 support CUDA® Toolkit versions only up to 10.1, you need to create symbolic links to libcudart.so.10.1 and 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