Yerel TensorFlow Everywhere etkinliğiniz için bugün LCV!
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Profiler'ı kullanarak TensorFlow performansını optimize edin

TensorFlow modellerinizin performansını izlemek için Profiler'da bulunan araçları kullanın. Modelinizin ana bilgisayarda (CPU), cihazda (GPU) veya hem ana bilgisayar hem de cihaz (lar) kombinasyonunda nasıl performans gösterdiğini görün.

Profil oluşturma, modelinizdeki çeşitli TensorFlow işlemlerinin (işlemlerin) donanım kaynak tüketimini (zaman ve bellek) anlamanıza ve performans darboğazlarını çözmenize ve sonuçta modelin daha hızlı çalışmasını sağlamanıza 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'larda model performansınızın profilini çıkarmak istiyorsanız Cloud TPU kılavuzuna bakın .

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

Profiler'ı GitHub deposundan install_and_run.py komut dosyasını indirip çalıştırarak kurun.

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

  1. TensorFlow GPU destek yazılımı gereksinimlerinde listelenen NVIDIA® GPU sürücülerini ve CUDA® Toolkit gereksinimlerini karşılayın .
  2. Yolda CUPTI'nin bulunduğundan emin olun:

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

Yolda CUPTI yoksa, aşağıdaki komutu çalıştırarak kurulum dizinini $LD_LIBRARY_PATH ortam değişkeninin başına ekleyin:

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

CUPTI kitaplığının bulunduğunu doğrulamak için yukarıdaki ldconfig komutunu tekrar çalıştırın.

Ayrıcalık sorunlarını çözme

Bir Docker ortamında veya Linux'ta CUDA® Toolkit ile profil oluşturmayı çalıştırdığınızda, yetersiz CUPTI ayrıcalıklarıyla ( CUPTI_ERROR_INSUFFICIENT_PRIVILEGES ) ilgili sorunlarla karşılaşabilirsiniz. Linux'ta bu sorunları nasıl çözebileceğiniz hakkında daha fazla bilgi edinmek için NVIDIA Geliştirici Belgelerine bakın.

Bir Docker ortamında CUPTI ayrıcalık sorunlarını çözmek için,

docker run option '--privileged=true'

Profiler araçları

Profiler'a, yalnızca bazı model verilerini yakaladıktan sonra görünen TensorBoard'daki Profil sekmesinden erişin.

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

  • Genel bakış sayfası
  • Giriş boru hattı analizörü
  • TensorFlow istatistikleri
  • İz görüntüleyici
  • GPU çekirdek istatistikleri
  • Bellek profili aracı
  • Kapsül görüntüleyici

Genel bakış sayfası

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

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

görüntü

  • Performans özeti - Model performansınızın üst düzey bir özetini görüntüler. Performans özetinin iki bölümü vardır:

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

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

  • Adım zamanı grafiği - Örneklenen tüm adımlar üzerinden cihaz adım süresinin (milisaniye cinsinden) grafiğini görüntüler. Her adım, zamanın harcandığı yerin birden çok kategorisine (farklı renklerle) ayrılmıştır. Kırmızı alan, cihazların ana bilgisayardan giriş verilerini beklerken boşta kaldığı adım süresinin bölümüne karşılık gelir. Yeşil alan, cihazın gerçekte ne kadar çalıştığını gösterir

  • Cihazdaki en iyi 10 TensorFlow işlemi - En uzun süren cihaz üzeri işlemlerini görüntüler.

    Her satır, bir operasyonun kendi süresini (tüm operasyonlar tarafından alınan zamanın yüzdesi olarak), kümülatif zamanı, kategoriyi ve adı gösterir.

  • Çalıştırma ortamı - Aşağıdakileri içeren model çalıştırma ortamının üst düzey bir özetini görüntüler:

    • Kullanılan ana bilgisayar sayısı
    • Cihaz türü (GPU / TPU)
    • Cihaz çekirdek sayısı
  • Sonraki adımlar için öneri - Bir modelin girdiye bağlı olduğunu bildirir ve model performans darboğazlarını bulmak ve çözmek için kullanabileceğiniz araçlar önerir

