Создание профилей

Для использования Xprof необходимо сначала включить захват профилей в коде рабочей нагрузки вашей модели. Существует два способа захвата профилей, подробно описанные ниже.

Программный захват

При программном захвате данных необходимо аннотировать код модели, чтобы указать, в каких местах кода вы хотите собирать профили. Обычно пользователи собирают профили для нескольких шагов в процессе обучения или профилируют определенный блок в своей модели. Существуют разные способы захвата трассировки в различных фреймворках, таких как JAX, PyTorch XLA и TensorFlow — либо на основе API для запуска/остановки трассировки, либо на основе контекстного менеджера.

Захват по запросу (или ручной захват)

Функция захвата профилирования по запросу используется, когда вам нужно захватывать профили в произвольном порядке во время выполнения программы, в течение периодов времени, когда программный захват профилирования не был включен. Обычно это используется, когда вы обнаруживаете какие-либо проблемы с метриками вашей модели во время выполнения и хотите захватить профили в этот момент времени на определенный период, чтобы диагностировать проблему.

Для включения захвата профилей по запросу вам все равно необходимо запустить сервер xprof в своем коде. Например, в JAX включение параметра jax.profiler.start_server запустит сервер xprof в вашей рабочей нагрузке машинного обучения, который будет ожидать триггера захвата по запросу для начала захвата профилей.

Несколько сессий за один запуск

При создании профилей можно создавать профили для одного запуска в виде нескольких сессий. Допустим, вы создали профили в ходе обучения на шагах 1-3, а затем — на шагах 8-10. Таким образом, это профили для одного и того же запуска, но первый снимок с шагов 1-3 будет считаться сессией 1, а второй — с шагов 8-10 — сессией 2. Разные сессии будут обозначены разными метками времени под каждым запуском. Вы можете создавать профили в разных сессиях либо программно, либо по запросу, либо комбинируя оба способа.

XProf и Tensorboard в облаке Google

В Google Cloud мы рекомендуем использовать библиотеку cloud-diagnostics-xprof для упрощения размещения Tensorboard и XProf. Вот некоторые из основных преимуществ использования этой библиотеки в GCP:

  • Простая настройка и упаковка зависимостей XProf и Tensorboard;
  • Сохраняйте свои профили в GCS, что может быть полезно для долговременного хранения и анализа после завершения работы программы (локальные профили будут удалены после того, как исследователь завершит работу);
  • Быстрая загрузка больших и множественных профилей путем развертывания Tensorboard на виртуальной машине GCE или в модуле GKE, с возможностью изменения типа машины в зависимости от потребностей пользователя в скорости и стоимости загрузки;
  • Создайте ссылку для удобного обмена профилями и совместной работы с членами команды и инженерами 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 на удаленном компьютере), а затем использовать переадресацию локальных портов SSH для доступа к веб-интерфейсу XProf с вашего локального компьютера. Используйте следующую команду SSH для переадресации порта 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 (например, пакеты pip tensorflow , tf-nightly , tensorboard и tb-nightly включают 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 или в Linux могут возникнуть проблемы, связанные с недостаточными правами CUPTI ( CUPTI_ERROR_INSUFFICIENT_PRIVILEGES ). Для получения дополнительной информации о том, как решить эти проблемы в Linux, обратитесь к документации для разработчиков NVIDIA .

Для решения проблем с правами доступа CUPTI в среде Docker выполните команду:

docker run option '--privileged=true'