AMD in Action: Unveiling the Power of Application Tracing and Profiling — ROCm Blogs
简介
Rocprof 是一款强大的工具,设计用于分析和优化在 AMD ROCm 平台上运行的 HIP 程序的性能,帮助开发者找到并解决性能瓶颈。Rocprof 提供各种分析数据,包括性能计数器、硬件追踪和运行时 API/活动追踪。
Rocprof 是一个命令行接口(CLI)分析器,可以用在运行在 ROCm 支持的 GPU 上的应用程序,无需对应用程序进行任何代码修改。Rocprof CLI 允许用户追踪由 ROCm 提供的 API(如 HIP 或 HSA)驱动的 GPU 应用程序的整个执行过程。
Rocprof 是 ROCm 软件栈的一部分,默认随基础 ROCm 安装包一起提供。有两个版本的 Rocprof:ROCProfilerV1 和 ROCProfilerV2(beta 版本,可能会有所变化)。在本文中,我们主要讨论 ROCProfilerV1,因为它是 HIP 应用程序的首个和当前版本的分析工具。
有关 Rocprof 及其版本的更多信息,可以访问以下链接:
你可以在 GitHub 文件夹找到与本文相关的文件。
操作系统、硬件和软件要求
-
AMD GPU: 支持的操作系统和硬件列表请参见 ROCm 文档页面。
-
ROCm 6.0: 本文基于 ROCm 6.0 创建。请参阅 ROCm 安装说明。
-
Docker:Ubuntu Docker 引擎安装说明
预备步骤
让我们将本文的仓库克隆到本地系统中:
git clone https://github.com/ROCm/rocm-blogs.git
并移动到以下位置:
cd ./rocm-blogs/blogs/software-tools-optimization/roc-profiling
我们还将使用官方的 AMD Docker 镜像:rocm6.0.2_ubuntu22.04_py3.10_pytorch_2.1.2 在容器内进行分析任务。在克隆存储库的同一目录内,通过在终端中执行以下命令启动容器:
docker run -it --rm --name=my_rocprof --cap-add=SYS_PTRACE --cap-add=CAP_SYS_ADMIN --security-opt seccomp=unconfined --device=/dev/kfd --device=/dev/dri --group-add video --ipc=host --shm-size 8G -v $(pwd):/workdir -w /workdir rocm/pytorch:latest
下面是一些用于启动容器的设置定义:
-
-it
: 这个-i
和-t
的组合允许通过终端与容器进行交互。 -
--cap-add=SYS_PTRACE
和--cap-add=CAP_SYS_ADMIN
: 授予容器跟踪系统调用和系统监控的权限。 -
--device=/dev/kfd --device=/dev/dri
: 这些选项允许访问主机上的特定设备。`--device=/dev/kfd` 与 AMD GPU 设备相关,`--device=/dev/dri` 与直接访问图形硬件的设备相关。 -
--group-add video
: 此选项允许容器拥有直接访问视频硬件的必要权限。 -
-v $(pwd):/workdir -w /workdir
: 将主机的目录卷挂载到容器中,它将主机当前目录$(pwd)
映射到容器内的/workdir
,并将其设置为工作目录 (-w /workdir
)。Rocprof 的输出结果将本地持久化以供稍后使用和探索。 -
rocm/pytorch
: 这是镜像的名称。
此外,我们将使用以下 PyTorch 脚本,该脚本在 AMD GPU 上执行两个一维张量的相加操作。我们的计划是通过收集 HIP、HSA 和系统跟踪来对相加操作进行分析,以说明在 AMD 硬件上进行应用程序跟踪和分析的操作。以下脚本 vector_addition.py
存在于克隆的存储库内的 src
文件夹中。
import torch def vector_addition(): A = torch.tensor([1,2,3], device='cuda:0') B = torch.tensor([1,2,3], device='cuda:0') C = torch.add(A,B) return C if __name__=="__main__": print(vector_addition()