JetsonTX2

TX2 刷机

TX2基本信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# 查看Jetson TX2 L4T版本
(mmdeploy36) npu@ubuntu:~$ head -n 1 /etc/nv_tegra_release
# R32 (release), REVISION: 7.4, GCID: 33514132, BOARD: t186ref, EABI: aarch64, DATE: Fri Jun 9 04:18:38 UTC 2023

# 查看nvidia-jetpack版本
(mmdeploy36) npu@ubuntu:~$ sudo apt-cache show nvidia-jetpack
[sudo] password for npu:
Package: nvidia-jetpack
Version: 4.6.6-b24
Architecture: arm64
Maintainer: NVIDIA Corporation
Installed-Size: 194
Depends: nvidia-l4t-jetson-multimedia-api (>> 32.7-0), nvidia-l4t-jetson-multimedia-api (<< 32.8-0), nvidia-cuda (= 4.6.6-b24), nvidia-tensorrt (= 4.6.6-b24), nvidia-nsight-sys (= 4.6.6-b24), nvidia-cudnn8 (= 4.6.6-b24), nvidia-opencv (= 4.6.6-b24), nvidia-container (= 4.6.6-b24), nvidia-visionworks (= 4.6.6-b24), nvidia-vpi (= 4.6.6-b24)
Homepage: http://developer.nvidia.com/jetson
Priority: standard
Section: metapackages
Filename: pool/main/n/nvidia-jetpack/nvidia-jetpack_4.6.6-b24_arm64.deb
Size: 29376
SHA256: 1292cfb107353f83eb18c96e6c3fce58e07dcf5f517db6039a5469c5bb30d743
SHA1: 62d3915566d21dad24dcc0b5147e81971e776f7f
MD5sum: d887402512142323c5ff2811e40c2ac6
Description: NVIDIA Jetpack Meta Package
Description-md5: ad1462289bdbc54909ae109d1d32c0a8

Package: nvidia-jetpack
Version: 4.6.5-b29
Architecture: arm64
Maintainer: NVIDIA Corporation
Installed-Size: 194
Depends: nvidia-l4t-jetson-multimedia-api (>> 32.7-0), nvidia-l4t-jetson-multimedia-api (<< 32.8-0), nvidia-cuda (= 4.6.5-b29), nvidia-tensorrt (= 4.6.5-b29), nvidia-nsight-sys (= 4.6.5-b29), nvidia-cudnn8 (= 4.6.5-b29), nvidia-opencv (= 4.6.5-b29), nvidia-container (= 4.6.5-b29), nvidia-visionworks (= 4.6.5-b29), nvidia-vpi (= 4.6.5-b29)
Homepage: http://developer.nvidia.com/jetson
Priority: standard
Section: metapackages
Filename: pool/main/n/nvidia-jetpack/nvidia-jetpack_4.6.5-b29_arm64.deb
Size: 29382
SHA256: 3347532325b9e216c38274bbbc076d6f368fdd0423bad4de8860a7c2ac7da7c2
SHA1: ad441acc5493fbcbae4f3243193bf6e47088da54
MD5sum: 1d79a14bc5b01c0254b0fc45ec29e5db
Description: NVIDIA Jetpack Meta Package
Description-md5: ad1462289bdbc54909ae109d1d32c0a8

