Docker刻制记录

Jetson Xavier NX安装Docker

正常情况下, Jetpack可以直接在NX中安装Docker和Nvidia Container Toolkit,直接使用即可。
如果不慎卸载了自带的Docker,或者在Jetpack安装时没有选择安装Docker,可以按照直接按照官网教程https://docs.docker.com/engine/install/ubuntu/在Jetson Xavier NX中安装Docker。安装的过程中有两个问题需要注意:

  • 在添加GPG Key时,可能会报一个Unsafe Warning,无需理会,直接继续接下来的步骤即可。
  • 在进行安装的时候,不要选择latest版本,而是根据官网中提供的specific version安装教程,选择19.03.6版本,选择最新版本会在docker run的时候报如下错误:
docker: Error response from daemon: failed to create task for containr: failed to create shim task: OCI runtime create failed: container_linux.go: 349: starting container process caused "error adding seccomp filter rule for syscall clone3: permission denied": unknown

ERRO[0001] error waiting for container:

除了以上两个问题以外,按照官网教程安装即可。

Jetson Xavier NX安装Nvidia Container Toolkit

正常情况下, Jetpack可以直接在NX中安装Docker和Nvidia Container Toolkit,直接使用即可。
如果不慎卸载了自带的Nvidia Container Toolkit,或者在Jetpack安装时没有选择安装Nvidia Container Toolkit,参照博主Arnold-FY-Chen
的博文https://blog.csdn.net/XCCCCZ/article/details/108165949,发现在Jetson板子上可以直接执行如下命令安装Nvidia Container Toolkit,因为/etc/apt/sources.list.d/nvidia-l4t-apt-source.list这个源已保证可以找到你的板子对应的安装包,千万不要按照官网https://github.com/NVIDIA/nvidia-docker上面列的步骤去安装,那些是非Jetson板子的PC/Server上使用的。

   sudo apt-get update
   sudo apt-get install  nvidia-container-toolkit

Jetson Xavier NX彻底卸载Docker

官网中提供了彻底卸载Docker的方式,链接为:https://docs.docker.com/engine/install/ubuntu/#uninstall-docker-engine,但是参照博主苹榆枫的博文,发现按照官网的教程卸载仍有部分残留,因此在执行了官网的指令之后,又参照博文https://blog.csdn.net/pingyufeng/article/details/125817824进行了一次检查与卸载。

–gpus all报错

nvidia-container-toolkit、nvidia-container-runtime、nvidia-docker2的关系

nvidia-docker2和nvidia-container-toolkit都是用于在Docker容器中运行NVIDIA GPU加速应用程序的工具。
nvidia-docker2是一个Docker插件,它允许用户在Docker容器中访问宿主机上的NVIDIA GPU资源。使用nvidia-docker2,用户可以通过在Docker容器中运行命令来访问GPU资源,而无需在容器内安装NVIDIA驱动程序和CUDA工具包。
nvidia-container-toolkit是一个用于容器运行时的工具包,它可以为容器设置NVIDIA GPU支持、配置容器的运行环境并提供额外的安全性。使用nvidia-container-toolkit,用户可以在容器中运行具有高性能GPU加速的应用程序,同时确保容器的安全性和可靠性。
需要注意的是,nvidia-docker2已经被nvidia-container-toolkit取代,官方建议使用nvidia-container-toolkit来管理GPU加速容器。另外,nvidia-docker2只支持Docker CE 18.06及以下的版本,而nvidia-container-toolkit支持Docker CE 19.03及以上的版本。

nvidia-container-toolkit中包含nvidia-container-runtime。nvidia-container-toolkit是一个包含用于构建和运行容器的工具和库的软件包,其中包括nvidia-container-runtime,它是一个专门为NVIDIA GPU优化的容器运行时。

版本

Dockerhub镜像的版本:
Cuda版本:10.2.89
Opencv版本:3.2.0

Xavier自身版本:
L4T:R32,REVISION:4.3
CUDA:10.2.89
OpenCV版本:3.4.13
OpenCV4版本:4.1.1
JetPack 4.4

