Jetson Xavier NX具体开发(Ubuntu18.04系统)
- 一、设置ssd固态硬盘作为启动盘
- 二、 安装cuda(售后另外发的)
- 三、更新程序数据库(一定要先更新,不然很多报错)
- 四、 设置为中文
- 五、安装防火墙管理插件(便于管理端口)(可以不用)
- 六、安装远程桌面
- 七、安装jtop
- 八、安装拼音输入法
- 九、安装archiconda
- 十、安装vscode编译器
- 十一、 typora下载
- 十二、模型迁移(以行人重识别为例)
- 十三、Jetson安装mysql
- 十四、总结
一、设置ssd固态硬盘作为启动盘
来自SSD的读取速度是SD卡的7倍。因此,从SSD启动肯定会提高jetson NX的性能。
- 格式化ssd
安装您的和SSD并启动,然后打开菜单并进行搜索。disk
启动磁盘应用程序,您将看到此。
点击左下角的+号,添加16G的交换区
选择主分区的大小。建议16 GB交换文件。
给卷起个名字。然后单击Create
现在,您已成功创建卷。但它还没有安装。让我们使用外壳命令安装它。幸运的是,杰森哈克已经将这些命令集成到外壳脚本中。让我们运行它, - 将根源从SD卡复制到SSD
首先,复制该项目。
git clone https://github.com/jetsonhacks/rootOnNVMe.git
cd rootOnNVMe
然后将根源文件复制到您的SSD
./copy-rootfs-ssd.sh
- 启用从 SSD 启动
运行并重新启动以使服务生效。
./setup-service.sh
- 重启
sudo reboot
二、 安装cuda(售后另外发的)
由于国产套件的核心模组是自带16G emmc闪存,刷机时只能刷入最基础系统,
需要扩展固态硬盘设置SSD启动后再执行命令安装CUDA等环境的包。
请参考第5个视频(观看到第5分钟后开始执行的是CUDA组件安装指导)操作指令如下:
- 第一步:把文件夹内附带的脚本文件解压并复制到jetson nx系统内根目录下。
- 第二步:终端执行更新
sudo apt-get update
- 第三步:给权限运行脚本
sudo chmod -R 777 bootFromExternalStorage
- 第四步:进入目录
cd bootFromExternalStorage
- 第五步:运行脚本
./install_jetson_default_packages.sh
三、更新程序数据库(一定要先更新,不然很多报错)
- 更新系统软件源的命令。
apt-get update
- 更新升级所有软件的命令。
apt-get upgrade
四、 设置为中文
- 在应用程序里找到settings并打开
- 找到按钮Region&Language
- 点击Manage Install Languages
- 选择Install/Remove Languages
- 在语言列表中找到Chinese(simplified),并打上勾,点击Apply.
在弹出对话框中,然后输入管理员密码即可。 - 安装过程,略过。
- 这里注意,安装完成后,还要把”简体中文“拉到”英文“上面
- 在语言和格式中,分别选择汉语和中国。
- 重新启动ubuntu
五、安装防火墙管理插件(便于管理端口)(可以不用)
- 指令:
sudo apt-get install ufw
- 使用ufw管理防火墙
- 启用指令:
sudo ufw enable
- 关闭指令:
sudo ufw disable
- 状态指令:
sudo ufw status
- 允许外部访问3306端口:
sudo ufw allow 3306
- 禁止外部访问8010端口:
sudo ufw delete allow 8010
- 允许此IP访问所有的本机端口:
sudo ufw allow from 192.168.1.1
- 禁止外部访问smtp服务:
sudo ufw deny smtp
六、安装远程桌面
1.vnc是什么
所谓的 VNC(Virtual Network Computing )是一种图形化的桌面共享系统,它使用远程帧缓冲协议 (RFB) 来远程控制另一台计算机。它将键盘和鼠标事件从一台计算机传输到另一台计算机,通过网络向另一个方向转发图形屏幕更新。
VNC 的优点很多,很多场景下都能看到VNC。例如,访问树莓派的桌面,对 headless 服务器的管理等等。但是,对于云上实例的远程图形化的访问VNC却不是好的选择。考虑到我们的使用场景是通过互联网来访问云上的主机,这就引出了否定 VNC 最主要的原因– 安全性。
默认情况下,RFB并不是一个安全的协议。虽然这个协议下密码不以明文方式发送,但如果能从网络中嗅出加密密钥和已编码的密码,还是有可能破解成功的。因此,建议密码至少有8个字符。另一方面,VNC的一些版本也有8个字符的限制; 如果发送的密码超过8个字符,则删除多余的字符,并将截断的字符串与密码进行比较。
在VNC生态系统中,”Big Four” 指的是LibVNC、UltraVNC、Tight VNC和TurboVNC 这四家提供VNC 产品的厂商。2019年,Kaspersky Lab 的研究人员对这四家公司进行了审计,以了解它们的安全性。他们的发现是令人失望的。总的来说,研究人员发现这四个程序的客户端和服务器部分共有37个严重缺陷。其中22个在 UltraVNC,另外10个在 LibVNC, 4个在 TightVNC,还有一个在 TurboVNC,但这是一个严重的漏洞,它会让攻击者在服务器端远程执行代码。
2.rdp是什么
有过 Windows 使用经验的人对于远程桌面(Remote Desktop Protocol ,RDP)一定不会陌生。RDP 是由微软公司开发的一种专有协议,它为用户提供了通过网络连接到另一台计算机的图形界面。在使用上,用户需要使用 RDP 客户端软件,而在远程另一台计算机则需要运行 RDP 服务器软件。
微软的Windows、Linux、macOS、iOS、Android等操作系统都有客户端。Windows操作系统内置RDP服务器;Linux与 macOS 可以安装一个 RDP 服务器。缺省配置下,服务器监听 TCP 端口 3389 和 UDP 端口 3389。
微软目前把他们的官方RDP客户端软件称为Remote Desktop Connection,以前叫做 “Terminal Services client”
与VNC 相比,RDP的安全性有很大的提升。主要的安全特性包括了:
- 128位加密,使用RC4加密算法(版本6加入)
- 提供了对TLS的支持(版本2加入)
此外,正如前面提到的VNC协议是基于像素的。尽管这带来了极大的灵活性,可以显示任何类型的桌面,但它的效率往往不如那些更好地理解底层图形布局(例 如: X11)或桌面(例如:RDP )的解决方案。这些协议以更简单的形式(例如:打开窗口)发送图形原语或高级命令,而 VNC 的 RFB 协议尽管支持压缩但只能是发送原始像素数据。
如何使用RDP?
在 Windows 环境下使用RDP是再简单不过的事情。虽然微软公司没有为 Linux 提供 RDP 的软件,但是我们可以使用开源的xRDP,这是RDP协议在Linux平台 的实现。
xRDP是一个开源的远程桌面协议服务器,它用来实现Linux接受来自 Windows、Mac 或者 Linux 远程桌面客户端或的连接。这意味着你不需要在我们所使用的 Windows 或 macOS 机器上安装额外的第三方应用程序。
Linux 安装 xRDP的方法如下。这里我以 Ubuntu 20.04 为例 –
- 安装Gnome
GNOME是一个Linux 操作系统下的桌面环境,完全由免费和开源软件组成。缺省情况下在EC2上安装的Linux 操作系统都不包含Gnome,需要额外安装。Ubuntu 缺省的桌面窗口管理器就是Gnome,用以下命令安装。
$ sudo apt update
$ sudo apt install ubuntu-desktop
除了Gnome 以外,我们还可以选择 LXDE、Xface 等等。相比之下,LXDE 是轻量级的窗口管理器,Xface 则具备类似 Windows 界面的风格。如果不在乎额外增加的大约 5GB 的磁盘存储的开销,我还是推荐使用Gnome。原因在于这与我们本地使用的 Ubuntu 具有一致性的体验。
- 安装 xRDP
$ sudo apt install -y xrdp
安装完成后,xRDP服务将自动启动。可以通过这个命令来检查其状态:
$ sudo systemctl status xrdp
输出结果如下:
- 接下来,要为Linux的用户(ubuntu)设置登录密码
$ sudo passwd ubuntu
$ sudo adduser ubuntu ssl-cert
出于安全的理由务必使其符合密码安全的策略。第二条命令是将 用户ubuntu 加入到 ssl-cert 用户组中。这是因为默认情况下,xRDP 使用的是自签发的证书,这个证书保存在 /etc/ssl/private/ssl-cert-snakeoil目录下。证书的密钥文件只能由 “ssl-cert” 用户组的成员读取。
- 登录
在这里,username 输入ubuntu,password 输入刚刚修改过的用户密码。成功登录之后熟悉的Ubuntu 桌面就会立刻出现在眼前。
按照我的体验,网络延迟在35ms以内xRDP 的与本地Linux 桌面的操作体验几乎没有差别。实测之下,通过我所使用的100M联通宽带访问AWS 中国(北京)区域的EC2 实例,网络延迟大约在5ms左右。
单以鼠标、键盘的使用体验而论,本地桌面与远程桌面的差别已经微乎其微了,我终于可以放心的将许多工作移到云端。无论是通过我的笔记本电脑、iPad 甚至是一台树莓派都能够让我接入顺利的接入远程桌面。如此一来,开发在云端岂不是再简单不过的事情了。
3.nomachine远程桌面
NoMachine是一款不错的远程桌面控制软件,该工具简单,易用,尤其是在低带宽、慢速率的网络环境下工作性能良好,允许用户从另一台计算机访问和控制远程的Windows,Linux PC或Mac电脑,实现工作或娱乐等操作。
软件下载地址:下载官网
进入之后,会自动检测当前主机的版本,选择download下载最新版。注意NX开发板要选择对应的NoMachine for ARM版
由于某些原因,可能会下载很慢,还会出现中断,特贴出我辛苦下载下来版本
win10版链接
NX开发板对应的版本
七、安装jtop
相关组件安装
- 一般的架构(x86、amd64)下都是使用
nvidia-smi
- arm架构下
使用Jetson Xavier NX的时候需要查看cpu 电源,gpu的使用 频率和调度等情况,简单的top 命令已经不能满足需求了,有一款软件 jetson-stats ,它相当于主机端使用nvidia-smi来查看显卡使用情况一样,可以完成NX板卡上述资源消耗的使用情况。
在pip配置好的情况下,直接在终端pip3安装
pip3 install jetson-stats
#第一种报错,就第二种安装方式
sudo -H pip3 install jetson-stats
安装好后输入
jtop
查看NX开发套件的各项资源使用情况,按 q 结束退出
八、安装拼音输入法
1.安装前的准备
在Ubuntu18.04下,谷歌拼音输入法是基于Fcitx输入法的。因此,我们需要首先安装Fcitx。一般来说,Ubuntu最新版中都默认安装了Fcitx,但是为了确保一下,我们可以在系统终端中运行如下命令:
sudo apt install fcitx
2.配置Fcitx
系统终端中输入命令:
im-config
注:im-config是Input Method Configuration的缩写。
运行如下命令之后,就会开启 Input Method Configuration 窗口。
在出现的窗口中,选择Yes,如下图所示:
在出来的这个窗口中,必须选中Fcitx,然后选择Yes,如下图所示:
选中Fcitx后出来这个窗口就选择OK,如下图所示:
点击OK后就关闭窗口,重新启动电脑让所做的配置生效,当然你也可以在系统终端中运行:sudo reboot
命令重启电脑。
3.安装谷歌拼音输入法(Google Pinyin)
在Ubuntu18.04系统中安装谷歌拼音输入法(Google Pinyin)非常简单,只需要下面这个命令:
sudo apt install fcitx-googlepinyin
reboot
在出来的选项中输入y即可安装。
安装后运行如下命令配置谷歌拼音输入法:
fcitx-config-gtk3
然后依次进行如下操作:
配置fcitx
如果又拼音直接保存就行,如果没有,则选择左下角的+号搜索添加。
如果想重新设置切换快捷键,直接点击“全局配置”
如果出现输入法没有候选框,则输入以下两个命令
killall fcitx-qimpanel
sudo apt-get remove fcitx-ui-qimpanel
到这里,在Ubuntu18.04系统中安装谷歌拼音输入法(Google Pinyin)全部完成了。
九、安装archiconda
为什么还需要 Anaconda?有以下3个原因:
- Anaconda 附带了一大批常用数据科学包,它附带了 conda、Python 和 150 多个科学包及其依赖项。因此你可以立即开始处理数据。
- 管理包
Anaconda 是在 conda(一个包管理器和环境管理器)上发展出来的。
在数据分析中,你会用到很多第三方的包,而conda(包管理器)可以很好的帮助你在计算机上安装和管理这些包,包括安装、卸载和更新包。 - 管理环境
为什么需要管理环境呢?
比如你在A项目中用了 Python 2,而新的项目B老大要求使用Python 3,而同时安装两个Python版本可能会造成许多混乱和错误。这时候 conda就可以帮助你为不同的项目建立不同的运行环境。
还有很多项目使用的包版本不同,比如不同的pandas版本,不可能同时安装两个 Numpy 版本,你要做的应该是,为每个 Numpy 版本创建一个环境,然后项目的对应环境中工作。这时候conda就可以帮你做到。
但是Anacona目前不支持aarch64架构,因而无法直接安装。好在github上有Archiconda这个项目,可以看作是arm版的Anaconda
下载地址
链接
启动脚本
(xxx为版本号)
chmod a+x Archiconda-xxx.sh
./Archiconda-xxx.sh
然后一路回车
安装成功
reboot
conda添加清华源
将以上配置文件写在~/.condarc中
vim ~/.condarc
channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
ssl_verify: true
十、安装vscode编译器
进入进入官网点击直接下载
下载成功后,双击.deb文件
十一、 typora下载
官方地址
点击下载.deb文件包,双击安装
设置md文件默认打开方式为typora
双击打开,成功
十二、模型迁移(以行人重识别为例)
1. 导入项目(xshell等工具)
2. 打开vscode,打开文件夹,选择项目后,点击确定
3. 新创建终端,使用conda创建新环境(注意如果是jetson上的话,python只能安装3.6版本的)
4. vscoda切换python编译器
通常在以下路径(刚刚安装的ReID环境),找到python后,双击确定
切换成功
5. 安装项目需求环境,通常在requirements.txt文件
在终端输入
conda activate ReID
pip install -r requirements.txt#这里torch和torchvision可以先不装
python包安装中
安装成功,关闭重启
特别注意torch的版本一定要和cuda版本对应,如果出错,建议直接去官网下载,找到适合自己的版本(找到适合自己的版本(英伟达torch官网))
- 本人失败,可参考试试:解决方法链接
- 本人成功:(亲测成功)NVIDIA Jetson NX 安装Miniconda以及Pytorch1.7
先安装依赖:
sudo apt-get install libopenblas-base libopenmpi-dev
安装Pythorch (需要在安装文件当前目录运行命令)
pip install torch-1.7.0-cp36-cp36m-linux_aarch64.whl
安装完成导包测试
python
import torch
#如果上面的依赖没有安装这里会报错
#OSError: libmpi_cxx.so.20: cannot open shared object file: No such file or directory
可以在包目录这个网站右上角搜索libmpi_cxx.so.20手动下载需要的依赖包
需要的依赖包有:
libhwloc5_1.11.9-1_arm64.deb (先安装)
libopenmpi2_2.1.1-8_arm64.deb
libopenblas-base_0.2.20+ds-4_arm64.deb
安装依赖参考链接
依赖安装完成后有可能还会遇到一个错误
import torch
#Illegal instruction (core dumped)(非法指令(核心转移))
在环境变量最后面加入
sudo vim ~./bashrc
export OPENBLAS_CORETYPE=ARMV8
source ~/.bashrc
最后测试一下
python
import torch
print(torch.cuda.is_available()) #测试cuda是否能用
True #返回Ture说明cuda能用
6. 安装torchvision
torchvision库简介(翻译)
torchvision是独立于pytorch的关于图像操作的一些方便工具库。
torchvision的详细介绍在:https://pypi.org/project/torchvision/
torchvision主要包括一下几个包:
- vision.datasets : 几个常用视觉数据集,可以下载和加载,这里主要的高级用法就是可以看源码如何自己写自己的Dataset的子类
- vision.models : 流行的模型,例如 AlexNet, VGG, ResNet 和 Densenet 以及 与训练好的参数。
- vision.transforms : 常用的图像操作,例如:随机切割,旋转,数据类型转换,图像到tensor ,numpy 数组到tensor , tensor 到 图像等。
- vision.utils : 用于把形似 (3 x H x W) 的张量保存到硬盘中,给一个mini-batch的图像可以产生一个图像格网。
本人在torch官网上找不到arms适配的vision包,直接进行pip安装的话直接报错,所以选择whl安装torchvision
- 本人失败,仅供参考的地址链接。做下记录
whl地址(torch官方) - 成功方法
jetson nano之(4):pytorch安装和torchvision
vision说明地址:https://github.com/pytorch/vision
因为我安装的是1.7.0的pytorch,对应 torchvision 版本是0.8.1,所以安装如下:
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
pip3 install torchvision==0.8.1 #我用这条没有安装成功
手动去这个地址下载代码包:https://github.com/pytorch/vision/archive/v0.8.1.zip(也可以直接进入https://github.com/pytorch/vision中找到其他的版本)
找到合适的版本下载
下载解压后,进入文件夹
export BUILD_VERSION=0.8.1 #这里可以将地址写入~/.bashrc中
sudo python3 setup.py install #这里如果是conda的下的虚拟环境,sudo可能会提示错误,所以可以去掉sudo
#测试是否安装成功
import torchvision
print(torchvision.__version__)
- 如果报错fatal error: libavcodec/avcodec.h: No such file or directory
在Jetson Xavier NX上安装torchvision编译报错:fatal error: libavcodec/avcodec.h: No such file or directory
网上给出的方法很多都是说由于ffmpeg版本导致的问题,但是我又不想去搞这个ffmpeg,不想把问题复杂化!然后在官网看到一条解决方式,在编译之前,对setup.py文件进行一些修改,把:
if has ffmpeg 改为if False即可
7. nvcc not fount(添加cuda进环境里面改)原文链接
原因是虽然已经安装了cuda但是没有将cuda添加到Linux环境下。
首先声明:通过修改.bashrc文件的方法来修改环境是永久有效但是仅针对当前用户,对于没有root权限的用户,这种方式是很有好的,
- 如果有root权限的可以直接输入命令,修改环境。
sudo vim ~/.bashrc
- 对于没有root权限的人来说就只能选择以下的方式:通过修改./bashrc文件
打开Linux终端,输入命令:
echo 'export PATH=/usr/local/cuda-10.0/bin/:$PATH'>>~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH'>>/.bashrc
source ~/.bashrc
注意以上的第一行和第二行命令中的 cuda-10.0 这里根据安装的cuda版本不同所对应的文件夹名称也不同。如果安装是cuda9.0请到usr文件下找到local文件夹看看你所安装cuda文件夹名是什么,那么上面的 cuda-10.0 内容就相应改成什么。
需要注意的是:上述的方式只针对当前用户,因此最后一个命令是用于跳转到当前用户的命令窗口执行。在对应的用户终端命令栏中输入vncc -V则可以看到NVIDIA版本信息。
十三、Jetson安装mysql
1.系统
Jetson nano 官方系统是ubuntu,是在ubuntu上修改的NVIDIA系统 ubuntu18.04 LTS,好像是是aarch架构,系统界面如下
2.安装配置mysql
安装
和直接在ubuntu上安装没有什么区别,直接使用apt-get install mysql-server
得到的是5.x版本,不是最新的8.x版本 使用 apt-get
安装完后 会生成一些默认的账户在 /etc/mysql/debian.cnf中 可以通过sudo cat /etc/mysql/debian.cnf
查看
配置用户
登录应该是需要安装mysqsl-client,也是使用apt-get install mysql-client安装
然后登录
mysql -u username -p
然后输入密码
新建用户,赋予权限
create user 'username'@'localhost' identified by 'password';
#username是你想创建的用户名
#localhost是表示它可以通过那个ip来访问,localhost表示本地 其余ip表示其他地址 %表示所有
#password是密码
grant all privileges on 数据库.* to username@ip地址 ;
#好像mysql的用户是通过 username+ip来区别,可以有连个username相同的用户,只要ip不一样。
修改配置文件,实现远程访问
cd /etc/mysql
//然后ls一下 我的有下面这些东西,配置文件在mysql.conf.d中
//conf.d debian-start my.cnf.fallback mysql.conf.d
//debian.cnf my.cnf mysql.cnf
cd mysql.conf.d
vim mysqld.cnf
//将地址127.0.0.1 改成0.0.0.0
service mysql restart
mysql其他常用命令:
sudo service mysql restart
sudo netstat -tap | grep mysql #查看是否允许
配置内网穿透
我选择使用花生壳进行内网穿透,花生壳还是比较方便的。
应该是可以直接参考树莓派的官方教程https://service.oray.com/question/11639.html
dpkg -i phtunnel_5_0_rapi_aarch64.deb #安装
可以通过以下命令来操作:
phddns #查看命令
phddns start #打开
phddns status #可以查看SN码
打开http://b.oray.com ,在登录页面中输入SN码与默认密码(admin)登录。
剩下的就看官方教程就好了https://service.oray.com/question/11639.html
建立的映射应该是tcp类型,绑定到3306端口
注意,需要先给你的Nano 配置IP与MAC绑定,因为你的路由器应该是使用动态分配IP,打开192.168.1.1即可进行绑定,不然每次都要重新 在管理界面绑定一次。
测试
可以先在内网测试一下能否脸上nano的mysql,使用ifconfig获得内网地址类似与192.168.1.101,然后在自己电脑上用workbench测试一下。
测试成功后绑定外网然后在外网试一下。
十四、总结
这里之后,基本的盒子部署已经完成了,后面就是一些项目的具体实施,比如我目前在学习的ReID模块,我也会将其写成博客进行学习。