Package: nvidia-jetpack
Version: 4.6.4-b39
Architecture: arm64
Maintainer: NVIDIA Corporation
Installed-Size: 194
Depends: nvidia-l4t-jetson-multimedia-api (>> 32.7-0), nvidia-l4t-jetson-multimedia-api (<< 32.8-0), nvidia-cuda (= 4.6.4-b39), nvidia-tensorrt (= 4.6.4-b39), nvidia-nsight-sys (= 4.6.4-b39), nvidia-cudnn8 (= 4.6.4-b39), nvidia-opencv (= 4.6.4-b39), nvidia-container (= 4.6.4-b39), nvidia-visionworks (= 4.6.4-b39), nvidia-vpi (= 4.6.4-b39)
Homepage: http://developer.nvidia.com/jetson
Priority: standard
Section: metapackages
Filename: pool/main/n/nvidia-jetpack/nvidia-jetpack_4.6.4-b39_arm64.deb
Size: 29372
SHA256: 9b2c9b8ba59f245b53fa9c2d4ddd05017db5c1df9e26a7e01ce5fe25928e2cdd
SHA1: b2e3184f05852db99888bed90114642f0b506618
MD5sum: 1a1f0c74067ea5a122adb69d24965583
Description: NVIDIA Jetpack Meta Package
Description-md5: ad1462289bdbc54909ae109d1d32c0a8

Package: nvidia-jetpack
Version: 4.6.3-b17
Architecture: arm64
Maintainer: NVIDIA Corporation
Installed-Size: 194
Depends: nvidia-l4t-jetson-multimedia-api (>> 32.7-0), nvidia-l4t-jetson-multimedia-api (<< 32.8-0), nvidia-cuda (= 4.6.3-b17), nvidia-tensorrt (= 4.6.3-b17), nvidia-nsight-sys (= 4.6.3-b17), nvidia-cudnn8 (= 4.6.3-b17), nvidia-opencv (= 4.6.3-b17), nvidia-container (= 4.6.3-b17), nvidia-vpi (= 4.6.3-b17)
Homepage: http://developer.nvidia.com/jetson
Priority: standard
Section: metapackages
Filename: pool/main/n/nvidia-jetpack/nvidia-jetpack_4.6.3-b17_arm64.deb
Size: 29358
SHA256: 7ca14bc60ce91e17c0ee5d30b327d103c4d2d4cf9d34437c3865d7e9a5c5283a
SHA1: bdfde20b6e453fec1f780d147ef6c29e0eafa723
MD5sum: 115c7c6f0e1e971e6cce5997929f21c8
Description: NVIDIA Jetpack Meta Package
Description-md5: ad1462289bdbc54909ae109d1d32c0a8

Package: nvidia-jetpack
Version: 4.6.2-b5
Architecture: arm64
Maintainer: NVIDIA Corporation
Installed-Size: 194
Depends: nvidia-cuda (= 4.6.2-b5), nvidia-opencv (= 4.6.2-b5), nvidia-cudnn8 (= 4.6.2-b5), nvidia-tensorrt (= 4.6.2-b5), nvidia-visionworks (= 4.6.2-b5), nvidia-container (= 4.6.2-b5), nvidia-vpi (= 4.6.2-b5), nvidia-l4t-jetson-multimedia-api (>> 32.7-0), nvidia-l4t-jetson-multimedia-api (<< 32.8-0)
Homepage: http://developer.nvidia.com/jetson
Priority: standard
Section: metapackages
Filename: pool/main/n/nvidia-jetpack/nvidia-jetpack_4.6.2-b5_arm64.deb
Size: 29356
SHA256: 6e3cf64d4fb46224c213ebd0cadae22d14c25dbe6dc3628d6440beeab33fed8d
SHA1: 35cd143b91a323dae4ecfd2d2f907a0efd2fb9aa
MD5sum: f0c9e65929dd73796967822c2fd99f3d
Description: NVIDIA Jetpack Meta Package
Description-md5: ad1462289bdbc54909ae109d1d32c0a8

