引言
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}