目录
- 前言
- 1. 说在前面
- 2. 介绍
- 3. 拓展:vscode
- 3.1 文件传输
- 3.2 高效调试配置
- 3.2.1 配置launch.json
- 3.2.2 配置task.json
- 3.2.3 配置settings.json
- 3.2.4 配置c_cpp_properties.json
前言
从零学习算法部署-TensorRT篇
杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记
本次主要是对课程的内容和所需环境做一个简要的介绍
课程大纲可看下面的思维导图
1. 说在前面
本课程以 TensorRT 和 PyTorch 为主,不涉及模型的训练,例如蒸馏、剪枝,仅以工程角度考虑,如何导出模型、让模型尽可能高性能以及如何上线交付(多线程)
部署的优化思想、导出方式、解决问题流程,可借鉴到其它算法场景,例如3399、安卓等等
算法部署,学什么? 精简的 CUDA 编程 => TensorRT基础 => 项目实战
精简的 CUDA 编程
- 只求够用,能写 图像预处理、后处理、理解索引计算,就够够的了,高性能的基础
TensorRT基础
- 如何编译模型、推理模型,onnx 如何控制,插件怎么写,解析器怎么配。深入理解 TensorRT 这个东西
项目实战
- 拿真实的项目,实际操作并在 tensorRT 上以高性能推理起来。学习拿到项目如何分析,问题如何解决
本课程开发了自动环境配置的 python 包,解决环境配置困扰。
允许零基础学员更友好的学习教程,并进行实验,力求更好的学习效率
同时还提供了约 52 个学习案例代码,从浅到深,逐步递进学习
课程内容
- 介绍(学习方式和工具)
- CUDA精简课程(Driver和Runtime)
- TensorRT基础(分类器、检测器、插件、onnx)
- TensorRT集成,项目实战(目标检测、人脸识别、姿态识别等)
课程需要什么
- Linux 系列 Ubuntu 系统,并配置有 NVIDIA 显卡和显卡驱动程序(大于450)
- 可以执行 pip 进行安装
- 以上非必要,如果有,则体验最佳,学习效率最高
2. 介绍
学习所需基础环境:
- 语言,以 C++ 和 Python 为主
- C++ 的编译,以 Makefile 为主(可自动配置环境,无需懂)
- IDE,用 Visual Studio Code
- 操作系统,通常可以(Windows 本机 + Ubuntu 服务器,用 ssh 连接)或者(Ubuntu 本机),运行环境必须是 linux
- 显卡,NVIDIA 的显卡,并安装有 450 以上的显卡驱动为佳
- Python 方面,anaconda 并配置有 Python3.6/3.7/3.8/3.9 任意一个,同时安装 PyTorch1.8 及以上
学习工具:
- 环境配置一直是该系列课程最艰难的事情
- 本课程提供自动环境配置/代码下载工具,trtpy,依赖于python环境的一个包
- 提供的案例代码可立即运行,环境自动配置、数据自动下载
3. 拓展:vscode
关于 vscode 以及 ssh 的相关内容介绍这里就不多讲了,这里更多的是来记录下自己不懂的地方
更多内容可参考 SSH和VScode远程开发
3.1 文件传输
下载:
scp -P 端口号 -r 用户名@服务器IP或域名:/远程文件的路径 /本地目标路径
-P
是服务器的端口,而 -r
在传文件夹的时候一定要开启
例如:
scp -P 9091 -r root@10.16.100.48:/datav/shared/a.tar.gz C:\Users\Q\Desktop
上传:
scp -P 端口号 本地文件路径 用户名@服务器IP或域名:/目标路径
例如:
scp -P 9091 C:\Users\Q\Desktop\hello.cpp root@10.16.100.48:/datav/shared/
3.2 高效调试配置
3.2.1 配置launch.json
{
"version": "0.2.0",
"configurations": [
// python debug
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
// "program": "main.py",
"console": "integratedTerminal",
"justMyCode": true // false 的话 你可以进入一些库的源码里面进行调试,比如说进入pytorch的一部分源码
},
// c++ debug
{
"name": "C++ file",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/workspace/pro", // 你要调试的文件,这里指的是cpp最终生成的可执行文件
"args": [],
"environment": [{"name": "LD_LIBRAYRY_PATH", "value": "$(LD_LIBRAYRY_PATH):/mypath/to/lib"}],
// 相当于直接 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mypath/to/lib/
"stopAtEntry": false,
"cwd": "${workspaceFolder}/workspace", // c++在运行过程时会在这里寻找依赖和其他文件(比如说 图片)
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"setupCommands": [
{
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build" // 在运行launch之前先运行task.json里的东西
}
]
}
详细参考:https://code.visualstudio.com/docs/editor/debugging
3.2.2 配置task.json
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "make pro -j6"
}
]
}
每次运行 launch 之前都会运行 tasks(这里的指令是编译一遍)
3.2.3 配置settings.json
在 .vscode/setting.json 中配置 “*.cu”: “cuda-cpp” 可以实现对 cuda 的语法解析
{
"files.associations": {
"*.cpp": "cpp",
"*.cu": "cuda-cpp",
"deque": "cpp",
"string": "cpp",
"vector": "cpp",
"*.tcc": "cpp",
"__hash_table": "cpp",
"__split_buffer": "cpp",
"__tree": "cpp",
"array": "cpp",
"bitset": "cpp",
"initializer_list": "cpp",
"iterator": "cpp",
"map": "cpp",
"queue": "cpp",
"random": "cpp",
"set": "cpp",
"stack": "cpp",
"string_view": "cpp",
"unordered_map": "cpp",
"utility": "cpp",
"__atomic": "cpp",
"__functional_base": "cpp",
"__functional_base_03": "cpp",
"__tuple": "cpp",
"algorithm": "cpp",
"chrono": "cpp",
"type_traits": "cpp",
"filesystem": "cpp",
"functional": "cpp",
"limits": "cpp",
"memory": "cpp",
"ratio": "cpp",
"tuple": "cpp",
"istream": "cpp",
"ostream": "cpp",
"future": "cpp",
"system_error": "cpp",
"__config": "cpp",
"__nullptr": "cpp"
}
}
3.2.4 配置c_cpp_properties.json
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/datav/software/anaconda3/lib/python3.9/site-packages/trtpy/trt8cuda112cudnn8/include/**"
], // 让 intelliSense engine(语法提示,自动补全) 能够找到所有需要的头文件
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "gnu++11",
"intelliSenseMode": "linux-gcc-x64" // ** 指的是递归查询,除了当前目录,多少级目录都往下找
}
],
"version": 4
}
详细参考:https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference