华为云用户手册

  • Step2 创建OBS桶 ModelArts使用 对象存储服务 (Object Storage Service,简称OBS)进行数据存储以及模型的备份和快照,实现安全、高可靠和低成本的存储需求。因此,在使用ModelArts之前通常先创建一个OBS桶,然后在OBS桶中创建文件夹用于存放数据。 本文档需要将运行代码以及输入输出数据存放OBS,请提前创建OBS(参考创建OBS桶),例如桶名:sdxl-train。并在该桶下创建文件夹目录用于后续存储代码使用,例如:code。
  • Step7 创建训练作业 创建训练作业,填下如下参数。 创建方式:选择自定义算法,启动方式选择自定义,然后选择上传到SWR的 自定义镜像 。 代码目录:选择上传到OBS的代码文件夹,例如/sdxl-train/code。若用户需要修改代码文件,可修改OBS桶中代码文件,创建训练作业时,会将OBS的code目录复制到训练容器的/home/ma-user/sdxl-train/user-job-dir/目录下,覆盖容器中原有的code目录。 启动命令:直接运行启动脚本文件diffusers_finetune_train.sh。 sh /home/ma-user/sdxl-train/user-job-dir/code/diffusers_finetune_train.sh 本地代码目录:保持默认即可。 工作目录:选择代码文件目录,例如/home/ma-user/sdxl-train/user-job-dir/code/。 输出:单击“增加训练输出”,将模型保存到OBS中。参数名称为output,数据存储位置选择OBS桶中制定文件夹,例如sdxl-train/checkpoint,获取方式选择环境变量,/home/ma-user/modelarts/outputs/output_0下的模型文件会保存到OBS中。 图4 选择镜像 资源池:选择专属资源池,规格选择Ascend: 8*ascend-snt9b。如果需要多机训练,增加计算节点个数即可,启动脚本文件diffusers_finetune_train.sh支持多机训练。 图5 选择资源池规格 作业日志路径:选择输出日志到OBS的指定目录。 图6 选择作业日志路径 填写参数完成后,提交创建训练任务,训练完成后,作业状态会显示为已完成。 图7 训练完成
  • Step4 下载模型依赖包 请在如下链接中下载好模型依赖包。 下载stable-diffusion-xl-base-1.0,官网下载地址:https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/tree/main 下载vae-fp16-fix,官网下载地址:https://huggingface.co/madebyollin/sdxl-vae-fp16-fix/tree/main
  • 获取软件和镜像 表1 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-3rdAIGC-6.3.905-xxx.zip 文件名中的xxx表示具体的时间戳,以包名发布的实际时间为准。 获取路径:Support-E 如果没有软件下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像包 swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc2-py_3.9-hce_2.0.2312-aarch64-snt9b-20240528150158-b521cc0 SWR上拉取 表2 模型镜像版本 模型 版本 CANN cann_8.0.rc2 PyTorch 2.1.0
  • Step3 创建OBS桶并上传文件 将上一步中的数据和代码文件、推理代码文件与推理配置文件,从本地上传到OBS桶中。在ModelArts上运行训练作业时,需要从OBS桶中读取数据和代码文件。 登录OBS管理控制台,按照如下示例创建OBS桶和文件夹。 {OBS桶} # OBS对象桶,用户可以自定义名称,例如:test-modelarts-xx -{OBS文件夹} # OBS文件夹,自定义名称,此处举例为pytorch - mnist-data # OBS文件夹,用于存放训练数据集,可以自定义名称,此处举例为mnist-data - mnist-code # OBS文件夹,用于存放训练脚本train.py,可以自定义名称,此处举例为mnist-code - infer # OBS文件夹,用于存放推理脚本customize_service.py和配置文件config.json - mnist-output # OBS文件夹,用于存放训练输出模型,可以自定义名称,此处举例为mnist-output 创建的OBS桶所在区域和后续使用ModelArts必须在同一个区域Region,否则会导致训练时找不到OBS桶。具体操作可参见查看OBS桶与ModelArts是否在同一区域。 创建OBS桶时,桶的存储类别请勿选择“归档存储”,归档存储的OBS桶会导致模型训练失败。 上传Step1 准备训练数据中下载的MNIST数据集压缩包文件到OBS的“mnist-data”文件夹中。 上传数据到OBS中时,请不要加密,否则会导致训练失败。 文件无需解压,直接上传压缩包至OBS中即可。 上传训练脚本“train.py”到“mnist-code”文件夹中。 上传推理脚本“customize_service.py”和推理配置文件“config.json”到“mnist-code”的“infer”文件中。
  • Step6 预测结果 在“在线服务”页面,单击在线服务名称,进入服务详情页面。 单击“预测”页签,请求类型选择“multipart/form-data”,请求参数填写“image”,单击“上传”按钮上传示例图片,然后单击“预测”。 预测完成后,预测结果显示区域将展示预测结果,根据预测结果内容,可识别出此图片的数字是“2”。 本案例中使用的MNIST是比较简单的用做demo的数据集,配套算法也是比较简单的用于教学的神经网络算法。这样的数据和算法生成的模型仅适用于教学模式,并不能应对复杂的预测场景。即生成的模型对预测图片有一定范围和要求,预测图片必须和训练集中的图片相似(黑底白字)才可能预测准确。 图8 示例图片 图9 预测结果展示
  • Step1 准备训练数据 本案例使用的数据是MNIST数据集,您可以在浏览器中搜索“MNIST数据集”下载如图3所示的4个文件。 图3 MNIST数据集 “train-images-idx3-ubyte.gz”:训练集的压缩包文件,共包含60000个样本。 “train-labels-idx1-ubyte.gz”:训练集标签的压缩包文件,共包含60000个样本的类别标签。 “t10k-images-idx3-ubyte.gz”:验证集的压缩包文件,共包含10000个样本。 “t10k-labels-idx1-ubyte.gz”:验证集标签的压缩包文件,共包含10000个样本的类别标签。
  • 操作流程 开始使用如下样例前,请务必按准备工作指导完成必要操作。 Step1 准备训练数据:下载MNIST数据集。 Step2 准备训练文件和推理文件:编写训练与推理代码。 Step3 创建OBS桶并上传文件:创建OBS桶和文件夹,并将数据集和训练脚本,推理脚本,推理配置文件上传到OBS中。 Step4 创建训练作业:进行模型训练。 Step5 推理部署:训练结束后,将生成的模型导入ModelArts用于创建模型,并将模型部署为在线服务。 Step6 预测结果:上传一张手写数字图片,发起预测请求获取预测结果。 Step7 清除资源:运行完成后,停止服务并删除OBS中的数据,避免不必要的扣费。
  • 准备工作 已 注册华为账号 并开通华为云,且在使用ModelArts前检查账号状态,账号不能处于欠费或冻结状态。 配置委托访问授权 ModelArts使用过程中涉及到OBS、SWR、IEF等服务交互,首次使用ModelArts需要用户配置委托授权,允许访问这些依赖服务。 使用华为云账号登录ModelArts管理控制台,在左侧导航栏单击“权限管理”,进入“权限管理”页面,单击“添加授权”。 在弹出的“添加授权”窗口中,选择: 授权对象类型:所有用户 委托选择:新增委托 权限配置:普通用户 选择完成后勾选“我已经详细阅读并同意《ModelArts服务声明》”,然后单击“创建”。 图1 配置委托访问授权 完成配置后,在ModelArts控制台的权限管理列表,可查看到此账号的委托配置信息。 图2 查看委托配置信息
  • 本地构建镜像 以linux x86_x64架构的主机为例,您可以购买相同规格的E CS 或者应用本地已有的主机进行自定义镜像的制作。 购买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”查看您构建的自定义镜像。
  • 将自定义镜像创建为模型 参考从容器镜像中选择元模型导入元模型,您需要特别关注以下参数: 元模型来源:选择“从容器镜像中选择” 容器镜像所在的路径:选择已制作好的自有镜像 图4 选择已制作好的自有镜像 容器调用接口:指定模型启动的协议和端口号。请确保协议和端口号与自定义镜像中提供的协议和端口号保持一致。 镜像复制:选填,选择是否将容器镜像中的模型镜像复制到ModelArts中。 健康检查:选填,用于指定模型的健康检查。仅当自定义镜像中配置了健康检查接口,才能配置“健康检查”,否则会导致模型创建失败。 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" } } ]
  • 权限列表 子账号的权限,由主用户来控制,主用户通过 IAM 的权限配置功能设置用户组的权限,从而控制用户组内的子账号的权限。此处的授权列表均按照ModelArts和其他服务的系统预置策略来举例。 表1 服务授权列表 待授权的服务 授权说明 IAM权限设置 是否必选 ModelArts 授予子账号使用ModelArts服务的权限。 ModelArts CommonOperations没有任何专属资源池的创建、更新、删除权限,只有使用权限。推荐给子账号配置此权限。 ModelArts CommonOperations 必选 如果需要给子账号开通专属资源池的创建、更新、删除权限,此处要勾选ModelArts FullAccess,请谨慎配置。 ModelArts FullAccess 可选 ModelArts FullAccess权限和ModelArts CommonOperations权限只能二选一,不能同时选。 OBS对象存储服务 授予子账号使用OBS服务的权限。ModelArts的数据管理、开发环境、训练作业、模型推理部署均需要通过OBS进行数据中转。 OBS OperateAccess 必选 SWR容器镜像 仓库 授予子账号使用SWR服务权限。ModelArts的自定义镜像功能依赖 镜像服务 SWR FullAccess权限。 SWR OperateAccess 必选 密钥管理服务 当子账号使用ModelArts Notebook的SSH远程功能时,需要配置子账号密钥管理服务的使用权限。 KMS CMKFullAccess 可选 IEF智能边缘平台 授予子账号智能边缘平台使用权限,ModelArts的边缘服务依赖智能边缘平台,要求配置Tenant Administrator权限。 Tenant Administrator 可选 CES 云监控 授予子账号使用CES 云监控服务 的权限。通过CES 云监控 可以查看ModelArts的在线服务和对应模型负载运行状态的整体情况,并设置监控告警。 CES FullAccess 可选 SMN 消息服务 授予子账号使用SMN消息服务的权限。SMN 消息通知 服务配合CES监控告警功能一起使用。 SMN FullAccess 可选 VPC虚拟私有云 子账号在创建ModelArts的专属资源池过程中,如果需要开启自定义网络配置,需要配置VPC权限。 VPC FullAccess 可选 SFS弹性文件服务 授予子账号使用SFS服务的权限,ModelArts的专属资源池中可以挂载SFS系统作为开发环境或训练的存储。 SFS Turbo FullAccess SFS FullAccess 可选
  • 准备工作 注册华为账号并开通华为云、实名认证 注册华为账号并开通华为云 进行实名认证 配置委托访问授权 ModelArts使用过程中涉及到OBS、SWR、IEF等服务交互,首次使用ModelArts需要用户配置委托授权,允许访问这些依赖服务。 使用华为云账号登录ModelArts管理控制台,在左侧导航栏单击“权限管理”,进入“权限管理”页面,单击“添加授权”。 在弹出的“访问授权”窗口中, 授权对象类型:所有用户 委托选择:新增委托 权限配置:普通用户 选择完成后勾选“我已经详细阅读并同意《ModelArts服务声明》”,然后单击“创建”。 完成配置后,在ModelArts控制台的权限管理列表,可查看到此账号的委托配置信息。
  • 准备工作 本地已安装2019.2-2023.2之间(包含2019.2和2023.2)版本的PyCharm专业版工具,推荐Windows版本,社区版或专业版均可,请单击PyCharm工具下载地址获取工具并在本地完成安装。 使用PyCharm ToolKit远程连接Notebook开发环境,仅限PyCharm专业版。 使用PyCharm ToolKit提交训练作业,社区版和专业版都支持。 已注册华为账号并开通华为云,且在使用ModelArts前检查账号状态,账号不能处于欠费或冻结状态。 已创建当前使用账号的访问密钥,并获得对应的AK和SK。如果未创建,请参见创建访问密钥(AK和SK)。 当前账号已完成访问授权的配置。如未完成,请参考使用委托授权。
  • 步骤2:使用PyCharm进行本地开发调试 下载代码至本地。 本案例中,以图像分类模型resnet50模型为例,路径为“./models/official/cv/resnet/” # 在本地电脑Terminal下载代码至本地 git clone https://gitee.com/mindspore/models.git -b v1.5.0 图3 下载代码至本地 配置本地PC开发环境。 修改“models/official/cv/resnet/requirements.txt”文件,改为: numpy==1.17.5 scipy==1.5.4 easydict==1.9 执行pip命令安装: # 在PyCharm的Terminal安装mindspore pip install mindspore==1.7.0 --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple # 在PyCharm的Terminal安装resnet依赖 pip install -r .\official\cv\resnet\requirements.txt --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple 图4 安装resnet依赖 准备数据集。 本样例使用的数据集为类别数为五类的花卉识别数据集,下载数据集并解压数据到工程目录。新建dataset文件夹,将解压后数据集保存在dataset文件夹下。 图5 准备数据集 配置PyCharm解释器和入参。 单击右上角“Current File”,选择“Edit Configuration”,打开“Run/Debug Configuration”对话框。在对话框中单击“+”,选择“Python”。 图6 前往PyCharm解释器 “Script path”选择train.py文件,“Parameters”命令如下所示,并选择Python解释器,然后单击“OK”: --net_name=resnet50 --dataset=imagenet2012 --data_path=../../../dataset/flower_photos/ --class_num=5 --config_path=./config/resnet50_imagenet2012_config.yaml --epoch_size=1 --device_target="CPU" 图7 配置PyCharm解释器 根据README说明文档,配置Parameter参数device_target="CPU"表示CPU环境运行,device_target="Ascend"表示在Ascend环境运行。 本地代码开发调测。 一般本地CPU算力较低并且内存较小,可能出现内存溢出的报错,因此可以把“models/official/cv/resnet/config/resnet50_imagenet2012_config.yaml”的“batch_size”由“256”改为“32”,使得训练作业可以快速运行。 图8 修改batch_size AI开发过程中的数据集开发及模型开发是和硬件规格无关的,而且这一部分的开发耗时是最长的,因此可以先在本地PC的CPU环境进行数据集和模型开发调试。 本例中,因为样例代码已经支持在CPU上进行训练,因此用户能够在CPU上完成整个训练流程。如果代码只支持在GPU或者Ascend上训练,那么可能会报错,需要使用Notebook进行云端调试。 设置断点后单击“调试”,可实现代码逐步调试,查看中间变量值。 图9 “调试”按钮 图10 通过设置断点实现代码调试 可单击“运行”按钮,通过日志观察是否能正常训练。 图11 “运行”按钮 图12 训练日志
  • 第三方案例列表 第三方案例来源为华为云开发者社区“云驻计划”。由于ModelArts产品的持续更新和迭代,第三方案例中的界面和步骤可能因时效性而与最新产品有所差异,仅供学习和参考。 表5 第三方案例列表 分类 文章名称 作者 Standard自动学习 2步打通ModelArts和Astro实现AI应用落地 胡琦 Standard开发环境 想不想让一张静态的照片动起来 林欣 基于TensorFlow训练轻量化ssdlite_mbv2人脸手机检测模型 AI练习生 基于ModelArts的手写数字识别 AXYZdong AI 文字编辑图片 instruct-pix2pix 案例 AXYZdong Standard推理部署 上线二维码检测识别服务 林欣 使用ModelArts对8类常见生活垃圾进行分类 福州司马懿 使用ModelArts搭建"花卉种类识别"服务 福州司马懿
  • ModelArts Standard开发环境案例 表2 Notebook样例列表 样例 镜像 对应功能 场景 说明 将Notebook的Conda环境迁移到SFS磁盘 - 环境迁移 开发环境 本案例介绍如何将Notebook的Conda环境迁移到SFS磁盘上。 使用ModelArts PyCharm插件调试训练ResNet50图像分类模型 MindSpore PyCharm ToolKit工具 目标检测 本案例介绍如何在本地进行MindSpore模型开发,并将模型迁移至ModelArts训练。 使用ModelArts VSCode插件调试训练ResNet50图像分类模型 MindSpore VS Code Toolkit工具 目标检测 本案例以Ascend Model Zoo为例,介绍如何通过VS Code插件及ModelArts Notebook进行云端数据调试及模型开发。
  • ModelArts Standard自动学习案例 表1 自动学习样例列表 样例 对应功能 场景 说明 口罩检测 自动学习 物体检测 基于AI Gallery口罩数据集,使用ModelArts自动学习的物体检测算法,识别图片中的人物是否佩戴口罩。 垃圾分类 自动学习 图像分类 该案例基于华为云AI开发者社区AI Gallery中的数据集资产,让零AI基础的开发者完成“图像分类”的AI模型的训练和部署。
  • ModelArts Standard模型训练案例 表3 自定义算法样例列表 样例 镜像 对应功能 场景 说明 使用ModelArts Standard自定义算法实现手写数字识别 PyTorch 自定义算法 手写数字识别 使用用户自己的算法,训练得到手写数字识别模型,并部署后进行预测。 从0制作自定义镜像并用于训练(PyTorch+CPU/GPU) PyTorch 镜像制作 自定义镜像训练 - 此案例介绍如何从0到1制作镜像,并使用该镜像在ModelArts平台上进行训练。镜像中使用的AI引擎是PyTorch,训练使用的资源是CPU或GPU。 从0制作自定义镜像并用于训练(MPI+CPU/GPU) MPI 镜像制作 自定义镜像训练 - 此案例介绍如何从0到1制作镜像,并使用该镜像在ModelArts平台上进行训练。镜像中使用的AI引擎是MPI,训练使用的资源是CPU或GPU。 从0制作自定义镜像并用于训练(Tensorflow+GPU) Tensorflow 镜像制作 自定义镜像训练 - 此案例介绍如何从0到1制作镜像,并使用该镜像在ModelArts平台上进行训练。镜像中使用的AI引擎是Tensorflow,训练使用的资源是GPU。 从0制作自定义镜像并用于训练(MindSpore+Ascend) MindSpore 镜像制作 自定义镜像训练 - 此案例介绍如何从0到1制作镜像,并使用该镜像在ModelArts平台上进行训练。镜像中使用的AI引擎是MindSpore,训练使用的资源是NPU。
  • ModelArts Standard推理部署 表4 推理部署列表 样例 对应功能 场景 说明 基于ModelArts Standard一键完成商超商品识别模型部署 在线服务 物体检测 此案例以“商超商品识别”模型为例,完成从AI Gallery订阅模型,到ModelArts一键部署为在线服务的 免费体验 过程。 第三方推理框架迁移到ModelArts Standard推理自定义引擎 第三方框架 推理部署 - ModelArts支持第三方的推理框架在ModelArts上部署,本文以TFServing框架、Triton框架为例,介绍如何迁移到推理自定义引擎。
  • 文生视频场景 样例 场景 说明 CogVideoX训练推理基于DevServer适配PyTorch NPU指导 Open-Sora1.2基于DevServer适配PyTorch NPU训练推理指导 Open-Sora-Plan1.0基于DevServer适配PyTorch NPU训练推理指导 CogVideo模型、Open-Sora模型训练推理 介绍CogVideo、Open-Sora-Plan、Open-Sora1.2模型基于ModelArts DevServer的训练推理过程,训练使用PyTorch框架和昇腾NPU计算资源。 训练后的模型可用于推理部署,应用于文生视频场景。
  • LLM大语言模型训练推理场景 样例 场景 说明 主流开源大模型基于DevServer适配ModelLink PyTorch NPU训练指导 主流开源大模型基于DevServer适配LlamaFactory PyTorch NPU训练指导 预训练、SFT全参微调训练、LoRA微调训练 介绍主流的开源大模型Llama系列、Qwen系列、Yi系列、Baichuan系列、ChatGLM系列等基于ModelArts DevServer的训练过程,训练使用PyTorch框架和昇腾NPU计算资源。训练后的模型可用于推理部署,搭建大模型问答助手。 主流开源大模型基于Standard+OBS适配PyTorch NPU训练指导 主流开源大模型基于Standard+OBS+SFS适配PyTorch NPU训练指导 预训练、SFT全参微调训练、LoRA微调训练 介绍主流的开源大模型Llama系列、Qwen系列、Yi系列、Baichuan系列、ChatGLM系列等基于ModelArts Standard的训练过程,训练使用PyTorch框架和昇腾NPU计算资源。 训练后的模型可用于推理部署,搭建大模型问答助手。 主流开源大模型基于DevServer适配PyTorch NPU推理指导 推理部署、推理性能测试、推理精度测试、推理模型量化 介绍主流的开源大模型Llama系列、Qwen系列、Yi系列、Baichuan系列、ChatGLM系列等基于ModelArts DevServer的推理部署过程,推理使用PyTorch框架和昇腾NPU计算资源。 启动推理服务后,可用于搭建大模型问答助手。 主流开源大模型基于Standard适配PyTorch NPU推理指导 推理部署、推理性能测试、推理精度测试、推理模型量化 介绍主流的开源大模型Llama系列、Qwen系列、Yi系列、Baichuan系列、ChatGLM系列等基于ModelArts Standard的推理部署过程,推理使用PyTorch框架和昇腾NPU计算资源。 启动推理服务后,可用于搭建大模型问答助手。
  • AIGC模型训练推理场景 样例 场景 说明 SDXL基于Standard适配PyTorch NPU的LoRA训练指导 SD1.5&SDXL Diffusers框架基于DevServer适配PyTorch NPU训练指导 SD1.5&SDXL Koyha框架基于DevServer适配PyTorch NPU训练指导 SDXL、SD1.5模型训练 介绍AIGC模型SDXL、SD1.5基于ModelArts DevServer的训练过程,训练使用PyTorch框架和昇腾NPU计算资源。训练后的模型可用于推理部署,应用于文生图场景。 SD1.5&SDXL ComfyUI、WebUI、Diffusers套件适配PyTorch NPU的推理指导 SD3 Diffusers框架基于DevServer适配PyTorch NPU推理指导 SDXL、SD1.5模型推理 介绍AIGC模型SDXL、SD1.5基于ModelArts DevServer的推理过程,推理使用PyTorch框架和昇腾NPU计算资源。 启动推理服务后,可应用于文生图场景。 Qwen-VL基于DevServer适配PyTorch NPU的Finetune训练指导 Qwen-VL基于DevServer适配Pytorch NPU的推理指导 Qwen-VL模型训练推理 介绍Qwen-VL模型基于ModelArts DevServer的训练过程,训练使用PyTorch框架和昇腾NPU计算资源。 训练后的模型可用于推理部署,应用于大模型对话场景。 LLaVA模型基于DevServer适配PyTorch NPU预训练指导 LLaVA模型基于DevServer适配PyTorch NPU推理指导 LLaVA模型训练推理 介绍LLaVA模型基于ModelArts DevServer的训练过程,训练使用PyTorch框架和昇腾NPU计算资源。 训练后的模型可用于推理部署,应用于大模型对话场景。 Open-Clip基于DevServer适配PyTorch NPU训练指导 Open-Clip模型训练 介绍Open-Clip模型基于ModelArts DevServer的训练过程,训练使用PyTorch框架和昇腾NPU计算资源。 应用于AIGC和多模态视频编码器。
  • 数字人场景 样例 场景 说明 Wav2Lip推理基于DevServer适配PyTorch NPU推理指导 Wav2Lip训练基于DevServer适配PyTorch NPU训练指导 Wav2Lip,人脸说话视频模型,训练、推理 Wav2Lip是一种基于对抗生成网络的由语音驱动的人脸说话视频生成模型。主要应用于数字人场景。不仅可以基于静态图像来输出与目标语音匹配的唇形同步视频,还可以直接将动态的视频进行唇形转换,输出与输入语音匹配的视频,俗称“对口型”。该技术的主要作用就是在将音频与图片、音频与视频进行合成时,口型能够自然。 案例主要介绍如何基于ModelArts DevServer上的昇腾NPU资源进行模型训练推理。
  • 步骤二:创建训练数据集 单击口罩检测小数据集进入数据集详情页,单击右侧“下载”。 在弹出的窗口中选择云服务区域,例如该案例选择云服务区域为“华北-北京四”,单击“确定”进入下载详情页。 在“下载详情”页面,填写参数。 下载方式:ModelArts数据集。 目标区域:华北-北京四,目标区域须与上一步中选择的云服务区域保持一致。 数据类型:图片。 数据集输入位置:用来存放源数据集信息,例如本案例中从Gallery下载的数据集。单击图标选择您的OBS桶下的任意一处目录,但不能与输出位置为同一目录。 数据集输出位置:用来存放输出的数据标注的相关信息,或版本发布生成的Manifest文件等。单击图标选择OBS桶下的空目录,且此目录不能与输入位置一致,也不能为输入位置的子目录。 名称:创建数据集名称,为方便后续创建物体检测项目选择对应的数据集,建议您的数据集名称具有可识别性。 描述:描述数据集详细信息。 图1 下载详情 确认无误后单击右下角“确定”。 系统会跳转到我的下载页面,单击按钮,查看下载进度,等待数据集下载完成(下载完成大约需要5分钟,请耐心等待)。单击展开下载详情,可以查看该数据集的“目标位置”。 查看数据集是否已导入ModelArts。 返回ModelArts管理控制台,在左侧导航栏选择“数据集”,默认进入数据集新版页面。在新版数据集列表页,单击数据集名称左侧的,展开数据集,查看“导入状态”,导入状态为“导入完成”代表示数据集导入成功,且数据集正常。 数据集下载完成后,请务必先检查数据集是否已经导入成功,如果数据集还未成功导入,创建自动学习物体检测项目后数据标注节点会报错。 图2 数据标注节点报错
  • 步骤四:运行工作流 在自动学习的运行总览页面,会产生一条工作流。工作流会自动从数据标注节点开始,依次运行数据集版本发布、数据校验、物体检测、模型注册、服务部署等节点,直至工作流全部运行完成。您需要做的是: 在数据标注节点,待数据标注节点变为橘色即为“等待操作”状态,双击数据标注节点,打开数据标注节点的运行详情页面。前往实例详情页确认所有图片是否都标注完成,确认无误后,回到工作流页面单击“继续运行”。 在“确认是否继续允许”的弹窗中,单击“确定”,工作流会继续从数据标注节点依次运行到服务部署节点。该段时间不需要用户做任何操作。 当工作流运行到“服务部署”节点,“服务部署”节点会变成橙色,双击“服务部署”节点。在服务部署页签中,可以看到状态变为了“等待输入”。 需要选择填写以下两个参数,其他参数均为默认值,保持不变。 计算节点规格:根据您的实际需求选择相应的规格。 是否自动停止:为避免资源浪费,建议打开自动停止开关,根据您的实际需要,选择自动停止时间,也可以自定义自动停止的时间。 图3 选择计算节点规格 图4 设置自动停止 参数填写完毕之后,单击运行状况右边的“继续运行”,单击确认弹窗中的“确定”即可继续完成工作流的运行。
  • 步骤三:创建自动学习物体检测项目 确保数据集创建完成且可正常使用后,在ModelArts控制台,左侧导航栏选择“自动学习”默认进入新版自动学习页面,选择物体检测项目,单击“创建项目”。 进入“创建物体检测”页面后,填写相关参数。 计费模式:默认按需计费。 名称:自行创建项目名称。 描述:自行描述项目详情,例如口罩检测。 数据集:下拉选择已下载的数据集(步骤2中已成功导入的数据集,默认为下拉数据集列表中的第一个数据集)。 输出路径:选择步骤2的3中的数据集输出位置。 训练规格:根据您的实际需要选择对应的训练规格。 确认无误后单击右下角“创建项目”可自动跳转至自动学习的运行总览页面。
  • 使用Advisor工具分析生成调优建议 关于Advisor使用及安装过程请参见昇腾社区Gitee。最后生成导出的各类场景的建议包含以下两种: Terminal日志信息的概览建议。 包含Detail信息及修改示例的HTML信息。 按照建议信息做如下修改: 亲和优化器使能,在train.py中修改优化器为apex混合精度模式下的DDP优化方式(修改点:注释第161和167行,增加第168~170行)。 二进制调优使能,减少算子编译耗时,在train.py头文件导入之后添加 (修改点:增加第37行)。 torch_npu.npu.set_compile_mode(jit_compile=False) AICPU算子调优 ,Double类型输入切换成为Float减少cast算子调用耗时,修改diffusion/gaussian_diffusion.py (修改点:注释第871行,增加第872行)。 父主题: 性能调优
  • 使用Msprobe工具分析偏差 观察上一章Loss趋势,在首个Step有较小偏差,所以对第一个Step进行比对分析。此处使用Msprobe的整网Dump和比对分析功能。 首先安装社区Msprobe工具,命令如下: pip install mindstudio-probe 使能工具进行数据Dump分析。本实验可在train.py中如下两处添加使能代码: 其中config.json的内容如下: { "task": "statistics", "dump_path": "/home/data_dump", "rank": [], "step": [0], "level": "L1", "seed": 1234, "is_deterministic": false, "enable_dataloader": false, "statistics": { "scope": [], "list": [], "data_mode": ["all"], "summary_mode": "statistics" } } 这里Step指定为0表示只对首个Step进行数据Dump。task指定为statistics表示使用统计量模式,该模式下针对整网训练API输入输出保存最大值、最小值、均值等统计量信息比对,落盘数据量较小。GPU和NPU环境依次进行数据Dump,正常执行结束标识如下图回显Exception: msprobe: exit after iteration 0。 创建如下compare.json文件。 { "npu_path": "./npu_dump/dump.json", "bench_path": "./bench_dump/dump.json", "stack_path": "./npu_dump/stack.json", "is_print_compare_log": true } 指定对应Dump数据目录后进行比对分析。 msprobe -f pytorch compare -i ./compare.json -o ./output -s 生成CSV分析表格之后进行分析,该问题第一个偏差来源如下: Tensor.__getitem__.0 在forward阶段的第一个输入存在偏差,追溯输入来源发现是torch.randint()函数在device侧随机初始化(下图第214行),由于device侧随机性无法通过seed等自动化方式固定,先通过切换CPU侧计算初始化之后再切回device侧。在train.py中做如下图第215行代码修改。 重新训练Dump比对分析后续计算是否存在偏差。比对之后发现:Tensor.__mul__.2在forward计算阶段的第一个input存在偏差。 追溯代码实现是下图中noise变量使用torch.rand_like ()作noise变量的初始化 (下图第730行)。由于torch.rand_like()该函数会根据输入的input构造同样size、dtype、device、layout信息的数据,详情请参见Pytorch docs介绍。所以同样是在device侧做变量初始化引入精度偏差,在diffusion/gaussian_diffusion.py中用等CPU侧初始化实现替换完成计算之后再切回device进行计算(下图第731行)。 然后再比对分析发现所有API计算都已对齐结果,转而查看Loss对齐情况。 父主题: 精度对齐
  • 训练迁移适配 完成环境准备之后,本节将详细介绍Dit模型训练迁移过程。 执行以下命令,下载代码。 git clone https://github.com/facebookresearch/DiT.git cd Dit 执行以下命令,安装依赖项。 pip install diffusers==0.28.0 accelerate==0.30.1 timm==0.9.16 准备数据集。 下载Kaggle官网提供的imagenet-mini数据集,解压之后文件大小4.1GB。该数据集是从[imagenet-2012]数据集中筛选的少量数据集。 准备预训练权重。 下载Hugging Face权重。 迁移适配。 入口函数train.py导入自动迁移接口。 执行以下命令,导入自动迁移接口。 import torch_npu from torch_npu.contrib import transfer_to_npu 将预训练模型指定为实际下载路径。 开始训练。 单卡训练启动方式: torchrun --nnodes=1 --nproc_per_node=1 train.py --model DiT-XL/2 --data-path imagenet/train --global-batch-size 16 多卡训练启动方式: torchrun --nnodes=1 --nproc_per_node=8 train.py --model DiT-XL/2 --data-path imagenet/train --global-batch-size 128 正常训练回显日志: 父主题: Dit模型Pytorch迁移与精度性能调优
共100000条