准备工作
- 安装好了docker,并且按之前的教程,部署了最新TensorRT-LLM容器。
- 已经编译了Debug版本的TensorRT-LLM,可以参考这个教程,把里面的
CMAKE_BUILD_TYPE=Release
改成CMAKE_BUILD_TYPE=Debug
就行。教程地址 - 已安装Vscode,并且安装了下面的插件
- Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code(可选)
- C/C++ (可选)
- CMake (可选)
- Python (必选)
- Pylance (可选)
- Python C++ Debugger (必选)
正式开始
- 注:先看完整个流程,再开始做,特别是最后一步很重要。
- 进入容器,更新依赖,安装gdb调试工具。
apt update
apt install gdb
- 在项目根目录,新建一个
.vscode
目录,在.vscode
里面新建一个launch.json
文件,写入下面的内容:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python C++ Debugger",
"type": "pythoncpp",
"request": "launch",
"pythonLaunchName": "Python: Current File",
"cppAttachName": "(gdb) Attach"
},
{
"name": "(gdb) Attach",
"type": "cppdbg",
"request": "attach",
"program": "/bin/python3",
"processId": "",
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
- 由于VsCode只能调试当前项目路径的文件,没办法调试其他系统路径的文件,所以我们需要将待调试的文件用相对路径的方式导包。保险起见可以卸载掉tensorrt_llm,用编译好的相对路径导入就行(可选)。
pip uninstall tensorrt-llm
- 然后演示一下调试
tensorrt_llm_july-release-v1/tests/quantization/test_smooth_quant_gemm.py
文件。目前这个文件导入的tensorrt_llm
显然不是相对路径,所以我们需要将他复制到和tensorrt_llm
相对的位置。
cp tensorrt_llm_july-release-v1/tests/quantization/test_smooth_quant_gemm.py tensorrt_llm_july-release-v1/
- 由于它还依赖一个
_utils
的文件,所以我们将其同级文件也拷贝过来。
cp tensorrt_llm_july-release-v1/tests/quantization/_utils.py tensorrt_llm_july-release-v1/
- 拷贝完成后,直接在
tensorrt_llm_july-release-v1/test_smooth_quant_gemm.py
文件末尾加一个main函数用于启动单元测试。
if __name__ == "__main__":
unittest.main()
- 然后就可以正式执行调试了。在Vscode左侧,打开调试栏,点击小三角符号即可开始调试了。注意提前在
test_smooth_quant_gemm.py
或者cpp库中打好断点。
- 点击调试后,额,报错了,报错信息如下:
Unable to start debugging. Attaching to process 401230 with GDB failed becauseof insufficient privileges with error message 'ptrace: Operation not permitted..
To attach to an application on Linux, login as super user or set ptrace_ _scope to 0.See https://aka.ms/miengine-gdb-troubleshooting for details.
- 这个报错信息很是奇怪,它居然说没有管理员权限?正常这个docker已经是root账号了,应该没有这个问题才对?
- 我怀疑可能是docker启动的时候,少了什么配置导致的,所以我问了chatgpt,它给了下面的解决办法:
在您的错误消息中,提到了无法使用GDB附加到进程的问题。错误提示是ptrace: Operation not permitted,这意味着您的系统禁止了非调试器启动的进程的附加操作。
在Linux系统上,默认情况下是禁止附加到非由调试器启动的进程的。这是出于安全考虑,以防止未授权的调试器访问进程的敏感信息。
在Docker容器中,您需要在启动容器时添加--cap-add=SYS_PTRACE选项,以允许使用GDB附加到进程。这个选项会在容器内部启用SYS_PTRACE能力,允许调试器进行附加操作。
请按照以下步骤操作:
停止并删除当前的Docker容器。
使用以下命令启动新的Docker容器,并添加--cap-add=SYS_PTRACE选项:
eg:
docker run --cap-add=SYS_PTRACE -it <image_name> /bin/bash
- 我删除了旧容器,然后加上了
--cap-add=SYS_PTRACE
重新启动容器,再次按照上面的步骤再调试后,一切正常,可以进入cpp代码了。