x86上编译jetson nano的docker

一、搭建nano的docker环境

1.压缩文件到压缩包,压出来比较大,因此我在nano上挂了个硬盘

sudo tar -cvpzf /media/nvidia/879B4F4E528BF0CF/backup_new.tgz --one-file-system --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys --exclude=/media/nvidia/879B4F4E528BF0CF/backup_new.tgz /
 

注意 :如果挂了硬盘要加 --one-file-system 这样不会把外挂的硬盘也压进去

2.将刚刚的压缩包解压拷贝到目录

3.导入 docker

 先导入docker

    docker import backup_new1.tgz  nvidia/nano:r32.7.1
查看已经导入的镜像
        sudo docker images

二、运行docker

1. 下载   qemu-aarch64-static

wget https://github.com/multiarch/qemu-user-static/releases/download/v5.1.0-5/qemu-aarch64-static.tar.gz

 2. 注册 register

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

正常来说是拉不下来的会报错:

解决办法为:

cd /etc/docker

sudo gedit /etc/docker/daemon.json

写入以下: 

 {
  "registry-mirrors": [
    "https://docker.m.daocloud.io"
  ]
}

然后
sudo systemctl daemon-reload

sudo systemctl restart docker

在执行

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes  两次

3.运行docker

sudo docker run -it -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static -v /home/robot/nano_docker/nano_ws nvidia/nano:r32.7.1 /bin/bash   

能进的话说明运行起来了,注意一下: 这样进docker,退出 docker后docker内新增的内容会退出

4.写脚本让每次都进制定name的docker,退出后内容不丢失

#!/bin/bash

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

# 脚本配置部分
CONTAINER_NAME=nano_dev
IMAGE_NAME=nvidia/nano:r32.7.1
WORKDIR_HOST=/home/robot/nano_docker/nano_ws
WORKDIR_CONTAINER=/nano_ws
QEMU_BIN=/usr/bin/qemu-aarch64-static

# 检查镜像是否存在
if ! docker image inspect $IMAGE_NAME > /dev/null 2>&1; then
  echo "[INFO] 拉取镜像 $IMAGE_NAME ..."
  docker pull $IMAGE_NAME
fi

# 检查容器是否已经存在
if docker container inspect $CONTAINER_NAME > /dev/null 2>&1; then
  echo "[INFO] 容器 $CONTAINER_NAME 已存在,直接启动..."
  docker start -ai $CONTAINER_NAME
else
  echo "[INFO] 创建并启动容器 $CONTAINER_NAME ..."
  docker run -it \
    --name $CONTAINER_NAME \
    -v $QEMU_BIN:$QEMU_BIN \
    -v $WORKDIR_HOST:$WORKDIR_CONTAINER \
    $IMAGE_NAME /bin/bash
fi
 

