SOLA容器化
概述
Docker 保证了不同测试环境之间的一致性,简化了复杂依赖的管理,并且支持快速部署和扩展。此外,Docker 的资源隔离功能确保使用过程中的稳定性,同时容器的可重用性和共享性大大提高了团队合作的效率。Docker 可以无缝集成进 CI/CD 工作流程,加速整个软件开发周期,是一种高效、灵活且可靠的工具。
SOLA容器化(macs Container Toolkit)使用容器运行时库和实用程序构建运行模型和应用,方便的利用墨芯计算卡的算力资源。
前提条件
用户需在宿主机自行安装docker,Docker 版本要求大于或等于18.03
确保docker服务已启动。
systemctl status docker
systemctl start docker
宿主机已经安装SOLA软件包. 详情参见【 SOLA Toolkit 安装指南 】 章节
已经在镜像内预装SOLA稳定版本,无需单独安装。
容器内安装的驱动版本需与宿主机安装的SOLA版本保持一致,不支持独立升级。
ls -al /usr/local/
# 查询 sola版本信息,如:/usr/local/sola-3.5.0
获取镜像
基础镜像
基础镜像基于主流OS系统构建,包括一些基础环境环境依赖,具备运行基本应用的能力。
debian
ubuntu
rhel
获取基础镜像
请根据实际环境情况选择离线/在线版本镜像。
离线版: 需要提前将离线版本镜像文件下载到目标测试服务上,然后导入镜像。
在线版: 需要测试服务器可以访问互联网及Docker hub官方镜像仓库.无需下载离线镜像包和导入镜像步骤。
离线版镜像
macs-ubuntu:
https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/Ubuntu/macs-ubuntu-sola3.5.2-v1.1.2.tar
macs-debian:
https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/Debian/macs-debian-sola3.5.2-v1.1.2.tar
macs-rhel:
https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/RHEL/macs-rhel-sola3.5.2-v1.1.2.tar
导入离线镜像
docker load -i moffettai-macs-<version>-<arch>-<os>.tar
在线版镜像
macs-ubuntu:
docker pull moffett/macs-ubuntu:sola3.5.2-v1.1.2
macs-debian:
docker pull moffett/macs-debian:sola3.5.2-v1.1.2
macs-rhel:
docker pull moffett/macs-rhel:sola3.5.2-v1.1.2
项目镜像
项目镜像主要为模型/项目等提供运行环境。本文仅以sola-demo为例,说明项目镜像的获取方式。
离线版sola-demo-v3.5.0-offline
https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/Ubuntu/sola-demo-3.5.0.tar
# 下载后离线镜像包后请导入镜像
docker load -i sola-demo-3.5.0.tar
docker images |grep sola-demo
在线版:sola-demo-v3.5.0
docker pull moffett/sola-demo:3.5.0
docker images |grep sola-demo
准备数据
模型数据文件相对较大,单独打包发布,在容器中使用,需在容器启动时单独挂载到容器内相应目录。数据上传至测试物理服务器指定目录,解压模型数据包。
模型数据包下载链接:
https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/sola-demo/sola-demo-3.5.0-offline.tar.gz
模型数据包解压:
tar -zxvf sola-demo-3.5.0-offline.tar.gz
创建容器
基于导入或下载的镜像,为测试环境创建一个容器实例,创建容器通常只执行一次并设置开机容器自启动,一般情况无需重复执行。
创建基础环境标准容器:
docker run -itd --restart always --privileged --cap-add=ALL --net=host -v /dev:/dev -v /usr/src:/usr/src -v /lib/modules:/lib/modules --shm-size="900g" --name <$container-name> <$image-name/id> /bin/bash
--shm-size参数请根据实际情况进行设置,一般建议为宿主机总内存的90%,如总内存为1000G,则设置为 900g.
创建sola-demo容器: 创建容器前,请注意操作目录是否包括已解压好的模型数据包
docker run -itd --privileged -v $PWD/sola-demo-3.5.0-offline:/home/moffett/workspace/sola-demo-3.5.0 --name sola-demo-3.5.0 moffett/sola-demo:3.5.0 /bin/bash
验证使用
可针对以下工具进行验证:
使用 mx-smi : 用法详请参考 【 mx-smi 用户手册 】 章节
使用 mx-qual : 用法详请参考 【 mx-qual 用户手册 】 章节
使用 sola demo
基本示例
# 进入容器
docker exec -it <container-name> /bin/bash
# 容器内查看系统中的墨芯加速卡
mx-smi list
# 容器内使用 mx-qual
mx-qual list -i 0
sola-demo
ResNet50
# Enter the container to run the model docker exec -it sola-demo-3.5.0 /bin/bash sola-demo-3.5.0/models/resnet50/run.sh && sola-demo-3.5.0/models/resnet50/verify.sh # Temporary container run model docker run -it --rm --privileged -v $PWD/sola-demo-3.5.0-offline:/home/moffett/workspace/sola-demo-3.5.0 moffett/sola-demo:3.5.0 /bin/bash -c "sola-demo-3.5.0/models/resnet50/run.sh && sola-demo-3.5.0/models/resnet50/verify.sh"
Bert
# Enter the container to run the model docker exec -it sola-demo-3.5.0 /bin/bash sudo sola-demo-3.5.0/models/bert/run.sh && sola-demo-3.5.0/models/bert/verify.sh # Temporary container run model docker run -it --rm --privileged -v $PWD/sola-demo-3.5.0-offline:/home/moffett/workspace/sola-demo-3.5.0 moffett/sola-demo:3.5.0 /bin/bash -c "sudo sola-demo-3.5.0/models/bert/run.sh && sola-demo-3.5.0/models/bert/verify.sh"
BLOOM 7B
# Enter the container to run the model docker exec -it sola-demo-3.5.0 /bin/bash sola-demo-3.5.0/models/bloom-7b/run.sh && sola-demo-3.5.0/models/bloom-7b/verify.sh # Temporary container run model docker run -it --rm --privileged -v $PWD/sola-demo-3.5.0-offline:/home/moffett/workspace/sola-demo-3.5.0 moffett/sola-demo:3.5.0 /bin/bash -c "sola-demo-3.5.0/models/bloom-7b/run.sh && sola-demo-3.5.0/models/bloom-7b/verify.sh"
BLOOM 176B
# Enter the container to run the model docker exec -it sola-demo-3.5.0 /bin/bash sola-demo-3.5.0/models/bloom-176b/run.sh && sola-demo-3.5.0/models/bloom-7b/verify.sh # Temporary container run model docker run -it --rm --privileged -v $PWD/sola-demo-3.5.0-offline:/home/moffett/workspace/sola-demo-3.5.0 moffett/sola-demo:3.5.0 /bin/bash -c "sola-demo-3.5.0/models/bloom-176b/run.sh && sola-demo-3.5.0/models/bloom-7b/verify.sh"
GPT-J 6B
# Enter the container to run the model docker exec -it sola-demo-3.5.0 /bin/bash sola-demo-3.5.0/models/gptj/run.sh && sola-demo-3.5.0/models/gptj/verify.sh # Temporary container run model docker run -it --rm --privileged -v $PWD/sola-demo-3.5.0-offline:/home/moffett/workspace/sola-demo-3.5.0 moffett/sola-demo:3.5.0 /bin/bash -c "sola-demo-3.5.0/models/gptj/run.sh && sola-demo-3.5.0/models/gptj/verify.sh"
清除环境
# 停止运行中的容器
docker stop <container-name>
# 删除对应容器
docker rm <container-name>
# 删除对应镜像
docker rmi <image-id>
# 删除指定容器/镜像
docker rm -f $(docker ps -a -q | grep -E "^($container_name)")
docker rmi -f $(docker images -a -q | grep -E "^($image_name)")
docker volume prune