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.3 
    

获取镜像

基础镜像

基础镜像基于主流OS系统构建,包括一些基础环境环境依赖,具备运行基本应用的能力。

  • debian

  • ubuntu

  • rhel

获取基础镜像

请根据实际环境情况选择离线/在线版本镜像。

  • 离线版: 需要提前将离线版本镜像文件下载到目标测试服务上,然后导入镜像。

  • 在线版: 需要测试服务器可以访问互联网及Docker hub官方镜像仓库.无需下载离线镜像包和导入镜像步骤。

离线版镜像

  • macs-ubuntu:

    https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/Ubuntu/base/macs-ubuntu-sola3.5.3-v1.1.3.tar
    
  • macs-debian:

    https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/Debian/base/macs-debian-sola3.5.3-v1.1.3.tar
    
  • macs-rhel:

    https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/RHEL/base/macs-rhel-sola3.5.3-v1.1.3.tar
    

导入离线镜像

请根据实际的镜像版本导入下载的离线镜像包,参考如下命令格式:

docker load -i moffettai-macs-<version>-<arch>-<os>.tar
# sample
docker load -i macs-ubuntu-sola3.5.3-v1.1.3.tar

在线版镜像

  • macs-ubuntu:

    docker pull moffett/macs-ubuntu:sola3.5.3-v1.1.3
    
  • macs-debian:

    docker pull moffett/macs-debian:sola3.5.3-v1.1.3
    
  • macs-rhel:

    docker pull moffett/macs-rhel:sola3.5.3-v1.1.3
    

业务镜像

业务镜像旨在为模型/项目/应用等提供运行环境和特定依赖项。本文仅以sola-demo为例,说明项目镜像的获取方式。

  • 离线版sola-demo-v3.5.1-data-offline

    https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/Ubuntu/business/sola-demo-3.5.1.tar
    
  • 在线版:sola-demo-v3.5.1

    docker pull moffett/sola-demo:3.5.1
    docker images |grep sola-demo 
    

准备数据

模型数据文件相对较大,单独打包发布,在容器中使用,需在容器启动时单独挂载到容器内相应目录。数据上传至测试物理服务器指定目录,解压模型数据包。

  • 模型数据包下载链接:

    https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/sola-demo/sola-demo-3.5.1-data-offline.tar.gz
    

创建容器

基于导入或下载的镜像,为测试环境创建一个容器实例,创建容器通常只执行一次并设置开机容器自启动,一般情况无需重复执行。

  • 创建基础环境标准容器

    docker run -itd --privileged --name $(CONTAINER_NAME) $(IMAGE_REPO)/$(IMAGE_NAME):$(IMAGE_TAG) /bin/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/IMAGE_ID) /bin/bash
    # sample 
    docker run -itd --privileged --name macs-1.1.3 moffett/macs-ubuntu:sola3.5.3-v1.1.3 /bin/bash
    

    命令启动参数可根据需要灵活调整,简要说明,详情查阅Docker文档:

    • $(CONTAINER_NAME) :可选项,声明容器名称。

    • $(IMAGE_REPO)/$(IMAGE_NAME):$(IMAGE_TAG) 替换为镜像仓库地址/镜像名称:tag 或者直接使用镜像ID。

    • -itd: 交互方式后台运行容器。

    • /bin/bash: 指定进入容器shell环境为bash。

    • --privileged: 特权模式

    • --net=host:可选项,默认容器网络为bridge 模式,容器网络与宿主机网络隔离;修改为主机模式,以方便共享宿主机网络环境。

    • --restart always: 可选项,容器退出时应用的重新启动策略为always,默认为no.

    • -v:volume, 可选项,声明将宿主机存储目录挂载到容器对应的存储目录。方便宿主机和容器间文件共享

    • --shm-size:可选项,该参数请根据实际情况进行设置,建议为宿主机总内存的90%,如物理总内存为1000G,则设置为 900g.

  • 创建sola-demo容器

    创建容器前请注意所在位置,$PWD 为当前目录。

    docker run -itd --privileged -v $PWD/sola-demo-3.5.1-data-offline:/home/moffett/workspace/sola-demo-3.5.1 --name sola-demo-3.5.1 moffett/sola-demo:3.5.1 /bin/bash
    

验证使用

可针对以下工具进行验证:

  • 使用 mx-smi : 用法详请参考 【 mx-smi 用户手册 】 章节

  • 使用 mx-qual : 用法详请参考 【 mx-qual 用户手册 】 章节

  • 使用 sola demo

基本示例

# 进入容器, $(CONTAINER_NAME) 替换为容器名字/ID
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.1 /bin/bash
    sola-demo-3.5.1/models/resnet50/run.sh && sola-demo-3.5.1/models/resnet50/verify.sh
    # Temporary container run model
    docker run -it --rm --privileged -v $PWD/sola-demo-3.5.1-data-offline:/home/moffett/workspace/sola-demo-3.5.1 moffett/sola-demo:3.5.1 /bin/bash -c "sola-demo-3.5.1/models/resnet50/run.sh && sola-demo-3.5.1/models/resnet50/verify.sh"
    
  • Bert

    # Enter the container to run the model
    docker exec -it sola-demo-3.5.1 /bin/bash
    sudo sola-demo-3.5.1/models/bert/run.sh && sola-demo-3.5.1/models/bert/verify.sh
    # Temporary container run model
    docker run -it --rm --privileged -v $PWD/sola-demo-3.5.1-data-offline:/home/moffett/workspace/sola-demo-3.5.1 moffett/sola-demo:3.5.1 /bin/bash -c "sudo sola-demo-3.5.1/models/bert/run.sh && sola-demo-3.5.1/models/bert/verify.sh"
    
  • BLOOM 7B

    # Enter the container to run the model
    docker exec -it sola-demo-3.5.1 /bin/bash
    sola-demo-3.5.1/models/bloom-7b/run.sh && sola-demo-3.5.1/models/bloom-7b/verify.sh
    # Temporary container run model
    docker run -it --rm --privileged -v $PWD/sola-demo-3.5.1-data-offline:/home/moffett/workspace/sola-demo-3.5.1 moffett/sola-demo:3.5.1 /bin/bash -c "sola-demo-3.5.1/models/bloom-7b/run.sh && sola-demo-3.5.1/models/bloom-7b/verify.sh"
    
  • BLOOM 176B

    # Enter the container to run the model
    docker exec -it sola-demo-3.5.1 /bin/bash
    sola-demo-3.5.1/models/bloom-176b/run.sh && sola-demo-3.5.1/models/bloom-7b/verify.sh
    # Temporary container run model
    docker run -it --rm --privileged -v $PWD/sola-demo-3.5.1-data-offline:/home/moffett/workspace/sola-demo-3.5.1 moffett/sola-demo:3.5.1 /bin/bash -c "sola-demo-3.5.1/models/bloom-176b/run.sh && sola-demo-3.5.1/models/bloom-7b/verify.sh"
    

清除环境

# 停止运行中的容器
docker stop $(CONTAINER_NAME/ID)
# 删除对应容器
docker rm $(CONTAINER_NAME/ID)
# 删除对应镜像
docker rmi $(IMAGE_NAME:TAG/IMAGE_ID)
# 删除指定容器/镜像
export container_name="your container name"
export image_name="your images name:tag or images id"
docker rm -f $(docker ps -a -q | grep -E "^($container_name)")
docker rmi -f $(docker images -a -q | grep -E "^($image_name:tag)")