প্রোফাইল ক্যাপচার করা হচ্ছে

Xprof ব্যবহার করার জন্য, আপনাকে প্রথমে আপনার মডেল ওয়ার্কলোড কোডের মধ্যে প্রোফাইল ক্যাপচার সক্ষম করতে হবে। প্রোফাইল ক্যাপচার করার দুটি উপায় রয়েছে, যার বিস্তারিত নীচে দেওয়া হল।

প্রোগ্রাম্যাটিক ক্যাপচার

প্রোগ্রাম্যাটিক ক্যাপচারের মাধ্যমে, আপনার মডেল কোডটি টীকাবদ্ধ করতে হবে যাতে আপনি আপনার কোডের কোথায় প্রোফাইল ক্যাপচার করতে চান তা নির্দিষ্ট করতে পারেন। সাধারণত ব্যবহারকারীরা তাদের প্রশিক্ষণ লুপের সময় কয়েকটি ধাপের জন্য প্রোফাইল সংগ্রহ করে, অথবা তাদের মডেলের মধ্যে একটি নির্দিষ্ট ব্লক প্রোফাইল করে। JAX, Pytorch XLA এবং Tensorflow - বিভিন্ন ফ্রেমওয়ার্কে ট্রেস ক্যাপচার করার বিভিন্ন উপায় রয়েছে - হয় api-ভিত্তিক স্টার্ট/স্টপ ট্রেস অথবা কনটেক্সট ম্যানেজার ভিত্তিক।

অন-ডিমান্ড ক্যাপচার (ওরফে ম্যানুয়াল ক্যাপচার)

যখন আপনি আপনার রান চলাকালীন অ্যাড-হক প্রোফাইল ক্যাপচার করতে চান, তখন অন-ডিমান্ড প্রোফাইল ক্যাপচার ব্যবহার করা হয়, যখন আপনি প্রোগ্রাম্যাটিক প্রোফাইল ক্যাপচার সক্ষম করেননি। এটি সাধারণত তখন ব্যবহার করা হয় যখন আপনি রান চলাকালীন আপনার মডেল মেট্রিক্সে কিছু সমস্যা দেখতে পান এবং সমস্যাটি নির্ণয়ের জন্য কিছু সময়ের জন্য সেই মুহূর্তে প্রোফাইল ক্যাপচার করতে চান।

অন-ডিমান্ড প্রোফাইল ক্যাপচার সক্ষম করতে, আপনাকে এখনও আপনার কোডের মধ্যে xprof সার্ভারটি শুরু করতে হবে। উদাহরণস্বরূপ, JAX-এ, jax.profiler.start_server সক্ষম করলে আপনার ML ওয়ার্কলোডে একটি xprof সার্ভার শুরু হবে যা প্রোফাইল ক্যাপচার শুরু করার জন্য অন-ডিমান্ড ক্যাপচার ট্রিগারের কথা শুনবে।

প্রতি রানে একাধিক সেশন

যখন আপনি প্রোফাইল ক্যাপচার করেন, তখন আপনি একাধিক সেশন হিসেবে একটি রানের জন্য প্রোফাইল ক্যাপচার করতে পারেন। ধরুন আপনি ধাপ ১-৩ থেকে একটি প্রশিক্ষণ রানে প্রোফাইল ক্যাপচার করেন এবং পরে ধাপ ৮-১০ থেকে প্রোফাইল ক্যাপচার করেন। সুতরাং এগুলি একই রানের জন্য প্রোফাইল, তবে ধাপ ১-৩ থেকে প্রথম ক্যাপচারটি হবে সেশন১ এবং ধাপ ৮-১০ থেকে দ্বিতীয় ক্যাপচারটি হবে সেশন২। প্রতিটি রানের অধীনে বিভিন্ন সেশনগুলিকে বিভিন্ন তারিখ স্ট্যাম্প দিয়ে চিহ্নিত করা হবে। আপনি প্রোগ্রাম্যাটিকভাবে বা অন-ডিমান্ড বা উভয়ের মিশ্রণে বিভিন্ন সেশনে প্রোফাইল ক্যাপচার করতে পারেন।

গুগল ক্লাউডে এক্সপ্রোফ এবং টেনসরবোর্ড

