NVIDIA CUDA 工具包符号服务器

这篇文章最初发表在 NVIDIA 技术博客上。

NVIDIA 已经提供了 Windows 系统的 GPU 驱动程序二进制符号服务器。现在,NVIDIA 也开始提供 Linux 系统的 CUDA Toolkit 符号

我们提供什么?

NVIDIA 正在为 Linux 引入 CUDA Toolkit 符号,以增强应用程序开发功能。在应用程序开发过程中,您现在可以下载正在应用程序中调试或分析的 NVIDIA 库的模糊符号。这是 CUDA 驱动程序的初始装运(lib CUDA .so)和 CUDA 运行时(libcudart.so),将添加更多库。

例如,当问题似乎与 CUDA neneneba API 有关时,可能并不总是能够向 NVIDIA 提供具有所有库加载信息的再现示例、核心转储或未同步堆栈跟踪。提供符号化的调用堆栈可以帮助加快调试过程。

我们只是托管符号文件,所以调试数据不会被分发。符号文件包含模糊的符号名称。

快速启动指南

对于每个库,有两种推荐的使用模糊符号的方法:

  • 通过解开库
  • 通过将.sym 文件部署为库的符号文件
bash 复制代码
# Determine the symbol file to fetch and obtain it
$ readelf -n /usr/local/cuda/lib64/libcudart.so

# ... Build ID: 70f26eb93e24216ffc0e93ccd8da31612d277030
# Browse to https://cudatoolkit-symbols.nvidia.com/libcudart.so/70f26eb93e24216ffc0e93ccd8da31612d277030/index.html to determine filename to download
$ wget https://cudatoolkit-symbols.nvidia.com/libcudart.so/70f26eb93e24216ffc0e93ccd8da31612d277030/libcudart.so.12.2.128.sym

# Then with appropriate permissions, either unstrip,
$ eu-unstrip /usr/local/cuda-12.2/targets/x86_64-linux/lib/libcudart.so.12.2.128 libcudart.so.12.2.128.sym --o /usr/local/cuda-12.2/targets/x86_64-linux/lib/libcudart.so.12.2.128

# Or, with appropriate permissions, deploy as symbol file
# By splitting the Build ID into first two characters as directory, then remaining with ".debug" extension
$ cp libcudart.so.12.2.128.sym /usr/lib/debug/.build-id/70/f26eb93e24216ffc0e93ccd8da31612d277030.debug

示例:符号化

这里有一个简化的例子来展示象征的用途。示例应用程序 test_shared 的数据损坏导致将无效句柄传递给 CUDA Runtime API cudaStreamDestroy。默认安装 CUDA Toolkit,并且没有混淆符号,gdb 中的输出可能如下所示:

shell 复制代码
Thread 1 "test_shared" received signal SIGSEGV, Segmentation fault.
0x00007ffff65f9468 in ?? () from /lib/x86_64-linux-gnu/libcuda.so.1
(gdb) bt
#0  0x00007ffff65f9468 in ?? () from /lib/x86_64-linux-gnu/libcuda.so.1
#1  0x00007ffff6657e1f in ?? () from /lib/x86_64-linux-gnu/libcuda.so.1
#2  0x00007ffff6013845 in ?? () from /usr/local/cuda/lib64/libcudart.so.12
#3  0x00007ffff604e698 in cudaStreamDestroy () from /usr/local/cuda/lib64/libcudart.so.12
#4  0x00005555555554e3 in main ()

在以前面描述的方式之一应用模糊符号后,它将提供堆栈跟踪,如以下示例所示:

shell 复制代码
Thread 1 "test_shared" received signal SIGSEGV, Segmentation fault.
0x00007ffff65f9468 in libcuda_8e2eae48ba8eb68460582f76460557784d48a71a () from /lib/x86_64-linux-gnu/libcuda.so.1
(gdb) bt
#0  0x00007ffff65f9468 in libcuda_8e2eae48ba8eb68460582f76460557784d48a71a () from /lib/x86_64-linux-gnu/libcuda.so.1
#1  0x00007ffff6657e1f in libcuda_10c0735c5053f532d0a8bdb0959e754c2e7a4e3d () from /lib/x86_64-linux-gnu/libcuda.so.1
#2  0x00007ffff6013845 in libcudart_43d9a0d553511aed66b6c644856e24b360d81d0c () from /usr/local/cuda/lib64/libcudart.so.12
#3  0x00007ffff604e698 in cudaStreamDestroy () from /usr/local/cuda/lib64/libcudart.so.12
#4  0x00005555555554e3 in main ()

符号化的调用堆栈可以作为提供给 NVIDIA 进行分析的错误描述的一部分进行记录。

结论

当您必须使用 CUDA 来评测和调试应用程序,并且希望与 NVIDIA 共享一个调用堆栈进行分析时,请使用 CUDA 符号服务器。分析和调试将更快更容易。

如果您有任何疑问,请访问 开发者工具论坛

阅读原文

相关推荐
阿里云大数据AI技术1 天前
基于阿里云 DataWorks Data Agent 进行大模型热度分析
人工智能·agent·nvidia
Together_CZ5 天前
Windows 下 CUDA / cuDNN / PyTorch GPU 训练环境搭建完整指南:虚拟环境与系统级环境两种方案
virtualenv·nvidia·cuda·cudnn·rtx 5060
元让_vincent6 天前
论文Review SLAM cuVSLAM | NVIDIA 2025 | CUDA加速的视觉里程计与建图系统
nvidia·视觉slam·gpu加速
AI小小怪7 天前
保姆级教程:Ubuntu 22.04 安装 NVIDIA GPU 驱动 + CUDA 12.6(RTX 3080 显卡)
linux·nvidia·cuda
feasibility.8 天前
nvidia-smi 失灵,显存凭空消失?—— NVML 驱动版本错配的记录
linux·运维·服务器·经验分享·nvidia·驱动
视***间10 天前
端侧大模型落地新标杆:视程空间将GPT-OSS边缘AI深度导入NVIDIA Jetson平台
人工智能·gpt·边缘计算·nvidia·ai算力·gpt-oss·视程空间
扫地的小何尚10 天前
掌握 Agentic AI 技术:AI Agent 定制方法全景与实践路径
大数据·人工智能·算法·ai·llm·agent·nvidia
Elastic 中国社区官方博客11 天前
快 12 倍的 Elasticsearch 向量索引:使用 GPU 和 CPU 分层部署 NVIDIA cuVS
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·nvidia
阿里云大数据AI技术11 天前
开发者博客|在阿里云 PAI 平台实现规模化的机器人感知强化学习
人工智能·阿里云·机器人·强化学习·nvidia
藤谷性能14 天前
Jetson Orin Nano:安装Jetpack等基础工具并验证摄像头
边缘计算·nvidia·jetson orin