如需使用 Xprof,您需要先在模型工作负载代码中启用性能分析文件捕获功能。您可以通过以下两种方式捕获配置文件。
程序化捕获
使用程序化捕获时,您需要对模型代码进行注释,以指定要在代码中的哪个位置捕获性能分析文件。通常,用户会在训练循环期间收集几个步骤的配置文件,或者对模型中的特定块进行分析。在不同的框架 JAX、Pytorch XLA 和 Tensorflow 中,可以通过不同的方式捕获轨迹 - 基于 API 的开始/停止轨迹或基于上下文管理器的轨迹。
按需捕获(又称手动捕获)
如果您想在运行期间临时捕获性能分析文件,或者在未启用程序化性能分析文件捕获的时间段内捕获性能分析文件,可以使用按需性能分析文件捕获。如果您在运行期间发现模型指标存在问题,并希望在某个时间段内立即捕获性能分析文件以诊断问题,那么此功能会很有用。
如需启用按需性能分析文件捕获功能,您仍需在代码中启动 xprof 服务器。例如,在 JAX 中,启用 jax.profiler.start_server 将在机器学习工作负载上启动一个 xprof 服务器,该服务器会监听按需捕获触发器,以开始捕获性能分析文件。
每次运行多个会话
捕获性能分析文件时,您可以将单次运行的性能分析文件捕获为多个会话。假设您在训练运行中捕获了第 1-3 步的性能分析文件,之后又捕获了第 8-10 步的性能分析文件。因此,这些是同一运行的配置文件,但步骤 1-3 中的第一次捕获将是 session1,而步骤 8-10 中的第二次捕获将是 session2。每次运行的不同会话将以不同的日期戳表示。您可以在不同的会话中以编程方式、按需或以两者混合的方式捕获性能分析文件。
Google Cloud 上的 XProf 和 Tensorboard
在 Google Cloud 上,我们建议使用 cloud-diagnostics-xprof 库,以便更轻松地托管 Tensorboard 和 XProf。在 GCP 上使用此库的一些主要优势:
- 轻松设置和打包 XProf 和 TensorBoard 依赖项;
- 将性能分析文件存储在 GCS 中,这有助于长期保留数据和进行运行后分析(研究人员完成运行后,系统会删除捕获的本地性能分析文件);
- 通过在 GCE 虚拟机或 GKE pod 上预配 Tensorboard 来快速加载大型性能分析文件和多个性能分析文件,并可根据用户对加载速度和费用的需求更改机器类型;
- 创建链接,以便轻松分享性能分析文件,并与团队成员和 Google 工程师协作;
- 更轻松地对 GKE 和 GCE 上的工作负载进行按需分析,以便选择运行工作负载的任何主机来捕获性能分析文件。
框架专属说明
了解如何在不同框架中启用程序化分析和按需分析:
问题排查
GPU 性能分析
在 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 端口 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® 工具包运行分析时,您可能会遇到与 CUPTI 权限不足 (CUPTI_ERROR_INSUFFICIENT_PRIVILEGES) 相关的问题。请前往 NVIDIA 开发者文档,详细了解如何在 Linux 上解决这些问题。
如需解决 Docker 环境中的 CUPTI 权限问题,请运行
docker run option '--privileged=true'