Giriş boru hattı analizörü

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

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

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

Verimsiz bir giriş ardışık düzeni uygulamanızı ciddi şekilde yavaşlatabilir. Bir uygulama, zamanın önemli bir bölümünü girdi hattında geçirdiğinde girdi bağlı olarak kabul edilir. Girdi ardışık düzeninin nerede verimsiz olduğunu anlamak için girdi hattı analizöründen elde edilen içgörüleri kullanın.

Giriş ardışık düzeni analizörü, programınızın girişle bağlantılı olup olmadığını hemen söyler ve giriş hattındaki herhangi bir aşamada performans darboğazlarında hata ayıklamak için cihaz ve ana bilgisayar tarafı analizlerinde size yol gösterir.

Veri girişi ardışık düzenlerinizi optimize etmeye yönelik önerilen en iyi uygulamalar için giriş ardışık düzeni performansıyla ilgili kılavuza bakın.

Giriş ardışık düzeni panosu

Giriş ardışık düzeni çözümleyicisini açmak için Profil'i seçin, ardından Araçlar açılır listesinden input_pipeline_analyzer öğesini seçin.

görüntü

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

  1. Özet - Genel girdi ardışık düzenini, uygulamanızın girdiye bağlı olup olmadığına ve eğer öyleyse, ne kadar olduğuna ilişkin bilgilerle özetler.
  2. Cihaz tarafı analizi - Cihaz adım süresi ve her adımda çekirdekler arasında giriş verilerini beklemek için harcanan cihaz süresi aralığı dahil olmak üzere ayrıntılı, cihaz tarafı analiz sonuçlarını görüntüler
  3. Ana bilgisayar tarafı analizi - Ana bilgisayardaki giriş işleme süresinin bir dökümü dahil olmak üzere ana bilgisayar tarafında ayrıntılı bir analiz gösterir

Girdi ardışık düzeni özeti

Özet, ana bilgisayardan giriş beklemek için harcanan cihaz süresinin yüzdesini sunarak programınızın giriş bağlı olup olmadığını bildirir. Aletli 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, ana bilgisayarda ve cihazda harcanan zamana ve ana bilgisayardan giriş verilerini beklerken ne kadar cihaz süresinin harcandığına ilişkin bilgiler sağlar.

  1. Adım numarasına göre çizilen adım süresi - Örneklenen tüm adımlar üzerinde cihaz adım süresinin (milisaniye cinsinden) bir grafiğini görüntüler. Her adım, zamanın harcandığı yerin birden çok kategorisine (farklı renklerle) ayrılmıştır. Kırmızı alan, cihazların ana bilgisayardan giriş verilerini beklerken boşta kaldığı adım süresinin bölümüne karşılık gelir. Yeşil alan, cihazın gerçekte ne kadar çalıştığını gösterir
  2. Adım süresi istatistikleri - Cihaz adım süresinin ortalamasını, standart sapmasını ve aralığını ([minimum, maksimum]) raporlar

Ana bilgisayar tarafı analizi

Ana bilgisayar tarafı analizi, ana bilgisayarda giriş işleme süresinin ( tf.data API işlemlerinde harcanan süre) birkaç kategoriye tf.data :

  • Talep üzerine dosyalardan veri okuma - Önbelleğe almadan, önceden getirmeden ve araya eklemeden dosyalardan verileri okumak için harcanan süre
  • Dosyalardaki verileri önceden okuma - Önbelleğe alma, önceden getirme ve serpiştirme dahil olmak üzere dosyaları okumak için harcanan süre
  • Veri ön işleme - Görüntü açma gibi ön işleme operasyonlarına harcanan süre
  • Cihaza aktarılacak verileri kuyruğa alma - Verileri cihaza aktarmadan önce verileri bir besleme kuyruğuna koymak için harcanan süre

