华为云用户手册

  • 前提条件 创建一个Notebook实例,并开启远程SSH开发,配置远程访问IP白名单。该实例状态必须处于“运行中”,具体参见创建Notebook实例章节。 在Notebook实例详情页面获取开发环境访问地址(例如:dev-modelarts-cnnorth4.huaweicloud.com)和端口号。 图1 Notebook实例详情页面 准备好密钥对文件。 密钥对在用户第一次创建时,自动下载,之后使用相同的密钥时不会再有下载界面(用户一定要保存好),或者每次都使用新的密钥对。
  • 安装VS Code软件 使用VS Code连接开发环境时,首先需要安装VS Code软件。 VS Code下载方式: 下载地址: https://code.visualstudio.com/updates/v1_85 图1 VS Code的下载位置 VS Code版本要求: 建议用户使用VS Code 1.85.2版本或者最新版本进行远程连接。 VS Code安装指导如下: 图2 Windows系统下VS Code安装指导 Linux系统下,执行命令sudo dpkg -i code_1.85.2-1705561292_amd64.deb安装。 Linux系统用户,需要在非root用户进行VS Code安装。
  • 前提条件 本地已安装2019.2及以上版本的PyCharm专业版。SSH远程调试功能只限PyCharm专业版。 创建一个Notebook实例,并开启远程SSH开发。该实例状态必须处于“运行中”,具体参见创建Notebook实例章节。 在Notebook实例详情页面获取开发环境IP地址(例如:dev-modelarts-cnnorth4.huaweicloud.com)和端口号。 图1 Notebook实例详情页面 准备好密钥对。 密钥对在用户第一次创建时,自动下载,之后使用相同的密钥时不会再有下载界面(用户一定要保存好),或者每次都使用新的密钥对。
  • Step5 在开发环境中调试代码 由于已经连接至云端开发环境,此时可以方便地在本地PyCharm中编码、调测并运行。实际运行环境为云上开发环境,资源为云上昇腾AI处理器资源。可以做到本地编写修改代码,直接在云上环境运行。 像本地运行代码一样,直接单击运行按钮运行代码即可,此时虽然是在本地IDE单击的运行按钮,实际上运行的是云端开发环境里的代码,日志可以回显在本地的日志窗口。 图5 调试代码 也可以单击右上角的Run/Debug Configuration来设置运行的参数。 图6 设置运行参数 当需要调试代码时,可以直接打断点,然后使用debug方式运行程序。 图7 代码打断点 图8 Debug方式调试 此时可以进入debug模式,代码运行暂停在该行,且可以查看变量的值。 图9 Debug模式 使用debug方式调试代码的前提是本地的代码和云端的代码是完全一致的,如果不一致可能会导致在本地打断点的行和实际运行时该行的代码并不一样,会出现意想不到的错误。 因此在配置云上Python Interpreter时,推荐选择Automatically upload选项,以保证本地的文件修改能自动上传到云端。如果没有选择自动上传,则本地代码修改完后,也可以参考Step6 同步上传本地文件至Notebook手动上传目录或代码。
  • Step7 远程调试 单击本地IDE右下角interpreter,选择Notebook的python解释器。 图9 选择Python解释器 像本地运行代码一样,直接单击运行按钮运行代码即可,此时虽然是在本地IDE点的运行按钮,实际上运行的是云端Notebook里的代码,日志可以回显在本地的日志窗口。 图10 查看运行日志 也可以单击本地IDE右上角的Run/Debug Configuration按钮来设置运行参数。 图11 设置运行参数(1) 选择远程连接到云上开发环境实例对应的Python解释器。 图12 设置运行参数(2) 当需要调试代码时,可以直接打断点,然后使用debug方式运行程序。 图13 使用debug方式运行程序 此时可以进入debug模式,代码运行暂停在该行,且可以查看变量的值。 图14 Debug模式下查看变量值
  • 使用限制 当前仅支持2019.2-2023.2之间(包含2019.2和2023.2)版本,包括社区版和专业版。 使用PyCharm ToolKit远程连接Notebook开发环境,仅限PyCharm专业版。 使用PyCharm ToolKit提交训练作业,社区版和专业版都支持,PyCharm ToolKit latest版本仅限提交新版训练作业。 PyCharm ToolKit工具仅支持Windows版本的PyCharm。 表1 ToolKit(latest)功能列表 支持的功能 说明 对应操作指导 SSH远程连接 支持SSH远程连接ModelArts的Notebook开发环境。 配置PyCharm ToolKit远程连接Notebook 训练模型 支持将本地开发的代码,快速提交至ModelArts并自动创建新版训练作业,在训练作业运行期间获取训练日志并展示到本地。 使用PyCharm ToolKit创建并调试训练作业 OBS上传下载 上传本地文件或文件夹至OBS,从OBS下载文件或文件夹到本地。 使用PyCharm上传数据至Notebook
  • Step6 同步上传本地文件至Notebook 本地文件中的代码直接复制至本地IDE中即可,本地IDE中会自动同步至云上开发环境。 初始化同步: 在本地IDE的Project目录下,单击右键,选择“Deployment”,单击“Upload to xxx”(Notebook名称),将本地工程文件上传至指定的Notebook。 图7 同步本地文件至Notebook 后续同步: 只需修改代码后保存(ctrl+s),即可进行自动同步。 插件安装完成后在本地IDE中开启了“Automatic Upload”,本地目录中的文件会自动上传至云端开发环境Notebook。如果未开启,请参考下图开启自动上传。 图8 开启自动上传
  • 代码化参数插件的使用 代码参数化插件可以降低Notebook案例的复杂度,用户无需感知复杂的源码,按需调整参数快速进行案例复现、模型训练等。该插件可用于定制Notebook案例,适用于比赛、教学等场景。 仅对Code cell类型新增了Edit Form和Add Form功能,如果cell类型是Markdown或者Raw类型则不支持。如下图所示: 图16 查看Code cell 打开新的代码后,需先Add Form,再Edit Form。 图17 Code类型的cell右键选项 “Add Form”会将Code cell水平拆分为两种编辑区域,左侧为代码区域,右侧为表单区域。单击表单右侧的“Edit”可修改默认标题。 图18 两种编辑区域 “Edit Form”按钮有四个子选项,分别是“Add new form field”、“Hide code”、“Hide form”和“show all”四个按钮,下文介绍这四个选项的功能。 表5 “Edit Form”子选项介绍 “Edit Form”子选项 功能说明 Add new form field 支持新增“dropdown”、“input”和“slider”类型的表单。如图19所示。每新增一个字段,会分别在代码和表单区域中增加对应的变量,修改表单区域的值也会同时修改代码变量值。 说明: 创建dropdown类型的表单时,“ADD Item”至少创建2项。如图20所示。 表单字段类型为“dropdown”时,支持的变量类型为“raw”和“string”。 表单字段类型为“input”时,支持的变量类型有“boolean”、“date”、“integer”、“number” 、“raw”和“string”。 表单字段类型为“slider”时,支持输入滑动条的最小值、最大值和步长。 Hide code 隐藏代码区域。 Hide form 隐藏表单区域。 Show all 同时展示code和form区域。 图19 “dropdown”,“input”,“slider”的表单样式 图20 创建“dropdown”类型的表单 图21 删除表单
  • JupyterLab常用快捷键和插件栏 图13 JupyterLab常用快捷键和插件栏 表1 快捷键说明 快捷键 说明 快速打开Notebook、Terminal。或打开Launcher页面,可快速创建新的Notebook、Console或其他文件。 创建文件夹。 上传文件。 刷新文件目录。 Git插件,可连接此Notebook实例关联的Github代码库。 表2 插件栏常用插件说明 插件 说明 文件列表。单击此处,将展示此Notebook实例下的所有文件列表。 当前实例中正在运行的Terminal和Kernel。 Git插件,可以方便快捷地使用Github代码库。 属性检查器。 文档结构图。 图14 导航栏按钮 表3 导航栏按钮介绍 按钮 说明 File 新建、关闭、保存、重新加载、重命名、导出、打印Notebook等功能。 Edit 编辑ipynb文件中代码块的相关操作,包括撤销、重做、剪切、复制、粘贴、选择、移动、合并、清除、查找代码块等。 View 查看视图相关操作。 Run 运行代码块相关操作,例如:运行选中代码块、一键运行所有代码块等。 Kernel 中断、重启、关闭、改变Kernel相关操作。 Git Git插件相关操作,可以方便快捷地使用Github代码库。 Tabs 同时打开多个ipynb文件时,通过Tabs激活或选择文件。 Settings JupyterLab工具系统设置。 Help JupyterLab工具自带的帮助参考。 图15 ipynb文件菜单栏中的快捷键 表4 ipynb文件菜单栏中的快捷键 快捷键 说明 保存文件。 添加新代码块。 剪切选中的代码块。 复制选中的代码块。 粘贴选中的代码块。 执行选中的代码块。 终止kernel。 重启kernel。 重启kernel,然后重新运行当前Notebook的所有代码。 此处下拉框有4个选项,分别是: Code(写python代码),Markdown(写Markdown代码,通常用于注释),Raw(一个转换工具),-(不修改)。 查看代码历史版本。 git插件,图标显示灰色表示当前Region不支持。 当前的资源规格。 单击可以选择Kernel。 表示代码运行状态,变为实心圆时,表示代码在运行中。 分享到AI Gallery。
  • 新建文件并打开Console Console的本质为Python终端,输入一条语句就会给出相应的输出,类似于Python原生的IDE。 进入JupyterLab主页后,可在“Console”区域下,选择适用的AI引擎,单击后将新建一个对应框架的Notebook文件。 由于每个Notebook实例选择的工作环境不同,其支持的AI框架也不同,下图仅为示例,请根据实际显示界面选择AI框架。 图6 选择AI引擎并新建一个Console 文件创建成功后,将直接呈现Console页面。 图7 新建文件(Console)
  • 操作步骤 创建Notebook实例。 在ModelArts控制台创建一个Notebook实例,选择要使用的AI框架。具体参见创建Notebook实例。 创建成功后,Notebook实例的状态为“运行中”,单击操作列的“打开”,访问JupyterLab。 图2 打开Notebook实例 进入JupyterLab页面后,自动打开Launcher页面,如下图所示。您可以使用开源支持的所有功能,详细操作指导可参见JupyterLab官网文档。 图3 JupyterLab主页 不同AI引擎的Notebook,打开后Launcher页面呈现的Notebook和Console内核及版本均不同,图3仅作为示例,请以实际控制台为准。 准备训练数据和代码文件,上传到JupyterLab中。具体参见上传本地文件至JupyterLab。 图4 文件上传按钮 在左侧导航双击打开上传的代码文件,在JupyterLab中编写代码文件,并运行调试。有关JupyterLab的使用具体参见JupyterLab常用功能介绍。 如果您的代码文件是.py格式,请新打开一个.ipynb文件,执行%load main.py命令将.py文件内容加载至.ipynb文件后进行编码、调试等。 图5 打开代码文件 在JupyterLab中直接调用ModelArts提供的SDK,创建训练作业,上云训练。 调用SDK创建训练作业的操作请参见调用SDK创建训练作业。
  • 体验CodeLab 进入CodeLab主页。 从管理控制台总览页进入,展示CodeLab首页。 常用功能。 CodeLab的界面依托于JupyterLab,其相关的常见功能与JupyterLab相同。 常用操作指导可参见JupyterLab操作指导:JupyterLab常用功能介绍。 由于CodeLab的存储为系统默认路径,在使用“上传文件”或“下载文件至本地”时,只能使用JupyterLab页面提供的功能。 如需使用大文件上传和下载的功能,建议您前往Notebook,创建一个收费的实例进行使用。 切换规格。 CodeLab支持CPU和GPU两种规格,在右侧区域,单击切换规格,修改规格类型。 图2 切换规格 资源监控。 在使用过程中,如果想了解资源使用情况,可在右侧区域选择“Resource Monitor”,展示“CPU使用率”和“内存使用率”。 图3 资源监控 分享副本到AI Gallery。单击右上角的,将修改后的Notebook样例保存分享到AI Gallery中,供自己或他人学习使用。 图4 分享到AI Gallery 分享成功后,通过分享链接可以打开分享的副本,也可以在AI Gallery中找到分享的Notebook。 图5 发布成功
  • 功能亮点 免费算力 CodeLab内置了免费算力,包含CPU和GPU两种。您可以使用免费规格,端到端体验ModelArts Notebook能力。也可使用此免费算力,在线完成您的算法开发。 即开即用 无需创建Notebook实例,打开即可编码。 高效分享 ModelArts在AI Gallery中提供的Notebook样例,可以直接通过Run in ModelArts,一键打开运行和学习,并且可将样例修改后分享到AI Gallery中直接另存用于个人开发。 同时,您开发的代码,也可通过CodeLab快速分享到AI Gallery中给他人使用学习。
  • 使用限制 CodeLab默认打开,使用的是CPU计算资源。如需切换为GPU,请在右侧窗口,更换GPU规格。 在ModelArts控制台的“总览”界面打开CodeLab,使用的是CPU或GPU资源,无法使用Ascend资源。 如果是AI Gallery社区的Notebook案例,本身使用的资源是Ascend的,那么“Run in ModelArts”跳转到CodeLab,就可以使用昇腾卡进行训练,也支持切换规格。 自启动后,免费规格默认可使用1小时,请注意右上角的剩余时长。超过1小时后,可执行续期操作,且系统每隔一段时间,将提醒确认下续期。 免费的CodeLab主要用于体验,72小时内未使用,将释放资源。保存在其中的代码文档将丢失,请注意备份文件以及使用时长。
  • 常见问题 镜像保存时报错“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 threshold (25G)”如何解决?
  • 基于自定义镜像创建Notebook实例 从Notebook中保存的镜像可以在镜像管理中查询到,可以用于创建新的Notebook实例,完全继承保存状态下的实例软件环境配置。 方式一:在Notebook实例创建页面,镜像类型选择“自定义镜像”,名称选择上述保存的镜像。 图3 创建基于自定义镜像的Notebook实例 方式二:在“镜像管理”页面,单击某个镜像的镜像详情,在镜像详情页,单击“创建Notebook”,也会跳转到基于该自定义镜像创建Notebook的页面。
  • 镜像保存时,哪些目录的数据可以被保存 可以保存的目录:包括容器构建时静态添加到镜像中的文件和目录,可以保存在镜像环境里。 例如:安装的依赖包、“/home/ma-user”目录 不会被保存的目录:容器启动时动态连接到宿主机的挂载目录或数据卷,这些内容不会被保存在镜像中。可以通过df -h命令查看挂载的动态目录,非“/”路径下的不会保存。 例如:持久化存储的部分“home/ma-user/work”目录的内容不会保存在最终产生的容器镜像中、动态挂载在“/data”下的目录不会被保存。
  • 什么是动态挂载OBS并行文件系统 并行文件系统(Parallel File System)是 对象存储服务 (Object Storage Service,OBS)提供的一种经过优化的高性能文件系统,详细介绍可以参见并行文件系统。 在ModelArts运行态的Notebook容器中,采用动态挂载特性,将OBS对象存储模拟成本地文件系统。其本质是通过挂载工具,将对象协议转为POSIX文件协议。挂载后应用层可以在容器中正常操作OBS对象。
  • Notebook使用场景 ModelArts提供灵活开放的开发环境,您可以根据实际情况选择。 ModelArts提供了CodeLab功能,一方面,一键进入开发环境,同时预置了免费的算力规格,可直接 免费体验 Notebook功能;另一方面,针对AI Gallery社区发布的Notebook样例(.ipynb格式文件),可直接在CodeLab中打开,查看他人分享的样例代码,具体请参见使用CodeLab免费体验Notebook。 ModelArts提供了云化版本的Notebook,无需关注安装配置,即开即用,具体参见创建Notebook实例。 ModelArts Notebook支持以下几种使用方式,用于开发基于PyTorch、TensorFlow和MindSpore等引擎的AI模型。 支持通过JupyterLab工具在线打开Notebook,具体请参见通过JupyterLab在线使用Notebook实例。 支持本地IDE的方式开发模型,通过开启SSH连接,用户本地IDE可以远程连接到ModelArts的Notebook开发环境中,调试和运行代码。本地IDE方式不影响用户的编码习惯,并且可以方便快捷地使用云上的Notebook开发环境。 本地IDE当前支持VS Code、PyCharm、SSH工具。PyCharm和VS Code还分别有专门的插件PyCharm Toolkit、VS Code Toolkit,让远程连接操作更便捷。具体参见通过PyCharm远程使用Notebook实例、通过VS Code远程使用Notebook实例、通过SSH工具远程使用Notebook。 在AI开发过程中,如何将文件方便快速地上传到Notebook几乎是每个开发者都会遇到的问题。ModelArts提供了多种文件上传方式,在文件上传过程中,可以查看上传进度和速度。 将本地文件上传,请参考支持上传本地文件; GitHub的开源仓库的文件上传,请参考支持Clone GitHub开源仓库; 存放在OBS中的文件上传,请参考支持上传OBS文件; 类似开源数据集这样的远端文件上传,请参考支持上传远端文件; 在Notebook的使用中,可以快速查找实例,可以在同一个Notebook实例中切换镜像,方便用户灵活调整实例的AI引擎;可以切换节点运行规格,方便用户灵活调整规格资源;可以初期存储使用量较小时选择小存储,可以在创建完成后根据需要扩充EVS容量;使用动态挂载OBS将OBS对象存储模拟成本地文件系统;还可以在Notebook异常时查看实例的事件定位等,具体参见管理Notebook实例。 ModelArts CLI,集成在ModelArts开发环境Notebook中,用于连接ModelArts服务并在ModelArts资源上执行管理命令。ma-cli支持用户在ModelArts Notebook及线下虚拟机中与云端服务交互,使用ma-cli命令可以实现命令自动补全、鉴权、镜像构建、提交ModelArts训练作业、提交 DLI Spark作业、OBS数据复制等,具体参见ModelArts CLI命令参考。 ModelArts Notebook内置MoXing Framework模块,ModelArts mox.file提供了一套更为方便地访问OBS的API,允许用户通过一系列模仿操作本地文件系统的API来操作OBS文件。具体参见在Notebook中使用MoXing命令。 父主题: 使用Notebook进行AI开发调试
  • 查看训练日志 提交训练作业时,系统将自动在您配置的OBS Path中,使用作业名称创建一个新的文件夹,用于存储训练输出的模型、日志和代码。 例如“train-job-01”作业,提交作业时会在“test-modelarts2”桶下创建一个命名为“train-job-01”的文件夹,且此文件夹下分别新建了三个文件夹“output”、“log”、“code”,分别用于存储输出模型、日志和训练代码。“output”文件夹还会根据您的训练作业版本再创建子文件夹,结构示例如下。 test-modelarts2 |---train-job-01 |---output |---V0001 |---V0002 |---... |---log |---code 查看训练日志有2种方式,在OBS查看和在PyCharm ToolKit工具中查看。 在OBS查看训练日志 训练作业运行结束后,系统将日志存储至对应OBS路径下的log目录中。 在PyCharm工具的ModelArts Explorer区域,双击对应训练作业的版本名称,将在ModelArts Training Job区域展示此训练作业的详细配置。 您可以在详细配置中,找到训练日志输出路径,即OBS路径。 图5 查找日志存储路径 使用当前账号登录OBS管理控制台,根据上一个步骤获取的OBS路径,找到对应文件夹,查看训练作业的详细日志。
  • 使用SDK上报自定义监控指标到 AOM 通过在代码中集成SDK,手动上传指标数据到AOM。 该方案适用于监控高度定制化的指标,例如自定义维度或复杂计算,需要在代码层面直接控制指标的上报,适合复杂的业务逻辑。 准备训练代码,在训练代码中增加指标监控的代码。具体代码示例如下。准备训练代码的其它要求请参见准备模型训练代码。 代码中倒数第2行的region = "cn-southwest-2"参数值请替换成实际region值,region取值可以参考终端节点。 代码中增加监控指标数据,具体参数解释参考AOM文档。 # coding: utf-8 import os from huaweicloudsdkaom.v2 import * from huaweicloudsdkaom.v2.region.aom_region import AomRegion from huaweicloudsdkcore.auth.credentials import BasicCredentials from huaweicloudsdkcore.exceptions import exceptions from moxing.framework import cloud_utils def report2Aom(request,region): auth = cloud_utils.get_auth() #AK、SK和临时TOKEN值,系统会自动获取无需在代码中填写。 ak = auth.AK sk = auth.SK securityToken = auth.TOKEN projectId = os.environ.get("MA_ IAM _PROJECT_ID") credentials = BasicCredentials(ak, sk, projectId).with_security_token(securityToken) client = AomClient.new_builder() \ .with_credentials(credentials) \ .with_region(AomRegion.value_of(region)) \ .build() try: response = client.add_metric_data(request) print(response) except Exception as e: print(e) if __name__ == "__main__": request = AddMetricDataRequest() listValuesBody = [ #下面填上对应的指标名称、类型、单位、数值,比如step_time、loss值等 ValueData( metric_name="step_time", #监控指标名称,例如step_time type="float", #指标的数据类型,取值范围只能是"int"或"float"。 unit="ms", #数据的单位。长度不超过32个字符,此处举例为ms value=135.572 #指标数据的值。取值范围有效的数值类型。最小值0 ), ValueData( metric_name="loss", type="float", value=0.6932 ) ] listDimensionsMetric = [ #下面填上想查看的指标维度,比如线程、host等等 Dimension2( name="cluster_name",#此处仅为举例示意,请替换为实际需要查看的指标维度 value="fab2c5cf438b4f0c851fdcdf"# 此处仅为举例示意,请替换为实际参数值 ), Dimension2( name="user_name", value="modelarts_02" # 此处仅为举例示意,请替换为实际参数值 ), Dimension2( name="user_id", value="04f258c8fb00d42a1f6xxx" # 此处仅为举例示意,请替换为实际参数值 ) ] metricBody = MetricItemInfo( dimensions=listDimensionsMetric, namespace="NOPAAS.ESC" #保持默认值即可,无需修改 ) listBodybody = [ MetricDataItem( collect_time=int(round(time.time()*1000)), #监控指标数据收集时间,为最新的时间戳,ms为单位 metric=metricBody, values=listValuesBody ) ] request.body = listBodybody region = "cn-southwest-2" #请根据实际region替换 response = report2Aom(request,region) 在训练代码中加入命令,用于加载对应的依赖包。如果使用的是自定义镜像,也可以在制作镜像时安装以下依赖,具体参见开发用于自定义镜像训练的代码。 pip install huaweicloudsdkaom pip install huaweicloudsdkcore 创建训练作业并运行,具体参考创建生产训练作业章节。 登录AOM控制台,在“指标浏览”页面,通过指定“指标”查看上报的指标数据。 图1 AOM上查看指标数据 参考告警上报配置方法章节设置AOM告警和通知机制。
  • 支持在ModelArts控制台上直接查看的监控指标 支持在ModelArts控制台训练作业详情页中直接查看的监控指标请参见表1。 支持在ModelArts控制台总览页中查看的训练相关监控指标请参见表1。 表1 训练作业任务级的指标说明 指标 说明 查看方式 训练作业资源利用率 每个训练作业的CPU、GPU或NPU资源利用率。 在ModelArts控制台总览页的“训练作业资源利用情况”版块查看。 卡时 每个训练作业运行时长和占用卡数。 在ModelArts控制台总览页的“训练作业资源利用情况”版块查看。
  • 设置训练存储加速 当完成上传数据至OBS并预热到SFS Turbo中步骤后,在ModelArts Standard中创建训练作业时,设置训练“SFS Turbo”,在“文件系统”中选择SFS Turbo实例名称,并指定“存储位置”和“云上挂载路径”。系统会在训练作业启动前,自动将存储位置中的文件目录挂载到训练容器中指定路径。 图2 设置训练“SFS Turbo” 当前训练作业支持挂载多个弹性文件服务SFS Turbo,文件系统支持重复挂载,但挂载路径不可重复。文件系统目录需指定已存在的目录,否则会导致训练作业异常。
  • 什么是增量训练 增量训练(Incremental Learning)是机器学习领域中的一种训练方法,它允许人工智能(AI)模型在已经学习了一定知识的基础上,增加新的训练数据到当前训练流程中,扩展当前模型的知识和能力,而不需要从头开始。 增量训练不需要一次性存储所有的训练数据,缓解了存储资源有限的问题;另一方面,增量训练节约了重新训练中需要消耗大量算力、时间以及经济成本。 增量训练特别适用于以下情况: 数据流更新:在实际应用中,数据可能会持续更新,增量训练允许模型适应新的数据而不必重新训练。 资源限制:如果重新训练一个大型模型成本过高,增量训练可以是一个更经济的选择。 避免灾难性遗忘:在传统训练中,新数据可能会覆盖旧数据的知识,导致模型忘记之前学到的内容。增量训练通过保留旧知识的同时学习新知识来避免这个问题。 增量训练在很多领域都有应用,比如自然语言处理、计算机视觉和推荐系统等。它使得AI系统能够更加灵活和适应性强,更好地应对现实世界中不断变化的数据环境。
  • ModelArts Standard中如何实现增量训练 增量训练是通过Checkpoint机制实现。 Checkpoint的机制是:在模型训练的过程中,不断地保存训练结果(包括但不限于EPOCH、模型权重、优化器状态、调度器状态)。当需要增加新的数据继续训练时,只需要加载Checkpoint,并用Checkpoint信息初始化训练状态即可。用户需要在代码里加上reload ckpt的代码,使能读取前一次训练保存的预训练模型。 在ModelArts训练中实现增量训练,建议使用“训练输出”功能。 在创建训练作业时,设置训练“输出”参数为“train_url”,在指定的训练输出的数据存储位置中保存Checkpoint,且“预下载至本地目录”选择“下载”。选择预下载至本地目录时,系统在训练作业启动前,自动将数据存储位置中的Checkpoint文件下载到训练容器的本地目录。 图1 训练输出设置
  • 构建自定义训练镜像 图1 训练作业的自定义镜像制作流程 场景一:预置镜像满足ModelArts训练平台约束,但不满足代码依赖的要求,需要额外安装软件包。 具体案例参考使用预置镜像制作自定义镜像用于训练模型。 场景二:已有本地镜像满足代码依赖的要求,但是不满足ModelArts训练平台约束,需要适配。 具体案例参考已有镜像迁移至ModelArts用于训练模型。 场景三: 当前无可使用的镜像,需要从0制作镜像(既需要安装代码依赖,又需要制作出的镜像满足ModelArts平台约束)。具体案例参考: 从0制作自定义镜像用于创建训练作业(Pytorch+Ascend) 从0制作自定义镜像用于创建训练作业(PyTorch+CPU/GPU) 从0制作自定义镜像用于创建训练作业(MPI+CPU/GPU) 从0制作自定义镜像用于创建训练作业(Tensorflow+GPU) 从0制作自定义镜像用于创建训练作业(MindSpore+Ascend)
  • 训练作业的预置框架介绍 ModelArts中预置的训练基础镜像如下表所示。 表1 ModelArts训练基础镜像列表 引擎类型 版本名称 PyTorch pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64 TensorFlow tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64 Horovod horovod_0.20.0-tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64 horovod_0.22.1-pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64 MPI mindspore_1.3.0-cuda_10.1-py_3.7-ubuntu_1804-x86_64 Ascend-Powered-Engine tensorflow_1.15-cann_5.1.0-py_3.7-euler_2.8.3-aarch64 mindspore_1.7.0-cann_5.1.0-py_3.7-euler_2.8.3-aarch64
  • 常见问题 在训练时发生找不到“$ANACONDA_DIR/envs/$DEFAULT_CONDA_ENV_NAME/lib ”目录下“.so”文件的相关报错如何处理? 如果在训练时发生找不到“$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
  • 自定义镜像的启动命令规范 用户遵循ModelArts镜像的规范要求制作镜像,选择自己的镜像,并且通过指定代码目录(可选)和启动命令的方式来创建的训练作业。 图1 创建训练作业选择自定义方式 当使用完全自定义镜像创建训练作业时,“启动命令”必须在“/home/ma-user”目录下执行,否则训练作业可能会运行异常。 对于启动命令,当存在输入管道、输出管道、或是超参的情况下,请保证启动命令的最后一条命令是运行训练脚本,否则执行会报错。 完全使用自定义镜像创建训练作业需要通过指定的“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”环境变量。 ANACONDA_DIR=/home/ma-user/anaconda3 DEFAULT_CONDA_ENV_NAME=python-3.7.10 您可以使用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 启动命令的最后一条命令必须为运行训练脚本命令。 对于启动命令,当存在输入管道、输出管道、或是超参的情况下,请保证启动命令的最后一条命令是运行训练脚本。 原因:系统会将输入管道、输出管道、以及超参添加到启动命令的末尾,如果最后一条命令不是运行训练脚本则会报错。 例如:启动命令的最后一条是python train.py,且存在--data_url超参,系统正常运行会执行python train.py --data_url=/input。但是当启动命令python train.py后面有其他命令时,如下所示: python train.py pwd #反例,启动命令的最后一条命令不是运行训练脚本,而是pwd 此时,如果拼接了输入管道、输出管道、以及超参,系统运行实际执行的是python train.py pwd --data_url=/input,就会报错。
  • 使用Ascend自定义镜像训练时的训练代码适配规范 使用NPU资源创建训练作业时,系统会在训练容器里自动生成Ascend HCCL RANK_TABLE_FILE文件。当使用预置框架创建训练作业时,在训练过程中预置框架会自动解析Ascend HCCL RANK_TABLE_FILE文件,当使用自定义镜像创建训练作业时,就要适配训练代码使得训练过程中在代码里读取解析Ascend HCCL RANK_TABLE_FILE文件。 Ascend HCCL RANK_TABLE_FILE文件说明 Ascend HCCL RANK_TABLE_FILE文件提供Ascend分布式训练作业的集群信息,用于Ascend芯片分布式通信,可以被HCCL集合通信库解析。该文件格式有模板一和模板二两个版本。 ModelArts提供的是模板二格式。ModelArts训练环境的Ascend HCCL RANK_TABLE_FILE文件名为jobstart_hccl.json,获取方式可以通过预置的RANK_TABLE_FILE环境变量实现。 表1 RANK_TABLE_FILE环境变量说明 环境变量 说明 RANK_TABLE_FILE 该环境变量指示Ascend HCCL RANK_TABLE_FILE文件所在目录,值为/user/config。 算法开发者可通过 “${RANK_TABLE_FILE}/jobstart_hccl.json”,路径获取该文件。 ModelArts训练环境jobstart_hccl.json文件内容(模板二)示例: { "group_count": "1", "group_list": [{ "device_count": "1", "group_name": "job-trainjob", "instance_count": "1", "instance_list": [{ "devices": [{ "device_id": "4", "device_ip": "192.1.10.254" }], "pod_name": "jobxxxxxxxx-job-trainjob-0", "server_id": "192.168.0.25" }] }], "status": "completed" } jobstart_hccl.json文件中的status字段的值在训练脚本启动时,并不一定为completed状态。因此需要训练脚本等待status字段的值等于completed之后,再去读取文件的剩余内容。 通过训练脚本,可以使用模板一格式的jobstart_hccl.json文件,在等待status字段的值等于completed之后,将模板二格式jobstart_hccl.json文件转换为模板一格式的jobstart_hccl.json文件。 转换后的jobstart_hccl.json文件格式(模板一)示例: { "server_count": "1", "server_list": [{ "device": [{ "device_id": "4", "device_ip": "192.1.10.254", "rank_id": "0" }], "server_id": "192.168.0.25" }], "status": "completed", "version": "1.0" } 转换功能的实现,可参考从0制作自定义镜像用于创建训练作业(MindSpore+Ascend)中所述的Ascend训练脚本的启动脚本。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全