目录
6.2 安装 python3-pip 并对pip 源进行设置
8.2 安装 pytorch 1.7 和 torchvision 0.8
一 jetbot 介绍
瞅一眼我的jetbot 小车长这样 (某宝上 XX智能的jetbot 散套件,咣咣一顿拆了装装了拆之后,终于 it works ..)
二 初衷
玩了一下机器人带的丰富的栗子。 给个赞,然后觉得不过瘾。。
google 一下之后,各种大神的模型伸手摘来移植部署运行,人脸、文字、表情、姿势啊等因为依赖库版本不一致的冲突 几下就把系统搞乱了。 搞得 cuda 加速都运行不了。
不过比起大神们创造的惊喜这点折腾的困难算得了什么。
让我感慨人工智能的发展真的是像追星赶月,成熟的框架在飞奔似的演进,优秀的模型也在后浪拍前浪式的颠覆中成长。而我,只有惊呆的份。
不禁想起了一幅太阳带着众星奔跑的场景。。。
上船,踏在巨人们的肩膀上, 从搭建环境开始!
三 目标
主流的框架真的很多,我了解到的 jetson nano 平台上可以利用框架就有 cuda, cudnn, tensortRT , tensorflow , caffe , pytorch , keras , mxnet , onnx opencv等。
感觉是 pytorch 比较火,训练的模型还可以转换成 tensorRT 在 jetson 系列下获得开挂般的性能。所以计划是:
A 使用 jetson nano 最新的官方镜像( jetPack 4.4.1 带 cuda 10.2 ) + pytorch 1.7 + torch vision 0.8 + opencv4.5 搭建一套基础开发环境 (本篇的目标)
B 从好玩的实例入手,开始品尝 the state of art ... (会把很多模型折腾一下,学会使用)
C 把 jetbot 小车 驱动 车轮马达 ,镜头舵机的部分移植过来,让 robot 活动起来
D 做一些好玩的实用的例子。
tensortRT 的性能贴个别人的对比表格:
图片来源:
https://blog.csdn.net/jacke121/article/details/104515102
后记:
最新版本的路线坑不少,我验证的 github 上的 一大半 models 都跑不起来, 要折腾 :) 。爬坑有挑战, 供参考。
四 准备工作
准备多张 64g tf 卡, 读卡器, 建议 class 10 以上的保证速度
开发机上需要一张 nvidia 的显卡, 用来训练 模型 , 我搞了个入门级的 gtx 1080 (训练环境的搭建下节介绍 ),
这个显卡的配置是8G空间,FP16 算力是 9 TFLOPS (jetson nano 为 0.5 tflops )
五 系统安装
5.1 下载10月份最新镜像
从这里进入:
https://developer.nvidia.com/embedded/downloads
要登陆认证一下
5.2 烧写 sd卡
linux 下烧写比较简单, sd卡 通过读卡器连接到系统之后 一顿 dd 操作即烧写完成
如 sd卡识别为 /dev/sdc ((慎重不要找错设备名,通过 fdisk -l 确认), 如下操作:
# 首先解压下载的镜像,得到 b01_blob_4g.img
dd if=/dev/zero of=/dev/sdc bs=1M count=1 # 抹掉分区表
dd if=b01_blob_4g.img of=/dev/sdc bs=10M # 烧写镜像,12G, 与tf容量不一致等开机后根据菜单提示再扩。
5.3 加电启动和基本系统 设置
tf 卡插到 jetson nano 核心板,先连接hdmi 屏幕和键盘, 启动后通过键盘完成系统基本安装 基本上根据菜单提示完成:
创建用户
resize 分区为64g
连接WIFI (jetbot 套件带了一个 mini-PCIE的 wifi, 可自行购买 usb 的无线网卡)
5.4 创建交换分区
# 交换空间很有必要,避免安装库和运行模型时空间不够系统 OOM 死掉
fallocate -l 8G /swap0
chmod 600 /swap0
sudo mkswap /swap0
sudo swapon /swap0
echo "/swap0 swap swap defaults 0 0" >> /etc/fstab
然后重启
六 软件源设置与系统更新
6.1 apt 源
添加以下部分到 /etc/apt/sources.list
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
添加完以后运行:
apt update
# 选择性的删除一些无用的软件
# apt remove libreoffice*
apt upgrade -y # 系统更新到最新,可以不更新
6.2 安装 python3-pip 并对pip 源进行设置
apt install python3-pip -y
mkdir ~/.pip
#写入以下内容到 ~/.pip/pip.conf
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com
6.3 安装 numpy scipy 等
使用pip3 安装 ,并验证下速度
pip3 install numpy scipy matplotlib
七 jupyter notebook
jupyter 是一个可远程通过网页开发和调试运行python 代码的工作,非常方便!推荐一下
7.1 安装
pip3 install jupyter
7.2 初始化配置和生成密码
jupyter notebook --generate-config
jupyter notebook password
Enter password: ****
Verify password: ****
7.3 打开远程访问
# 打开 ~/.jupyter/jupyter_notebook_config.py 文件, 并修改以下部分
c.NotebookApp.ip = '*'
c.NotebookApp.allow_root = True
c.NotebookApp.port = 8888
7.4 验证
#jetboot 上 shell 执行:
jupyter notebook
八 深度学习库部署
8.1 自带基础库
JetPack 4.4.1 镜像 自带了以下基础库:
cuda 11.0 cudnn 11.0 tesnorRT , vision works , gstreamer , opencv 4.1.1
8.2 安装 pytorch 1.7 和 torchvision 0.8
pytorch 下载 whl版本安装
https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-7-0-now-available/72048
下载好 pytorch_1.7.whl 之后 :
pip3 install pytorch_1.7.whl # 科鞋上网,下不下来就用源代码安装吧,我就用的源码编译了两三个小时
torchvision 编译安装 :
git clone -b release/0.8.0 https://github.com/pytorch/vision.git vision_0.8.0
cd vision_0.8.0 && python3 setup.py install # 遇到错误说找不到 libavcodec,
# apt install libavcodec-dev libavformat-dev libavutil-dev libswscale-dev 之后
# 再重新 python3 setup.py install
8.3 编译安装 opencv4.5
从官网下载 opencv-4.5.0.zip opencv_contrib-4.5.0.tar.gz
解压 opencv-4.5.0.zip , 把 opencv_contrib-4.5.0.tar.gz 解压到 opencv-4.5.0 目录中
4.5 发布了很多新的 features, 这个博文介绍的挺好:
https://blog.csdn.net/amusi1994/article/details/109108385
编译流程:
cd opencv-4.5.0
mkdir build
cd build
#创建 build.sh , 以下内容
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_PNG=ON \
-DBUILD_TIFF=ON \
-DBUILD_TBB=OFF \
-DBUILD_JPEG=ON \
-DBUILD_JASPER=OFF \
-DBUILD_ZLIB=ON \
-DBUILD_EXAMPLES=OFF \
-DBUILD_opencv_java=OFF \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
-DENABLE_PRECOMPILED_HEADERS=OFF \
-DWITH_OPENCL=ON \
-DWITH_OPENMP=OFF \
-DWITH_FFMPEG=ON \
-DWITH_GSTREAMER=ON \
-DWITH_GSTREAMER_0_10=OFF \
-DWITH_CUDA=ON \
-DWITH_GTK=ON \
-DWITH_VTK=OFF \
-DWITH_TBB=ON \
-DWITH_1394=OFF \
-DWITH_OPENEXR=OFF \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \
-DCUDA_ARCH_PTX="" \
-DINSTALL_C_EXAMPLES=OFF \
-DOPENCV_ENABLE_NONFREE=ON \
-DINSTALL_TESTS=OFF \
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.0/modules \
-DCMAKE_INSTALL_PREFIX=/usr/ \
..
make -j4
make install
#执行 build.sh
chmod +x build.sh
nohup build.sh > build.log &
# 过程比较长,我是在板子里让它跑了一晚上
九 系统clone 备份(自己选择过程节点备份)
9.1 清理垃圾
apt-get clean
# 删掉无用的安装包文件 略
9.2 将tf 卡拨下连接到 开发 ubuntu 主机
9.3 备份
dd if=/dev/sdc bs=10M | bzip2 > jetbot_jetpack4_4_1.img.bz2
9.4 备份恢复到 tf 卡(需要的时候)
dd if=/dev/zero of=/dev/sdc bs=1M count=1 # 擦除分区表
bzip2 -dc jetbot_jetpack4_4_1.img.bz2 | dd of=/dev/sdc