华为云用户手册

  • PyTorch框架启动原理 规格和节点个数 下面以选择“GPU: 8*GP-Vnt1 | CPU: 72核 | 内存:512GB”规格为例,介绍在单机和分布式场景下ModelArts规格资源的分配情况。 单机作业时(即选择的节点数为1),ModelArts只会在一个节点上启动一个训练容器,该训练容器独享节点规格的可使用资源。 分布式作业时(即选择的节点数大于1),worker的数量和创建作业时选择的节点数一致,每个worker将被分配到所选规格对应的计算资源。例如计算节点个数为“2”时,将启动2个worker,每个worker拥有“GPU: 8*GP-Vnt1 | CPU: 72核 | 内存:512GB”的计算资源。目前PyTorch引擎仅支持GPU和CPU类型的规格,如果需要使用昇腾规格,请参考Ascend-Powered-Engine。 网络通信介绍 单机作业不涉及网络通信情况。 分布式作业的涉及网络通信则可以分为节点内网络通信和节点间网络通信。 节点内网络 使用NVLink和共享内存通信。 节点间网络 当计算节点个数大于1时,将启动PyTorch引擎分布式训练模式。PyTorch引擎的分布式模式如下图所示,worker之间可通过容器网络和100Gbps的InfiniBand网卡或RoCE网卡通信,部分规格中使用RoCE网卡,将在规格中额外提示。其中,容器网络可以通过DNS域名通信,但网络性能一般,可用于点对点小规模通信需求;InfiniBand网络和RoCE网络为高性能网络,可用于集合通信等分布式训练的场景。 图1 分布式模式
  • Horovod/MPI/MindSpore-GPU框架启动原理 规格和节点个数 下面以选择“GPU: 8*GP-Vnt1 | CPU: 72核 | 内存:512GB”规格为例,介绍在单机和分布式场景下ModelArts规格资源的分配情况。 单机作业时(即选择的节点数为1),ModelArts只会在一个节点上启动一个训练容器,该训练容器独享节点规格的可使用资源。 分布式作业时(即选择的节点数大于1),worker的数量和创建作业时选择的节点数一致,每个worker将被分配到所选规格对应的计算资源。例如计算节点个数为“2”时,将启动2个worker,每个worker拥有“GPU: 8*GP-Vnt1 | CPU: 72核 | 内存:512GB”的计算资源。 网络通信介绍 单机作业不涉及网络通信情况。 分布式作业的涉及网络通信则可以分为节点内网络通信和节点间网络通信。 节点内网络 使用NVLink和共享内存通信。 节点间网络 当计算节点个数大于1时,将启动PyTorch引擎分布式训练模式。PyTorch引擎的分布式模式如下图所示,worker之间可通过容器网络和100Gbps的InfiniBand网卡或RoCE网卡通信,部分规格中使用RoCE网卡,将在规格中额外提示。其中,容器网络可以通过DNS域名通信,但网络性能一般,可用于点对点小规模通信需求;InfiniBand网络和RoCE网络为高性能网络,可用于集合通信等分布式训练的场景。 图1 分布式模式
  • 镜像二:tensorflow1.13-cuda10.0-cudnn7-ubuntu18.04 表2 tensorflow1.13-cuda10.0-cudnn7-ubuntu18.04镜像介绍 AI引擎框架 是否使用 GPU (CUDA 版本) URL 包含的依赖项 Tensorflow 1.13-gpu 是 (cuda 10.0) swr.{region_id}.myhuaweicloud.com/atelier/tensorflow_1_13:tensorflow_1.13-cuda_10.0-py_3.7-ubuntu_18.04-x86_64-20220926104358-041ba2e 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/tensorflow_1_13:tensorflow_1.13-cuda_10.0-py_3.7-ubuntu_18.04-x86_64-20220926104358-041ba2e 华东-上海一 swr.cn-east-3.myhuaweicloud.com/atelier/tensorflow_1_13:tensorflow_1.13-cuda_10.0-py_3.7-ubuntu_18.04-x86_64-20220926104358-041ba2e 华南-广州 swr.cn-south-1.myhuaweicloud.com/atelier/tensorflow_1_13:tensorflow_1.13-cuda_10.0-py_3.7-ubuntu_18.04-x86_64-20220926104358-041ba2e PyPI 程序包 Ubuntu 软件包 tensorflow-gpu 1.13.1 ipykernel 6.7.0 ipython 7.34.0 jupyter-client 7.3.4 ma-cau 1.1.6 ma-cau-adapter 1.1.3 ma-cli 1.2.2 matplotlib 3.5.1 modelarts 1.4.11 moxing-framework 2.0.1.rc0.ffd1c0c8 numpy 1.17.0 opencv-python 4.1.2.30 pandas 1.1.5 pillow 6.2.0 pip 22.1.2 psutil 5.8.0 PyYAML 5.1 scipy 1.2.2 scikit-learn 0.22.1 tornado 6.2 automake build-essential ca-certificates cmake cpp curl ffmpeg g++ gcc gfortran git git-lfs grep libcudnn7 libcudnn7-dev libjpeg-dev:amd64 libjpeg8-dev:amd64 openssh-client openssh-server nginx python3 rpm screen tar tmux unzip vim wget zip
  • 镜像一:tensorflow2.1-cuda10.1-cudnn7-ubuntu18.04 表1 tensorflow2.1-cuda10.1-cudnn7-ubuntu18.04镜像介绍 AI引擎框架 是否使用 GPU (CUDA 版本) URL 包含的依赖项 Tensorflow 2.1 是 (cuda 10.1) swr.{region_id}.myhuaweicloud.com/atelier/tensorflow_2_1:tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64-20220926144607-041ba2e 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/tensorflow_2_1:tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64-20220926144607-041ba2e 华东-上海一 swr.cn-east-3.myhuaweicloud.com/atelier/tensorflow_2_1:tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64-20220926144607-041ba2e 华南-广州 swr.cn-south-1.myhuaweicloud.com/atelier/tensorflow_2_1:tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64-20220926144607-041ba2e PyPI 程序包 Ubuntu 软件包 tensorflow 2.1.0 ipykernel 6.7.0 ipython 7.34.0 jupyter-client 7.3.4 ma-cau 1.1.6 ma-cau-adapter 1.1.3 ma-cli 1.2.2 matplotlib 3.5.1 modelarts 1.4.11 moxing-framework 2.1.0.5d9c87c8 numpy 1.19.5 opencv-python 4.1.2.30 pandas 1.1.5 pillow 9.2.0 pip 22.1.2 psutil 5.8.0 PyYAML 5.1 scipy 1.5.2 scikit-learn 0.22.1 tornado 6.2 tensorboard 2.1.1 automake build-essential ca-certificates cmake cpp curl ffmpeg g++ gcc gfortran git git-lfs grep libcudnn7 libcudnn7-dev libjpeg-dev:amd64 libjpeg8-dev:amd64 openssh-client openssh-server nginx python3 rpm screen tar tmux unzip vim wget zip
  • Step1 创建OBS桶和文件夹 在OBS服务中创建桶和文件夹,用于存放样例数据集以及训练代码。需要创建的文件夹列表如表1所示,示例中的桶名称“test-modelarts” 和文件夹名称均为举例,请替换为用户自定义的名称。 创建OBS桶和文件夹的操作指导请参见创建桶和新建文件夹。 请确保您使用的OBS与ModelArts在同一区域。 表1 OBS桶文件夹列表 文件夹名称 用途 “obs://test-modelarts/mpi/demo-code/” 用于存储MPI启动脚本与训练脚本文件。 “obs://test-modelarts/mpi/log/” 用于存储训练日志文件。
  • 镜像二:pytorch1.10-cuda10.2-cudnn7-ubuntu18.04 表2 pytorch1.10-cuda10.2-cudnn7-ubuntu18.04镜像介绍 AI引擎框架 是否使用 GPU (CUDA 版本) URL 包含的依赖项 Pytorch 1.10 是 (cuda 10.2) swr.{region_id}.myhuaweicloud.com/atelier/pytorch_1_10:pytorch_1.10.2-cuda_10.2-py_3.7-ubuntu_18.04-x86_64-20221008154718-2b3e39c 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/pytorch_1_10:pytorch_1.10.2-cuda_10.2-py_3.7-ubuntu_18.04-x86_64-20221008154718-2b3e39c 华东-上海一 swr.cn-east-3.myhuaweicloud.com/atelier/pytorch_1_10:pytorch_1.10.2-cuda_10.2-py_3.7-ubuntu_18.04-x86_64-20221008154718-2b3e39c 华南-广州 swr.cn-south-1.myhuaweicloud.com/atelier/pytorch_1_10:pytorch_1.10.2-cuda_10.2-py_3.7-ubuntu_18.04-x86_64-20221008154718-2b3e39c PyPI 程序包 Ubuntu 软件包 torch 1.10.2 torchvision 0.11.3 ipykernel 5.3.4 ipython 7.34.0 jupyter-client 7.3.4 ma-cau 1.1.6 ma-cau-adapter 1.1.3 ma-cli 1.2.2 matplotlib 3.5.1 modelarts 1.4.11 moxing-framework 2.1.0.5d9c87c8 numpy 1.19.5 opencv-python 4.1.2.30 pandas 1.1.5 pillow 9.2.0 pip 22.1.2 psutil 5.8.0 PyYAML 5.1 scipy 1.5.2 scikit-learn 0.22.1 tornado 6.2 automake build-essential ca-certificates cmake cpp curl ffmpeg g++ gcc gfortran git git-lfs grep libcudnn7 libcudnn7-dev libjpeg-dev:amd64 libjpeg8-dev:amd64 openssh-client openssh-server nginx pandoc python3 rpm screen tar tmux unzip vim wget zip
  • 镜像一:pytorch1.8-cuda10.2-cudnn7-ubuntu18.04 表1 pytorch1.8-cuda10.2-cudnn7-ubuntu18.04镜像介绍 AI引擎框架 是否使用 GPU (CUDA 版本) URL 包含的依赖项 Pytorch 1.8 是 (cuda 10.2) swr.{region_id}.myhuaweicloud.com/atelier/pytorch_1_8:pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64-20220926104358-041ba2e 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/pytorch_1_8:pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64-20220926104358-041ba2e 华东-上海一 swr.cn-east-3.myhuaweicloud.com/atelier/pytorch_1_8:pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64-20220926104358-041ba2e 华南-广州 swr.cn-south-1.myhuaweicloud.com/atelier/pytorch_1_8:pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64-20220926104358-041ba2e PyPI 程序包 Ubuntu 软件包 torch 1.8.0 torchvision 0.9.0 ipykernel 6.7.0 ipython 7.34.0 jupyter-client 7.3.4 ma-cau 1.1.6 ma-cau-adapter 1.1.3 ma-cli 1.2.2 matplotlib 3.5.1 modelarts 1.4.11 moxing-framework 2.1.0.5d9c87c8 numpy 1.19.5 opencv-python 4.1.2.30 pandas 1.1.5 pillow 9.2.0 pip 22.1.2 psutil 5.8.0 PyYAML 5.1 scipy 1.5.2 scikit-learn 0.22.1 tornado 6.2 tensorboard 2.1.1 automake build-essential ca-certificates cmake cpp curl ffmpeg g++ gcc gfortran git git-lfs grep libcudnn7 libcudnn7-dev libjpeg-dev:amd64 libjpeg8-dev:amd64 openssh-client openssh-server nginx pandoc python3 rpm screen tar tmux unzip vim wget zip
  • 镜像三:pytorch1.4-cuda10.1-cudnn7-ubuntu18.04 表3 pytorch1.4-cuda10.1-cudnn7-ubuntu18.04镜像介绍 AI引擎框架 是否使用 GPU (CUDA 版本) URL 包含的依赖项 Pytorch 1.4 是 (cuda 10.1) swr.{region_id}.myhuaweicloud.com/atelier/pytorch_1_4:pytorch_1.4-cuda_10.1-py37-ubuntu_18.04-x86_64-20220926104017-041ba2e 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/pytorch_1_4:pytorch_1.4-cuda_10.1-py37-ubuntu_18.04-x86_64-20220926104017-041ba2e 华东上海一 swr.cn-east-3.myhuaweicloud.com/atelier/pytorch_1_4:pytorch_1.4-cuda_10.1-py37-ubuntu_18.04-x86_64-20220926104017-041ba2e 华南-广州 swr.cn-south-1.myhuaweicloud.com/atelier/pytorch_1_4:pytorch_1.4-cuda_10.1-py37-ubuntu_18.04-x86_64-20220926104017-041ba2e PyPI 程序包 Ubuntu 软件包 torch 1.4.0 torchvision 0.5.0 ipykernel 6.7.0 ipython 7.34.0 jupyter-client 7.3.4 ma-cau 1.1.6 ma-cau-adapter 1.1.3 ma-cli 1.2.2 matplotlib 3.5.1 modelarts 1.4.11 moxing-framework 2.1.0.5d9c87c8 numpy 1.19.5 opencv-python 4.1.2.30 pandas 1.1.5 pillow 9.2.0 pip 22.1.2 psutil 5.8.0 PyYAML 5.1 scipy 1.5.2 scikit-learn 0.22.1 tornado 6.2 tensorboard 2.1.1 automake build-essential ca-certificates cmake cpp curl ffmpeg g++ gcc gfortran git git-lfs grep libcudnn7 libcudnn7-dev libjpeg-dev:amd64 libjpeg8-dev:amd64 openssh-client openssh-server nginx pandoc python3 rpm screen tar tmux unzip vim wget zip
  • 本地构建镜像 以linux x86_x64架构的主机为例,您可以购买相同规格的ECS或者应用本地已有的主机进行自定义镜像的制作。 购买ECS服务器的具体操作请参考购买并登录弹性云服务器。镜像选择公共镜像,推荐使用ubuntu18.04的镜像。 图1 创建ECS服务器-选择X86架构的公共镜像 登录主机后,安装Docker,可参考Docker官方文档。也可执行以下命令安装docker。 curl -fsSL get.docker.com -o get-docker.sh sh get-docker.sh 获取基础镜像。本示例以Ubuntu18.04为例。 docker pull ubuntu:18.04 新建文件夹“self-define-images”,在该文件夹下编写自定义镜像的“Dockerfile”文件和应用服务代码“test_app.py”。本样例代码中,应用服务代码采用了flask框架。 文件结构如下所示 self-define-images/ --Dockerfile --test_app.py “Dockerfile” From ubuntu:18.04 # 配置华为云的源,安装 python、python3-pip 和 Flask RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak && \ sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list && \ sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list && \ apt-get update && \ apt-get install -y python3 python3-pip && \ pip3 install --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple Flask # 复制应用服务代码进镜像里面 COPY test_app.py /opt/test_app.py # 指定镜像的启动命令 CMD python3 /opt/test_app.py “test_app.py” from flask import Flask, request import json app = Flask(__name__) @app.route('/greet', methods=['POST']) def say_hello_func(): print("----------- in hello func ----------") data = json.loads(request.get_data(as_text=True)) print(data) username = data['name'] rsp_msg = 'Hello, {}!'.format(username) return json.dumps({"response":rsp_msg}, indent=4) @app.route('/goodbye', methods=['GET']) def say_goodbye_func(): print("----------- in goodbye func ----------") return '\nGoodbye!\n' @app.route('/', methods=['POST']) def default_func(): print("----------- in default func ----------") data = json.loads(request.get_data(as_text=True)) return '\n called default func !\n {} \n'.format(str(data)) # host must be "0.0.0.0", port must be 8080 if __name__ == '__main__': app.run(host="0.0.0.0", port=8080) 进入“self-define-images”文件夹,执行以下命令构建自定义镜像“test:v1”。 docker build -t test:v1 . 您可以使用“docker images”查看您构建的自定义镜像。
  • 将自定义镜像创建为AI应用 参考从容器镜像中选择元模型导入元模型,您需要特别关注以下参数: 元模型来源:选择“从容器镜像中选择” 容器镜像所在的路径:选择已制作好的自有镜像 图4 选择已制作好的自有镜像 容器调用接口:指定模型启动的协议和端口号。请确保协议和端口号与自定义镜像中提供的协议和端口号保持一致。 镜像复制:选填,选择是否将容器镜像中的模型镜像复制到ModelArts中。 健康检查:选填,用于指定模型的健康检查。仅当自定义镜像中配置了健康检查接口,才能配置“健康检查”,否则会导致AI应用创建失败。 apis定义:选填,用于编辑自定义镜像的apis定义。模型apis定义需要遵循ModelArts的填写规范,参见模型配置文件说明。 本样例的配置文件如下所示: [{ "url": "/", "method": "post", "request": { "Content-type": "application/json" }, "response": { "Content-type": "application/json" } }, { "url": "/greet", "method": "post", "request": { "Content-type": "application/json" }, "response": { "Content-type": "application/json" } }, { "url": "/goodbye", "method": "get", "request": { "Content-type": "application/json" }, "response": { "Content-type": "application/json" } } ]
  • 配置VM环境 在docker机器中,使用如下命令下载安装脚本。 wget https://cnnorth4-modelarts-sdk.obs.cn-north-4.myhuaweicloud.com/modelarts/custom-image-build/install_on_ubuntu1804.sh 当前仅支持ubuntu系统的脚本。 在docker机器中并执行如下命令,即可完成环境配置。 bash install_on_ubuntu1804.sh 图2 配置成功 source /etc/profile 安装脚本依次执行了如下任务: 安装docker。 如果挂载了GPU,则会安装nvidia-docker2,用以将GPU挂载到docker容器中。
  • 镜像一:mindspore_1.10.0-cann_6.0.1-py_3.7-euler_2.8.3 表1 mindspore_1.10.0-cann_6.0.1-py_3.7-euler_2.8.3镜像介绍 AI引擎框架 URL 包含的依赖项 Mindspore-Ascend 1.10.0 {region_id}.myhuaweicloud.com/atelier/mindspore_1_10_ascend:mindspore_1.10.0-cann_6.0.1-py_3.7-euler_2.8.3-aarch64-d910-20230303173945-815d627 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/mindspore_1_10_ascend:mindspore_1.10.0-cann_6.0.1-py_3.7-euler_2.8.3-aarch64-d910-20230303173945-815d627 PyPI 程序包 Yum 软件包 mindspore-ascend 1.10.0 ipykernel 6.7.0 ipython 7.34.0 jupyter-client 7.4.5 ma-cau 1.1.3 ma-cau-adapter 1.1.3 ma-cli 1.2.1 matplotlib 3.5.1 modelarts 1.4.20 moxing-framework 2.0.1.rc0.ffd1c0c8 numpy 1.21.2 pandas 1.1.3 pillow 9.3.0 pip 22.3.1 psutil 5.7.0 PyYAML 5.3.1 scipy 1.5.4 scikit-learn 0.24.0 tornado 6.2 mindinsight 1.9.0 cmake cpp curl ffmpeg g++ gcc git grep python3 rpm tar unzip wget zip
  • 镜像二:mindspore_1.9.0-cann_6.0.0-py_3.7-euler_2.8.3 表2 mindspore_1.9.0-cann_6.0.0-py_3.7-euler_2.8.3镜像介绍 AI引擎框架 URL 包含的依赖项 MindSpore 1.9.0 swr.{region_id}.myhuaweicloud.com/atelier/mindspore_1_9_ascend:mindspore_1.9.0-cann_6.0.0-py_3.7-euler_2.8.3-aarch64-d910-20221116111529 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/mindspore_1_9_ascend:mindspore_1.9.0-cann_6.0.0-py_3.7-euler_2.8.3-aarch64-d910-20221116111529 PyPI 程序包 Yum 软件包 mindspore-ascend 1.9.0 ipykernel 6.7.0 ipython 7.34.0 jupyter-client 7.4.5 ma-cau 1.1.6 ma-cau-adapter 1.1.3 ma-cli 1.2.2 matplotlib 3.5.1 modelarts 1.4.20 moxing-framework 2.0.1.rc0.ffd1c0c8 numpy 1.21.2 pandas 1.1.3 pillow 9.3.0 pip 22.3.1 psutil 5.7.0 PyYAML 5.3.1 scipy 1.5.4 scikit-learn 0.24.0 tornado 6.2 mindinsight 1.9.0 cmake cpp curl ffmpeg g++ gcc git grep python3 rpm tar unzip wget zip
  • 镜像三:mindspore1.7.0-cann5.1.0-py3.7-euler2.8.3 表3 mindspore1.7.0-cann5.1.0-py3.7-euler2.8.3镜像介绍 AI引擎框架 URL 包含的依赖项 Mindspore-Ascend 1.7.0 swr.{region_id}.myhuaweicloud.com/atelier/mindspore_1_7_0:mindspore_1.7.0-cann_5.1.0-py_3.7-euler_2.8.3-aarch64-d910-20220906 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/mindspore_1_7_0:mindspore_1.7.0-cann_5.1.0-py_3.7-euler_2.8.3-aarch64-d910-20220906 PyPI 程序包 Yum 软件包 mindspore-ascend 1.7.0 ipykernel 5.3.4 ipython 7.34.0 jupyter-client 7.3.4 ma-cau 1.1.6 ma-cau-adapter 1.1.3 ma-cli 1.2.2 matplotlib 3.5.1 modelarts 1.4.20 moxing-framework 2.0.1.rc0.ffd1c0c8 numpy 1.21.2 pandas 1.1.3 pillow 9.2.0 pip 22.1.2 psutil 5.7.0 PyYAML 5.3.1 scipy 1.5.4 scikit-learn 0.24.1 tornado 6.2 mindinsight 1.7.0 cmake cpp curl ffmpeg g++ gcc git grep python3 rpm tar unzip wget zip
  • Notebook自定义镜像约束 制作自定义镜像时,Base镜像需满足如下规范: 可以基于开发环境提供的预置镜像为Base镜像制作自定义镜像。 基于昇腾、Dockerhub官网等官方开源的镜像制作,开源镜像需要满足如下操作系统约束: x86:Ubuntu18.04、Ubuntu20.04 ARM:Euler2.8.3、Euler2.10.7 不满足以上镜像规范,所制作的镜像使用可能会出现故障,请用户检查镜像规范,并参考Notebook自定义镜像故障基础排查自行排查,如未解决请联系华为技术工程师协助解决。 父主题: Notebook中使用自定义镜像
  • 模型包文件样例 模型包文件model.zip中需要用户自己准备模型文件,此处仅是举例示意说明,以一个手写数字识别模型为例。 Model目录下必须要包含推理脚本文件customize_service.py,目的是为开发者提供模型预处理和后处理的逻辑。 图6 推理模型model目录示意图(需要用户自己准备模型文件) 推理脚本customize_service.py的具体写法要求可以参考模型推理代码编写说明。 本案例中提供的customize_service.py文件具体内容如下: import logging import threading import numpy as np import tensorflow as tf from PIL import Image from model_service.tfserving_model_service import TfServingBaseService class mnist_service(TfServingBaseService): def __init__(self, model_name, model_path): self.model_name = model_name self.model_path = model_path self.model = None self.predict = None # 非阻塞方式加载saved_model模型,防止阻塞超时 thread = threading.Thread(target=self.load_model) thread.start() def load_model(self): # load saved_model 格式的模型 self.model = tf.saved_model.load(self.model_path) signature_defs = self.model.signatures.keys() signature = [] # only one signature allowed for signature_def in signature_defs: signature.append(signature_def) if len(signature) == 1: model_signature = signature[0] else: logging.warning("signatures more than one, use serving_default signature from %s", signature) model_signature = tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY self.predict = self.model.signatures[model_signature] def _preprocess(self, data): images = [] for k, v in data.items(): for file_name, file_content in v.items(): image1 = Image.open(file_content) image1 = np.array(image1, dtype=np.float32) image1.resize((28, 28, 1)) images.append(image1) images = tf.convert_to_tensor(images, dtype=tf.dtypes.float32) preprocessed_data = images return preprocessed_data def _inference(self, data): return self.predict(data) def _postprocess(self, data): return { "result": int(data["output"].numpy()[0].argmax()) }
  • Dockerfile模板 Dockerfile样例,此样例可以直接另存为一个Dockerfile文件使用。此处可以使用的基础镜像列表请参见推理基础镜像列表。 FROM swr.cn-north-4.myhuaweicloud.com/atelier/tensorflow_2_1:tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64-20221121111529-d65d817 # here create a soft link from '/home/ma-user/anaconda/lib/python3.7/site-packages/model_service' to '/home/ma-user/infer/model_service'. It’s the build-in inference framework code dir # if the installed python version of this base image is python3.8, you should create a soft link from '/home/ma-user/anaconda/lib/python3.8/site-packages/model_service' to '/home/ma-user/infer/model_service'. USER root RUN ln -s /home/ma-user/anaconda/lib/python3.7/site-packages/model_service /home/ma-user/infer/model_service USER ma-user # here we supply a demo, you can change it to your own model files ADD model/ /home/ma-user/infer/model/1 USER root RUN chown -R ma-user:ma-group /home/ma-user/infer/model/1 USER ma-user # default MODELARTS_SSL_CLIENT_VERIFY switch is "true". In order to debug, we set it to be "false" ENV MODELARTS_SSL_CLIENT_VERIFY="false" # change your port and protocol here, default is 8443 and https # ENV MODELARTS_SERVICE_PORT=8080 # ENV MODELARTS_SSL_ENABLED="false" # add pip install here # RUN pip install numpy==1.16.4 # RUN pip install -r requirements.txt # default cmd, you can chage it here # CMD sh /home/ma-user/infer/run.sh
  • Step2 准备训练脚本并上传至OBS 准备本案例所需的训练脚本“pytorch-verification.py”文件,并上传至OBS桶的“obs://test-modelarts/pytorch/demo-code/”文件夹下。 “pytorch-verification.py”文件内容如下: import torch import torch.nn as nn x = torch.randn(5, 3) print(x) available_dev = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu") y = torch.randn(5, 3).to(available_dev) print(y)
  • Step1 创建OBS桶和文件夹 在OBS服务中创建桶和文件夹,用于存放样例数据集以及训练代码。需要创建的文件夹列表如表1所示,示例中的桶名称“test-modelarts”和文件夹名称均为举例,请替换为用户自定义的名称。 创建OBS桶和文件夹的操作指导请参见创建桶和新建文件夹。 请确保您使用的OBS与ModelArts在同一区域。 表1 OBS桶文件夹列表 文件夹名称 用途 “obs://test-modelarts/pytorch/demo-code/” 用于存储训练脚本文件。 “obs://test-modelarts/pytorch/log/” 用于存储训练日志文件。
  • Step5 上传镜像至SWR服务 登录容器镜像服务控制台,选择区域,要和ModelArts区域保持一致,否则无法选择到镜像。 单击右上角“创建组织”,输入组织名称完成组织创建。请自定义组织名称,本示例使用“deep-learning”,下面的命令中涉及到组织名称“deep-learning”也请替换为自定义的值。 单击右上角“登录指令”,获取登录访问指令,本文选择复制临时登录指令。 以root用户登录本地环境,输入复制的SWR临时登录指令。 上传镜像至容器镜像服务镜像仓库。 使用docker tag命令给上传镜像打标签。 #region和domain信息请替换为实际值,组织名称deep-learning也请替换为自定义的值。 sudo docker tag pytorch:1.8.1-cuda11.1 swr.{region-id}.{domain}/deep-learning/pytorch:1.8.1-cuda11.1 #此处以华为云cn-north-4为例 sudo docker tag pytorch:1.8.1-cuda11.1 swr.cn-north-4.myhuaweicloud.com/deep-learning/pytorch:1.8.1-cuda11.1 使用docker push命令上传镜像。 #region和domain信息请替换为实际值,组织名称deep-learning也请替换为自定义的值。 sudo docker push swr.{region-id}.{domain}/deep-learning/pytorch:1.8.1-cuda11.1 #此处以华为云cn-north-4为例 sudo docker push swr.cn-north-4.myhuaweicloud.com/deep-learning/pytorch:1.8.1-cuda11.1 完成镜像上传后,在容器镜像服务控制台的“我的镜像”页面可查看已上传的自定义镜像。 “swr.cn-north-4.myhuaweicloud.com/deep-learning/pytorch:1.8.1-cuda11.1”即为此自定义镜像的“SWR_URL”。
  • 镜像四:mindspore1.2.0-openmpi2.1.1-ubuntu18.04 表4 mindspore1.2.0-openmpi2.1.1-ubuntu18.04镜像介绍 AI引擎框架 是否使用 GPU (CUDA 版本) URL 包含的依赖项 Mindspore 1.2.0 无 swr.{region_id}.myhuaweicloud.com/atelier/mindspore_1_2_0:mindspore_1.2.0-py_3.7-ubuntu_18.04-x86_64-20220926104106-041ba2e 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/mindspore_1_2_0:mindspore_1.2.0-py_3.7-ubuntu_18.04-x86_64-20220926104106-041ba2e 华东-上海一 swr.cn-east-3.myhuaweicloud.com/atelier/mindspore_1_2_0:mindspore_1.2.0-py_3.7-ubuntu_18.04-x86_64-20220926104106-041ba2e 华南-广州 swr.cn-south-1.myhuaweicloud.com/atelier/mindspore_1_2_0:mindspore_1.2.0-py_3.7-ubuntu_18.04-x86_64-20220926104106-041ba2e PyPI 程序包 Ubuntu 软件包 mindspore 1.2.0 ipykernel 6.7.0 ipython 7.34.0 jupyter-client 7.3.4 ma-cau 1.1.3 ma-cau-adapter 1.1.3 ma-cli 1.1.5 matplotlib 3.5.1 modelarts 1.4.11 moxing-framework 2.1.0.5d9c87c8 numpy 1.19.5 pandas 6.2.0 pillow 9.1.1 pip 22.1.2 psutil 5.8.0 PyYAML 5.1 scipy 1.5.2 scikit-learn 0.22.1 tornado 6.2 mindinsight 1.2.0 automake build-essential ca-certificates cmake cpp curl ffmpeg g++ gcc gfortran git git-lfs grep libjpeg-dev:amd64 libjpeg8-dev:amd64 openssh-client openssh-server nginx python3 rpm screen tar tmux unzip vim wget zip
  • 镜像三:mindspore1.2.0-cuda10.1-cudnn7-ubuntu18.04 表3 mindspore1.2.0-cuda10.1-cudnn7-ubuntu18.04镜像介绍 AI引擎框架 是否使用 GPU (CUDA 版本) URL 包含的依赖项 Mindspore-gpu 1.2.0 是 (cuda 10.1) swr.{region_id}.myhuaweicloud.com/atelier/mindspore_1_2_0:mindspore_1.2.0-py_3.7-cuda_10.1-ubuntu_18.04-x86_64-20220926104106-041ba2e 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/mindspore_1_2_0:mindspore_1.2.0-py_3.7-cuda_10.1-ubuntu_18.04-x86_64-20220926104106-041ba2e 华东-上海一 swr.cn-east-3.myhuaweicloud.com/atelier/mindspore_1_2_0:mindspore_1.2.0-py_3.7-cuda_10.1-ubuntu_18.04-x86_64-20220926104106-041ba2e 华南-广州 swr.cn-south-1.myhuaweicloud.com/atelier/mindspore_1_2_0:mindspore_1.2.0-py_3.7-cuda_10.1-ubuntu_18.04-x86_64-20220926104106-041ba2e PyPI 程序包 Ubuntu 软件包 mindspore-gpu 1.2.0 ipykernel 6.7.0 ipython 7.34.0 jupyter-client 7.3.4 ma-cau 1.1.3 ma-cau-adapter 1.1.3 ma-cli 1.1.5 matplotlib 3.5.1 modelarts 1.4.11 moxing-framework 2.1.0.5d9c87c8 numpy 1.19.5 pandas 1.1.5 pillow 6.2.0 pip 22.1.2 psutil 5.8.0 PyYAML 5.1 scipy 1.5.2 scikit-learn 0.22.1 tornado 6.2 mindinsight 1.2.0 automake build-essential ca-certificates cmake cpp curl ffmpeg g++ gcc gfortran git git-lfs grep libcudnn7 libcudnn7-dev libjpeg-dev:amd64 libjpeg8-dev:amd64 openssh-client openssh-server nginx python3 rpm screen tar tmux unzip vim wget zip
  • 镜像二:mindspore1.7.0-py3.7-ubuntu18.04 表2 mindspore1.7.0-py3.7-ubuntu18.04镜像介绍 AI引擎框架 是否使用 GPU (CUDA 版本) URL 包含的依赖项 Mindspore 1.7.0 无 swr.{region_id}.myhuaweicloud.com/atelier/mindspore_1_7_0:mindspore_1.7.0-cpu-py_3.7-ubuntu_18.04-x86_64-20220926104017-041ba2e 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/mindspore_1_7_0:mindspore_1.7.0-cpu-py_3.7-ubuntu_18.04-x86_64-20220926104017-041ba2e 华东-上海一 swr.cn-east-3.myhuaweicloud.com/atelier/mindspore_1_7_0:mindspore_1.7.0-cpu-py_3.7-ubuntu_18.04-x86_64-20220926104017-041ba2e 华南-广州 swr.cn-south-1.myhuaweicloud.com/atelier/mindspore_1_7_0:mindspore_1.7.0-cpu-py_3.7-ubuntu_18.04-x86_64-20220926104017-041ba2e PyPI 程序包 Ubuntu 软件包 mindspore 1.7.0 ipykernel 6.7.0 ipython 7.34.0 jupyter-client 7.3.4 ma-cau 1.1.6 ma-cau-adapter 1.1.3 ma-cli 1.2.2 matplotlib 3.5.1 modelarts 1.4.11 moxing-framework 2.1.0.5d9c87c8 numpy 1.17.0 pandas 1.1.5 pillow 9.1.1 pip 22.1.2 psutil 5.8.0 PyYAML 5.1 scipy 1.5.2 scikit-learn 0.22.1 tornado 6.1 mindinsight 1.7.0 mindvision 0.1.0 automake build-essential ca-certificates cmake cpp curl ffmpeg g++ gcc gfortran git git-lfs grep libjpeg-dev:amd64 libjpeg8-dev:amd64 openssh-client openssh-server nginx python3 rpm screen tar tmux unzip vim wget zip
  • 镜像一:mindspore1.7.0-cuda10.1-py3.7-ubuntu18.04 表1 mindspore1.7.0-cuda10.1-py3.7-ubuntu18.04镜像介绍 AI引擎框架 是否使用 GPU (CUDA 版本) URL 包含的依赖项 Mindspore-gpu 1.7.0 是 (cuda 10.1) swr.{region_id}.myhuaweicloud.com/atelier/mindspore_1_7_0:mindspore_1.7.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64-20220926104017-041ba2e 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/mindspore_1_7_0:mindspore_1.7.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64-20220926104017-041ba2e 华东-上海一 swr.cn-east-3.myhuaweicloud.com/atelier/mindspore_1_7_0:mindspore_1.7.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64-20220926104017-041ba2e 华南-广州 swr.cn-south-1.myhuaweicloud.com/atelier/mindspore_1_7_0:mindspore_1.7.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64-20220926104017-041ba2e PyPI 程序包 Ubuntu 软件包 mindspore-gpu 1.7.0 ipykernel 6.7.0 ipython 7.34.0 jupyter-client 7.3.4 ma-cau 1.1.6 ma-cau-adapter 1.1.3 ma-cli 1.2.2 matplotlib 3.5.1 modelarts 1.4.11 moxing-framework 2.1.0.5d9c87c8 numpy 1.17.0 pandas 1.1.5 pillow 9.1.1 pip 22.1.2 psutil 5.8.0 PyYAML 5.1 scipy 1.5.2 scikit-learn 0.22.1 tornado 6.1 mindinsight 1.7.0 mindvision 0.1.0 automake build-essential ca-certificates cmake cpp curl ffmpeg g++ gcc gfortran git git-lfs grep libcudnn7 libcudnn7-dev libjpeg-dev:amd64 libjpeg8-dev:amd64 openssh-client openssh-server nginx python3 rpm screen tar tmux unzip vim wget zip
  • 完全使用自定义镜像 图2 完全使用自定义镜像创建算法 训练支持的自定义镜像使用说明请参考使用自定义镜像创建训练作业。 完全使用自定义镜像场景下,指定的“conda env”启动训练方法如下: 由于训练作业运行时不是shell环境,因此无法直接使用“conda activate”命令激活指定的 “conda env”,需要使用其他方式以达成使用指定“conda env”来启动训练的效果。 假设您的自定义镜像中的“conda”安装于“/home/ma-user/anaconda3”目录“conda env”为“python-3.7.10”,训练脚本位于“/home/ma-user/modelarts/user-job-dir/code/train.py”。可通过以下方式使用指定的“conda env”启动训练: 方式一:为镜像设置正确的“DEFAULT_CONDA_ENV_NAME”环境变量与“ANACONDA_DIR”环境变量。 您可以使用Python命令启动训练脚本。启动命令示例如下: python /home/ma-user/modelarts/user-job-dir/code/train.py 方式二:使用“conda env python”的绝对路径。 您可以使用“/home/ma-user/anaconda3/envs/python-3.7.10/bin/python”命令启动训练脚本。启动命令示例如下: /home/ma-user/anaconda3/envs/python-3.7.10/bin/python /home/ma-user/modelarts/user-job-dir/code/train.py 方式三:设置PATH环境变量。 您可以将指定的“conda env bin”目录配置到PATH环境变量中。您可以使用Python命令启动训练脚本。启动命令示例如下: export PATH=/home/ma-user/anaconda3/envs/python-3.7.10/bin:$PATH; python /home/ma-user/modelarts/user-job-dir/code/train.py 方式四:使用“conda run -n”命令。 您可以使用“/home/ma-user/anaconda3/bin/conda run -n python-3.7.10”命令来执行训练命令,启动命令示例如下: /home/ma-user/anaconda3/bin/conda run -n python-3.7.10 python /home/ma-user/modelarts/user-job-dir/code/train.py 如果在训练时发生找不到“$ANACONDA_DIR/envs/$DEFAULT_CONDA_ENV_NAME/lib ”目录下“.so”文件的相关报错,可以尝试将该目录加入到“LD_LIBRARY_PATH”,将以下命令放在上述启动方式命令前: export LD_LIBRARY_PATH=$ANACONDA_DIR/envs/$DEFAULT_CONDA_ENV_NAME/lib:$LD_LIBRARY_PATH; 例如,方式一的启动命令示例此时变为: export LD_LIBRARY_PATH=$ANACONDA_DIR/envs/$DEFAULT_CONDA_ENV_NAME/lib:$LD_LIBRARY_PATH; python /home/ma-user/modelarts/user-job-dir/code/train.py
  • 使用预置框架 + 自定义镜像 此功能与直接基于预置框架创建训练作业的区别仅在于,镜像是由用户自行选择的。用户可以基于预置框架制作自定义镜像。基于预置框架制作自定义镜像可参考使用基础镜像构建新的训练镜像章节。 图1 使用预置框架+自定义镜像创建算法 该功能的行为与直接基于预置框架创建的训练作业相同,例如: 系统将会自动注入一系列环境变量 PATH=${MA_HOME}/anaconda/bin:${PATH} LD_LIBRARY_PATH=${MA_HOME}/anaconda/lib:${LD_LIBRARY_PATH} PYTHONPATH=${MA_JOB_DIR}:${PYTHONPATH} 您选择的启动文件将会被系统自动以python命令直接启动,因此请确保镜像中的Python命令为您预期的Python环境。注意到系统自动注入的PATH环境变量,您可以参考下述命令确认训练作业最终使用的Python版本: export MA_HOME=/home/ma-user; docker run --rm {image} ${MA_HOME}/anaconda/bin/python -V docker run --rm {image} $(which python) -V 系统将会自动添加预置框架关联的超参
  • 常见问题 镜像保存时报错“there are processes in 'D' status, please check process status using 'ps -aux' and kill all the 'D' status processes”如何解决? 镜像保存时报错“container size %dG is greater than threshold %dG”如何解决? 保存镜像时报错“too many layers in your image”如何解决? 镜像保存时报错“The container size (xG) is greater than the threshols (25G)”如何解决?
  • 创建开发环境 镜像注册成功后,即可在ModelArts控制台的Notebook页面,创建开发环境时选择该自定义镜像。 图1 创建开发环境 打开开发环境,即可看到Dockerfile中创建的conda环境pytorch_1_8。 图2 打开开发环境 单击图中的pytorch_1_8,即可创建一个ipynb文件,导入torch,可以看到安装的pytorch 1.8已经能够使用。 图3 创建一个ipynb文件 再打开一个Terminal,查看ffmpeg和gcc的版本,是Dockerfile中安装的版本。 图4 查看ffmpeg和gcc的版本
  • 如何通过docker启动Notebook保存后的镜像 Notebook保存后的镜像有Entrypoint参数,如图1。Entrypoint参数中指定的可执行文件或命令会覆盖镜像的默认启动命令,Entrypoint中指定的执行命令内容不在镜像中预置,在本地环境通过docker run启动通过Notebook保存的镜像,报错创建容器任务失败,启动文件或目录不存在,如图2。 因此需要设置--entrypoint参数,覆盖Entrypoint中指定的程序。使用--entrypoint参数指定的启动文件或命令启动镜像。命令示例如下: docker run -it -d --entrypoint /bin/bash image:tag 图1 Entrypoint参数 图2 启动镜像报错 父主题: FAQ
  • 制作新镜像 连接容器镜像服务。 登录容器镜像服务控制台。 选择左侧导航栏的“总览”,单击页面右上角的“登录指令”,在弹出的页面中单击复制登录指令。 图1 获取登录指令 此处生成的登录指令有效期为24小时,若需要长期有效的登录指令,请参见获取长期有效登录指令。获取了长期有效的登录指令后,在有效期内的临时登录指令仍然可以使用。 登录指令末尾的域名为镜像仓库地址,请记录该地址,后面会使用到。 在安装容器引擎的机器中执行上一步复制的登录指令。 登录成功会显示“Login Succeeded”。 拉取基础镜像或第三方镜像(此处以基础镜像举例,第三方镜像直接替换镜像地址)。 拉取ModelArts提供的公共镜像(请参考预置镜像)。 docker pull swr.cn-north-4.myhuaweicloud.com/atelier/notebook2.0-pytorch-1.4-kernel-cp37:3.3.3-release-v1-20220114 编写Dockerfile。 vim一个Dockerfile,如果使用的基础镜像是ModelArts提供的公共镜像,Dockerfile的具体内容可参考Dockerfile文件(基础镜像为ModelArts提供)。 如果使用的基础镜像是第三方镜像(非ModelArts提供的公共镜像),Dockerfile文件中需要添加uid为1000的用户ma-user和gid为100的用户组ma-group,具体可参考Dockerfile文件(基础镜像为非ModelArts提供)。 本例的Dockerfile将基于PyTorch基础镜像安装pytorch 1.8, ffmpeg 3和gcc 8,构建一个面向AI任务的镜像。 构建镜像 使用docker build命令从Dockerfile构建出一个新镜像。命令参数解释如下: “-t” 指定了新的镜像地址,包括{局点信息}/{组织名称}/{镜像名称}:{版本名称},请根据实际填写。建议使用完整的swr地址,因为后续的调试和注册需要使用。 “-f ”指定了Dockerfile的文件名,根据实际填写。 最后的“ . ”指定了构建的上下文是当前目录,根据实际填写。 docker build -t swr.cn-north-4.myhuaweicloud.com/sdk-test/pytorch_1_8:v1 -f Dockerfile . 图2 构建成功
共100000条