logo 🤗

技术视野

聚焦科技前沿,分享技术解析,洞见未来趋势。在这里,与您一起探索人工智能的无限可能,共赴技术盛宴。

准备工作

  1. 安装好了docker,并且按之前的教程,部署了最新TensorRT-LLM容器。
  2. 已经编译了Debug版本的TensorRT-LLM,可以参考这个教程,把里面的CMAKE_BUILD_TYPE=Release改成CMAKE_BUILD_TYPE=Debug就行。教程地址
  3. 已安装Vscode,并且安装了下面的插件
  • Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code(可选)
  • C/C++ (可选)
  • CMake (可选)
  • Python (必选)
  • Pylance (可选)
  • Python C++ Debugger (必选)

正式开始

  • 注:先看完整个流程,再开始做,特别是最后一步很重要。
  1. 进入容器,更新依赖,安装gdb调试工具。
apt update
apt install gdb
  1. 在项目根目录,新建一个.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"
    }
  ]
}
  1. 由于VsCode只能调试当前项目路径的文件,没办法调试其他系统路径的文件,所以我们需要将待调试的文件用相对路径的方式导包。保险起见可以卸载掉tensorrt_llm,用编译好的相对路径导入就行(可选)。
pip uninstall tensorrt-llm
  1. 然后演示一下调试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/
  1. 由于它还依赖一个_utils的文件,所以我们将其同级文件也拷贝过来。
cp tensorrt_llm_july-release-v1/tests/quantization/_utils.py tensorrt_llm_july-release-v1/
  1. 拷贝完成后,直接在tensorrt_llm_july-release-v1/test_smooth_quant_gemm.py文件末尾加一个main函数用于启动单元测试。
if __name__ == "__main__":
    unittest.main()
  1. 然后就可以正式执行调试了。在Vscode左侧,打开调试栏,点击小三角符号即可开始调试了。注意提前在test_smooth_quant_gemm.py或者cpp库中打好断点。
    image.png
  2. 点击调试后,额,报错了,报错信息如下:
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代码了。

版权属于:tlntin
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2023年10月20日 14:26


39 文章数
5 分类数
40 页面数
已在风雨中度过 1年207天0小时53分
目录
来自 《VsCode调试TensorRT-LLM》
暗黑模式
暗黑模式
返回顶部
暗黑模式
暗黑模式
返回顶部