Xprof का इस्तेमाल करने के लिए, आपको सबसे पहले अपने मॉडल वर्कलोड कोड में प्रोफ़ाइल कैप्चर करने की सुविधा चालू करनी होगी. प्रोफ़ाइलें कैप्चर करने के दो तरीके हैं. इनके बारे में यहां बताया गया है.
प्रोग्रामैटिक कैप्चर
प्रोग्राम के हिसाब से कैप्चर करने की सुविधा का इस्तेमाल करने के लिए, आपको अपने मॉडल कोड को एनोटेट करना होगा. इससे यह तय किया जा सकेगा कि आपको अपने कोड में कहां प्रोफ़ाइलें कैप्चर करनी हैं. आम तौर पर, उपयोगकर्ता ट्रेनिंग लूप के दौरान कुछ चरणों के लिए प्रोफ़ाइलें इकट्ठा करते हैं या अपने मॉडल में किसी खास ब्लॉक की प्रोफ़ाइल बनाते हैं. अलग-अलग फ़्रेमवर्क JAX, PyTorch XLA, और TensorFlow में ट्रेस कैप्चर करने के अलग-अलग तरीके हैं. जैसे, एपीआई पर आधारित स्टार्ट/स्टॉप ट्रेस या कॉन्टेक्स्ट मैनेजर पर आधारित ट्रेस.
मांग के हिसाब से कैप्चर करना (इसे मैन्युअल कैप्चर भी कहा जाता है)
ऑन-डिमांड प्रोफ़ाइल कैप्चर का इस्तेमाल तब किया जाता है, जब आपको कैंपेन के दौरान किसी खास समय के लिए प्रोफ़ाइलें कैप्चर करनी हों. ऐसा तब किया जाता है, जब आपने प्रोग्राम के हिसाब से प्रोफ़ाइल कैप्चर करने की सुविधा चालू न की हो. इस विकल्प का इस्तेमाल आम तौर पर तब किया जाता है, जब आपको रन के दौरान अपने मॉडल की मेट्रिक में कोई समस्या दिखती है. साथ ही, आपको समस्या का पता लगाने के लिए, कुछ समय के लिए उस इंस्टेंस पर प्रोफ़ाइलें कैप्चर करनी होती हैं.
मांग पर प्रोफ़ाइल कैप्चर करने की सुविधा चालू करने के लिए, आपको अपने कोड में xprof सर्वर शुरू करना होगा. उदाहरण के लिए, JAX में jax.profiler.start_server को चालू करने पर, आपके एमएल वर्कलोड पर xprof सर्वर शुरू हो जाएगा. यह सर्वर, प्रोफ़ाइलें कैप्चर करने के लिए, मांग पर कैप्चर करने वाले ट्रिगर को सुनेगा.
हर रन के लिए कई सेशन
प्रोफ़ाइलें कैप्चर करते समय, एक ही रन के लिए कई सेशन की प्रोफ़ाइलें कैप्चर की जा सकती हैं. मान लें कि आपने ट्रेनिंग रन में, पहले चरण से तीसरे चरण तक की प्रोफ़ाइलें कैप्चर की हैं. इसके बाद, आपने आठवें से दसवें चरण तक की प्रोफ़ाइलें कैप्चर की हैं. इसलिए, ये एक ही रन की प्रोफ़ाइलें हैं. हालांकि, पहले चरण से तीसरे चरण तक का पहला कैप्चर session1 होगा और आठवें चरण से दसवें चरण तक का दूसरा कैप्चर session2 होगा. हर रन के तहत, अलग-अलग सेशन को अलग-अलग तारीख के स्टैंप से दिखाया जाएगा. अलग-अलग सेशन में प्रोफ़ाइलें कैप्चर की जा सकती हैं. इसके लिए, प्रोग्राम के हिसाब से या मांग पर कैप्चर करने की सुविधा का इस्तेमाल किया जा सकता है. इसके अलावा, दोनों सुविधाओं का एक साथ इस्तेमाल भी किया जा सकता है.
Google Cloud पर XProf और Tensorboard
हमारा सुझाव है कि Google Cloud पर, Tensorboard और XProf को आसानी से होस्ट करने के लिए, cloud-diagnostics-xprof लाइब्रेरी का इस्तेमाल करें. GCP पर इस लाइब्रेरी का इस्तेमाल करने के कुछ मुख्य फ़ायदे:
- XProf और TensorBoard की डिपेंडेंसी को आसानी से सेटअप और पैकेज किया जा सकता है;
- अपनी प्रोफ़ाइलें GCS में सेव करें. इससे डेटा को लंबे समय तक बनाए रखने और रन के बाद उसका विश्लेषण करने में मदद मिल सकती है. कैप्चर की गई स्थानीय प्रोफ़ाइलें, रिसर्चर के रन पूरा करने के बाद मिटा दी जाएंगी;
- GCE वीएम या GKE पॉड पर Tensorboard उपलब्ध कराकर, बड़ी और एक से ज़्यादा प्रोफ़ाइलों को तेज़ी से लोड किया जा सकता है. साथ ही, उपयोगकर्ता की ज़रूरतों के हिसाब से मशीन टाइप को बदला जा सकता है, ताकि लोड होने की स्पीड और लागत को कंट्रोल किया जा सके;
- प्रोफ़ाइलें आसानी से शेयर करने और टीम के सदस्यों और Google इंजीनियरों के साथ मिलकर काम करने के लिए लिंक बनाएं;
- GKE और GCE पर वर्कलोड की प्रोफ़ाइलिंग को आसान बनाया गया है, ताकि प्रोफ़ाइल कैप्चर करने के लिए, वर्कलोड चलाने वाले किसी भी होस्ट को चुना जा सके.
फ़्रेमवर्क के हिसाब से निर्देश
अलग-अलग फ़्रेमवर्क में, प्रोग्राम के हिसाब से प्रोफ़ाइलिंग और मांग पर प्रोफ़ाइलिंग की सुविधा चालू करने का तरीका जानें:
समस्या का हल
जीपीयू प्रोफ़ाइलिंग
जीपीयू पर चल रहे प्रोग्राम को, ट्रेस व्यूअर के सबसे ऊपर मौजूद जीपीयू स्ट्रीम के लिए ट्रेस जनरेट करने चाहिए. अगर आपको सिर्फ़ होस्ट ट्रेस दिख रहे हैं, तो अपने प्रोग्राम के लॉग और/या आउटपुट में गड़बड़ी के ये मैसेज देखें.
अगर आपको इस तरह की गड़बड़ी का मैसेज मिलता है: Could not load dynamic library 'libcupti.so.10.1'
पूरी गड़बड़ी:
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 के पाथ को एनवायरमेंट वैरिएबल LD_LIBRARY_PATH में जोड़ें.
(रास्ता ढूंढने के लिए, locate libcupti.so आज़माएं.) उदाहरण के लिए:
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/extras/CUPTI/lib64/:$LD_LIBRARY_PATH
अगर इसके बाद भी आपको Could not load dynamic library मैसेज मिलता है, तो देखें कि क्या ट्रेस व्यूअर में GPU ट्रेस दिख रहा है. कभी-कभी यह मैसेज तब भी दिखता है, जब सब कुछ ठीक से काम कर रहा हो. ऐसा इसलिए होता है, क्योंकि यह libcupti लाइब्रेरी को कई जगहों पर खोजता है.
अगर आपको इस तरह की गड़बड़ी का मैसेज मिलता है: failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
पूरी गड़बड़ी:
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
ये कमांड चलाएं (ध्यान दें कि इसके लिए, आपको सिस्टम को रीबूट करना होगा):
echo 'options nvidia "NVreg_RestrictProfilingToAdminUsers=0"' | sudo tee -a /etc/modprobe.d/nvidia-kernel-common.conf
sudo update-initramfs -u
sudo reboot now
ज़्यादा जानकारी के लिए, इस गड़बड़ी के बारे में NVIDIA का दस्तावेज़ देखें.
किसी रिमोट मशीन पर प्रोफ़ाइलिंग करना
अगर आपको जिस प्रोग्राम की प्रोफ़ाइल बनानी है वह किसी रिमोट मशीन पर चल रहा है, तो रिमोट मशीन पर ऊपर दिए गए सभी निर्देशों को चलाएं. खास तौर पर, रिमोट मशीन पर XProf सर्वर शुरू करें. इसके बाद, एसएसएच लोकल पोर्ट फ़ॉरवर्डिंग का इस्तेमाल करके, अपनी लोकल मशीन से XProf वेब यूज़र इंटरफ़ेस (यूआई) को ऐक्सेस करें. लोकल मशीन से रिमोट मशीन पर डिफ़ॉल्ट XProf पोर्ट 8791 को फ़ॉरवर्ड करने के लिए, इस एसएसएच कमांड का इस्तेमाल करें:
ssh -L 8791:localhost:8791 <remote server address>
या अगर Google Cloud का इस्तेमाल किया जा रहा है, तो:
$ gcloud compute ssh <machine-name> -- -L 8791:localhost:8791
TensorBoard के एक से ज़्यादा इंस्टॉलेशन
अगर TensorBoard शुरू करने के दौरान, इस तरह की कोई गड़बड़ी होती है: ValueError: Duplicate
plugins for name projector
ऐसा अक्सर इसलिए होता है, क्योंकि TensorBoard और/या TensorFlow के दो वर्शन इंस्टॉल किए गए होते हैं. उदाहरण के लिए, tensorflow, tf-nightly, tensorboard, और tb-nightly pip पैकेज में TensorBoard शामिल होता है. किसी एक pip पैकेज को अनइंस्टॉल करने से, tensorboard एक्ज़ीक्यूटेबल हट सकता है. इसे फिर से इंस्टॉल करना मुश्किल होता है. इसलिए, हो सकता है कि आपको सभी पैकेज अनइंस्टॉल करके, सिर्फ़ एक वर्शन फिर से इंस्टॉल करना पड़े:
pip uninstall tensorflow tf-nightly tensorboard tb-nightly xprof xprof-nightly tensorboard-plugin-profile tbp-nightly
pip install tensorboard xprof
अधिकार से जुड़ी समस्याओं को हल करना
Docker एनवायरमेंट या Linux पर CUDA® Toolkit की मदद से प्रोफ़ाइलिंग करने पर, आपको CUPTI के लिए ज़रूरी अनुमतियों से जुड़ी समस्याएं आ सकती हैं (CUPTI_ERROR_INSUFFICIENT_PRIVILEGES). Linux पर इन समस्याओं को हल करने के बारे में ज़्यादा जानने के लिए, NVIDIA Developer Docs पर जाएं.
Docker एनवायरमेंट में CUPTI के विशेषाधिकारों से जुड़ी समस्याओं को हल करने के लिए, यह कमांड चलाएं
docker run option '--privileged=true'