华为云用户手册

  • 创建开发环境 镜像注册成功后,即可在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 构建成功
  • 基于自定义镜像创建Notebook实例 从Notebook中保存的镜像可以在镜像管理中查询到,可以用于创建新的Notebook实例,完全继承保存状态下的实例软件环境配置。 基于自定义镜像创建Notebook实例有两种方式: 方式一:在Notebook实例创建页面,镜像类型选择“自定义镜像”,名称选择上述保存的镜像。 图1 创建基于自定义镜像的Notebook实例 方式二:在“镜像管理”页面,单击某个镜像的镜像详情,在镜像详情页,单击“创建Notebook”,也会跳转到基于该自定义镜像创建Notebook的页面。 父主题: 将Notebook实例保存为自定义镜像
  • 模型包文件样例 模型包文件model.zip中需要用户自己准备模型文件,此处仅是举例示意说明,以一个手写数字识别模型为例。 Model目录下必须要包含推理脚本文件customize_service.py,目的是为开发者提供模型预处理和后处理的逻辑。 图5 推理模型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()) }
  • Notebook制作自定义镜像方法 制作自定义镜像有以下方式: 方式一:使用Notebook的预置镜像创建开发环境实例,在环境中进行依赖安装与配置,配置完成后,可以通过开发环境提供的镜像保存功能,将运行实例的内容以容器镜像的方式保存下来,作为自定义镜像使用。详细操作请参考将Notebook实例保存为自定义镜像。 方式二:基于ModelArts提供的基础镜像以及镜像构建模板来编写Dockerfile,在Notebook中构建出完全适合自己的镜像。然后将镜像进行注册,用以创建新的开发环境,满足自己的业务需求。详细操作请参考在Notebook中构建自定义镜像并使用。 方式三:基于ModelArts提供的基础镜像或第三方镜像,在E CS 服务器上自行编写Dockerfile构建镜像,对ModelArts基础镜像或第三方镜像进行改造,构建出符合ModelArts要求的新的自定义Docker镜像,并将镜像推送到SWR,作为自定义镜像使用。详细操作请参考在ECS上构建自定义镜像并在Notebook中使用。 父主题: Notebook中使用自定义镜像
  • Step2 注册新镜像 调试完成后,将新镜像注册到ModelArts镜像管理服务中,进而能够在ModelArts中使用该镜像。 有两种方式来注册镜像。 方式一:使用ma-cli image register命令来注册镜像。注册命令会返回注册好的镜像信息,包括镜像id,name等,如下图所示。该命令的更多信息可参考注册镜像。 ma-cli image register --swr-path=swr.cn-north-4.myhuaweicloud.com/notebook-test/my_image:0.0.1 -a AARCH64 -rs ASCEND -P XXX -a指定该镜像支持ARM架构,-rs指定镜像支持ASCEND芯片,“XXX”为鉴权时指定的profile。 图1 注册镜像 方式二:在ModelArts Console上注册镜像 登录ModelArts控制台,在左侧导航栏选择“镜像管理”,进入镜像管理页面。 单击“注册镜像”。请将完整的SWR地址复制到这里即可,或单击可直接从SWR选择自有镜像进行注册。 “架构”和“类型”根据实际情况选择,与镜像源保持一致。 父主题: 在Notebook中构建自定义镜像并使用
  • Ascend-Powered-Engine框架启动原理 在ModelArts算法建界面选择AI引擎时,能够看到一个叫做Ascend-Powered-Engine的AI引擎,它与其他AI引擎相比有些特别。它既不是一个AI框架(如:PyTorch、TensorFlow)也不是一个并行执行框架(如:MPI),而是适配加速芯片Ascend编译的一组AI框架+运行环境+启动方式的集合。 由于几乎所有的Ascend加速卡都跑在ARM规格的机器上,因此上层docker镜像也都是ARM镜像。 针对GPU场景的镜像中安装了对应版本的CUDA(由英伟达推出的统一计算架构)驱动,而Ascend-Powered-Engine引擎的镜像中都安装了与底层硬件版本适配的CANN(华为针对AI场景推出的异构计算架构)驱动。 规格和节点个数 下面以选择“Ascend: 8 *** | ARM: 192 核 720 GB”规格为例,介绍在单机和分布式场景下ModelArts规格资源的分配情况。 单机作业时(即选择的节点数为1),ModelArts只会在一个节点上启动一个训练容器,该训练容器独享节点规格的可使用资源。 分布式作业时(即选择的节点数大于1),worker的数量和创建作业时选择的节点数一致,每个worker将被分配到所选规格对应的计算资源。例如计算节点个数为2时,将启动2个worker,每个worker拥有“Ascend: 8*** | ARM: 192 核 768GB 720 GB”的计算资源。 另外,Ascend-Powered-Engine引擎的启动文件,将被平台自动启动为N个进程,N=单节点的Ascend加速卡数。 PyTorch on Ascend不能使用Ascend-Powered-Engine引擎来启动训练作业,应该参考基于训练作业启动PyTorch DDP on Ascend加速卡训练示例使用自定义镜像来启动训练作业。 网络通信介绍 单机作业不涉及网络通信情况。 分布式作业的涉及网络通信则可以分为节点内网络通信和节点间网络通信。 节点内网络 使用HCCS和共享内存通信。 节点间网络 worker之间可通过容器网络和Ascend加速卡上的RoCE网络通信。
  • 自定义镜像功能关联服务介绍 使用自定义镜像功能可能涉及以下服务: 容器镜像服务 容器镜像服务(Software Repository for Container,SWR)是一种支持镜像全生命周期管理的服务, 提供简单易用、安全可靠的镜像管理功能,帮助您快速部署容器化服务。您可以通过界面、社区CLI和原生API上传、下载和管理容器镜像。 您制作的自定义镜像需要上传至SWR服务。ModelArts训练和创建AI应用使用的自定义镜像需要从SWR服务管理列表获取。 图1 获取镜像列表 对象存储服务 对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。 在使用ModelArts时存在与OBS的数据交互,您需要使用的数据可以存储至OBS。 弹性云服务器 弹性云服务器(Elastic Cloud Server,ECS)是由CPU、内存、操作系统、云硬盘组成的基础的计算组件。弹性云服务器创建成功后,您就可以像使用自己的本地PC或物理服务器一样,使用弹性云服务器。 在制作自定义镜像时,您可以在本地环境或者ECS上完成自定义镜像制作。 在您使用自定义镜像功能时,ModelArts可能需要访问您的容器镜像服务SWR、对象存储服务OBS等依赖服务,如果没有授权,这些功能将不能正常使用。建议您使用委托授权功能,将依赖服务操作权限委托给ModelArts服务,让ModelArts以您的身份使用依赖服务,代替您进行一些资源操作。详细操作参见使用委托授权。
  • ModelArts的预置镜像使用场景 ModelArts给用户提供了一组预置镜像,用户可以直接使用预置镜像创建Notebook实例,在实例中进行依赖安装与配置后,保存为自定义镜像,可直接用于ModelArts训练,而不需要做适配。同时也可以使用预置镜像直接提交训练作业、创建AI应用等。 ModelArts提供的预置镜像版本是依据用户反馈和版本稳定性决定的。当用户的功能开发基于ModelArts提供的版本能够满足的时候,比如用户开发基于MindSpore1.X,建议用户使用预置镜像,这些镜像经过充分的功能验证,并且已经预置了很多常用的安装包,用户无需花费过多的时间来配置环境即可使用。
  • ModelArts镜像管理简介 在AI业务开发以及运行的过程中,一般都会有复杂的环境依赖需要进行调测并固化。面对开发中的开发环境的脆弱和多轨切换问题,在ModelArts的AI开发最佳实践中,通过容器镜像的方式,将运行环境进行固化,以这种方式不仅能够进行依赖管理,而且可以方便的完成工作环境切换。配合ModelArts提供的云化容器资源使用,可以更加快速、高效的进行AI开发与模型实验的迭代等。 ModelArts默认提供了一组预置镜像供开发使用,这些镜像有以下特点: 零配置,即开即用,面向特定的场景,将AI开发过程中常用的依赖环境进行固化,提供合适的软件、操作系统、网络等配置策略,通过在硬件上的充分测试,确保其兼容性和性能最合适。 方便自定义,预置镜像已经在SWR仓库中,通过对预置镜像的扩展完成自定义镜像注册。 安全可信,基于安全加固最佳实践,访问策略、用户权限划分、开发软件 漏洞扫描 、操作系统安全加固等方式,确保镜像使用的安全性。 当用户对深度学习引擎、开发库有特殊需求场景的时候,预置镜像已经不能满足用户需求。ModelArts提供自定义镜像功能支持用户自定义运行引擎。 ModelArts底层采用容器技术,自定义镜像指的是用户自行制作容器镜像并在ModelArts上运行。自定义镜像功能支持自由文本形式的命令行参数和环境变量,灵活性比较高,便于支持任意计算引擎的作业启动需求。
  • ModelArts的自定义镜像使用场景 Notebook中使用自定义镜像 当Notebook预置镜像不能满足需求时,用户可以制作自定义镜像。在镜像中自行安装与配置环境依赖软件及信息,并制作为自定义镜像,用于创建新的Notebook实例。 使用自定义镜像训练作业 如果您已经在本地完成模型开发或训练脚本的开发,且您使用的AI引擎是ModelArts不支持的框架。您可以制作自定义镜像,并上传至SWR服务。您可以在ModelArts使用此自定义镜像创建训练作业,使用ModelArts提供的资源训练模型。 使用自定义镜像创建AI应用 如果您使用了ModelArts不支持的AI引擎开发模型,也可通过制作自定义镜像,导入ModelArts创建为AI应用,并支持进行统一管理和部署为服务。 用户制作的自定义镜像,使用的场景不同,镜像规则也不同,具体如下: 通用规则:SWR镜像类型为“私有”时,才可以共享给他人,适用于开发环境、训练作业、AI应用。 开发环境:SWR镜像类型为“公开”时,其它用户才可以在ModelArts镜像管理页面注册使用。 训练作业:SWR镜像类型为“公开”时,在使用自定义镜像创建训练作业时,在“镜像”输入框内直接填写“组织名称/镜像名称:版本名称”即可。例如:公开镜像的SWR地址为“swr.cn-north-4.myhuaweicloud.com/test-image/tensorflow2_1_1:1.1.1”,则在创建训练作业的“镜像”输入框里内直接填“test-images/tensorflow2_1_1:1.1.1”。
  • 原因分析 报错主要有如下原因: 该镜像是主账号注册的private镜像,子账号在使用,而主账号没有给子账号赋SWR权限,子账号从SWR Console界面看不到该镜像,需要主账号给子账号在SWR侧赋予SWR权限,使得子账号可以看到该SWR镜像地址,否则该镜像子账号不可使用。 该镜像不属于该租户(包括主账号和子账号),是其他人共享的public镜像,而这个镜像又被镜像所有者删除,导致不可使用,用户需要联系对应的SWR镜像负责人,确认镜像是否存在。 该镜像不属于该租户(包括主账号和子账号),是其他人共享的public镜像,而这个镜像又被镜像所有者设置成private,导致不可使用,用户需要联系对应的SWR镜像负责人,确认镜像的属性。
  • 镜像保存如何保证能正常保存,不会因为超过35G而保存失败? 可以从如下几方面考虑: 请选择较小的基础镜像创建Notebook实例,这样在实例中可操作的空间才会大,可自由安装的包才能更多,一般建议原始的启动Notebook的基础镜像在SWR侧查看大小不要超过6G。 镜像保存主要保存在/home/ma-user路径下除挂载路径/home/ma-user/work以外的目录,请将数据集等放到work路径下,不要放到非work路径下。 请不要将实例频繁保存镜像,建议一次将需要的安装包安装好,然后执行镜像保存,避免频繁执行镜像保存的动作,保存次数越多镜像越大,且多次保存后的镜像过大问题无法通过清理磁盘方式减少镜像的大小(Docker保存原理机制)。 父主题: FAQ
  • Step1 创建OBS桶和文件夹 在OBS服务中创建桶和文件夹,用于存放样例数据集以及训练代码。需要创建的文件夹列表如表1所示,示例中的桶名称“test-modelarts” 和文件夹名称均为举例,请替换为用户自定义的名称。 创建OBS桶和文件夹的操作指导请参见创建桶和新建文件夹。 请确保您使用的OBS与ModelArts在同一区域。 表1 OBS桶文件夹列表 文件夹名称 用途 “obs://test-modelarts/mindspore-gpu/resnet/” 用于存储训练脚本文件。 “obs://test-modelarts/mindspore-gpu/cifar-10-batches-bin/” 用于存储数据集文件。 “obs://test-modelarts/mindspore-gpu/output/” 用于存储训练输出文件。 “obs://test-modelarts/mindspore-gpu/log/” 用于存储训练日志文件。
  • ARM + Ascend 架构的推理基础镜像 表4 TensorFlow AI引擎版本 支持的运行环境 URI 1.15.0 Snt9 swr.{region_id}.myhuaweicloud.com/atelier/tensorflow_1_15_ascend:tensorflow_1.15-cann_5.1.0-py_3.7-euler_2.8.3-aarch64-d910-20220715093657-9446c6a 表5 Pytorch AI引擎版本 支持的运行环境 URI 1.8.1 Snt9 swr.{region_id}.myhuaweicloud.com/atelier/pytorch_1_8_ascend:pytorch_1.8.1-cann_5.1.0-py_3.7-euler_2.8.3-aarch64-d910-20220715093657-9446c6a 表6 MindSpore AI引擎版本 支持的运行环境 URI 1.7.0 Snt9 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-20220715093657-9446c6a
  • X86架构(CPU/GPU)的推理基础镜像 表1 TensorFlow AI引擎版本 支持的运行环境 URI 2.1.0 CPU GPU(cuda10.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-20221121111529-d65d817 1.15.5 CPU GPU(cuda11.4) swr.{region_id}.myhuaweicloud.com/aip/tensorflow_1_15:tensorflow_1.15.5-cuda_11.4-py_3.8-ubuntu_20.04-x86_64-20220524162601-50d6a18 2.6.0 CPU GPU(cuda11.2) swr.{region_id}.myhuaweicloud.com/aip/tensorflow_2_6:tensorflow_2.6.0-cuda_11.2-py_3.7-ubuntu_18.04-x86_64-20220524162601-50d6a18 表2 Pytorch AI引擎版本 支持的运行环境 URI 1.8.0 CPU GPU(cuda10.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-20221118143845-d65d817 1.8.2 CPU GPU(cuda11.1) swr.{region_id}.myhuaweicloud.com/aip/pytorch_1_8:pytorch_1.8.2-cuda_11.1-py_3.7-ubuntu_18.04-x86_64-20220524162601-50d6a18 表3 MindSpore AI引擎版本 支持的运行环境 URI 1.7.0 CPU swr.{region_id}.myhuaweicloud.com/atelier/mindspore_1_7_0:mindspore_1.7.0-cpu-py_3.7-ubuntu_18.04-x86_64-20220702120711-8590b76 1.7.0 GPU(cuda10.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-20220702120711-8590b76 1.7.0 GPU(cuda11.1) swr.{region_id}.myhuaweicloud.com/atelier/mindspore_1_7_0:mindspore_1.7.0-cuda_11.1-py_3.7-ubuntu_18.04-x86_64-20220702120711-8590b76
  • Step1 创建OBS桶和文件夹 在OBS服务中创建桶和文件夹,用于存放样例数据集以及训练代码。需要创建的文件夹列表如表1所示,示例中的桶名称“test-modelarts” 和文件夹名称均为举例,请替换为用户自定义的名称。 创建OBS桶和文件夹的操作指导请参见创建桶和新建文件夹。 请确保您使用的OBS与ModelArts在同一区域。 表1 OBS桶文件夹列表 文件夹名称 用途 “obs://test-modelarts/tensorflow/code/” 用于存储训练脚本文件。 “obs://test-modelarts/tensorflow/data/” 用于存储数据集文件。 “obs://test-modelarts/tensorflow/log/” 用于存储训练日志文件。
  • Step3 准备训练脚本并上传至OBS 准备本案例所需的训练脚本mnist.py,并上传至OBS桶的“obs://test-modelarts/tensorflow/code/”文件夹下。 mnist.py文件内容如下: import argparse import tensorflow as tf parser = argparse.ArgumentParser(description='TensorFlow quick start') parser.add_argument('--data_url', type=str, default="./Data", help='path where the dataset is saved') args = parser.parse_args() mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data(args.data_url) x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10) ]) loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True) model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy']) model.fit(x_train, y_train, epochs=5)
  • Step2 构建成功的镜像注册到镜像管理模块 将Step1 在Notebook中构建一个新镜像中构建成功的自定义镜像注册到镜像管理中,方便后续使用。 登录ModelArts控制台,在左侧导航栏中选择“镜像管理”,单击“注册镜像”,进入注册镜像页面。 输入镜像源地址,选择架构和类型后,单击“立即注册”。 “镜像源”:地址为 swr.cn-north-4-myhuaweicloud.com/custom_test/tensorflow2.1:1.0.0。其中custom_test/tensorflow2.1:1.0.0为8镜像构建脚本中设置的镜像地址。 “架构”:选择X86_64 “类型”:选择CPU 图1 注册镜像 注册完成后,可以在镜像管理页面查看到注册成功的镜像。 父主题: 在开发环境中构建并调试推理镜像
  • Tensorflow框架启动原理 规格和节点个数 下面以选择“GPU: 8*GP-Vnt1 | CPU: 72核 | 内存:512GB”规格为例,介绍在单机和分布式场景下ModelArts规格资源的分配情况。 单机作业时(即选择的节点数为1),ModelArts只会在一个节点上启动一个训练容器,该训练容器独享节点规格的可使用资源。 分布式作业时(即选择的节点数大于1),ModelArts会优先在相同节点上启动一个parameter server(以下简称ps)和一个worker,其中ps将分配一半的CPU和内存资源,即ps拥有“CPU: 36核 | 内存:256GB”的计算资源,worker拥有“GPU: 8*GP-Vnt1 | CPU: 36核 | 内存:256GB”的计算资源。 需要注意的是ps只会分配到CPU和内存资源,而worker除CPU和内存外,还可能分配到加速卡(纯CPU规格除外)。如本例中,每个worker将分配到八张GP Vnt1加速卡,如果ps和worker在相同节点上启动,则磁盘资源由ps和worker共享。 网络通信介绍 单机作业不涉及网络通信情况。 分布式作业的涉及网络通信则可以分为节点内网络通信和节点间网络通信。 节点内网络 节点内网络通信即同一个节点上的ps和woker间的网络通信,又可以分为两种情况:容器网络和主机网络。 在使用公共规格进行训练时,使用的是容器网络。 在使用专属池训练时,如果节点配置的是RoCE网卡,使用的是主机网络;如果节点配置的是Infiniband网卡,使用的是容器网络。 节点间网络 分布式作业存在节点间ps和worker的通信,当前ModelArts主要提供了Infiniband网卡或RoCE网卡,带宽高达100Gb/s。
  • 镜像一:conda3-cuda10.2-cudnn7-ubuntu18.04 表1 conda3-cuda10.2-cudnn7-ubuntu18.04镜像介绍 AI引擎框架 是否使用 GPU (CUDA 版本) URL 包含的依赖项 无 是 (cuda 10.2) swr.{region_id}.myhuaweicloud.com/atelier/user_defined_base:cuda_10.2-ubuntu_18.04-x86_64-20221008154718-2b3e39c 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/user_defined_base:cuda_10.2-ubuntu_18.04-x86_64-20221008154718-2b3e39c 华东-上海一 swr.cn-east-3.myhuaweicloud.com/atelier/user_defined_base:cuda_10.2-ubuntu_18.04-x86_64-20221008154718-2b3e39c 华南-广州 swr.cn-south-1.myhuaweicloud.com/atelier/user_defined_base:cuda_10.2-ubuntu_18.04-x86_64-20221008154718-2b3e39c PyPI 程序包 Ubuntu 软件包 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.21.6 pandas 1.3.5 pillow 9.2.0 pip 20.3.3 psutil 5.9.1 PyYAML 6.0 scipy 1.7.3 tornado 6.2 automake build-essential ca-certificates cmake cpp curl g++ gcc gfortran grep libcudnn7 libcudnn7-dev nginx python3 rpm tar unzip vim wget zip
  • 镜像二:conda3-ubuntu18.04 表2 conda3-ubuntu18.04镜像介绍 AI引擎框架 是否使用 GPU (CUDA 版本) URL 包含的依赖项 无 否 swr.{region_id}.myhuaweicloud.com/atelier/user_defined_base:ubuntu_18.04-x86_64-20221008154718-2b3e39c 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/user_defined_base:ubuntu_18.04-x86_64-20221008154718-2b3e39c 华东-上海一 swr.cn-east-3.myhuaweicloud.com/atelier/user_defined_base:ubuntu_18.04-x86_64-20221008154718-2b3e39c 华南-广州 swr.cn-south-1.myhuaweicloud.com/atelier/user_defined_base:ubuntu_18.04-x86_64-20221008154718-2b3e39c PyPI 程序包 Ubuntu 软件包 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.21.6 pandas 1.3.5 pillow 9.2.0 pip 20.3.3 psutil 5.9.1 PyYAML 6.0 scipy 1.7.3 tornado 6.2 automake build-essential ca-certificates cmake cpp curl g++ gcc gfortran grep nginx python3 rpm tar unzip vim wget zip
  • 统一镜像列表 ModelArts提供了ARM+Ascend规格的统一镜像,包括MindSpore、PyTorch。适用于开发环境,模型训练,服务部署,请参考统一镜像列表。表1、表2所示镜像仅发布在西南-贵阳一区域。 表1 MindSpore 预置镜像 适配芯片 适用范围 mindspore_2.2.0-cann_7.0.1-py_3.9-euler_2.10.7-aarch64-snt9b Ascend snt9b Notebook、训练、推理部署 mindspore_2.1.0-cann_6.3.2-py_3.7-euler_2.10.7-aarch64-snt9b Ascend snt9b Notebook、训练、推理部署 mindspore_2.2.10-cann_7.0.0-py_3.9-hce_2.0.2312-aarch64-snt9b Ascend snt9b Notebook、训练、推理部署 表2 PyTorch 预置镜像 适配芯片 适用范围 pytorch_1.11.0-cann_6.3.2-py_3.7-euler_2.10.7-aarch64-snt9b Ascend snt9b Notebook、训练、推理部署 pytorch_2.1.0-cann_7.0.0-py_3.9-hce_2.0.2312-aarch64-snt9b Ascend snt9b Notebook、训练、推理部署 pytorch_1.11.0-cann_7.0.0-py_3.9-hce_2.0.2312-aarch64-snt9b Ascend snt9b Notebook、训练、推理部署
  • 镜像安全加固 预置的基础镜像中存在cpp、gcc等调试/编译工具,如果您不需要使用这些工具,可以通过运行脚本删除。 创建一个run.sh脚本文件,文件中的代码内容如下。然后在容器中执行sh run.sh命令运行脚本。 #!/bin/bash delete_sniff_compiler() { echo "[+][001] start remove debug tools" rm -rf /usr/bin/readelf rm -rf /usr/bin/gcc-nm #readelf根据需要决定是否删除 #rm -rf /usr/local/Ascend/ascend-toolkit/latest/toolkit/toolchain/hcc/aarch64-target-linux-gnu/bin/readelf rm -rf /usr/bin/gcc rm -rf /usr/bin/cpp rm -rf /usr/bin/objdump echo "[+] complete" } hardening_ssh_config() { sed -i "s/Subsystem/#Subsystem/g" /etc/ssh/sshd_config #关闭sftp服务 sed -i "s/^.MaxAuthTries.*/MaxAuthTries 6/g" /etc/ssh/sshd_config #开启防暴力机制 sed -i "s/^.ClientAliveInterval.*/ClientAliveInterval 300/g" /etc/ssh/sshd_config #开启会话超时机制 systemctl restart /etc/ssh/sshd_config chmod 600 /home/ma-user/.ssh/id_rsa* #收缩公私钥文件权限 chmod 600 /home/ma-user/etc/ssh_host_rsa_key* #收缩公私钥文件权限 sed -i "s/ma-user/#ma-user/g" /etc/sudoers #不允许ma-user用户免密执行所有命令 } delete_sniff_compiler hardening_ssh_config Ascend镜像中存在hcc编译器,具体说明请参见昇腾社区提供的HCC编译器说明文档。
  • 使用特定的标签 当镜像没有指定标签时,将默认使用latest标签。因此,FROM ubuntu指令等同于FROM ubuntu:latest。当镜像更新时,latest标签会指向不同的镜像,这时构建镜像有可能失败。 如下示例中使用16.04作为标签。 FROM ubuntu:16.04 RUN apt-get update && apt-get install -y nodejs ADD . /app RUN cd /app && npm install CMD npm start
  • 删除多余文件 假设更新了apt-get源,下载解压并安装了一些软件包,它们都保存在“/var/lib/apt/lists/”目录中。 但是,运行应用时Docker镜像中并不需要这些文件。因此最好将它们删除,因为它会使Docker镜像变大。 示例Dockerfile中,删除“/var/lib/apt/lists/”目录中的文件。 FROM ubuntu:16.04 RUN apt-get update \ && apt-get install -y nodejs \ && rm -rf /var/lib/apt/lists/* ADD . /app RUN cd /app && npm install CMD npm start
  • 选择合适的基础镜像 在示例中,选择了ubuntu作为基础镜像。但是只需要运行node程序,没有必要使用一个通用的基础镜像,node镜像应该是更好的选择。 更好的选择是alpine版本的node镜像。alpine是一个极小化的Linux发行版,只有4MB,这让它非常适合作为基础镜像。 FROM node:7-alpine ADD . /app RUN cd /app && npm install CMD npm start
  • 使用VOLUME管理数据库逻辑卷 VOLUME指令用于暴露任何数据库存储文件、配置文件或容器创建的文件和目录。强烈建议使用VOLUME来管理镜像中的可变部分和用户可以改变的部分。 下面示例中填写一个媒体目录。 FROM node:7-alpine ENV PROJECT_DIR=/app WORKDIR $PROJECT_DIR COPY package.json $PROJECT_DIR RUN npm install COPY . $PROJECT_DIR ENV MEDIA_DIR=/media \ APP_PORT=3000 VOLUME $MEDIA_DIR EXPOSE $APP_PORT ENTRYPOINT ["./entrypoint.sh"] CMD ["start"]
  • 不要在构建中升级版本 为了降低复杂性、减少依赖、减小文件大小、节约构建时间,您应该避免安装任何不必要的包。例如,不要在数据库镜像中包含一个文本编辑器。 如果基础镜像中的某个包过时了,但您不知道具体是哪一个包,您应该联系它的维护者。如果您确定某个特定的包,比如foo需要升级,使用apt-get install -y foo就行,该指令会自动升级foo包。 apt-get upgrade会使得镜像构建过程非常不稳定,在构建时不确定哪些包会被安装,此时可能会产生不一致的镜像。因此通常会删掉apt-get upgrade。 删掉apt-get upgrade后,Dockerfile如下: FROM ubuntu ADD . /app RUN apt-get update RUN apt-get install -y nodejs RUN cd /app && npm install CMD npm start
共100000条