查看NVIDIA Container Runtime是否安装

参考Nvidia官方wikihttps://github.com/NVIDIA/nvidia-docker/wiki/NVIDIA-Container-Runtime-on-Jetson,执行如下命令:

$ sudo dpkg --get-selections | grep nvidia
libnvidia-container-tools			install
libnvidia-container0:arm64			install
nvidia-container-runtime			install
nvidia-container-runtime-hook		install
nvidia-docker2				install

$ sudo docker info | grep nvidia
+ Runtimes: nvidia runc

如果在第一个命令中没有看到对应的包,或者在第二个命令中没有看到Runtime,说明安装有问题。

Nvidia官方镜像库

官方库https://catalog.ngc.nvidia.com/containers?filters=&orderBy=scoreDESC&query=l4t
Nvidia Jetson Developer个人Githubhttps://github.com/dusty-nv/jetson-containers

Docker基础教程

https://yeasy.gitbook.io/docker_practice/

FROM arm64v8/ubuntu:latest

# 更新apt-get源
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list && \
    apt-get update && \
    apt-get install -y \
        curl \
        wget \
        bzip2 \
        libgl1-mesa-glx \
        && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# 安装Miniconda
RUN wget -q https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh -O /tmp/miniconda.sh && \
    /bin/bash /tmp/miniconda.sh -b -p /opt/conda && \
    rm /tmp/miniconda.sh

ENV PATH /opt/conda/bin:$PATH

# 安装tmux, tmuxinator
RUN apt-get update && \
    apt-get install -y \
        tmux \
        ruby \
        && \
    gem install tmuxinator && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ENTRYPOINT ["tmuxinator"]
CMD ["start", "default"]

Docker镜像存储位置修改

Docker镜像的默认存储位置为/var/lib/docker,不过由于此目录一般都位于系统盘,如果初始为Ubuntu分区的时候分配的空间较小可能会导致Docker将“/”目录塞满的情况,这里说一下如何修改Docker的存储位置。
本文通过拷贝/var/lib/docker至其他位置,并修改Docker配置文件/etc/docker/daemon.json的方式进行Docker镜像存储位置的修改,如果想通过软链接等其他形式进行修改,可以参考https://zhuanlan.zhihu.com/p/377322516

注意:在进行操作之前,请确保你已经备份了所有重要的 Docker 镜像和容器数据,以防止意外数据丢失。

1.停止 Docker 服务

sudo systemctl stop docker

2.创建新的存储目录
选择一个新的目录作为Docker存储目录

sudo mkdir -p home/nvidia/DockerImages

3.迁移现有的Docker数据
将原来的 Docker 镜像存储目录中的数据迁移到新的目录。使用 rsync 命令可以方便地将数据复制过去。运行以下命令:

sudo rsync -av /var/lib/docker/ home/nvidia/DockerImages/

这可能需要一些时间,具体时间取决于你的 Docker 数据量大小。
4.更新Docker配置文件
现在,需要告诉 Docker 使用新的镜像存储位置。编辑 Docker 配置文件 /etc/docker/daemon.json,如果文件不存在,则创建它:

sudo gedit/etc/docker/daemon.json

按照json的规则,添加以下内容:

{
  "data-root": "home/nvidia/DockerImages/"
}

请修改home/nvidia/DockerImages/与你之前新建的目录路径一致,并保存
5.重新启动Docker服务

sudo systemctl start docker

6.验证
使用如下指令,查看Docker默认存储位置

sudo docker info | grep "Docker Root Dir"

如果输出的位置是刚刚设置的位置,说明设置成功,之后正常使用Docker即可。

在Jetson Xavier AGX中刻制cv_bridge镜像记录

在Jetson Xavier AGX中刻制Yolo V5镜像记录

1.版本

所使用的Jetson Xavier AGX按照教程https://blog.csdn.net/qq_42800654/article/details/121165912?spm=1001.2014.3001.5502安装系统和Jetpack,其中各种版本如下:

  • L4T 32.4.3 Jetpack 4.4
  • Docker version 19.03.6
  • nvidia-container-runtime 1.0-1
  • CUDA V10.2.89

