# SOLA容器化 ## 概述 Docker 保证了不同测试环境之间的一致性,简化了复杂依赖的管理,并且支持快速部署和扩展。此外,Docker 的资源隔离功能确保使用过程中的稳定性,同时容器的可重用性和共享性大大提高了团队合作的效率。Docker 可以无缝集成进 CI/CD 工作流程,加速整个软件开发周期,是一种高效、灵活且可靠的工具。 SOLA容器化(macs Container Toolkit)使用容器运行时库和实用程序构建运行模型和应用,方便的利用墨芯计算卡的算力资源。 ## 前提条件 * 用户需在宿主机自行安装docker,Docker 版本要求大于或等于18.03 * 确保docker服务已启动。 ```bash systemctl status docker systemctl start docker ``` * 宿主机已经安装SOLA软件包. 详情参见【 SOLA Toolkit 安装指南 】 章节 * 已经在镜像内预装SOLA稳定版本,无需单独安装。 * 容器内安装的驱动版本需与宿主机安装的SOLA版本保持一致,不支持独立升级。 ````bash ls -al /usr/local/ # 查询 sola版本信息,如:/usr/local/sola-3.5.0 ```` ## 获取镜像 ### 基础镜像 基础镜像基于主流OS系统构建,包括一些基础环境环境依赖,具备运行基本应用的能力。 - debian - ubuntu - rhel #### 获取基础镜像 请根据实际环境情况选择离线/在线版本镜像。 * 离线版: 需要提前将离线版本镜像文件下载到目标测试服务上,然后导入镜像。 * 在线版: 需要测试服务器可以访问互联网及Docker hub官方镜像仓库.无需下载离线镜像包和导入镜像步骤。 #### 离线版镜像 * macs-ubuntu: ```bash https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/Ubuntu/macs-ubuntu-sola351-v1.1.1.tar ``` * macs-debian: ```bash https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/Debian/macs-debian-sola351-v1.1.1.tar ``` * macs-rhel: ```bash https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/Debian/macs-debian-sola351-v1.1.1.tar ``` #### 导入离线镜像 ```bash docker load -i moffettai-macs---.tar ``` #### 在线版镜像 * macs-ubuntu: ``` docker pull moffett/macs-ubuntu:sola351-v1.1.1 ``` * macs-debian: ```bash docker pull moffett/macs-debian:sola351-v1.1.1 ``` * macs-rhel: ```bash docker pull moffett/macs-rhel:sola351-v1.1.1 ``` ### 项目镜像 项目镜像主要为模型/项目等提供运行环境。本文仅以sola-demo为例,说明项目镜像的获取方式。 * 离线版sola-demo-v3.5.0-offline ```bash https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/Ubuntu/sola-demo-3.5.0.tar ``` * 在线版:sola-demo-v3.5.0 ```bash docker pull moffett/sola-demo:3.5.0 docker images |grep sola-demo ``` ## 准备数据 模型数据文件相对较大,单独打包发布,在容器中使用,需在容器启动时单独挂载到容器内相应目录。数据上传至测试物理服务器指定目录,解压模型数据包。 * 模型数据包下载链接: ```bash https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/sola-demo/sola-demo-3.5.0-offline.tar.gz ``` ## 创建容器 基于导入或下载的镜像,为测试环境创建一个容器实例,创建容器通常只执行一次并设置开机容器自启动,一般情况无需重复执行。 * 创建基础环境标准容器: ```bash 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容器: ```bash 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 ### 基本示例 ```bash # 进入容器 docker exec -it /bin/bash # 容器内查看系统中的墨芯加速卡 mx-smi list # 容器内使用 mx-qual mx-qual list -i 0 ``` ### sola-demo * ResNet50 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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" ``` ## 清除环境 ```bash # 停止运行中的容器 docker stop # 删除对应容器 docker rm # 删除对应镜像 docker rmi # 删除指定容器/镜像 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 ```