在Jetson Nano中安装Tensorflow与PyTorch,解决arm架构h5py、sklearn、TLS block等问题

Setup Jetson Nano

因为Nano是Arm架构,所以相比x86_64架构的配置流程有所区别。

解决BUG部分请直接跳到本文最后。


1. Notification

Arm的许多源是与x86_64源不同的,所以除非很有把握,最好保持Nvidia出厂配置的源不变,轻易不改变软件源。

另外Nvidia官方提供的系统镜像中,是已经配置好CUDA、NVCC、CuDNN等组件的,不需要再自行配置,具体可通过nvcc -Vls /usr/local/cuda等查看。

特别注意,不能使用nvidia-smi并不是bug,是因为Nano镜像中确实没有此工具。

2. Setup Python Env.

Python既可以使用apt安装在系统目录中,也可以使用conda安装在用户目录中。

2.1 安装到系统

sudo apt update
sudo apt install python3-pip
sudo pip3 install -U pip

如果想(或需要)使用命令pythonpip来代替python3pip3,可以通过创建/修改软链接的方法替换原命令:

sudo ln -sf /usr/bin/python3 /usr/bin/python
sudo ln -sf /usr/bin/pip3 /usr/bin/pip

当然如果不想用软链接,也可以通过修改配置文件(如添加alias等)达到目的,具体做法自行搜索。
完成后使用which pythonpython -V确认版本。

2.2 安装到用户主目录

2.2.1 Install conda with miniforge

传统架构中,经常使用anaconda或miniconda管理python环境,但arm架构中需要使用miniforge代替:

cd ~
wget https://github.com/conda-forge/miniforge/releases/download/4.8.2-1/Miniforge3-4.8.2-1-Linux-aarch64.sh
bash Miniforge3-4.8.2-1-Linux-aarch64.sh

安装过程中,按q跳过用户协议,其它过程根据提示输入yes或Enter即可。

安装完毕后,使用source ~/.bashrc激活conda环境。

2.2.2 Decrease python version to 3.6

因为Nvidia提供的Tensorflow 2.X是在python 3.6环境下编译的,因此需要对conda的默认python降级。

如果不想改变默认python版本,也可以使用conda create -n py3.6 python=3.6来创建新环境。

conda install python=3.6

完成后使用which pythonpython -V确认版本。

3. Install System Dependencies

因为Arm下许多库都要从源编译,因此需要安装一些编译过程用到的库。

如果第2节是按2.1步骤将python与pip安装到系统,那后续使用pip3时都要先加上sudo

sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran
python3 -m pip install -U pip
python3 -m pip install -U CPython testresources setuptools

4. Install Python Libraries

这些依赖项中的很多是为Tensorflow准备的,如果不打算安装Tensorflow,可以先跳过本节,等到后面安装报错的时候再根据错误信息回头检视缺少的库。

pip3 install -U numpy==1.16.1 future==0.17.1 mock==3.0.5 h5py==2.9.0 keras_preprocessing==1.0.5 keras_applications==1.0.8 gast==0.2.2 futures protobuf pybind11

编译安装时间会很长(1小时以上),注意不要断网断电。

5. Install Tensorflow

访问Nvidia再发行版Tensorflow官网,选择合适的版本下载安装。此处以tf_gpu-2.2.0+nv20.6-py3为例:

cd
wget https://developer.download.nvidia.com/compute/redist/jp/v44/tensorflow/tensorflow-2.2.0+nv20.6-cp36-cp36m-linux_aarch64.whl
pip3 install tensorflow-2.2.0+nv20.6-cp36-cp36m-linux_aarch64.whl

部分依赖项的编译时间较长。

JetPack的版本可以根据手中Jetson的CUDA版本确定。运行ls /usr/local/cuda*cat /usr/local/cuda-*/version.txt可查看本机CUDA版本。

JetPack4.4中CUDA版本为10.2,JetPack4.2/4.3中CUDA版本为10.0。

6. Install PyTorch

NVIDIA论坛Jetson版块下的PyTorch for Jetson帖子中,下载合适的pip安装包,此处以python3.6为例:

wget https://nvidia.box.com/shared/static/p57jwntv436lfrd78inwl7iml6p13fzh.whl -O torch-1.8.0-cp36-cp36m-linux_aarch64.whl
pip3 install numpy torch-1.8.0-cp36-cp36m-linux_aarch64.whl

同时还要安装torchvision(以torch1.8.0为例,使用torchvision版本v0.9.0,其它版本号查看https://github.com/pytorch/vision里可用的tags):

sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision   # see github tags for version of torchvision to download
cd torchvision
export BUILD_VERSION=0.x.0  # where 0.x.0 is the torchvision version  
python3 setup.py install --user

编译安装时间会很长(实测平均30分钟),注意不要断网断电。
如果报错error processing package nvidia-l4t-initrd,请把/usr/sbin/l4t_payload_updater_t210的第一句改成#!/usr/bin/python2。具体参看文末Solve Bug小节。

7. Install ROS

Solve Bug

Bug Solution Ref.
h5py编译出错 需要先手动安装CPython再编译。 hzy1997
找不到xlocale.h 创建指向locale.h的软链接:sudo ln -s /usr/include/locale.h /usr/include/xlocale.h dmytrolev
cannot allocate memory in static TLS block 在.bashrc中加入export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1,并. .bashrc OliverFaust
scikit-learn未正确编译 从源码安装:pip install git+https://github.com/scikit-learn/scikit-learn.git。系统级:sudo apt install python-sklearn sklearn
error processing package nvidia-l4t-initrd /usr/sbin/l4t_payload_updater_t210第一句的python改成python2,或者暂时把系统默认python改为2.x monkeyy043y

References

  1. Nvidia Jetson AGX Xavier安装ROS、Anaconda、PyTorch及其它依赖库
  2. Official TensorFlow for Jetson Nano!

猜你喜欢

转载自blog.csdn.net/liuqixuan1994/article/details/112347654
今日推荐