所使用的Docker基础镜像为https://hub.docker.com/r/zoechch888888/jetson-nx-cuda102-ros-realsense, 该镜像的各种版本如下

  • Jetpack 4.6.2
  • CUDA 10.2

2.Pytorch安装

首先,利用Conda创建python3.6的环境。
然后,安装依赖包:

sudo apt-get update
apt-get -y install libopenblas-dev

最后,根据Jetpack版本,从Nvidia官网https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048下载对应的安装包,这里选择pytorch v1.9.0,然后切换到对应的虚拟环境,使用pip进行安装

conda activate XXX
pip install torch-1.9.0-cp36-cp36m-linux_aarch64.whl

3.YOLO v5环境安装

能够在该版本的Xavier AGX中运行的YOLO v5所需要的requirements.txt如下,值得注意的是,opencv-python的版本应使用4.6.0.66,否则的话会出现opencv-python无法安装的问题

# YOLOv5 requirements
# Usage: pip install -r requirements.txt

# Base ------------------------------------------------------------------------
gitpython
matplotlib
#numpy>=1.18.5
opencv-python==4.6.0.66
Pillow
psutil  # system resources
PyYAML
requests
scipy
thop  # FLOPs computation
#torch>=1.7.0  # see https://pytorch.org/get-started/locally (recommended)
#torchvision
tqdm
# protobuf<=3.20.1  # https://github.com/ultralytics/yolov5/issues/8012

# Logging ---------------------------------------------------------------------
# tensorboard>=2.4.1
# clearml>=1.2.0
# comet

# Plotting --------------------------------------------------------------------
pandas
seaborn

# Export ----------------------------------------------------------------------
# coremltools>=6.0  # CoreML export
# onnx>=1.10.0  # ONNX export
# onnx-simplifier>=0.4.1  # ONNX simplifier
# nvidia-pyindex  # TensorRT export
# nvidia-tensorrt  # TensorRT export
# scikit-learn<=1.1.2  # CoreML quantization
# tensorflow>=2.4.0  # TF exports (-cpu, -aarch64, -macos)
# tensorflowjs>=3.9.0  # TF.js export
# openvino-dev  # OpenVINO export

# Deploy ----------------------------------------------------------------------
setuptools # Snyk vulnerability fix
# tritonclient[all]~=2.24.0

# Extras ----------------------------------------------------------------------
# ipython  # interactive notebook
# mss  # screenshots
# albumentations>=1.0.3
# pycocotools>=2.0.6  # COCO mAP
# ultralytics  # HUB https://hub.ultralytics.com

之后切换到对应的conda虚拟环境,添加conda源,并使用pip进行安装:

conda activate XXX
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
pip install requirements.txt
pip install rospkg

4.Torchvision安装

首先根据https://zhuanlan.zhihu.com/p/589722755查询pytorch与torchvision的版本对应关系,发现应该选择0.10.0版本的torchvision,但是在安装过程中,发现不能直接使用pip install torchvision==0.10.0进行安装,使用这种方法进行安装的torchvision版本所要求的是0.10.0,但是仍然会报错版本不匹配:

RuntimeError: Couldn't load custom C++ ops. This can happen if your PyTorch and torchvision versions are incompatible, or if you had errors while compiling tor
chvision from source. For further information on the compatible versions, check https://github.com/pytorch/vision#installation for the compatibility matrix. Please check your PyTorch version with torch.__version__ and your torchvision version with torchvision.__version__ and verify if they are compatible, and if not 
please reinstall torchvision so that it matches your PyTorch install.

查阅资料后,根据https://blog.csdn.net/m0_58442599/article/details/123910553发现要使用源码进行安装,安装方式如下:

sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
git clone --branch v0.10.0 https://github.com/pytorch/vision torchvision   
cd torchvision
conda activate XXX
export BUILD_VERSION=0.10.0
python3 setup.py install