গুগল ক্লাউডে, টেনসরবোর্ড এবং এক্সপ্রোফ হোস্ট করা সহজ করার জন্য আমরা cloud-diagnostics-xprof লাইব্রেরি ব্যবহার করার পরামর্শ দিচ্ছি। জিসিপিতে এই লাইব্রেরি ব্যবহারের কিছু প্রধান সুবিধা:

  • XProf এবং tensorboard নির্ভরতার সহজ সেটআপ এবং প্যাকেজিং;
  • আপনার প্রোফাইলগুলি GCS-এ সংরক্ষণ করুন যা দীর্ঘমেয়াদী ধরে রাখা এবং রান-পরবর্তী বিশ্লেষণের জন্য কার্যকর হতে পারে (গবেষক রান শেষ করার পরে ক্যাপচার করা স্থানীয় প্রোফাইলগুলি মুছে ফেলা হবে);
  • GCE VM বা GKE পডে টেনসরবোর্ড স্থাপন করে বৃহৎ প্রোফাইল এবং একাধিক প্রোফাইল দ্রুত লোড করা, লোডিং গতি এবং খরচের জন্য ব্যবহারকারীর চাহিদার উপর ভিত্তি করে মেশিনের ধরণ পরিবর্তন করার বিকল্প সহ;
  • টিম সদস্য এবং গুগল ইঞ্জিনিয়ারদের সাথে প্রোফাইল সহজে শেয়ার এবং সহযোগিতার জন্য একটি লিঙ্ক তৈরি করুন;
  • GKE এবং GCE-তে ওয়ার্কলোডের সহজ অন-ডিমান্ড প্রোফাইলিং, প্রোফাইল ক্যাপচার করার জন্য আপনার ওয়ার্কলোড চালানোর জন্য যেকোনো হোস্ট বেছে নেওয়া।

ফ্রেমওয়ার্ক-নির্দিষ্ট নির্দেশাবলী

বিভিন্ন ফ্রেমওয়ার্কে প্রোগ্রাম্যাটিক প্রোফাইলিং এবং অন-ডিমান্ড প্রোফাইলিং কীভাবে সক্ষম করবেন তা দেখুন:

সমস্যা সমাধান

জিপিইউ প্রোফাইলিং

GPU তে চলমান প্রোগ্রামগুলি ট্রেস ভিউয়ারের উপরের দিকে GPU স্ট্রিমগুলির জন্য ট্রেস তৈরি করবে। যদি আপনি কেবল হোস্ট ট্রেস দেখতে পান, তাহলে নিম্নলিখিত ত্রুটি বার্তাগুলির জন্য আপনার প্রোগ্রাম লগ এবং/অথবা আউটপুট পরীক্ষা করুন।

যদি আপনি একটি ত্রুটি পান যেমন: 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 ওয়েব UI অ্যাক্সেস করতে SSH স্থানীয় পোর্ট ফরওয়ার্ডিং ব্যবহার করুন। স্থানীয় থেকে দূরবর্তী মেশিনে ডিফল্ট XProf পোর্ট 8791 ফরোয়ার্ড করতে নিম্নলিখিত SSH কমান্ডটি ব্যবহার করুন:

ssh -L 8791:localhost:8791 <remote server address>

অথবা যদি আপনি গুগল ক্লাউড ব্যবহার করেন:

$ gcloud compute ssh <machine-name> -- -L 8791:localhost:8791

একাধিক টেনসরবোর্ড ইনস্টল

যদি 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

বিশেষাধিকার সংক্রান্ত সমস্যা সমাধান করুন

যখন আপনি ডকার পরিবেশে অথবা লিনাক্সে CUDA® টুলকিট দিয়ে প্রোফাইলিং চালান, তখন আপনি অপর্যাপ্ত CUPTI সুবিধা ( CUPTI_ERROR_INSUFFICIENT_PRIVILEGES ) সম্পর্কিত সমস্যার সম্মুখীন হতে পারেন। লিনাক্সে এই সমস্যাগুলি কীভাবে সমাধান করবেন সে সম্পর্কে আরও জানতে NVIDIA ডেভেলপার ডক্সে যান।

ডকার পরিবেশে CUPTI সুবিধা সংক্রান্ত সমস্যা সমাধানের জন্য, চালান

docker run option '--privileged=true'