Girdi Operasyon İstatistiklerini genişletin ve bağımsız girdi operasyonları ve bunların kategorilerinin yürütme süresine göre dökümünü görün.

görüntü

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

  1. Input Op - Giriş işleminin TensorFlow işlem adını gösterir
  2. Sayı - Profil oluşturma dönemi boyunca toplam işlem yürütme örneği sayısını gösterir
  3. Toplam Süre (ms cinsinden) - Bu örneklerin her biri için harcanan toplam süreyi gösterir
  4. Toplam Süre Yüzdesi - Bir operasyonda harcanan toplam süreyi, girdi işlemede harcanan toplam sürenin bir bölümü olarak gösterir
  5. Toplam Öz Zaman (ms cinsinden) - Bu örneklerin her biri için harcanan kendi kendine sürenin kümülatif toplamını gösterir. Buradaki öz zaman, çağırdığı işlevde harcanan süre hariç, işlev gövdesi içinde harcanan zamanı ölçer.
  6. Toplam Öz Zaman% . Girdi işleme için harcanan toplam sürenin bir bölümü olarak toplam kendi kendine zamanı gösterir
  7. Kategori . Giriş işleminin işlem kategorisini gösterir

TensorFlow istatistikleri

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

görüntü

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

  • Üst bölme en fazla dört pasta grafiği görüntüler:

    1. Ana bilgisayardaki her işlemin kendi kendini yürütme süresinin dağılımı
    2. Ana bilgisayardaki her işlem 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 işlem türünün kendi kendine yürütme süresinin dağılımı
  • Alt bölme, her işlem için bir satır ve her veri türü için bir sütun içeren TensorFlow işlemleriyle ilgili verileri raporlayan bir tablo gösterir (sütunun başlığına tıklayarak sütunları sıralayın). Bu tablodaki verileri bir CSV dosyası olarak dışa aktarmak için üst bölmenin sağ tarafındaki CSV Olarak Dışa Aktar düğmesini tıklayın.

    Bunu not et:

    • Herhangi bir operasyonda çocuk operasyonu varsa:

      • Bir operasyonun toplam "birikmiş" süresi, çocuk operasyonları içinde harcanan zamanı içerir

      • Bir operasyonun toplam "öz" süresi, çocuk operasyonları içinde harcanan zamanı içermez

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

      • Operasyonun cihazda yaptığı toplam kendi kendine zamanın yüzdesi 0 olacaktır.
      • Bu işlem dahil olmak üzere cihazda toplam kendi kendine sürenin kümülatif yüzdesi 0 olacaktır
    • Cihazda bir işlem yürütülürse:

      • Bu işlemin barındırdığı ana bilgisayarda toplam kendi kendine zamanın yüzdesi 0 olacaktır
      • Bu işlem dahil olmak üzere ana bilgisayardaki toplam kendi kendine zamanın kümülatif yüzdesi 0 olacaktır

Pasta grafiklerine 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 op gerçekleştirdi. 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, girdi mi yoksa model eğitiminin mi çoğu zaman aldığını belirleyebilirsiniz. Detaya inerek, hangi operasyonların en uzun sürdüğünü belirleyebilirsiniz. İz görüntüleyicinin cihaz başına 1 milyon olayla sınırlı olduğunu unutmayın.

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

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

görüntü

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

  1. Zaman çizelgesi bölmesi - Cihazın ve ana bilgisayarın zaman içinde yürüttüğü işlemleri gösterir
  2. Ayrıntılar bölmesi - Zaman Çizelgesi bölmesinde seçilen işlemler için ek bilgileri gösterir

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

  1. Üst çubuk - Çeşitli yardımcı kontroller içerir
  2. Zaman ekseni - İz başlangıcına göre zamanı gösterir
  3. Kesit ve iz etiketleri - Her bölüm birden fazla parça içerir ve sol tarafta bölümü genişletmek ve daraltmak için tıklayabileceğiniz bir üçgen bulunur. Sistemdeki her işleme elemanı için bir bölüm vardır
  4. Araç seçici - İzleme görüntüleyiciyle etkileşim kurmak için Yakınlaştırma, Kaydırma, Seçme ve Zamanlama gibi çeşitli araçlar içerir. Bir zaman aralığını işaretlemek için Zamanlama aracını kullanın.
  5. Olaylar - Bunlar, bir operasyonun gerçekleştirildiği zamanı veya eğitim adımları gibi meta olayların süresini gösterir.