Package: nvidia-jetpack
Version: 4.6.1-b110
Architecture: arm64
Maintainer: NVIDIA Corporation
Installed-Size: 194
Depends: nvidia-cuda (= 4.6.1-b110), nvidia-opencv (= 4.6.1-b110), nvidia-cudnn8 (= 4.6.1-b110), nvidia-tensorrt (= 4.6.1-b110), nvidia-visionworks (= 4.6.1-b110), nvidia-container (= 4.6.1-b110), nvidia-vpi (= 4.6.1-b110), nvidia-l4t-jetson-multimedia-api (>> 32.7-0), nvidia-l4t-jetson-multimedia-api (<< 32.8-0)
Homepage: http://developer.nvidia.com/jetson
Priority: standard
Section: metapackages
Filename: pool/main/n/nvidia-jetpack/nvidia-jetpack_4.6.1-b110_arm64.deb
Size: 29370
SHA256: 0663eb94d983e9eb86afdce4a3c73cf2ce040055862b4e711c28cb682b5fcb6e
SHA1: 9011104940e9095743f5e76e0f7634dd04dedb93
MD5sum: 8f6d3d3acb592faae54deed432f34b20
Description: NVIDIA Jetpack Meta Package
Description-md5: ad1462289bdbc54909ae109d1d32c0a8

# TensorRT
(mmdeploy36) npu@ubuntu:~$ dpkg -l | grep TensorRT
ii graphsurgeon-tf 8.2.1-1+cuda10.2 arm64 GraphSurgeon for TensorRT package
ii libnvinfer-bin 8.2.1-1+cuda10.2 arm64 TensorRT binaries
ii libnvinfer-dev 8.2.1-1+cuda10.2 arm64 TensorRT development libraries and headers
ii libnvinfer-doc 8.2.1-1+cuda10.2 all TensorRT documentation
ii libnvinfer-plugin-dev 8.2.1-1+cuda10.2 arm64 TensorRT plugin libraries
ii libnvinfer-plugin8 8.2.1-1+cuda10.2 arm64 TensorRT plugin libraries
ii libnvinfer-samples 8.2.1-1+cuda10.2 all TensorRT samples
ii libnvinfer8 8.2.1-1+cuda10.2 arm64 TensorRT runtime libraries
ii libnvonnxparsers-dev 8.2.1-1+cuda10.2 arm64 TensorRT ONNX libraries
ii libnvonnxparsers8 8.2.1-1+cuda10.2 arm64 TensorRT ONNX libraries
ii libnvparsers-dev 8.2.1-1+cuda10.2 arm64 TensorRT parsers libraries
ii libnvparsers8 8.2.1-1+cuda10.2 arm64 TensorRT parsers libraries
ii nvidia-container-csv-tensorrt 8.2 arm64 Jetpack TensorRT CSV file
ii python3-libnvinfer 8.2.1-1+cuda10.2 arm64 Python 3 bindings for TensorRT
ii python3-libnvinfer-dev 8.2.1-1+cuda10.2 arm64 Python 3 development package for TensorRT
ii tensorrt 8.2.1.9-1+cuda10.2 arm64 Meta package of TensorRT
ii uff-converter-tf 8.2.1-1+cuda10.2 arm64 UFF converter for TensorRT package

# 系统版本
(mmdeploy36) npu@ubuntu:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.6 LTS"

# 系统内核
(mmdeploy36) npu@ubuntu:~$ uname -a
Linux ubuntu 4.9.337-tegra #1 SMP PREEMPT Thu Jun 8 21:09:35 PDT 2023 aarch64 aarch64 aarch64 GNU/Linux

# 内存
(mmdeploy36) npu@ubuntu:~$ free -m
total used free shared buff/cache available
Mem: 7858 3042 766 277 4049 4465
Swap: 3929 0 3928

# CPU
(mmdeploy36) npu@ubuntu:~$ lscpu
Architecture: aarch64
Byte Order: Little Endian
CPU(s): 6
On-line CPU(s) list: 0,3-5
Off-line CPU(s) list: 1,2
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
Vendor ID: ARM
Model: 3
Model name: Cortex-A57
Stepping: r1p3
CPU max MHz: 2035.2000
CPU min MHz: 345.6000
BogoMIPS: 62.50
L1d cache: 32K
L1i cache: 48K
L2 cache: 2048K
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32

