JetsonTX2
TX2 刷机
- TX2刷机教程(主机为Ubuntu版本) - 知乎
- ubuntu双系统启动时卡死解决办法 - 不妨不妨,来日方长 - 博客园
- Nvidia Jetson TX2 详细刷机教程及踩坑记录(Jetpack4.5.1,python3.6,torch1.6,torchvision0.7) - 知乎
TX2基本信息
1 |
|
Set Git
1 |
|
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 |
|
之后一路ENTER, 空格,yes,等,安装成功后,会出现“Thank you”。
安装完成之后的conda不能直接用,刷新一下环境变量就好了。
1 |
|
拼音输入法
教程有效!
输入法切换快捷键:ctrl+space
Windows host连接 TX2
Linux: ifconfig
Winodw: ipconfig
两个设备连接的是同一个WiFi路由器。但仍然有可能不是同一个子网。第一次就遇到了这个情况,(计算机网络的知识都忘记得差不多了),直接把TX2断了WiFi,重新连接了一下,然后就跟host在同一个子网了。两个ip可以ping通。



设置TX2不休眠
有效!
代理 SS/SSR
Clash for Linux
MMdeploy 安装
conda
mmdeploy文档说,安装Conda需要使用Archiconda!


1 |
|
这样安装的python版本是3.7的,看nvidia pytorch for jetson 这里只提供了py36的包,mmdeploy也说了是py36,所以又手动创建了一个mmdeploy36的环境。后面知道是什么原因了,在创建环境的时候处在了base环境下,这时候的python版本的base的,不是TX2自带的。后面手动创建的36应该问题也不大!
1 |
|
PyTorch
- torch按照教程。但是nvidia的网站访问首先,只能从host下载,然后传过去,再进行安装。
- vision从github clone不下来。在host clone然后再传过去。(项目repo太大了,要clone很久。
cmake
mmcv
吐槽:OpenMMLab的这些开源库做的确实很好,但是版本控制搞得太差了!代码的可读性也很差!每次装都出现大量的问题,搞崩溃了!
h5py and pycuda
Linux使用pip安装h5py失败解决办法_failed to build h5py-CSDN博客
jetson-nano-wheels/python3.6-pycuda-2021.1
1 |
|
Model Converter
找到问题了!
文档中使用的clone命令是
1 |
|
1 |
|
Demo
如何转换模型
1 |
|
1 |
|
结果:最后在这个TX2上安装mmdeploy环境失败了!
思考一下
MMdeploy是用于把深度学习模型进行部署的工具。
但我现在想做的工作应该是MMdeploy直接在服务器上部署,然后转换的模型部署在TX2上运行。
- https://github.com/open-mmlab/mmdeploy/blob/main/docs/zh_cn/get_started.md
- 按照文档配了环境,然后转换了一个ONNX模型。
Deploy tutorial
mmdeploy/docs/zh_cn/tutorial at master · open-mmlab/mmdeploy
- PyTorch 模型部署到推理引擎 ONNX Runtime/TensorRT 上
- 部署流水线 PyTorch - ONNX - ONNX Runtime/TensorRT
以下是对这些技术和框架的详细解释:
- PyTorch(Meta):PyTorch是由Meta(原Facebook)开发的开源深度学习框架。它以动态计算图、自动求导、Pythonic设计等特性简化了开发流程,提供了模块化神经网络构建和标准化训练流程组件,广泛应用于计算机视觉、自然语言处理、生成式模型等多个领域。其核心设计理念是“灵活性优先”,支持开发者快速迭代实验模型,同时兼顾高效计算与生产部署需求。截至当前,全球超过70%的顶尖AI研究论文使用PyTorch实现。
- TensorFlow/Caffe(Google):
- TensorFlow:是由Google开发和维护的开源机器学习框架,自2015年发布以来,在学术界和工业界广泛应用。它支持在CPU、GPU、TPU等多种硬件设备上运行,可用于图像识别、自然语言处理、语音识别、推荐系统等多种机器学习和深度学习任务。TensorFlow支持多种编程语言,提供高层API(如Keras)和用于生产环境部署的工具套件(如TensorFlow Extended),具有灵活性、性能优化和多平台部署支持等优势。
- Caffe:由加州大学伯克利分校的伯克利人工智能研究实验室开发,是一个清晰、高效的深度学习框架,专注于速度、模块化和表达性,在图像分类和图像识别等领域有广泛应用,尤其在学术研究中曾被广泛使用。
- MXNet(Amazon):MXNet是亚马逊选择的深度学习库,它拥有类似于Theano和TensorFlow的数据流图,为多GPU配置提供了良好的支持,有类似于Lasagne和Blocks更高级别的模型构建块,并且可以在多种硬件上运行,包括手机。它支持多种编程语言,如Python、C++、R、Scala、Julia和Javascript等,具有强大的可扩展性,可在多场景下进行分布式计算,支持“先定义再计算”的延迟计算模式。
- ONNX(Open Neural Network Exchange) :是一种开放的模型交换格式,由Facebook和微软在2017年共同发布,用于标准描述计算图。它允许不同的深度学习框架(如TensorFlow、PyTorch等)之间共享和转换模型,有助于消除不同深度学习框架之间的壁垒,促进模型共享和重用,使开发者可以更容易地与其他人合作,共享和部署他们的模型。
- ONNX Runtime :是由微软维护的一个跨平台机器学习推理加速器,即“推理引擎”。它基于ONNX格式,提供了一套高性能库,用于在C等环境中高效执行这些ONNX格式的模型。其主要特点包括高性能、跨平台支持、可扩展性、内存管理和性能提升以及动态形状支持等,适用于云端服务、边缘设备、移动应用等多种人工智能应用场景。
- PPL(Parallel Patterns Library) :即并行模式库,是Microsoft开发的用于简化并行编程的库,它提供了一组用于实现常见并行模式的模板和工具,可帮助开发者更轻松地编写并行代码,提高程序在多核处理器上的性能。
- ncnn(Tencent/ncnn: ncnn is a high-performance neural network inference framework optimized for the mobile platform) :ncnn是一个为手机端极致优化的高性能神经网络前向计算框架,由腾讯优图实验室开源。它针对移动端设备进行了深度优化,具有轻量级、高效率的特点,能够在不依赖第三方计算库的情况下,在移动设备上实现快速的卷积神经网络推理,广泛应用于移动端图像识别、目标检测等领域。需要注意的是,它并非由NVIDIA开发,与NVIDIA没有直接关联 。
- OpenVINO :是英特尔开发的跨平台深度学习工具包,名称代表“开放式视觉推理和神经网络优化”。它能够优化深度学习模型的推理性能,支持多种硬件平台,包括英特尔的CPU、GPU、VPU等,可广泛应用于计算机视觉、语音识别、自然语言处理等领域,帮助开发者将深度学习模型部署到各种设备上,实现高效的推理和决策。
- TorchScript 是一种序列化和优化 PyTorch 模型的格式,在优化过程中,一个
torch.nn.Module
模型会被转换成 TorchScript 的torch.jit.ScriptModule
模型。现在, TorchScript 也被常当成一种中间表示使用。TorchScript 解读(一):初识 TorchScript - 知乎
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
- GraphProto
ONNX 提供了 API onnx.checker.check_model
来判断一个 ONNX 模型是否满足标准。
我们使用 TensorRT 生成模型主要有两种方式:
- 直接通过 TensorRT 的 API 逐层搭建网络;
- 将中间表示的模型转换成 TensorRT 的模型,比如将 ONNX 模型转换成 TensorRT 模型。