Google I / O, 18-20 Mayıs'ta geri dönüyor! Yer ayırın ve programınızı oluşturun Şimdi kaydolun

Profiler'ı kullanarak TensorFlow performansını optimize edin

TensorFlow modellerinizin performansını izlemek için Profiler'da bulunan araçları kullanın. Modelinizin ana bilgisayar (CPU), cihaz (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 nihayetinde 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 şunu çalıştırın:

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ünden 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. Aygıt işlem kesinlikleri - 16 ve 32 bit hesaplamaları kullanan aygıt işlem 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 süre ç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 zamanını (tüm operasyonlar tarafından alınan sürenin 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, seri olarak bağlanmış çok sayıda veri işleme aşamasına bölünmüştür; burada bir aşamanın çıktısı, bir sonraki aşamanın girdisidir. Bu veri okuma sistemine giriş hattı adı verilir.

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 ardışık düzeninde geçirdiğinde girdiye 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ş ardışık düzeninin herhangi bir aşamasında 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 girdi ardışık düzeni performansı kılavuzuna 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ü

Gösterge tablosu üç 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ına göre ö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. Enstrümantasyonlu 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 süre ç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 tek tek girdi operasyonları için istatistikleri ve bunların kategorilerini yürütme süresine göre ayrıntılandı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 süresi boyunca işlem yürütme örneklerinin toplam 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 birinde 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.

    Dikkat:

    • 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ında harcanan zamanı içermez

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

      • Operasyonun cihazda maruz kaldığı 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 yürütüldü. 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 sürdüğü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 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 bir aygıt düğümü bölümü aşağıdaki yolları içerir:
    • Adım - Cihazda çalışmakta olan eğitim 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 "Ana Bilgisayar İş Parçacıkları" 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ıyorsanı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 ortalama geçen 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ında hata ayıklama

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 üzerine 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 noktadaki 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ırakma 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 degradeler 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ı
  • İstenen 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 degradeler 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ığınlanmış 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 dair ö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. Giriş 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ş Boru Hatlarının Özeti ve Giriş Boru Hattı 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ğ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ıyla 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ş ardışık düzeni 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
Toplu iş Yineleyici :: Toplu İş

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

görüntü

Bu bölüm, tüm ana bilgisayarlardaki tüm giriş ardışık düzenlerinin ö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ı cihazlara aktaran birden çok aygıt giriş işlem hattı vardır.

Her bir giriş 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ş Ardışık Düzeni" ni 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 kalın hatları vardır. 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 programlı 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 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ış bir 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 argümanı adım adları için bir önek olarak kullanılır, step_num anahtar kelime argümanı adım adlarına eklenir ve _r anahtar kelime argümanı 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. Bazı kombinasyonlar şu anda desteklenmektedir ve diğerleri gelecekte eklenecektir. Kullanım örneklerinden bazıları ş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üğü aynı 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 Uzaktan kumanda 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 en son uyumlu kitaplık sürümlerini 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 yapmak 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
  • Verileri birden çok cihaza paralel olarak 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 TensorCore'u kullanır (int8 için)

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 üstü, birden fazla 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