# 硬盘
(mmdeploy36) npu@ubuntu:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk0p1 28G 16G 11G 59% /
none 3.5G 0 3.5G 0% /dev
tmpfs 3.9G 162M 3.7G 5% /dev/shm
tmpfs 3.9G 96M 3.8G 3% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 786M 136K 786M 1% /run/user/1000
/dev/loop0 16M 130K 16M 1% /media/npu/L4T-README

# nvcc
(mmdeploy36) npu@ubuntu:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Sun_Feb_28_22:34:44_PST_2021
Cuda compilation tools, release 10.2, V10.2.300
Build cuda_10.2_r440.TC440_70.29663091_0

# cuda
(mmdeploy36) npu@ubuntu:~$ cat /usr/local/cuda/version.txt
CUDA Version 10.2.300

Set Git

1
2
3
4
5
6
7
8
9
10
11
12
13
(mmdeploy36) npu@ubuntu:~/MyDownload$ git config --global user.name murphyhoucn
(mmdeploy36) npu@ubuntu:~/MyDownload$ git config --global user.email cosmicdustycn@outlook.com
(mmdeploy36) npu@ubuntu:~/MyDownload$ git config user.name
murphyhoucn
(mmdeploy36) npu@ubuntu:~/MyDownload$ git config user.email
cosmicdustycn@outlook.com
(mmdeploy36) npu@ubuntu:~/MyDownload$ git config --global --list
user.name=murphyhoucn
user.email=cosmicdustycn@outlook.com

(mmdeploy36) npu@ubuntu:~/MyDownload$ ssh-keygen -t rsa -C "cosmicdustycn@outlook.com"
(mmdeploy36) npu@ubuntu:~/MyDownload$ ssh -T git@github.com
Hi murphyhoucn! You've successfully authenticated, but GitHub does not provide shell access.

ARM64 and aarch64 的区别

arm64和aarch64之间的区别_aarch和arm架构的区别-CSDN博客

直接给出结论:arm64已经与aarch64合并,因为aarch64和arm64指的是同一件事。

AArch64是 ARMv8 架构的一种执行状态。
为了更广泛地向企业领域推进,需要引入 64 位构架。同时也需要在 ARMv8 架构中引入新的 AArch64 执行状态。AArch64 不是一个单纯的 32 位 ARM 构架扩展,而是 ARMv8 内全新的构架,完全使用全新的 A64 指令集。这些都源自于多年对现代构架设计的深入研究。更重要的是, AArch64 作为一个分离出的执行状态,意味着一些未来的处理器可能不支持旧的 AArch32 执行状态。 虽然最初的 64 位 ARM 处理器将会完全向后兼容,但我们大胆且前瞻性地将 AArch64 作为在 ARMv8 处理器中唯一的执行状态。我们在这些系统中将不支持 32 位执行状态, 这将使许多有益的实现得到权衡,如默认情况下,使用一个较大的 64K 大小的页面,并会使得纯净的 64 位 ARM 服务器系统不受遗留代码的影响。立即进行这种划分是很重要的,因为有可能在未来几年内将出现仅支持 64 位的服务器系统。没有必要在新的 64 位架构中去实现一个完整的 32 位流水线,这将会提高未来 ARM 服务器系统的能效。这样回想起来, AArch64 作为在 Fedora ARM 项目中被支持的 ARM 构架是一个很自然的过程: armv5tel、armv7hl、aarch64。新的架构被命名为:aarch64,这同 ARM 自己选择的主线命名方式保持一致,同时也考虑到了 ARM 架构名与 ARM 商标分开的期望。

ARM64是由Apple创建的,而AARCH64是由其他人(最著名的是GNU / GCC的)创建的。
经过一番谷歌搜索后,我发现LLVM 64位ARM64 / AArch64后端已合并,用于aarch64的Apple后端称为arm64,而LLVM 编译器社区开发的后端称为aarch64(因为它是64位ISA的规范名称),后来将arm64和 aarch64 两者合并,现在的后端称为aarch64。 。

