MACS 容器化示例

概述

MACS 容器化(MACS Container Toolkit)利用容器运行时库和实用工具集构建运行模型和应用服务。我们提供高效稳定的镜像,内置了基础环境依赖和模型示例,帮助用户快速完成模型开发和应用部署,开箱即用,灵活高效,更方便快捷的利用墨芯 AI 计算卡的算力资源。

前提条件

  • 已安装Docker,且安装的Docker版本不低于Docker 18.03。

    $ docker --version 
    $ docker info
    
  • 启动 Docker 服务。启动命令如下:

    $ systemctl status docker
    $ systemctl start docker 
    
  • 在物理服务器上已安装 SOLA,安装的详细步骤请参见《SOLA Toolkit 安装指南》。

    需要注意的是:

    • 我们已经在镜像内集成 SOLA 稳定版本,您无需在容器中再次安装 SOLA。

    • 容器内和物理服务器安装的 SOLA 版本需保持一致。您可通过以下命令确认版本信息:

      #查询 sola版本信息,例如:/usr/local/sola-3.7.0
    $ ls -al /usr/local/
    

使用镜像服务

为方便多场景用户使用,我们提供的镜像包括在线版和离线版。

  • 使用离线版镜像,请在下载镜像包后将其导入到本地 docker 环境。导入命令格式如下:

    $ docker load -i moffettai-macs-<version>-<arch>-<os>.tar
    
  • 使用在线版镜像,请确保测试服务器可访问互联网及 Dockerhub。

使用基础镜像

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

获取镜像

  • 下载离线版镜像

    # macs-ubuntu
    $ wget http://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/Ubuntu/base/macs-ubuntu-sola3.7.0-v1.3.0.tar
    # macs-debian
    $ wget http://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/Debian/base/macs-debian-sola3.7.0-v1.3.0.tar
    # macs-rhel
    $ wget http://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/RHEL/base/macs-rhel-sola3.7.0-v1.3.0.tar        
    
  • 下载在线版版镜像

    # macs-ubuntu
    $ docker pull moffett/macs-ubuntu:sola3.7.0-v1.3.0
    # macs-debian
    $ docker pull moffett/macs-debian:sola3.7.0-v1.3.0
    # macs-rhel
    $ docker pull moffett/macs-rhel:sola3.7.0-v1.3.0
    

导入镜像(可选)

如果您在上一步骤中获取的镜像是离线版本,则需要执行以下命令导入镜像。否则,您可跳过该步骤。

导入命令格式如下:

$ docker load -i moffettai-macs-<version>-<arch>-<os>.tar

导入命令示例:

#请以您实际下载的文件名为准
$ docker load -i macs-ubuntu-sola3.7.0-v1.3.0.tar

启动容器

基于导入或下载的镜像,为测试环境创建一个容器实例。

$ docker images |grep macs
$ docker run -itd --privileged --name macs-1.3.0 moffett/macs-ubuntu:sola3.7.0-v1.3.0 /bin/bash

验证使用

可在容器内使用 sola-toolkit:

  • 使用 mx-smi ,使用方式请参见《mx-smi 使用说明》。

  • 使用 mx-qual,使用方式请参见《mx-qual 使用说明》。

基本示例如下:

$ docker exec -it macs-1.3.0 /bin/bash
# 在容器中查看系统中墨芯AI计算卡信息
$ mx-smi list 
# 在容器中使用mx-qual 
$ mx-qual list -i 0

使用业务镜像

业务镜像主要为模型/项目/应用等提供运行环境。 本文仅以 sola-demo 为例,说明业务镜像的获取方式。 业务镜像使用环境和数据分离方式发布。镜像中只包括业务项目运行所需环境。模型数据文件相对较大,单独打包发布,在容器中使用,需在容器启动时单独挂载到容器内相应目录。

获取镜像

  • 下载离线版镜像

    $ wget http://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/images/Ubuntu/business/sola-demo-3.7.0.tar
    
  • 下载在线版镜像

    $ docker pull moffett/sola-demo:3.7.0
    $ docker images |grep sola-demo 
    

导入镜像(可选)

如果您在上一步骤中获取的镜像是离线版本,则需要执行以下命令导入镜像。否则,您可跳过该步骤。

$ docker load -i sola-demo-3.7.0.tar

准备数据

# 下载数据包
$ wget https://moffett-oss-bucket01.oss-cn-shenzhen.aliyuncs.com/sola-demo/sola-demo-3.7.0-data-offline.tar.gz
# 解压:标准解压
$ tar -zxvf sola-demo-3.7.0-data-offline.tar.gz
# 解压: 多线程解压  
$ tar --use-compress-program=pigz -xvpf sola-demo-3.7.0-data-offline.tar.gz

