1.前言和介绍

前言

从零学习算法部署-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. 介绍

学习所需基础环境

  1. 语言,以 C++ 和 Python 为主
  2. C++ 的编译,以 Makefile 为主(可自动配置环境,无需懂)
  3. IDE,用 Visual Studio Code
  4. 操作系统,通常可以(Windows 本机 + Ubuntu 服务器,用 ssh 连接)或者(Ubuntu 本机),运行环境必须是 linux
  5. 显卡,NVIDIA 的显卡,并安装有 450 以上的显卡驱动为佳
  6. Python 方面,anaconda 并配置有 Python3.6/3.7/3.8/3.9 任意一个,同时安装 PyTorch1.8 及以上

学习工具

  1. 环境配置一直是该系列课程最艰难的事情
  2. 本课程提供自动环境配置/代码下载工具,trtpy,依赖于python环境的一个包
  3. 提供的案例代码可立即运行,环境自动配置、数据自动下载

3. 拓展:vscode

关于 vscode 以及 ssh 的相关内容介绍这里就不多讲了,这里更多的是来记录下自己不懂的地方

更多内容可参考 SSH和VScode远程开发

3.1 文件传输

下载

scp -P 端口号 -r 用户名@服务器IP或域名:/远程文件的路径 /本地目标路径

-P 是服务器的端口,而 -r 在传文件夹的时候一定要开启

例如:

scp -P 9091 -r [email protected]:/datav/shared/a.tar.gz C:\Users\Q\Desktop

上传

scp -P 端口号 本地文件路径 用户名@服务器IP或域名:/目标路径

例如:

scp -P 9091 C:\Users\Q\Desktop\hello.cpp [email protected]:/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

猜你喜欢

转载自blog.csdn.net/qq_40672115/article/details/131606060