1.前言和介绍

news2024/11/15 5:42:18

目录

    • 前言
    • 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. 介绍

学习所需基础环境

  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 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/731253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7、添加billboard小旗子

本节演示添加billboard小旗子,使用第四节click的例子,通过鼠标点击地图添加billboard添加小旗子。 1、修改鼠标点击事件mouseUp,在函数中创建BillboardCollection对象并添加到地图中。鼠标点击时获取鼠标位置,转换成经纬度然后添…

Mycat【Mycat分片技术(水平拆分-分表、ER表、全局表)】(五)-全面详解(学习总结---从入门到深化)

目录 Mycat分片技术_水平拆分-分表 Mycat分片技术_ER表 Mycat分片技术_全局表 Mycat分片技术_水平拆分-分表 前言 上面谈到垂直切分只是把表按模块划分到不同数据库,但没有解决单表大数据量的问题。 水平拆分 相对于垂直拆分,水平拆分不是将表做分…

宝塔 安装/使用Apollo(阿波罗)多环境部署-图文小白教程

官方安装教程手册:Apollo apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的…

Android 视频直播提拉流 嵌入式硬件 流媒体开发详细内容

1 Linux 系统编程网络编程基础 2 Linux 网络编程流媒体服务器,客户端开发实践 3 Android流媒体客户端 FFmpeg OpenGL ES 开发实践 4 Android H.264 AAC 封装mp4开发实战 5 流媒体开发实战之Rtmp推流 6 流媒体开发实战之RTSP推流 7 流媒体开发实战之UDP 8 P2P点对点项…

BERT 论文精读与理解

1.论文题目 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 2.论文摘要 本文引入了一种名为 BERT 的新语言表示模型,它代表 Transformers 的双向编码器表示。与最近的语言表示模型(Peters et al., 2018a&#xf…

【云原生】 一文了解Docker到底是什么?

目录 1.docker是什么? 2.为什么需要docker? 3.docker特点 4.docker架构 5.云计算中的服务包括三个层面 6.传统虚拟化架构 7.容器架构 8.docker系统架构 Docker 守护进程 Docker 客户端 Docker 仓库 Docker 对象 Images(镜像) Cont…

数据库基本操作及表的创建

目录标题 1.数据库基本操作创建数据库查询数据库使用数据库查询默认数据库编码方式查询默认数据库校验规则删除数据 2.表的基本操作创建一个包含所有类型的表 1.数据库基本操作 创建数据库 查询数据库 使用数据库 查询默认数据库编码方式 查询默认数据库校验规则 删除数据 2.表…

内存的五大分区

一些套话 一个由C/C编译的程序占用的内存分为以下几个部分:栈区,堆区,全局区(静态区),文字常量区,代码区 在执行一个C/C 程序时,此程序拥有唯一的“内存四区”(栈区&…

基于STM32的homeassistant(采用FreeRTOS操作系统)【第二章:采集DHT11数据上传服务器;接收服务器指令执行对应操作】

第一章链接 第二章开发环境 主控STM32F103C8T6WIFI模块ESP01S传感器模块DHT11温湿度传感器、LED灯开发语言C开发编译器KEIL组网方式WIFI服务器协议MQTT 本章要点 根据DHT11工作特性编写触发代码AT指令订阅服务器端口STM32中断接收挂起Usart协议信息标志位STM23任务过滤识别服…

102、基于STM32的智能投食智能鱼缸鱼塘养殖宠物喂食换水监控系统(程序+原理图+PCB源文件+参考论文+硬件设计资料+元器件清单等)

单片机主芯片选择方案 方案一:AT89C51是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元&a…

路径规划算法:基于闪电连接过程优化的路径规划算法- 附代码

路径规划算法:基于闪电连接过程优化的路径规划算法- 附代码 文章目录 路径规划算法:基于闪电连接过程优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用…

知乎下线“匿名功能” :「谢邀,匿了」成为千古绝唱

我是卢松松,点点上面的头像,欢迎关注我哦! 就在6月底“亿欧网黄渊普实名举报知乎CEO周源”这件事引起了轩然大波,核心文章直指知乎的匿名功能。没想到7月初这么快知乎就下线了匿名功能。 昨天,知乎宣布将下线匿名功能…

【数据结构二叉树OJ系列】1、二叉树的前序遍历

目录 题述(力扣难度:中等): 思路: 正确代码如下: 典型错误: 题述(力扣难度:中等): 给你二叉树的根节点 root,返回它节点值的 前序 遍历 示例1: 示例2: 输入&#xff1…

HappyDet安装使用教程

作者:堆堆星 导读 一般的深度学习流程包括数据采集,数据标注,训练,调参,测试,部署。流程繁琐,且周期极长。HappyDet以深度学习中目标检测算法为核心,开发了一套本地的全流程目标检测…

Blender基础入门(0):下载和资源

文章目录 我个人的Blender专栏前言相关资料Blender和C4D如何选择视频资源BlenderBlender官网下载基础设置常用快捷键介绍空格键:跳出选择框ShiftA:跳出添加框选中物体按F9:显示物体属性 Blender能做到什么总结 我个人的Blender专栏 Blender简单教学 前…

9.30UEC++ 注册执行指令

1. 只能在GameMode或者PlayController中使用 创建一个函数,在函数前定义宏,专门为下一行函数使用(指令框宏) 2.定义函数 书写功能逻辑:打印日志 3.操作演示: 编译之后,运行客户端,按下~键,输…

网络编程—Socket套接字详解

目录 一、网络编程 1.1、为什么需要网络编程? 1.2、什么是网络编程 1.3、发送端和接收端 ​编辑1.4、请求和响应 ​编辑1.5、客户端和服务端 二、Socket套接字 2.1、概念 2.2、分类 2.2.1、流套接字 2.2.2、数据报套接字 2.2.3、原始套接字 2.3、…

面向对象编程主线五

面向对象编程 五、第五阶段–多态性 5.1、理解多态性 理解多态性:可以理解为一个事物的多种形态; 何为多态性: 对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用) 多态的使用&#x…

味尚食品 味尚拉面半干面是一种非常经典的中式面食

尊敬的客户,您好!感谢您对我们电商平台的关注,我们很高兴为您介绍我们平台上的一款热销产品——味尚拉面半干面。 味尚拉面半干面是一种非常经典的中式面食,其主要特点体现在面条的口感和味道方面,让人感觉仿佛在享受正…

infinigen安装教程

至于infinigen是什么,网上很多,这篇文章主要是我安装的记录 官网:https://infinigen.org/ github:https://github.com/princeton-vl/infinigen 安装 首先要配置wsl环境,如何配置wsl,可以关注公众号“科…