Bölümler ve parkurlar

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

  • Her aygıt düğümü için , aygıt yongasının numarası ve yonga içindeki aygıt düğümü ile etiketlenmiş bir bölüm (örneğin, /device:GPU:0 (pid 0) ). Her cihaz düğümü bölümü aşağıdaki yolları içerir:
    • Adım - Cihazda çalışan egzersiz adımlarının süresini gösterir
    • TensorFlow Ops - . Cihazda yürütülen işlemleri gösterir
    • XLA Ops - XLA kullanılan derleyici ise cihazda çalışan XLA işlemlerini (işlemlerini) gösterir (her TensorFlow işlemi bir veya birkaç XLA işlemine çevrilir. XLA derleyicisi, XLA işlemlerini cihazda çalışan koda çevirir).
  • Ana makinenin CPU'sunda çalışan iş parçacıkları için "Host Threads" etiketli bir bölüm . Bölüm, her CPU iş parçacığı için bir yol içerir. Bölüm etiketlerinin yanında görüntülenen bilgileri göz ardı edebileceğinizi unutmayın.
Etkinlikler

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

İzleme görüntüleyici, TensorFlow programınızda Python işlev çağrılarının izlerini de görüntüleyebilir. tf.profiler.experimental.start() API kullanırsanız, profil oluşturmaya başlarken ProfilerOptions adlı ProfilerOptions kullanarak Python izlemeyi etkinleştirebilirsiniz. Alternatif olarak, profil oluşturma için örnekleme modunu kullanıyorsanız, Yakalama Profili iletişim kutusundaki açılır seçenekleri kullanarak izleme düzeyini seçebilirsiniz.

görüntü

GPU çekirdek istatistikleri

Bu araç, performans istatistiklerini ve her GPU ile hızlandırılmış çekirdek için başlangıç ​​işlemini gösterir.

görüntü

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-işlem çifti için aşağıdaki verileri içeren bir tablo görüntüler:

    • Çekirdek-işlem çiftine göre gruplandırılmış toplam geçen GPU süresinin azalan sırasına göre bir sıralama
    • 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
    • blockDim.x, blockDim.y, blockDim.z olarak ifade edilen blok boyutu
    • gridDim.x, gridDim.y, gridDim.z olarak ifade edilen ızgara boyutları
    • Operasyonun TensorCores kullanmaya uygun olup olmadığı
    • Çekirdeğin TensorCore talimatlarını içerip içermediği
    • Bu çekirdeği başlatan operasyonun adı
    • Bu çekirdek-işlem çiftinin oluşum sayısı
    • Mikrosaniye cinsinden toplam geçen GPU süresi
    • Mikrosaniye cinsinden geçen ortalama GPU süresi
    • Mikrosaniye cinsinden minimum geçen GPU süresi
    • Mikrosaniye cinsinden maksimum geçen GPU süresi

Bellek profili aracı

Bellek Profili aracı, profil oluşturma aralığı sırasında cihazınızın bellek kullanımını izler. Bu aracı şu amaçlarla kullanabilirsiniz:

  • En yüksek bellek kullanımını ve TensorFlow işlemlerine karşılık gelen bellek ayırmayı saptayarak bellek yetersizliği (OOM) sorunlarının hatalarını ayıklayın. Çok kiracılı çıkarım çalıştırdığınızda ortaya çıkabilecek OOM sorunlarında da hata ayıklayabilirsiniz.
  • Bellek parçalanma sorunlarını ayıklayın

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

  1. Bellek Profili Özeti
  2. Bellek Zaman Çizelgesi Grafiği
  3. Hafıza Dağılı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österir:

Bellek profili özetinin altı alanı vardır:

  1. Bellek Kimliği - Mevcut tüm cihaz bellek sistemlerini listeleyen açılır menü. Açılır menüden görüntülemek istediğiniz bellek sistemini seçin
  2. #Allocation - Profil oluşturma aralığı sırasında yapılan bellek ayırma sayısı
  3. #Deallocation - Profil oluşturma aralığındaki bellek serbest bırakma sayısı
  4. Bellek Kapasitesi - Seçtiğiniz bellek sisteminin toplam kapasitesi (GiBs cinsinden)
  5. Peak Heap Usage - Model çalışmaya başladığından beri en yüksek bellek kullanımı (GiBs cinsinden)
  6. Peak Memory Usage - Profil oluşturma aralığında en yüksek bellek kullanımı (GiB cinsinden). Bu alan aşağıdaki alt alanları içerir:
    1. Zaman Damgası - Zaman Çizelgesi Grafiğinde en yüksek bellek kullanımının meydana geldiği zamanın zaman damgası
    2. Yığın Rezervasyonu - Yığın üzerinde ayrılan bellek miktarı (GiB cinsinden)
    3. Yığın Tahsisi - Yığın üzerinde ayrılan bellek miktarı (GiB cinsinden)
    4. Free Memory - Boş bellek miktarı (GiBs cinsinden). Bellek Kapasitesi, Yığın Rezervasyonu, Yığın Tahsisi ve Boş Belleğin toplamıdır
    5. Parçalanma - Parçalanma yüzdesi (daha düşük, daha iyi). Yüzdesi olarak hesaplanır (1 - En büyük boş bellek öbeğinin boyutu / Toplam boş bellek)

Bellek zaman çizelgesi grafiği

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

görüntü

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

görüntü

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

  • zaman damgası (ms) - Zaman çizelgesindeki seçili olayın konumu
  • olay - Olayın türü (ayırma veya serbest bırakma)
  • request_size (GiBs) - İstenen bellek miktarı. Bu, serbest bırakma olayları için negatif bir sayı olacaktır
  • tahsis_boyutu (GiBs) - Ayrılan gerçek bellek miktarı. Bu, serbest bırakma olayları için negatif bir sayı olacaktır
  • tf_op - Tahsis / serbest bırakmayı talep eden TensorFlow Operasyonu
  • step_id - Bu olayın meydana geldiği eğitim adımı
  • region_type - Bu ayrılan belleğin olduğu veri varlığı türü. Olası değerler, temp için geçici, etkinleştirmeler ve gradyanlar için output ve ağırlıklar ve sabitler için persist / dynamic .
  • data_type - Tensör eleman türü (örneğin, 8 bitlik işaretsiz tamsayı için uint8)
  • tensor_shape - Ayrılan / ayrılmakta olan tensörün şekli
  • memory_in_use (GiBs) - Bu noktada kullanımda olan toplam bellek

Bellek arıza tablosu

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

görüntü

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

  • İşlem Adı - TensorFlow işleminin adı
  • Tahsis Boyutu (GiBs) - Bu operasyona ayrılan toplam bellek miktarı
  • Talep Edilen Boyut (GiBs) - Bu işlem için istenen toplam bellek miktarı
  • Oluşumlar - Bu operasyon için tahsislerin sayısı
  • Bölge türü - Bu ayrılan belleğin olduğu veri varlığı türü. Olası değerler, temp için geçici, etkinleştirmeler ve gradyanlar için output ve ağırlıklar ve sabitler için persist / dynamic .
  • Veri türü - Tensör öğesi türü
  • Şekil - Ayrılan tensörlerin şekli

Kapsül görüntüleyici

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