安装完毕之后便可以成功使用YOLO v5

5.Docker镜像刻制

根据上述的安装过程,编写成Dockerfile进行docker构建,发现会卡在torchvision安装的python3 setup.py install,会在import torch处报错:

OSError: libcurand.so.10: cannot open shared object file: No such file or directory

一开始以为是环境变量的问题,尝试了在dockerfile中添加了如下指令:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.0/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-10.0/lib64
export PATH=$PATH:/usr/local/cuda-10.0/lib64

但是问题无法解决,查阅资料后发现,这并不是python环境的问题,是因为Docker在刻制过程中默认不使用CUDA,而利用脚本安装torchvision的时候需要CUDA,所以导致出现错误,解决方案为修改docker的配置文件,使得docker在构建过程中允许使用docker,步骤如下:
1.修改Docker的配置文件:/etc/docker/darmon.json,如果没有该文件,直接创建再添加下面的内容即可;如果存在该文件,请按照JSON的规则添加如下内容:

{
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
         } 
    },
    "default-runtime": "nvidia" 
}

2.重启Docker进程

sudo systemctl restart docker

之后再次构建Docker镜像即可

使用Docker内的ROS1与其他计算机的ROS2进行通信

是启动Docker时,加入参数--network host,使得容器与主机系统共享网络命名空间,从而容器中的节点可以直接访问主机上的网络设备。
(同时,加入参数-p 11311:11311,将容器的11311端口映射到主机的11311端口)

multimaster安装

按照官网教程安装或者直接源码安装即可,如果在安装了grpcio, grpcio-tools之后编译仍然报错/usr/bin/python2: No module named grpc_tools,使用pip2安装如上两个依赖即可,使用pip3安装会报错。

sudo apt-get update 
sudo apt-get install python-pip 
sudo pip2 install grpcio grpcio-tools

使用pip2安装这两个库需要很长时间,耐心等待即可。

Dockerfile中的ROS功能包编译

在Dockerfile中,如果直接使用RUN catkin_make会报错:

Errors     << catkin_tools_prebuild:cmake /root/multimaster_ws/logs/catkin_tools_prebuild/build.cmake.000.log
CMake Error at /root/multimaster_ws/build/catkin_tools_prebuild/CMakeLists.txt:12 (message):
  The catkin CMake module was not found, but it is required to build a linked
  workspace.  To resolve this, please do one of the following, and try
  building again.
   1. Source the setup.sh file from an existing catkin workspace:
      source SETUP_FILE
   2. Extend another catkin workspace's result (install or devel) space:
      catkin config --extend RESULT_SPACE
   3. Set `catkin_DIR` to the directory containing `catkin-config.cmake`:
      catkin config --cmake-args -Dcatkin_DIR=CATKIN_CMAKE_CONFIG_PATH
   4. Add the catkin source package to your workspace's source space:
      cd SOURCE_SPACE && git clone https://github.com/ros/catkin.git

按照如下方式在Dockerfile中指定所使用的shell并source ros的环境变量即可:

RUN /bin/bash -c ". /opt/ros/melodic/setup.bash && \
    cd /root/catkin_ws && \
    catkin build"

Miniconda中无法找到Python3.6

在使用miniconda创建python3.6环境时,会报错找不到python3.6:

Collecting package metadata (current_repodata.json): done
Solving environment: unsuccessful attempt using repodata from current_repodata.json, retrying with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: failed

PackagesNotFoundError: The following packages are not available from current channels:

  - python=3.6

Current channels:

  - https://repo.anaconda.com/pkgs/main/linux-aarch64
  - https://repo.anaconda.com/pkgs/main/noarch
  - https://repo.anaconda.com/pkgs/r/linux-aarch64
  - https://repo.anaconda.com/pkgs/r/noarch

To search for alternate channels that may provide the conda package you're
looking for, navigate to

    https://anaconda.org

and use the search bar at the top of the page.

解决方式:添加一下源即可

conda config --add channels conda-forge
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值