安装miniconda (不要安装)

https://zhuanlan.zhihu.com/p/656004165
踩坑:直接安装Miniconda3 aarch64的latest版本不行!

1
2
wget https://repo.anaconda.com/miniconda/Miniconda3-py37_4.9.2-Linux-aarch64.sh
sudo bash Miniconda3-py37_4.9.2-Linux-aarch64.sh

之后一路ENTER, 空格,yes,等,安装成功后,会出现“Thank you”。

安装完成之后的conda不能直接用,刷新一下环境变量就好了。

1
source ~/.bashrc

image-20250604132727339

image-20250604132735391

拼音输入法

教程有效!

输入法切换快捷键:ctrl+space

Windows host连接 TX2

Jetson TX2使用系列(2)-远程连接TX2_jestontx2 ssh-CSDN博客

Linux: ifconfig

Winodw: ipconfig

两个设备连接的是同一个WiFi路由器。但仍然有可能不是同一个子网。第一次就遇到了这个情况,(计算机网络的知识都忘记得差不多了),直接把TX2断了WiFi,重新连接了一下,然后就跟host在同一个子网了。两个ip可以ping通。

image-20250604131658954
可以直接使用ssh连接到TX2,不用两套键鼠切换了!
FileZilla也可以连接,不用再借飞书传文件了!

设置TX2不休眠

Jetson TX2 Nano NX 系列设备设置不休眠_tx2 nx怎么设置待机时间-CSDN博客

有效!

代理 SS/SSR

image-20250604140344374

Clash for Linux

wnlen/clash-for-linux: clash-for-linux

wget可以访问Google。但是直接使用浏览器,Google还是不行!

MMdeploy 安装

如何在 Jetson 模组上安装 MMDeploy — mmdeploy 1.3.1 文档

conda

mmdeploy文档说,安装Conda需要使用Archiconda!

image-20250604132814269
之前的miniconda的环境变量就注释了
1
2
3
4
# 得到默认安装的 python3 版本
export PYTHON_VERSION=`python3 --version | cut -d' ' -f 2 | cut -d'.' -f1,2`
conda create -y -n mmdeploy python=${PYTHON_VERSION}
conda activate mmdeploy

这样安装的python版本是3.7的,看nvidia pytorch for jetson 这里只提供了py36的包,mmdeploy也说了是py36,所以又手动创建了一个mmdeploy36的环境。后面知道是什么原因了,在创建环境的时候处在了base环境下,这时候的python版本的base的,不是TX2自带的。后面手动创建的36应该问题也不大!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 系统自带的python版本
npu@ubuntu:~$ python --version
Python 2.7.17
npu@ubuntu:~$ python3 --version
Python 3.6.9

# conda安装的python版本
npu@ubuntu:~$ conda env list
# conda environments:
#
base * /home/npu/archiconda3
mmdeploy /home/npu/archiconda3/envs/mmdeploy
mmdeploy36 /home/npu/archiconda3/envs/mmdeploy36
/home/npu/miniconda3

npu@ubuntu:~$ conda activate base
(base) npu@ubuntu:~$ python3 --version
Python 3.7.1
(base) npu@ubuntu:~$ conda activate mmdeploy
(mmdeploy) npu@ubuntu:~$ python3 --version
Python 3.7.2
(mmdeploy) npu@ubuntu:~$ conda activate mmdeploy36
(mmdeploy36) npu@ubuntu:~$ python3 --version
Python 3.6.15