görüntü

  • Üst bölme, adım numarasını seçmek için kaydırıcıya sahiptir.
  • Alt bölme, yığılmış bir sütun grafiği görüntüler. Bu, birbirinin üstüne yerleştirilmiş, parçalanmış adım zamanı kategorilerinin yüksek seviyeli bir görünümüdür. Her bir yığılmış sütun benzersiz bir çalışanı temsil eder.
  • Bir yığılmış 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 analizi, programınızdaki tf.data girdi ardışık düzenlerindeki darboğazları otomatik olarak algılar ve bunların nasıl düzeltileceğine ilişkin öneriler sunar. Platformdan (CPU / GPU / TPU) veya çerçeveden (TensorFlow / JAX) bağımsız olarak tf.data kullanan herhangi bir programla çalışır. Analizi ve önerileri bu rehbere dayanmaktadır.

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

  1. En çok girdiye bağlı ana bilgisayarı bulun.
  2. Tf.data input ardışık düzeninin en yavaş yürütülmesini bulun.
  3. Profil oluşturucu izlemesinden giriş ardışık düzeni grafiğini yeniden oluşturun.
  4. Girdi ardışık düzeni grafiğinde kritik yolu bulun.
  5. Kritik yoldaki en yavaş dönüşümü darboğaz olarak belirleyin.

Kullanıcı Arayüzü üç bölüme ayrılmıştır: Performans Analizi Özeti, Tüm Giriş Ardışık Düzenlerinin Özeti ve Giriş Ardışık Düzeni Grafiği.

Performans analizi özeti

görüntü

Bu bölüm analizin özetini sağlar. Profilde yavaş bir tf.data girdi ardışık düzeni olup olmadığını söyler. Öyleyse, en fazla giriş bağlantılı ana bilgisayarı ve maksimum gecikmeyle en yavaş giriş ardışık düzenini gösterir. Ve en önemlisi, girdi ardışık düzeninin hangi kısmının darboğaz olduğunu ve bunun nasıl düzeltileceğini söyler. Darboğaz bilgisi, yineleyici türü ve uzun adı ile sağlanır.

Tf.data yineleyicinin uzun adı nasıl okunur

Uzun bir ad Iterator::<Dataset_1>::...::<Dataset_n> olarak biçimlendirilir. Uzun adda, <Dataset_n> yineleyici türüyle eşleşir ve uzun <Dataset_n> diğer veri kümeleri aşağı akış dönüşümlerini temsil eder.

Örneğin, aşağıdaki giriş 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 isimler şö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 :: Tekrarla
Parti Yineleyici :: Toplu İş

Tüm Giriş Boru Hatlarının Özeti

görüntü

Bu bölüm, tüm ana bilgisayarlardaki tüm giriş işlem hatlarının özetini sağlar. Tipik olarak bir giriş hattı vardır. Dağıtım stratejisini kullanırken, programın tf.data kodunu çalıştıran bir ana bilgisayar giriş ardışık düzeni ve ana bilgisayar giriş ardışık düzeninden veri alan ve bunları aygıtlara aktaran birden çok aygıt giriş işlem hattı vardır.

Her bir girdi ardışık düzeni için, yürütme süresinin istatistiklerini gösterir. 50 μs'den uzun süren bir çağrı yavaş sayılır.

Giriş Boru Hattı Grafiği

görüntü

Bu bölüm, yürütme süresi bilgileriyle birlikte giriş boru hattı grafiğini gösterir. Hangi ana bilgisayar ve giriş ardışık düzenini göreceğinizi seçmek için "Ana Bilgisayar" ve "Giriş Kanalı" nı kullanabilirsiniz. Girdi ardışık düzeninin yürütmeleri, yürütme süresine göre azalan sırada sıralanır ve "Sıra" seçeneğini kullanarak seçim yapabilirsiniz.

görüntü

Kritik yoldaki düğümlerin ana hatları kalın. Kritik yolda en uzun öz zamana sahip düğüm olan darboğaz düğümü kırmızı bir çerçeveye sahiptir. Diğer kritik olmayan düğümler gri kesikli ana hatlara sahiptir.

