DCU上基础环境搭建之docker的使用
今天给大家介绍如何在DCU进行docker环境的搭建以及如何使用docker部署环境
docker简介与命令
docker简介
Docker 是一种开源的平台,用于开发、运输和运行应用程序。它通过将应用程序及其所有依赖项打包成一个标准化的单元,称为容器,使得应用程序能够在任何环境中一致地运行。容器是轻量级的虚拟化技术,具有高效的资源隔离和便捷的部署能力。Docker 解决了传统虚拟机在资源利用率和启动速度方面的不足,通过共享主机操作系统内核来实现更快的启动和更高的资源利用率。它的核心组件包括 Docker Engine、Docker Hub 和 Docker Compose。Docker Engine 用于创建和管理容器,Docker Hub 提供镜像的集中存储和分发,Docker Compose 允许定义和运行多容器应用。Docker 广泛应用于持续集成与持续部署(CI/CD)、微服务架构、开发和测试环境等领域,显著提高了开发效率和环境一致性。
docker基础命令
1、查看docker版本
docker --version
2、拉取镜像
docker pull <镜像名>
3、列出镜像
docker images
4、列出容器
docker ps -a
5、停止容器
docker stop <容器ID或名称>
6、删除镜像
docker rmi <镜像ID或名称>
7、启动容器
docker start <容器ID或名称>
8、进入已经启动的容器
docker exec -it <容器ID或名称> /bin/bash
9、通过镜像创建容器
docker run <镜像名>
DCU上如何配置dcoker
本次服务器的操作系统为麒麟v10,平台为DCU-K100AI*4。
docker的下载和安装
docker压缩包远程下载
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.10.tgz
docker的离线安装
tar -zxvf docker-20.10.10.tgz
cp docker/* /usr/bin
安装完毕以后,需要手动编写docker.service
vi /etc/systemd/system/docker.service
写入以下内容
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
退出保存,并更改权限
chmod +x /etc/systemd/system/docker.service
重启一下dcoker服务
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl restart docker
sudo systemctl status docker
验证docker状态是否正确
sudo systemctl status docker
显示docker.service状态为enabled即可
拉取DCU镜像
本次以1.13.1-ubuntu20.04-dtk23.10-py39镜像为例,其中1.13为torch版本,dtk23.10为DCU软件栈版本,py39为Python版本3.9
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.13.1-ubuntu20.04-dtk23.10-py39
拉取完毕之后,通过docker images命令查看镜像id
其中IMAGE ID代表此镜像的ID
创建容器
本次以大家比较常用的yolov5代码为例,创建一个名称为yolov5的容器,首先新建一个dcoker.sh的脚本,通过命令vim docker.sh建立,写入以下内容并保存退出
docker run -it --name yolov5 --network=host --privileged \
--device=/dev/kfd --device=/dev/dri \
--ipc=host --shm-size=16G --group-add video \
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
-v /opt/hyhal:/opt/hyhal \
-v /home:/home \
069ed2f1bc8c /bin/bash
简单介绍一下参数意义
–name表示容器名字,可以自己修改,不可与已有容器重名
-v 表示映射目录,其中-v /opt/hyhal:/opt/hyhal是必加项,包含了一些DCU的内容;-v /home:/home指的是将本机/home目录下的所有文件映射到容器的/home目录。代表在容器中操作/home目录中的文件和在本机操作是同步的。
069ed2f1bc8c指的是镜像的ID。
其余参数无需修改
通过bash docker.sh来创建容器
后续进入容器请使用docker exec -it yolov5 /bin/bash命令
进入后检查基础的环境,通过命令hy-smi
到此基础容器搭建完毕,可以通过pip list查看容器中都安装了哪些库,默认安装了torch等一些基础库。其中torch为DCU定制版,除版本号后缀不同以外,不影响基础使用。
如不慎卸载torch后,需要在https://developer.hpccube.com/tool该网址的DAS区下载适配好的torch到本地,然后通过pip install torch*安装,或者删除该容器重新建容器也是可以的。
yolov5代码部署
代码下载和环境搭建
依然以yolov5为例,从**https://sourcefind.cn/#/model-zoo/list**中搜索yolov5
进入后,点击WGET下载,使用wget命令下载代码
下载后以压缩包的形式保存,通过unzip 命令解压
如遇zip命令无效
通过以下命令安装zip依赖
apt-get update
apt-get install zip
解压后通过cd命令进入到目录yolov5_pytorch
安装yolov5相关依赖requirements.txt
pip insatll -r requirements.txt
如果网速过慢,可以先执行下面命令配置依赖源
pip config set global.index-url https://pypi.mirrors.ustc.edu.cn/simple/
设置完成后,重新执行pip insatll -r requirements.txt
训练
单机单卡
命令行运行以下内容
export HIP_VISIBLE_DEVICES=0
export USE_MIOPEN_BATCHNORM=1
python3 train.py --batch 32 --data coco.yaml --cfg 'yolov5m.yaml' --weights '' --project 'run/train' --hyp 'data/hyps/hyp.scratch-high.yaml' --epochs 1000 2>&1 | tee yolov5m.log
单机多卡
#以单机四卡为例子
export HIP_VISIBLE_DEVICES=0,1,2,3
export HSA_FORCE_FINE_GRAIN_PCIE=1
export USE_MIOPEN_BATCHNORM=1
python3 -m torch.distributed.run --nproc_per_node 4 train.py --batch 128 --data coco.yaml --cfg 'yolov5m.yaml' --weights '' --project 'run/train' --hyp 'data/hyps/hyp.scratch-high.yaml' --device 0,1,2,3 --epochs 1000 2>&1 | tee yolov5m_4.log
参考网站
1、开发者社区:https://developer.hpccube.com/tool
2、光源(模型和代码仓库):https://sourcefind.cn/#/main-page
3、yolov5适配流程:https://sourcefind.cn/#/model-zoo/1712313696125140994