<think>我们正在为Jetson Nano(ARM架构)上的Python3.6安装ONNX库。由于Jetson Nano是ARM设备,直接使用pip安装预编译的ONNX包可能会遇到兼容性问题,因为大多数预编译包是针对x86_64架构的。因此,我们可能需要从源代码编译ONNX。 根据引用[4],我们可以使用桌面或云虚拟机(x86环境)进行交叉编译,生成适用于ARM的ONNXRuntime wheel文件,然后将其部署到Jetson Nano。但是,用户要求安装的是ONNX库(可能是指ONNX本身,而不是ONNXRuntime)。注意:ONNX和ONNX Runtime是两个不同的库。- ONNX:是一个开放格式,用于表示机器学习模型,同时也提供了一些用于操作ONNX模型的工具。- ONNX Runtime:是一个用于运行ONNX模型的推理引擎。 用户的问题中只提到了“onnx library”,根据上下文,可能是想安装ONNX(用于导出模型为ONNX格式)或者ONNX Runtime(用于运行ONNX模型)。由于问题没有明确,我们将分别考虑。但是,根据引用[1]中用户提到的“如果之后要转onnx也要下载onnx库”,这里应该是指ONNX(用于模型转换)。因此,我们首先尝试安装ONNX。然而,在JetsonNano上直接使用pip安装ONNX可能会遇到问题,因为官方PyPI上的ONNX包是预编译的,可能不支持ARM架构(尤其是aarch64)。因此,我们需要从源代码编译。 步骤:1.准备环境:确保JetsonNano上已安装必要的依赖项和构建工具。2.从源代码编译ONNX。但是,从源代码编译ONNX需要先安装其依赖项,特别是Protobuf。ONNX使用Protobuf来定义其模型格式。 参考引用[2]和[3],我们需要安装一些系统依赖和Python开发环境。 具体步骤:1.更新系统并安装依赖:```bashsudo apt-get updatesudo apt-get install-y cmake protobuf-compilerlibprotoc-dev```2.确保Python3.6的开发文件已安装(如果未安装):```bashsudo apt-get install-y python3.6-dev``` 3.升级pip(确保pip是最新版本):```bashpython3.6 -m pipinstall --upgradepip```4.安装一些必要的Python包(如setuptools, wheel, numpy等):```bashpython3.6-mpip installsetuptools wheelnumpy```5.安装ONNX的依赖项:Protobuf。由于ONNX要求特定版本的Protobuf,我们需要按照ONNX的要求安装。根据ONNX的官方文档(https://github.com/onnx/onnx),通常需要protobuf>=3.12.2。但是,由于我们使用Python3.6,可能需要注意版本兼容性。我们可以尝试安装兼容的Protobuf版本:```bashpython3.6 -m pipinstall protobuf==3.20.1```注意:在ARM设备上编译Protobuf可能会比较耗时,也可以考虑使用系统包管理器安装Protobuf,但要注意版本。6.克隆ONNX仓库并编译安装:```bashgitclone --recursivehttps://github.com/onnx/onnx.gitcdonnxgit checkoutv1.13.1#选择一个稳定版本,例如1.13.1(支持Python3.6)python3.6 setup.py buildpython3.6setup.pyinstall```注意:编译过程可能需要较长时间,并且需要足够的内存。如果内存不足,可以尝试增加交换空间(swapspace)。 7.验证安装:```bashpython3.6-c"importonnx; print(onnx.__version__)"``` 替代方案:使用预编译的wheel由于从源码编译比较耗时,我们可以尝试寻找预编译的ARM架构的wheel。但是,ONNX官方并没有为aarch64提供预编译的wheel。我们可以尝试从第三方获取,例如NVIDIA的JetPackSDK中可能包含,或者通过pip搜索是否有针对aarch64的wheel。 我们可以尝试直接使用pip安装,指定使用多架构支持的仓库(如piwheels):```bashpython3.6-mpip installonnx--no-cache-dir``` 但是,如果找不到预编译的wheel,pip会自动尝试从源码编译,这等同于上面的步骤6。 因此,如果用户希望避免编译,可以尝试寻找预编译的wheel。例如,在JetsonNano上,我们可以使用以下命令查看可用的版本: ```bashpython3.6-mpip install--use-pep517--extra-index-url https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/30/Everything/aarch64/os/Packages/p/python3-onnx-1.4.1-1.fc30.noarch.rpm onnx``` 但是,这通常不可行。因此,编译可能是必须的。总结:我们提供了两种方法,但编译是更可靠的方法。 注意事项:-编译需要足够的内存,如果内存不足,可以增加交换空间(参考引用[3]中提到的“交换空间”)。 -编译过程可能需要1-2小时。如果用户需要安装ONNXRuntime(用于推理),则步骤类似,但ONNX Runtime的编译过程更复杂,且NVIDIA提供了针对Jetson的TensorRT支持,建议使用TensorRT加速。不过,用户问题明确要求ONNX库,因此我们按ONNX安装。相关问题:1.如何在Jetson Nano上增加交换空间以避免编译时的内存不足问题? 2. ONNX和ONNXRuntime有什么区别? 3.在JetsonNano上如何安装ONNXRuntime?</think>### 在Jetson Nano上安装ONNX库(Python 3.6) 由于Jetson Nano采用ARM架构,安装ONNX库需从源码编译。以下是详细步骤: #### 步骤1:安装系统依赖 ```bash sudo apt-get update sudo apt-get install -y \ python3-pip \ python3.6-dev \ cmake \ protobuf-compiler \ libprotobuf-dev \ libprotoc-dev ``` > 注:Python 3.6开发包和Protobuf编译器是编译ONNX的关键依赖[^2] #### 步骤2:配置Python环境 ```bash python3.6 -m pip install --upgrade pip setuptools wheel python3.6 -m pip install cython numpy==1.19.4 # 兼容Python 3.6的NumPy版本 ``` #### 步骤3:从源码编译安装ONNX ```bash git clone --recursive https://github.com/onnx/onnx.git cd onnx git checkout v1.13.0 # 支持Python 3.6的最后一个版本 python3.6 setup.py build python3.6 setup.py install ``` > 编译时间约30-60分钟(取决于Nano配置),需确保设备有足够内存或交换空间[^3] #### 步骤4:验证安装 ```bash python3.6 -c "import onnx; print(onnx.__version__)" # 应输出 1.13.0 ``` ### 关键注意事项 1. **版本兼容性** ONNX 1.13+不再支持Python 3.6,必须使用`v1.13.0`版本 2. **内存优化** 若编译中出现内存不足: ```bash sudo fallocate -l 4G /swapfile # 创建4GB交换空间 sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile ``` 3. **替代方案** 可考虑在x86设备交叉编译ARM版whl文件后部署[^4]: ```bash docker run -v $(pwd):/work -it onnxruntime-arm64-build ``` ### 常见问题解决 - **错误: `numpy版本不兼容`** 强制安装指定版本:`pip install numpy==1.19.4` - **错误: `protobuf缺失`** 手动安装protobuf:`pip install protobuf==3.20.1` - **错误: `C++编译器失败`** 安装完整编译工具链:`sudo apt-get install build-essential`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值