Her düğümde, "Başlangıç ​​Zamanı" yürütmenin başlangıç ​​zamanını gösterir. Aynı düğüm birden çok kez yürütülebilir, örneğin, giriş boru hattında Batch varsa. Birden çok kez yürütülürse, ilk yürütmenin başlangıç ​​zamanıdır.

"Toplam Süre", yürütmenin duvar süresidir. Birden çok kez yürütülürse, tüm infazların duvar sürelerinin toplamıdır.

"Öz Zaman", yakın alt düğümleri ile çakışan süre olmaksızın "Toplam Süre" dir.

"# Çağrılar", giriş ardışık düzeninin çalıştırılma 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 gerçekleştirmek için aşağıdaki API'leri kullanabilirsiniz.

  • TensorBoard Keras Geri tf.keras.callbacks.TensorBoard ( tf.keras.callbacks.TensorBoard ) kullanılarak programatik mod

    # 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 Function API'yi kullanan programatik mod

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

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

  • Örnekleme modu - TensorFlow model çalışmanızla bir gRPC sunucusu başlatmak için tf.profiler.experimental.server.start tf.profiler.experimental.server.start() kullanarak isteğe bağlı profil oluşturma gerçekleştirin. GRPC sunucusunu başlattıktan ve modelinizi çalıştırdıktan sonra, TensorBoard profil eklentisindeki Yakalama Profili düğmesi aracılığıyla bir profil yakalayabilirsiniz. Zaten çalışmıyorsa bir TensorBoard örneğini başlatmak için yukarıdaki Kurulum profili 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 çıkarmak için 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)
    

Aşağıdakileri belirtmek için Yakalama Profili iletişim kutusunu kullanın:

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

Özel eğitim döngülerinin profilini oluşturma

TensorFlow kodunuzdaki özel eğitim döngülerini profillemek için, Profiler için adım sınırlarını işaretlemek üzere eğitim döngüsünü tf.profiler.experimental.Trace API ile kullanın. name bağımsız değişkeni, adım adları için bir önek olarak kullanılır, step_num anahtar sözcük bağımsız değişkeni adım adlarına eklenir ve _r anahtar sözcük bağımsız değişkeni bu izleme olayının Profiler tarafından bir adım olayı olarak işlenmesini sağlar.

Ö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 izleme görüntüleyicide görünmesine neden olacaktır.

Giriş ardışık tf.profiler.experimental.Trace doğru analizi için veri kümesi yineleyicisini tf.profiler.experimental.Trace bağlamına dahil ettiğinizden emin olun.

Aşağıdaki kod parçacığı bir anti-modeldir:

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

Kullanım durumlarını profil oluşturma

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

  • Yerel ve Uzak profil oluşturma: Bunlar, profil oluşturma ortamınızı kurmanın iki yaygın yoludur. Yerel profil oluşturmada profil oluşturma API'si, modelinizin yürüttüğü makinede, örneğin GPU'lu yerel bir iş istasyonunda çağrılır. Uzaktan profil oluşturmada profil oluşturma API'si, modelinizin yürüttüğü yerden farklı bir makinede, örneğin bir Cloud TPU'da çağrılır.
  • Birden çok çalışanın profilini oluşturma: TensorFlow'un dağıtılmış eğitim özelliklerini kullanırken birden çok makinenin profilini çıkarabilirsiniz.
  • Donanım platformu: Profil CPU'ları, GPU'lar ve TPU'lar.

Aşağıdaki tablo, yukarıdaki kullanım durumlarından hangilerinin TensorFlow'daki çeşitli profil oluşturma API'leri tarafından desteklendiğine dair hızlı bir genel bakış sunar:

Profil oluşturma API'si Yerel Uzak Birden çok işçi Donanım Platformları
TensorBoard Keras Geri Arama Destekleniyor Desteklenmiyor Desteklenmiyor CPU, GPU
tf.profiler.experimental başlatma / durdurma API'si Destekleniyor Desteklenmiyor Desteklenmiyor CPU, GPU
tf.profiler.experimental client.trace API Destekleniyor Destekleniyor Destekleniyor CPU, GPU, TPU
Bağlam yöneticisi API'si Destekleniyor Desteklenmiyor Desteklenmiyor CPU, GPU

