Xprof'u kullanmak için önce model iş yükü kodunuzda profil yakalamayı etkinleştirmeniz gerekir. Profilleri yakalamanın iki yolu vardır. Ayrıntılar aşağıda verilmiştir.
Programatik yakalama
Programatik yakalama ile, kodunuzda profilleri nerede yakalamak istediğinizi belirtmek için model kodunuza açıklama eklemeniz gerekir. Kullanıcılar genellikle eğitim döngüleri sırasında birkaç adım için profil toplar veya modellerindeki belirli bir bloğun profilini oluşturur. Farklı çerçeveler olan JAX, Pytorch XLA ve Tensorflow'da izleri yakalamanın farklı yolları vardır. İzleme, API tabanlı başlatma/durdurma veya bağlam yöneticisi tabanlı olarak başlatılabilir.
İsteğe bağlı yakalama (diğer adıyla manuel yakalama)
İsteğe bağlı profil yakalama, yayın sırasında profilleri geçici olarak yakalamak istediğinizde ve programatik profil yakalamayı etkinleştirmediğiniz dönemlerde kullanılır. Bu özellik genellikle çalıştırma sırasında model metriklerinizle ilgili bir sorun gördüğünüzde ve sorunu teşhis etmek için o anda bir süre boyunca profilleri yakalamak istediğinizde kullanılır.
İsteğe bağlı profil yakalamayı etkinleştirmek için kodunuzda xprof sunucusunu başlatmanız gerekir. Örneğin JAX'te jax.profiler.start_server'ı etkinleştirmek, makine öğrenimi iş yükünüzde xprof sunucusunu başlatır. Bu sunucu, profilleri yakalamaya başlamak için isteğe bağlı yakalama tetikleyicisini dinler.
Çalıştırma başına birden fazla oturum
Profilleri yakalarken tek bir çalıştırma için birden fazla oturum olarak yakalayabilirsiniz. 1-3. adımlarda bir eğitim çalıştırmasında profiller yakaladığınızı ve daha sonra 8-10. adımlarda profiller yakaladığınızı varsayalım. Dolayısıyla bunlar aynı çalıştırmaya ait profillerdir ancak 1-3. adımlardaki ilk yakalama oturum1, 8-10. adımlardaki ikinci yakalama ise oturum2 olur. Farklı oturumlar, her çalıştırma altında farklı tarih damgalarıyla gösterilir. Profilleri farklı oturumlarda programlı, isteğe bağlı veya her ikisinin karışımı şeklinde yakalayabilirsiniz.
Google Cloud'da XProf ve Tensorboard
Google Cloud'da Tensorboard ve XProf'u barındırmayı kolaylaştırmak için cloud-diagnostics-xprof kitaplığını kullanmanızı öneririz. Bu kitaplığı GCP'de kullanmanın başlıca avantajlarından bazıları şunlardır:
- XProf ve TensorBoard bağımlılıklarının kolay kurulumu ve paketlenmesi,
- Profillerinizi GCS'de saklayın. Bu, uzun süreli saklama ve çalıştırma sonrası analiz için faydalı olabilir (araştırmacı çalıştırmayı tamamladıktan sonra yakalanan yerel profiller silinir).
- GCE VM veya GKE pod'da TensorBoard'u sağlama yoluyla büyük profillerin ve birden fazla profilin hızlı yüklenmesi. Yükleme hızı ve maliyetle ilgili kullanıcı ihtiyaçlarına göre makine türünü değiştirme seçeneği sunulur.
- Profillerin kolayca paylaşılması ve ekip üyeleriyle ve Google mühendisleriyle ortak çalışma için bir bağlantı oluşturma,
- GKE ve GCE'deki iş yüklerinin isteğe bağlı olarak daha kolay profillendirilmesi sayesinde, profilleri yakalamak için iş yükünüzü çalıştıran herhangi bir ana makineyi seçebilirsiniz.
Çerçeveye özel talimatlar
Farklı çerçevelerde programatik profillemeyi ve isteğe bağlı profillemeyi nasıl etkinleştireceğinizi öğrenin:
Sorun giderme
GPU profili oluşturma
GPU'da çalışan programlar, iz görüntüleyicinin üst kısmına yakın GPU akışları için izler oluşturmalıdır. Yalnızca ana makine izlerini görüyorsanız program günlüklerinizde ve/veya çıktınızda aşağıdaki hata mesajlarını kontrol edin.
Şuna benzer bir hata alırsanız: Could not load dynamic library 'libcupti.so.10.1'
Tam hata:
W external/org_tensorflow/tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcupti.so.10.1'; dlerror: libcupti.so.10.1: cannot open shared object file: No such file or directory
2020-06-12 13:19:59.822799: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1422] function cupti_interface_->Subscribe( &subscriber_, (CUpti_CallbackFunc)ApiCallback, this)failed with error CUPTI could not be loaded or symbol could not be found.
libcupti.so yolunu LD_LIBRARY_PATH ortam değişkenine ekleyin.
(Yolu bulmak için locate libcupti.so seçeneğini deneyin.) Örneğin:
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/extras/CUPTI/lib64/:$LD_LIBRARY_PATH
Bu işlemi yaptıktan sonra Could not load dynamic library mesajını almaya devam ederseniz GPU izinin izleyici penceresinde gösterilip gösterilmediğini kontrol edin. Bu mesaj, libcupti kitaplığı birden fazla yerde arandığı için bazen her şey çalışırken bile gösterilir.
Şuna benzer bir hata alırsanız: failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
Tam hata:
E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1445] function cupti_interface_->EnableCallback( 0 , subscriber_, CUPTI_CB_DOMAIN_DRIVER_API, cbid)failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
2020-06-12 14:31:54.097791: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1487] function cupti_interface_->ActivityDisable(activity)failed with error CUPTI_ERROR_NOT_INITIALIZED
Aşağıdaki komutları çalıştırın (Bunun için yeniden başlatma yapılması gerekir):
echo 'options nvidia "NVreg_RestrictProfilingToAdminUsers=0"' | sudo tee -a /etc/modprobe.d/nvidia-kernel-common.conf
sudo update-initramfs -u
sudo reboot now
Daha fazla bilgi için NVIDIA'nın bu hatayla ilgili belgelerini inceleyin.
Uzak makinede profil oluşturma
Profilini oluşturmak istediğiniz program uzak bir makinede çalışıyorsa bir seçenek de yukarıdaki tüm talimatları uzak makinede çalıştırmaktır (özellikle XProf sunucusunu uzak makinede başlatın). Ardından, XProf web kullanıcı arayüzüne yerel makinenizden erişmek için SSH yerel bağlantı noktası yönlendirmeyi kullanın. Varsayılan XProf bağlantı noktası 8791'i yerel makineden uzak makineye yönlendirmek için aşağıdaki SSH komutunu kullanın:
ssh -L 8791:localhost:8791 <remote server address>
veya Google Cloud kullanıyorsanız:
$ gcloud compute ssh <machine-name> -- -L 8791:localhost:8791
Birden fazla TensorBoard yüklemesi
TensorBoard'u başlatma işlemi ValueError: Duplicate
plugins for name projector gibi bir hatayla başarısız olursa
Bunun nedeni genellikle TensorBoard ve/veya TensorFlow'un iki sürümünün yüklü olmasıdır (ör. tensorflow, tf-nightly, tensorboard ve tb-nightly pip paketlerinin tümü TensorBoard'u içerir). Tek bir pip paketinin kaldırılması, tensorboard yürütülebilir dosyasının kaldırılmasına neden olabilir. Bu dosyanın değiştirilmesi zordur. Bu nedenle, her şeyi kaldırıp tek bir sürümü yeniden yüklemeniz gerekebilir:
pip uninstall tensorflow tf-nightly tensorboard tb-nightly xprof xprof-nightly tensorboard-plugin-profile tbp-nightly
pip install tensorboard xprof
Ayrıcalık sorunlarını çözme
Docker ortamında veya Linux'ta CUDA® Toolkit ile profil oluşturma işlemi çalıştırdığınızda yetersiz CUPTI ayrıcalıklarıyla ilgili sorunlarla karşılaşabilirsiniz (CUPTI_ERROR_INSUFFICIENT_PRIVILEGES). Linux'ta bu sorunları nasıl çözebileceğiniz hakkında daha fazla bilgi edinmek için NVIDIA Developer Docs'a gidin.
Docker ortamında CUPTI ayrıcalığı sorunlarını çözmek için aşağıdaki komutu çalıştırın:
docker run option '--privileged=true'