برای استفاده از Xprof، ابتدا باید ثبت پروفایل را در کد بار کاری مدل خود فعال کنید. دو روش برای ثبت پروفایلها وجود دارد که در زیر به تفصیل شرح داده شده است.
ضبط برنامهای
با ضبط برنامهای، باید کد مدل خود را حاشیهنویسی کنید تا مشخص کنید که میخواهید پروفایلها را در کجای کد خود ضبط کنید. معمولاً کاربران پروفایلها را برای چند مرحله در طول حلقه آموزشی خود جمعآوری میکنند، یا یک بلوک خاص را در مدل خود ضبط میکنند. روشهای مختلفی برای ضبط ردیابیها در چارچوبهای مختلف JAX، Pytorch XLA و Tensorflow وجود دارد - یا ردیابی شروع/توقف مبتنی بر API یا مبتنی بر مدیریت زمینه.
ضبط بر اساس تقاضا (معروف به ضبط دستی)
ضبط پروفایل بر اساس تقاضا زمانی استفاده میشود که میخواهید پروفایلها را به صورت موردی در طول اجرا، برای دورههای زمانی که ضبط پروفایل برنامهریزیشده را فعال نکردهاید، ضبط کنید. این معمولاً زمانی استفاده میشود که در طول اجرا مشکلی در معیارهای مدل خود مشاهده میکنید و میخواهید پروفایلها را در آن لحظه برای مدتی ضبط کنید تا مشکل را تشخیص دهید.
برای فعال کردن ضبط پروفایل بر اساس تقاضا، هنوز باید سرور xprof را در کد خود شروع کنید. برای مثال، در JAX، فعال کردن jax.profiler.start_server یک سرور xprof را در بار کاری ML شما شروع میکند که منتظر شروع ضبط پروفایلها توسط ماشه ضبط بر اساس تقاضا است.
چندین جلسه در هر اجرا
وقتی پروفایلها را ثبت میکنید، میتوانید پروفایلها را برای یک اجرا به صورت چندین جلسه ثبت کنید. فرض کنید پروفایلها را در یک اجرای آموزشی از مرحله ۱-۳ ثبت میکنید و بعداً پروفایلها را از مرحله ۸-۱۰ ثبت میکنید. بنابراین اینها پروفایلهایی برای یک اجرا هستند، اما اولین ثبت از مرحله ۱-۳ جلسه ۱ و دومین ثبت از مرحله ۸-۱۰ جلسه ۲ خواهد بود. جلسات مختلف با مهرهای تاریخ مختلف در زیر هر اجرا مشخص میشوند. میتوانید پروفایلها را در جلسات مختلف یا به صورت برنامهنویسی یا بر اساس تقاضا یا ترکیبی از هر دو ثبت کنید.
XProv و Tensorboard در فضای ابری گوگل
در Google Cloud، توصیه میکنیم از کتابخانه cloud-diagnostics-xprof استفاده کنید تا میزبانی Tensorboard و XProf آسانتر شود. برخی از مزایای اصلی استفاده از این کتابخانه در GCP:
- راهاندازی و بستهبندی آسان وابستگیهای XProv و tensorboard؛
- پروفایلهای خود را در GCS ذخیره کنید که میتواند برای نگهداری طولانیمدت و تجزیه و تحلیل پس از اجرا مفید باشد (پروفایلهای محلی ضبطشده پس از اتمام اجرا توسط محقق حذف میشوند)؛
- بارگذاری سریع پروفایلهای بزرگ و چندین پروفایل با تهیه Tensorboard روی GCE VM یا GKE pod، با امکان تغییر نوع دستگاه بر اساس نیازهای کاربر برای سرعت و هزینه بارگذاری؛
- برای اشتراکگذاری آسان پروفایلها و همکاری با اعضای تیم و مهندسان گوگل، لینکی ایجاد کنید.
- پروفایلبندی آسانتر بر اساس تقاضا برای بارهای کاری در 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 را روی دستگاه از راه دور راهاندازی کنید)، سپس از انتقال پورت محلی SSH برای دسترسی به رابط کاربری وب XProf از دستگاه محلی خود استفاده کنید. از دستور SSH زیر برای انتقال پورت پیشفرض XProf، شماره ۸۷۹۱، از دستگاه محلی به دستگاه از راه دور استفاده کنید:
ssh -L 8791:localhost:8791 <remote server address>
یا اگر از گوگل کلود استفاده میکنید:
$ 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
حل مشکلات مربوط به امتیاز
وقتی که شما با استفاده از CUDA® Toolkit در محیط Docker یا روی لینوکس، پروفایلینگ را اجرا میکنید، ممکن است با مشکلاتی مربوط به دسترسیهای ناکافی CUPTI ( CUPTI_ERROR_INSUFFICIENT_PRIVILEGES ) مواجه شوید. برای کسب اطلاعات بیشتر در مورد نحوه حل این مشکلات در لینوکس، به مستندات توسعهدهندگان NVIDIA مراجعه کنید.
برای حل مشکلات مربوط به امتیاز CUPTI در محیط داکر، دستور زیر را اجرا کنید.
docker run option '--privileged=true'