Optimum model performansı için en iyi uygulamalar

En iyi performansı elde etmek için TensorFlow modelleriniz için geçerli olan aşağıdaki önerileri 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ümünü kullandığınızdan emin olun.

Giriş veri hattını optimize edin

Verimli bir veri girişi ardışık düzeni, cihaz boşta kalma süresini azaltarak model yürütme hızınızı önemli ölçüde artırabilir. Veri girişi ardışık düzeninizi daha verimli hale getirmek için aşağıdaki en iyi uygulamaları burada ayrıntılı olarak dahil etmeyi düşünün:

  • Verileri önceden getir
  • Veri çıkarmayı paralelleştirin
  • Veri dönüşümünü paralelleştirin
  • Verileri bellekte önbelleğe al
  • Kullanıcı tanımlı işlevleri vektörleştirin
  • Dönüşümleri uygularken bellek kullanımını azaltın

Ek olarak, giriş ardışık düzeninin bir performans darboğazı olup olmadığını kontrol etmek için modelinizi sentetik verilerle çalıştırmayı deneyin.

Cihaz performansını iyileştirin

  • Eğitim mini grup boyutunu artırın (eğitim döngüsünün bir yinelemesinde cihaz başına kullanılan eğitim örneği sayısı)
  • Cihazdaki işlemlerin ne kadar verimli çalıştığını öğrenmek için TF İstatistiklerini kullanın
  • Hesaplamaları gerçekleştirmek için tf.function kullanın ve isteğe bağlı olarak experimental_compile bayrağını etkinleştirin
  • Adımlar arasındaki ana Python işlemlerini en aza indirin ve geri aramaları azaltın. Metrikleri her adımda değil birkaç adımda hesaplayın
  • Cihaz bilgi işlem birimlerini meşgul tutun
  • Paralel olarak birden fazla cihaza veri gönderin
  • Önce kanalları tercih etmek için veri düzenini optimize edin (örn. NHWC yerine NCHW). NVIDIA® V100 gibi bazı GPU'lar, NHWC veri düzeniyle daha iyi performans gösterir.
  • fp16 , IEEE tarafından belirtilen yarı kesinlikli kayan nokta formatı veya Beyin kayan nokta bfloat16 formatı gibi 16 bitlik sayısal gösterimler kullanmayı düşünün
  • Keras karma duyarlılık API'sini kullanmayı düşünün
  • GPU'lar üzerinde eğitim alırken TensorCore'u kullanın. GPU çekirdekleri, hassasiyet fp16 olduğunda ve giriş / çıkış boyutları 8 veya 16'ya bölünebildiğinde (int8 için) TensorCore kullanır

Ek kaynaklar

Bilinen sınırlamalar

TensorFlow 2.2 ve TensorFlow 2.3'te birden çok GPU'nun profilini oluşturma

TensorFlow 2.2 ve 2.3, yalnızca tek ana bilgisayar sistemleri için birden çok GPU profili oluşturmayı destekler; çoklu ana bilgisayar sistemleri için çoklu GPU profili oluşturma desteklenmez. Çok çalışanı olan GPU yapılandırmalarını profillemek için, her çalışanın bağımsız bir şekilde profillenmesi gerekir. TensorFlow 2.4'te, tf.profiler.experimental.trace API kullanılarak birden çok çalışanın profili oluşturulabilir.

CUDA® Toolkit 10.2 veya üzeri, birden çok GPU'yu profillemek için gereklidir. TensorFlow 2.2 ve 2.3, CUDA® Toolkit sürümlerini yalnızca 10.1'e kadar desteklediğinden, libcudart.so.10.1 ve libcupti.so.10.1 sembolik bağlantılar oluşturun.

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