Docker 环境部署

引言

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,相互隔离互不干扰。

为了帮助大家快速开始使用芯片算法工具链,地平线提供了包含完整开发环境的Docker镜像,大大简化了开发环境的部署过程,同时也可避免与本地环境的冲突。大家可先依据后文第一章完成 Docker 安装,再通过第二章的介绍下载工具链离线镜像,加载到本地后即可在容器中进行开发。

1. Docker 基础环境安装

1.1 Ubuntu

1.1.1 CPU Docker

可使用如下命令使用官方提供的安装脚本进行自动安装:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

也可手动安装,可参考:https://www.runoob.com/docker/ubuntu-docker-install.html

1.1.2 GPU Docker

建议docker ce安装19.03以上的版本,默认已内置nvidia docker,只需再安装一下nvidia-container-toolkit即可-
可参考如下命令安装,更详细的步骤说明请参考NVIDIA官方文档:

# 安装docker ce
curl https://get.docker.com | sh \  && sudo systemctl --now enable docker
# 安装 NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
# 验证是否安装成功
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
-

1.2 CentOS

1.2.1 CPU Docker

可使用如下命令使用官方提供的安装脚本进行自动安装:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可手动安装,可参考:https://www.runoob.com/docker/centos-docker-install.html-

1.2.2 GPU Docker

建议docker ce安装19.03以上的版本,默认已内置nvidia docker,只需再安装一下nvidia-container-toolkit即可-
CentOS 7可参考如下命令安装,更详细的步骤说明以及CentOS 8安装请参考NVIDIA官方文档:

# 安装依赖环境
sudo dnf install -y tar bzip2 make automake gcc gcc-c++ vim pciutils elfutils-libelf-devel libglvnd-devel iptables
# 安装 docker ce
sudo yum-config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo yum repolist -v
sudo yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.4.3-3.1.el7.x86_64.rpm
sudo yum install docker-ce -y
sudo systemctl --now enable docker
# 验证是否安装成功
sudo docker run --rm hello-world
# 安装 NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \   && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.repo | sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
sudo yum clean expire-cache
sudo yum install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
# 验证是否安装成功
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
-

1.3 Windows

不推荐在个人笔记本电脑上搭建芯片算法工具链的环境,推荐使用内存至少为16G的开发环境,否则在转换编译较大模型(雷达、bev等)时容易出现内存不足的问题。

1.3.1 CPU Docker

1. 安装Docker Desktop:-
下载 Docker Desktop,并执行安装文件(有选项的地方都全选,一路下一步):Install Docker Desktop on Windows

2. 安装wsl:-
启动 dockerdesktop,可能会提示wsl版本过低等相关问题,问题下方会直接给出官方安装链接,大家直接点击链接按照步骤完成wsl的更新即可。以下步骤仅供参考:-
  ① 以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”),然后输入以下命令以启用适用于Linux的Windows子系统:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

② 以管理员身份在PowerShell中运行以下命令以启用虚拟机平台功能:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

③ 下载 Linux 内核更新包,并双击安装:X64下载链接 arm64下载链接;(可使用systeminfo命令查看本机系统类型)-
  ④ 以管理员身份在PowerShell中运行以下命令,将 WSL 2 设置为默认版本

wsl --set-default-version 2

3. 验证是否安装成功-
一般而言docker会自动启动,若没启动也可自行搜索Docker Desktop并双击启动,正常启动docker后可看到通知栏出现一条小鲸鱼。此时即可启动命令窗口(快捷键:WIN+R),运行以下命令看到Hello from Docker!字样即为安装成功。

docker run hello-world
-

1.3.2 GPU Docker

1. 安装WSL2(WSL2才可以调用GPU):-
  ① 以管理员身份在PowerShell中运行以下命令以启用虚拟机平台功能:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

② 下载 Linux 内核更新包,并双击安装:X64下载链接 arm64下载链接;(可使用systeminfo命令查看本机系统类型)-
  ③ 以管理员身份在PowerShell中运行以下命令,将 WSL 2 设置为默认版本

wsl --set-default-version 2

2. 安装Linux子系统:-
  ① 到应用商店中获取并安装 Ubuntu 20.04 LTS-
  ② 启动 ubuntu,设置 username, password-
  ③ 安装完成后可通过windows命令wsl --list --verbose查看到Ubuntu的wsl版本号:

3. 安装gpu基础运行环境-
在系统中还需要完成 cuda 安装。正确安装完cuda之后可参考前文1.1节完成在 ubuntu 系统中的 nvidia-docker 安装

2. 地平线芯片算法工具链Docker环境部署

2.1 下载离线镜像

从地平线开发者社区获取最新版工具链开发环境镜像的下载链接:-
X3派:可参考用户手册完成快速模型转换环境安装,无需安装docker:https://developer.horizon.ai/api/v1/fileData/documents_pi/ai_toolchain_develop/env_install.html-
XJ3 工具链开发包及镜像下载:https://developer.horizon.ai/forumDetail/136488103547258769-
J5 工具链开发包及镜像下载:https://developer.horizon.ai/forumDetail/118363912788935318-

2.2 加载离线镜像并启动容器

依据第一章完成docker基础环境安装后,使用如下命令加载离线镜像,并运行容器:-
1. 加载镜像

docker load -i docker_openexplorer_xxx.tar.gz

加载完镜像之后,可以通过命令docker images查看到本地所有的镜像:

2. 运行容器-
  ① 若下载了OpenExplorer开发包,可解压后进入开发包根目录,运行脚本进入容器

sh run_docker.sh /data

② 也可手动输入命令进入容器-
 CPU docker

docker run -it --rm -v `pwd`:/open_explorer {REPOSITORY}:{TAG}

GPU docker

docker run -it --rm  --runtime=nvidia -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all --shm-size="15g" -v `pwd`:/workspace {REPOSITORY}:{TAG}
-

3. 输入如下命令验证是否已成功进入工具链开发环境

hb_mapper --help

3. Docker 常用命令

Image:Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。-
Container:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。-
Repository:镜像的仓库源。

功能

命令

在线拉取镜像

docker pull {REPOSITORY}:{Tag}

加载离线镜像

docker load -i image_name.tar

查看本地镜像

docker images

启动cpu容器

docker run -it --rm -v `pwd`:/workspace {REPOSITORY}:{TAG}-
或:docker run -it -v `pwd`:/workspace {IMAGE ID}

启动gpu容器

docker run -it --rm --runtime=nvidia -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all --shm-size=“15g” -v `pwd`:/workspace {REPOSITORY}:{TAG}

查看本地容器

docker ps

连接本地容器

docker exec -it {CONTAINER ID} /bin/bash

停止容器

docker stop {CONTAINER ID}

开启容器

docker start {CONTAINER ID}

删除容器

docker rm -f {CONTAINER ID}

删除镜像

docker rmi -f {IMAGE ID}

保存自己的镜像

1. 在容器中完成环境安装后,从该容器中创建一个镜像:docker commit {CONTAINER ID} {Repository}:{Tag}-
2. 保存镜像:docker save -o image_name.tar {Repository}:{Tag}-
3. 如果想压缩镜像文件,可使用该命令:docker save {Repository}:{Tag}

j5对应的开发版就是RDKx5吗

对,好像是