PyTorch

  • torch按照教程。但是nvidia的网站访问首先,只能从host下载,然后传过去,再进行安装。
  • vision从github clone不下来。在host clone然后再传过去。(项目repo太大了,要clone很久。

image-20250604133407761

运行了超级久!

image-20250604155532574

验证一下

在Jetson上部署mmdeploy的流程及采坑心得 - 知乎

cmake

image-20250604150624867

mmcv

mmcv 要求python > 3.7!

2.x 不支持python 3.6

mmcv文档中说支持的![从源码编译 MMCV — mmcv 1.4.1 文档](https://mmcv.readthedocs.io/zh-cn/v1.4.1/get_started/build.html)

不支持<3.7!  [Releases · open-mmlab/mmcv](https://github.com/open-mmlab/mmcv/releases)

吐槽:OpenMMLab的这些开源库做的确实很好,但是版本控制搞得太差了!代码的可读性也很差!每次装都出现大量的问题,搞崩溃了!

试一下强制让2.x支持3.6?不行!还是一样的错误,可能判断逻辑不在这里

没办法了,只能试一下1.x版本行不行了

终于安装好了!安装了一下午+一晚上!

image-20250604204026207

h5py and pycuda

这两个安装都有问题

Linux使用pip安装h5py失败解决办法_failed to build h5py-CSDN博客

pyopencl · PyPI

jetson-nano-wheels/python3.6-pycuda-2021.1

1
2
3
4
5
6
7
8
9
10
✅pip install 'https://github.com/jetson-nano-wheels/python3.6-numpy-1.19.4/releases/download/v0.0.1/numpy-1.19.4-cp36-cp36m-linux_aarch64.whl'

pip install 'https://github.com/jetson-nano-wheels/python3.6-pyopencl-2021.2.6/releases/download/v0.0.1/pyopencl-2021.2.6-cp36-cp36m-linux_aarch64.whl'

✅pip install 'https://github.com/jetson-nano-wheels/python3.6-pycuda-2021.1/releases/download/v0.0.1/pycuda-2021.1-cp36-cp36m-linux_aarch64.whl'

## github直连不了就行下载到本地,然后传到TX2
## 第二个的离线包都下载不了??

# 直接把这个repo clone下来,按照readme,执行init.sh就行

好像还是没有opencl

Model Converter

这里报错,过不去了!

少了cuda的库??

image-20250605103102934

image-20250605103112840

找到问题了!

文档中使用的clone命令是

1
2
3
4
5
git clone --recursive https://github.com/open-mmlab/mmdeploy.git
# 递归把第三方库的指定commit版本下载下来。
# 但是网络问题,这几个第三方库都clone不下来
# 我只能手动clone.
# 但是手动clone的是main分支的最新版本。需要手动再回退到指定的commit中!

回退到指定commit

回退到指定commit

image-20250605134932691

?怎么ONNX版本跟之前说得不一样了?

版本冲突!为什么要装更高的onnx呢?

这个版本应该可以吧!

不要这个看看!

虽然报了好多好多错!但最后应该是是可以了吧?

image-20250605140610891

1
pip install mmdet

Demo

如何转换模型

1
2
3
4
5
6
7
python ./tools/deploy.py \
configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py \
/home/npu/MyDownload/mmdetection/configs/yolo/yolov3_d53_8xb8-ms-608-273e_coco.py \
/home/npu/MyDownload/mmdetection/checkpoints/yolo/yolov3_d53_mstrain-608_273e_coco_20210518_115020-a2c3acb8.pth \
/home/npu/MyDownload/mmdetection/demo/demo.jpg \
--work-dir work_dir \
--device cuda:0 \

mmcv版本不行!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd mmdeploy

# download faster r-cnn model from mmdet model zoo
mim download mmdet --config faster-rcnn_r50_fpn_1x_coco --dest .

# convert mmdet model to onnxruntime model with dynamic shape
python tools/deploy.py \
configs/mmdet/detection/detection_onnxruntime_dynamic.py \
faster-rcnn_r50_fpn_1x_coco.py \
faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \
demo/resources/det.jpg \
--work-dir mmdeploy_models/mmdet/ort \
--device cuda \
--show \
--dump-info

image-20250605141711215

结果:最后在这个TX2上安装mmdeploy环境失败了!

思考一下

MMdeploy是用于把深度学习模型进行部署的工具。

但我现在想做的工作应该是MMdeploy直接在服务器上部署,然后转换的模型部署在TX2上运行。

Deploy tutorial

mmdeploy/docs/zh_cn/tutorial at master · open-mmlab/mmdeploy

  • PyTorch 模型部署到推理引擎 ONNX Runtime/TensorRT 上
  • 部署流水线 PyTorch - ONNX - ONNX Runtime/TensorRT

流水线

以下是对这些技术和框架的详细解释:

  1. PyTorch(Meta):PyTorch是由Meta(原Facebook)开发的开源深度学习框架。它以动态计算图、自动求导、Pythonic设计等特性简化了开发流程,提供了模块化神经网络构建和标准化训练流程组件,广泛应用于计算机视觉、自然语言处理、生成式模型等多个领域。其核心设计理念是“灵活性优先”,支持开发者快速迭代实验模型,同时兼顾高效计算与生产部署需求。截至当前,全球超过70%的顶尖AI研究论文使用PyTorch实现。
  2. TensorFlow/Caffe(Google):
    • TensorFlow:是由Google开发和维护的开源机器学习框架,自2015年发布以来,在学术界和工业界广泛应用。它支持在CPU、GPU、TPU等多种硬件设备上运行,可用于图像识别、自然语言处理、语音识别、推荐系统等多种机器学习和深度学习任务。TensorFlow支持多种编程语言,提供高层API(如Keras)和用于生产环境部署的工具套件(如TensorFlow Extended),具有灵活性、性能优化和多平台部署支持等优势。
    • Caffe:由加州大学伯克利分校的伯克利人工智能研究实验室开发,是一个清晰、高效的深度学习框架,专注于速度、模块化和表达性,在图像分类和图像识别等领域有广泛应用,尤其在学术研究中曾被广泛使用。
  3. MXNet(Amazon):MXNet是亚马逊选择的深度学习库,它拥有类似于Theano和TensorFlow的数据流图,为多GPU配置提供了良好的支持,有类似于Lasagne和Blocks更高级别的模型构建块,并且可以在多种硬件上运行,包括手机。它支持多种编程语言,如Python、C++、R、Scala、Julia和Javascript等,具有强大的可扩展性,可在多场景下进行分布式计算,支持“先定义再计算”的延迟计算模式。
  4. ONNX(Open Neural Network Exchange) :是一种开放的模型交换格式,由Facebook和微软在2017年共同发布,用于标准描述计算图。它允许不同的深度学习框架(如TensorFlow、PyTorch等)之间共享和转换模型,有助于消除不同深度学习框架之间的壁垒,促进模型共享和重用,使开发者可以更容易地与其他人合作,共享和部署他们的模型。
  5. ONNX Runtime :是由微软维护的一个跨平台机器学习推理加速器,即“推理引擎”。它基于ONNX格式,提供了一套高性能库,用于在C等环境中高效执行这些ONNX格式的模型。其主要特点包括高性能、跨平台支持、可扩展性、内存管理和性能提升以及动态形状支持等,适用于云端服务、边缘设备、移动应用等多种人工智能应用场景。
  6. PPL(Parallel Patterns Library) :即并行模式库,是Microsoft开发的用于简化并行编程的库,它提供了一组用于实现常见并行模式的模板和工具,可帮助开发者更轻松地编写并行代码,提高程序在多核处理器上的性能。
  7. ncnn(Tencent/ncnn: ncnn is a high-performance neural network inference framework optimized for the mobile platform :ncnn是一个为手机端极致优化的高性能神经网络前向计算框架,由腾讯优图实验室开源。它针对移动端设备进行了深度优化,具有轻量级、高效率的特点,能够在不依赖第三方计算库的情况下,在移动设备上实现快速的卷积神经网络推理,广泛应用于移动端图像识别、目标检测等领域。需要注意的是,它并非由NVIDIA开发,与NVIDIA没有直接关联 。
  8. OpenVINO :是英特尔开发的跨平台深度学习工具包,名称代表“开放式视觉推理和神经网络优化”。它能够优化深度学习模型的推理性能,支持多种硬件平台,包括英特尔的CPU、GPU、VPU等,可广泛应用于计算机视觉、语音识别、自然语言处理等领域,帮助开发者将深度学习模型部署到各种设备上,实现高效的推理和决策。
  9. TorchScript 是一种序列化和优化 PyTorch 模型的格式,在优化过程中,一个torch.nn.Module模型会被转换成 TorchScript 的torch.jit.ScriptModule模型。现在, TorchScript 也被常当成一种中间表示使用。TorchScript 解读(一):初识 TorchScript - 知乎

vscode server上运行netron,host上直接访问对应端口的localhost可以直接可视化onnx模型

img

ONNX 算子文档: ONNX 算子的定义情况,都可以在官方的算子文档中查看。这份文档十分重要,我们碰到任何和 ONNX 算子有关的问题都得来”请教“这份文档。

PyTorch 对 ONNX 算子的映射: 在 PyTorch 中,和 ONNX 有关的定义全部放在 torch.onnx 目录

在实际的部署过程中,难免碰到模型无法用原生 PyTorch 算子表示的情况。这个时候,我们就得考虑扩充 PyTorch,即在 PyTorch 中支持更多 ONNX 算子。

而要使 PyTorch 算子顺利转换到 ONNX ,我们需要保证以下三个环节都不出错:

  • 算子在 PyTorch 中有实现
  • 有把该 PyTorch 算子映射成一个或多个 ONNX 算子的方法
  • ONNX 有相应的算子

可在实际部署中,这三部分的内容都可能有所缺失。其中最坏的情况是:我们定义了一个全新的算子,它不仅缺少 PyTorch 实现,还缺少 PyTorch 到 ONNX 的映射关系。但所谓车到山前必有路,对于这三个环节,我们也分别都有以下的添加支持的方法:

  • PyTorch 算子
    • 组合现有算子
    • 添加 TorchScript 算子
    • 添加普通 C++ 拓展算子
  • 映射方法
    • 为 ATen 算子添加符号函数(ATen 是 PyTorch 内置的 C++ 张量计算库,PyTorch 算子在底层绝大多数计算都是用 ATen 实现的。)
    • 为 TorchScript 算子添加符号函数
    • 封装成 torch.autograd.Function 并添加符号函数
  • ONNX 算子
    • 使用现有 ONNX 算子
    • 定义新 ONNX 算子

符号函数,可以看成是 PyTorch 算子类的一个静态方法。在把 PyTorch 模型转换成 ONNX 模型时,各个 PyTorch 算子的符号函数会被依次调用,以完成 PyTorch 算子到 ONNX 算子的转换。

ONNX 在底层是用 Protobuf 定义的。Protobuf,全称 Protocol Buffer,是 Google 提出的一套表示和序列化数据的机制。使用 Protobuf 时,用户需要先写一份数据定义文件,再根据这份定义文件把数据存储进一份二进制文件。

ONNX 模型是按以下的结构组织起来的:

  • ModelProto
    • GraphProto
      • NodeProto
      • ValueInfoProto

ONNX 模型的结构可以用类图大致表示

ONNX 提供了 API onnx.checker.check_model 来判断一个 ONNX 模型是否满足标准。

我们使用 TensorRT 生成模型主要有两种方式:

  1. 直接通过 TensorRT 的 API 逐层搭建网络;
  2. 将中间表示的模型转换成 TensorRT 的模型,比如将 ONNX 模型转换成 TensorRT 模型。

JetsonTX2
https://blog.cosmicdusty.cc/post/CV/InitJetsonTX2/
作者
Murphy
发布于
2024年4月23日
许可协议