启动容器并运行模型

启动容器

注意如果您想在容器中直接执行SOLA示例,可执行以下命令创建sola-demo容器。创建容器前请注意所在位置,$PWD 为当前目录。

$ docker run -itd --privileged -v $PWD/sola-demo-3.7.0-data-offline:/home/moffett/workspace/sola-demo-3.7.0 --name sola-demo-3.7.0 moffett/sola-demo:3.7.0 /bin/bash
$ docker ps -a |grep sola-demo-3.7.0
ResNet50
  • 进入容器内运行模型

    $ docker exec -it sola-demo-3.7.0 /bin/bash
    $ sola-demo-3.7.0/models/resnet50/run.sh && sola-demo-3.7.0/models/resnet50/verify.sh
    
  • 创建临时容器并运行模型

    $ docker run -it --rm --privileged -v $PWD/sola-demo-3.7.0-data-offline:/home/moffett/workspace/sola-demo-3.7.0 moffett/sola-demo:3.7.0 /bin/bash -c "sola-demo-3.7.0/models/resnet50/run.sh && sola-demo-3.7.0/models/resnet50/verify.sh"
    
Bert
  • 进入容器内运行模型

    $ docker exec -it sola-demo-3.7.0 /bin/bash
    $ sudo sola-demo-3.7.0/models/bert/run.sh && sola-demo-3.7.0/models/bert/verify.sh
    
  • 创建临时容器并运行模型

    $ docker run -it --rm --privileged -v $PWD/sola-demo-3.7.0-data-offline:/home/moffett/workspace/sola-demo-3.7.0 moffett/sola-demo:3.7.0 /bin/bash -c "sudo sola-demo-3.7.0/models/bert/run.sh && sola-demo-3.7.0/models/bert/verify.sh"
    
Bloom7b
  • 进入容器内运行模型

    $ docker exec -it sola-demo-3.7.0 /bin/bash
    $ sola-demo-3.7.0/models/bloom-7b/run.sh && sola-demo-3.7.0/models/bloom-7b/verify.sh
    
  • 创建临时容器并运行模型

    $ docker run -it --rm --privileged -v $PWD/sola-demo-3.7.0-data-offline:/home/moffett/workspace/sola-demo-3.7.0 moffett/sola-demo:3.7.0 /bin/bash -c "sola-demo-3.7.0/models/bloom-7b/build/bloom --module_path sola-demo-3.7.0/sola_demo_assets/models/bloom/v1/bloom7b_demo -f sola-demo-3.7.0/models/bloom-7b/data/questions.txt"
    
Bloom176b
  • 进入容器内运行模型

    $ docker exec -it sola-demo-3.7.0 /bin/bash
    $ sola-demo-3.7.0/models/bloom-176b/run.sh && sola-demo-3.7.0/models/bloom-7b/verify.sh
    
  • 创建临时容器并运行模型

    $ docker run -it --rm --privileged -v $PWD/sola-demo-3.7.0-data-offline:/home/moffett/workspace/sola-demo-3.7.0 moffett/sola-demo:3.7.0 /bin/bash -c "sola-demo-3.7.0/models/bloom-176b/build/bloom --module_path sola-demo-3.7.0/sola_demo_assets/models/bloom/v1/bloom176b_demo -f sola-demo-3.7.0/models/bloom-176b/data/questions.txt"
    
ChatGLMv2 6B
  • 进入容器内运行模型

    $ docker exec -it sola-demo-3.7.0 /bin/bash
    $ cd sola-demo-3.7.0/models/chatglm2-6b/
    $ ./run.sh
    # 问答模式,输入 exit 退出程序
    $ export PYTHONPATH="$PYTHONPATH:$PWD/test"
    $ python3 test/chat_chatglmv26b.py --mode="qa"
     # 自动问答模式,问题可以手动指定,默认使用`data/questions.txt`
    $ python3 test/chat_chatglmv26b.py --mode="auto-qa" --questions="data/questions.txt"
    

环境清理

注意

以下操作请在物理机上执行。

  • $(CONTAINER_NAME/CONTAINER_ID)请替换为实际的容器名/容器 ID

  • $(IMAGE_NAME:TAG/IMAGE_ID)请替换为实际的镜像名/镜像 ID

停止并删除容器

$ docker stop $(CONTAINER_NAME/CONTAINER_ID) && docker rm $(CONTAINER_NAME/CONTAINER_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)")