华为云用户手册

  • 成本优化 成本控制 企业可以在成本中心的“预算管理”页面创建精细粒度的预算来管理成本和使用量,在实际或预测超过预算阈值时,自动发送通知给指定消息接收人。企业还可以创建预算报告,定期将指定预算进展通知给指定消息接收人。 例如企业需要创建一套 云防火墙 的成本预算,每月预算金额为12000元,当预测金额高于预算金额的80%时发送预算告警。那么,创建的预算如下: 图3 预算基本信息 图4 设置成本范围 图5 设置提醒 详细介绍请参见使用预测和预算来跟踪成本和使用量。 资源优化 成本中心可以通过监控云防火墙的历史消费情况,为客户提供云防火墙资源的空闲识别和优化建议,寻找节约成本的机会。您还可以根据成本分析阶段的分析结果识别成本偏高的资源,通过 云监控服务 监控资源的使用情况,确定成本偏高的原因,然后采取针对性的优化措施。
  • 成本分配 成本管理的基础是树立成本责任制,让各部门、各业务团队、各责任人参与进来,为各自消耗云服务产生的成本负责。企业可以通过成本分配的方式,将云上成本分组,归集到特定的团队或项目业务中,让各责任组织及时了解各自的成本情况。 华为云成本中心支持通过多种不同的方式对成本进行归集和重新分配,您可以根据需要选择合适的分配工具。 通过关联账号进行成本分配 企业主客户可以使用关联账号对子客户的成本进行归集,从而对子账号进行财务管理。详细介绍请参见通过关联账号维度查看成本分配。 通过企业项目进行成本分配 在进行成本分配之前,建议开通企业项目并做好企业项目的规划,可以根据企业的组织架构或者业务项目来划分。在购买云资源时选择指定企业项目,新购云资源将按此企业项目进行成本分配。详细介绍请参见通过企业项目维度查看成本分配。 图1 选择企业项目 通过成本标签进行成本分配 标签是华为云为了标识云资源,按各种维度(例如用途、所有者或环境)对云资源进行分类的标记。推荐企业使用预定义标签进行成本归集,具体流程如下: 创建预定义标签。 客户在“标签管理服务”控制台中创建预定义标签,详细操作请参见创建预定义标签。 激活成本标签。 激活标签的具体操作请参见激活成本标签。激活成本标签后,才能在“成本分析”、“预算管理”等页面展现。 成本标签不会应用于激活标签之前产生的成本。激活前已产生的成本数据,如果仍需要基于标签分析,可以导出账单明细,基于账单明细中的资源标签字段进行处理分析。 为CFW资源添加标签。 在购买CFW实例页面,可以选择已经创建的预定义标签。 图2 添加标签 通过成本标签查看成本数据。 通过成本标签查看成本数据时,建议基于摊销成本进行数据汇总,详细操作请参见通过成本标签查看成本数据。 详细介绍请参见创建预定义标签。 使用成本单元进行成本分配 企业可以使用成本中心的“成本单元”来拆分公共成本。公共成本是指多个部门共享的计算、网络、存储或资源包产生的云成本,或无法直接通过企业项目、成本标签分配的云成本。这些成本不能直接归属于单一所有者,因此不能直接归属到某一类别。使用拆分规则,可以在各团队或业务部门之间公平地分配这些成本。详细介绍请参见使用成本单元查看成本分配。
  • 解析输入路径参数、输出路径参数 运行在ModelArts的模型读取存储在OBS服务的数据,或者输出至OBS服务指定路径,输入和输出数据需要配置2个地方: 训练代码中需解析输入路径参数和输出路径参数。ModelArts推荐以下方式实现参数解析。 1 2 3 4 5 6 7 8 9 10 import argparse # 创建解析 parser = argparse.ArgumentParser(description='train mnist') # 添加参数 parser.add_argument('--data_url', type=str, default="./Data/mnist.npz", help='path where the dataset is saved') parser.add_argument('--train_url', type=str, default="./Model", help='path where the model is saved') # 解析参数 args = parser.parse_args() 完成参数解析后,用户使用“data_url”、“train_url”代替算法中数据来源和数据输出所需的路径。 在创建训练作业时,填写输入路径和输出路径。 训练输入选择对应的OBS路径或者数据集路径;训练输出选择对应的OBS路径。 图1 训练输入和输出设置
  • 训练代码正文和保存模型 训练代码正文和保存模型涉及的代码与您使用的AI引擎密切相关,以下案例以Tensorflow框架为例。案例中使用到的“mnist.npz”文件需要提前下载并上传至OBS桶中,训练输入为“mnist.npz”所在OBS路径。 import os import argparse import tensorflow as tf parser = argparse.ArgumentParser(description='train mnist') parser.add_argument('--data_url', type=str, default="./Data/mnist.npz", help='path where the dataset is saved') parser.add_argument('--train_url', type=str, default="./Model", help='path where the model 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) model.save(os.path.join(args.train_url, 'model'))
  • 训练流程简述 相比于DP,DDP能够启动多进程进行运算,从而大幅度提升计算资源的利用率。可以基于torch.distributed实现真正的分布式计算,具体的原理此处不再赘述。大致的流程如下: 初始化进程组。 创建分布式并行模型,每个进程都会有相同的模型和参数。 创建数据分发Sampler,使每个进程加载一个mini batch中不同部分的数据。 网络中相邻参数分桶,一般为神经网络模型中需要进行参数更新的每一层网络。 每个进程前向传播并各自计算梯度。 模型某一层的参数得到梯度后会马上进行通讯并进行梯度平均。 各GPU更新模型参数。 具体流程图如下: 图1 多机多卡数据并行训练
  • 代码改造点 引入多进程启动机制:初始化进程 引入几个变量:tcp协议,rank进程序号,worldsize开启的进程数量 分发数据:DataLoader中多了一个Sampler参数,避免不同进程数据重复 模型分发:DistributedDataParallel(model) 模型保存:在序号为0的进程下保存模型 import torch class Net(torch.nn.Module): pass model = Net().cuda() ### DistributedDataParallel Begin ### model = torch.nn.parallel.DistributedDataParallel(Net().cuda()) ### DistributedDataParallel End ###
  • 使用训练数据的两种方式 ModelArts模型训练支持2种读取训练数据的方式: 使用OBS桶中存储的数据集 如果您的数据集已完成数据标注和数据预处理,可以将数据上传至OBS桶。当创建训练作业时,在训练输入参数位置填写训练数据所在的OBS桶路径即可完成训练配置。 使用数据管理中的数据集 如果您的数据集未标注或者需要进一步的数据预处理,可以将数据导入ModelArts数据管理模块进行数据预处理。 ModelArts数据管理模块在重构升级中,对未使用过数据管理的用户不可见。建议新用户将训练数据存放至OBS桶中使用。 图2 准备数据
  • OBS简介 对象存储服务 OBS是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。对象存储服务OBS的基本组成是桶和对象。桶是OBS中存储对象的容器,每个桶都有自己的存储类别、访问权限、所属区域等属性,用户在互联网上通过桶的访问域名来定位桶。对象是OBS中数据存储的基本单位。关于OBS更详细的介绍请参考《OBS用户指南》。 对ModelArts来说,obs服务是一个数据存储中心。AI开发过程中的输入数据、输出数据、中间缓存数据都可以在obs桶中进行存储、读取。 因此,在使用ModelArts之前您需要创建一个OBS桶,然后在OBS桶中创建文件夹用于存放数据。
  • 如何查看训练作业日志 在训练作业详情页,训练日志窗口提供日志预览、日志下载、日志中搜索关键字、系统日志过滤能力。 预览 系统日志窗口提供训练日志预览功能,如果训练作业有多个节点,则支持查看不同计算节点的日志,通过右侧下拉框可以选择目标节点预览。 图1 查看不同计算节日志 当日志文件过大时,系统日志窗口仅加载最新的部分日志,并在日志窗口上方提供全量日志访问链接。打开该链接可在新页面查看全部日志。 图2 查看全量日志 如果全部日志超过500M,可能会引起浏览页面卡顿,建议您直接下载日志查看。 预览链接在生成后的一小时内,支持任何人打开并查看。您可以分享链接至他人。 请注意日志中不能包含隐私内容,否则会造成信息泄露。 下载 训练日志仅保留30天,超过30天会被清理。如果用户需要永久保存日志,请单击系统日志窗口右上角下载按钮下载日志至本地保存,支持批量下载多节点日志。用户也可以在创建训练作业时打开永久保存日志按钮,保存训练日志至指定OBS路径。 针对使用Ascend规格创建的训练作业,部分系统日志暂不支持直接在训练日志窗口下载,请在创建训练作业时指定OBS路径用于保存训练日志。 图3 下载日志 搜索关键字 用户可以在系统日志右上角的搜索框搜索关键字,如图4所示。 图4 搜索关键字 系统支持高亮关键字并实现搜索结果间的跳转。搜索功能仅支持搜索当前页面加载的日志,如果日志加载不全(请关注页面提示)则需要下载或者通过打开全量日志访问链接进行搜索。全量日志访问链接打开的新页面可以通过Ctrl+F进行搜索。 系统日志过滤 图5 系统日志复选框 如果勾选了系统日志复选框,则日志中呈现系统日志和用户日志。如果去勾选,则只显示用户日志。 父主题: 查看训练作业日志
  • 定义超参 使用预置框架创建算法时,ModelArts支持用户自定义超参,方便用户查阅或修改。定义超参后会体现在启动命令中,以命令行参数的形式传入您的启动文件中。 导入超参 您可以单击“增加超参”手动添加超参。 图2 添加超参 编辑超参 超参的参数说明参见表4。 表4 超参编辑参数 参数 说明 名称 填入超参名称。 超参名称支持64个以内字符,仅支持大小写字母、数字、下划线和中划线。 类型 填入超参的数据类型。支持String、Integer、Float和Boolean。 默认值 填入超参的默认值。创建训练作业时,默认使用该值进行训练。 约束 单击“约束”。在弹出对话框中,支持用户设置默认值的取值范围或者枚举值范围。 必需 选择是或否。 选择否,则在使用该算法创建训练作业时,支持在创建训练作业页面删除该超参。 选择是,则在使用该算法创建训练作业时,不支持在创建训练作业页面删除该超参。 描述 填入超参的描述说明。 超参描述支持大小写字母、中文、数字、空格、中划线、下划线、中英文逗号和中英文句号。
  • 输入输出管道设置 训练过程中,基于预置框架的算法需要从OBS桶或者数据集中获取数据进行模型训练,训练产生的输出结果也需要存储至OBS桶中。用户的算法代码中需解析输入输出参数实现ModelArts后台与OBS的数据交互,用户可以参考开发自定义脚本完成适配ModelArts训练的代码开发。 创建基于预置框架的算法时,用户需要配置算法代码中定义的输入输出参数。 输入配置 表2 输入配置 参数 参数说明 参数名称 根据实际代码中的输入数据参数定义此处的名称。此处设置的代码路径参数必须与算法代码中解析的训练输入数据参数保持一致,否则您的算法代码无法获取正确的输入数据。 例如,算法代码中使用argparse解析的data_url作为输入数据的参数,那么创建算法时就需要配置输入数据的参数名称为“data_url”。 描述 输入参数的说明,用户可以自定义描述。 获取方式 输入参数的获取方式,默认使用“超参”,也可以选择“环境变量”。 输入约束 开启后,用户可以根据实际情况限制数据输入来源。输入来源可以选择“数据存储位置”或者“ModelArts数据集”。 如果用户选择数据来源为ModelArts数据集,还可以约束以下三种: 标注类型。数据类型请参考标注数据。 数据格式。可选“Default”和“CarbonData”,支持多选。其中“Default”代表Manifest格式。 数据切分。仅“图像分类”、“物体检测”、“文本分类”和“声音分类”类型数据集支持进行数据切分功能。 可选“仅支持切分的数据集”、“仅支持未切分数据集”和“无限制”。数据切分详细内容可参考发布数据版本。 添加 用户可以根据实际算法添加多个输入数据来源。 输出配置 表3 输出配置 参数 参数说明 参数名称 根据实际代码中的训练输出参数定义此处的名称。此处设置的代码路径参数必须与算法代码中解析的训练输出参数保持一致,否则您的算法代码无法获取正确的输出路径。 例如,算法代码中使用argparse解析的train_url作为训练输出数据的参数,那么创建算法时就需要配置输出数据的参数名称为“train_url”。 描述 输出参数的说明,用户可以自定义描述。 获取方式 输出参数的获取方式,默认使用“超参”,也可以选择“环境变量”。 添加 用户可以根据实际算法添加多个输出数据路径。
  • 支持的策略 ModelArts支持用户使用自动化搜索功能。自动化搜索功能在零代码修改的前提下,自动找到最合适的超参,有助于提高模型精度和收敛速度。详细的参数配置请参考超参搜索配置。 自动搜索目前仅支持pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64, tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64镜像。
  • 设置算法启动方式 选择“预置框架”创建算法。 用户需根据实际算法代码情况设置“镜像”、“代码目录”和“启动文件”。选择的AI镜像和编写算法代码时选择的框架必须一致。例如编写算法代码使用的是TensorFlow,则在创建算法时也要选择TensorFlow镜像。 表1 启动方式参数说明 参数 说明 “启动方式-预置框架” 选择算法使用的预置框架引擎和引擎版本。勾选“显示旧版镜像”,可以选择旧版预置框架。 “代码目录” 算法代码存储的OBS路径。训练代码、依赖安装包或者预生成模型等训练所需文件上传至该代码目录下。 请注意不要将训练数据放在代码目录路径下。训练数据比较大,训练代码目录在训练作业启动后会下载至后台,可能会有下载失败的风险。 训练作业创建完成后,ModelArts会将代码目录及其子目录下载至训练后台容器中。 例如:OBS路径“obs://obs-bucket/training-test/demo-code”作为代码目录,OBS路径下的内容会被自动下载至训练容器的“${MA_JOB_DIR}/demo-code”目录中,demo-code为OBS存放代码路径的最后一级目录,用户可以根据实际修改。 说明: 编程语言不限。 文件数(含文件、文件夹数量)小于或等于1000个。 文件总大小小于或等于5GB。 “启动文件” 必须为“代码目录”下的文件,且以“.py”结尾,即ModelArts目前只支持使用Python语言编写的启动文件。 代码目录路径中的启动文件为训练启动的入口。 图1 使用自定义脚本创建算法
  • 训练日志的时效性 从日志产生的时效性上可以分为以下3种情况: 实时日志:训练作业实时运行时产生,在ModelArts训练作业详情页面上可以查看。 历史日志:训练作业结束后,可以在ModelArts训练作业详情页面上查看历史日志,ModelArts系统自动保存30天。 永久日志:转存到OBS桶中的训练日志,在创建训练作业时,打开永久保存日志开关设置作业日志路径即可将日志转存至OBS路径。Ascend训练场景下,默认要求填写作业日志在OBS的存放路径,其他资源的训练场景下,永久保存日志开关需要用户手动开启。 图2 开启永久保存日志开关 实时日志和历史日志都是标准日志输出,内容上没有区别。Ascend训练场景下,永久日志中会包含Ascend日志,这部分日志内容在ModelArts界面上看不到。
  • 训练日志定义 训练日志用于记录训练作业运行过程和异常信息,为快速定位作业运行中出现的问题提供详细信息。用户代码中的标准输出、标准错误信息会在训练日志中呈现。在ModelArts中训练作业遇到问题时,可首先查看日志,多数场景下的问题可以通过日志报错信息直接定位。 训练日志包括普通训练日志和Ascend相关日志。 普通日志说明:当使用Ascend之外的资源训练时仅产生普通训练日志,普通日志中包含训练进程日志、pip-requirement.txt安装日志和ModelArts平台日志。 Ascend场景日志说明:使用Ascend资源训练时会产生device日志、plog日志、proc log单卡训练日志、MindSpore日志、普通日志。 图1 ModelArts训练日志 只有MindSpore+Ascend训练场景下会产生单独的MindSpore日志。其他AI引擎的日志都包含在普通日志中,无法区分。
  • (可选)选择训练模式 当训练作业的算法框架选用的是MindSpore类引擎、资源池类型选用的是Ascend资源时,支持选择训练模式。ModelArts提供了3种训练模式供用户选择,支持根据实际场景获取不同的诊断信息,详细使用请参见训练模式选择。 普通模式:默认训练场景。 高性能模式:最小化调测信息,可以提升运行速度,适合于网络稳定并追求高性能的场景。 故障诊断模式:收集更多的信息用于定位,适合于执行出现问题需要收集故障信息进行定位的场景。此模式提供故障诊断,用户可以根据实际需求选择诊断类别。
  • 后续操作 当创建训练作业的参数配置完成后,单击“提交”,在信息确认页面单击“确定”,提交创建训练作业任务。 训练作业一般需要运行一段时间,前往训练作业列表,可以查看训练作业的基本情况。 在训练作业列表中,刚创建的训练作业状态为“等待中”。 当训练作业的状态变为“已完成”时,表示训练作业运行结束,其生成的模型将存储至对应的“输出”目录中。 当训练作业的状态变为“运行失败”或“异常”时,可以单击训练作业的名称进入详情页面,通过查看日志等手段处理问题。 训练作业运行过程中将按照选择的资源进行计费。
  • 配置训练参数 训练过程中需要从OBS桶或者数据集中获取输入数据进行模型训练,训练输出的结果也要存储至OBS桶中。创建训练作业时可以参考表4配置输入、输出、超参、环境变量等参数。 创建训练作业时选择的创建方式不同,训练作业的输入、输出和超参显示不同。如果参数值置灰,即表示该参数已经在算法代码中配置了且不支持修改。 表4 创建训练作业的训练参数 参数名称 子参数 说明 输入 参数名称 算法代码需要通过“输入”的“参数名称”去读取训练的输入数据。 建议设置为“data_url”。训练输入参数要与所选算法的“输入”参数匹配,请参见创建算法时的表2。 数据集 单击“数据集”,在ModelArts数据集列表中勾选目标数据集并选择对应的版本。 训练启动时,系统将自动下载输入路径中的数据到训练运行容器。 说明: ModelArts数据管理模块在重构升级中,对未使用过数据管理的用户不可见。建议新用户将训练数据存放至OBS桶中使用。 数据存储位置 单击“数据存储位置”,从OBS桶中选择训练输入数据的存储位置。 训练启动时,系统将自动下载输入路径中的数据到训练运行容器。 获取方式 以参数名称为“data_path”的训练输入为例,说明获取方式的作用。 当参数的“获取方式”为“超参”时,可以参考如下代码来读取数据。 import argparse parser = argparse.ArgumentParser() parser.add_argument('--data_path') args, unknown = parser.parse_known_args() data_path = args.data_path 当参数的“获取方式”为“环境变量”时,可以参考如下代码来读取数据。 import os data_path = os.getenv("data_path", "") 输出 参数名称 算法代码需要通过“输出”的“参数名称”去读取训练的输出目录。 建议设置为“train_url”。训练输出参数要与所选算法的“输出”参数匹配,请参见创建算法时的表3。 数据存储位置 单击“数据存储位置”,从OBS桶中选择训练输出数据的存储位置。训练过程中,系统将自动从训练容器的本地代码目录下同步文件到数据存储位置。 说明: 数据存储位置仅支持OBS路径。为避免数据存储冲突,建议选择一个空目录用作“数据存储位置”。 获取方式 以参数名称为“train_url”的训练输出为例,说明获取方式的作用。 当参数的“获取方式”为“超参”时,可以参考如下代码来读取数据。 import argparse parser = argparse.ArgumentParser() parser.add_argument('--train_url') args, unknown = parser.parse_known_args() train_url = args.train_url 当参数的“获取方式”为“环境变量”时,可以参考如下代码来读取数据。 import os train_url = os.getenv("train_url", "") 预下载至本地目录 选择是否将输出目录下的文件预下载至本地目录。 不下载:表示启动训练作业时不会将输出数据的存储位置中的文件下载到训练容器的本地代码目录中。 下载:表示系统会在启动训练作业时自动将输出数据的存储位置中的所有文件下载到训练容器的本地代码目录中。下载时间会随着文件变大而变长,为了防止训练时间过长,请及时清理训练容器的本地代码目录中的无用文件。如果要使用断点续训练和增量训练,则必须选择“下载”。 超参 - 超参用于训练调优。此参数由选择的算法决定,如果在算法中已经定义了超参,则此处会显示算法中所有的超参。 超参支持修改和删除,状态取决于算法中的超参“约束”设置,详情请参见定义超参。 环境变量 - 根据业务需求增加环境变量。训练容器中预置的环境变量请参见查看训练容器环境变量。 故障自动重启 - 打开开关后,可以设置故障的重启次数,训练作业失败时会自动重新下发并运行训练作业。在训练作业详情页中,用户可以查看训练作业发生故障后的重启次数。 此参数默认关闭。 打开故障自动重启后,需要设置重启次数,重启次数取值范围1~3次,重启次数设置后无法修改。
  • 前提条件 已经将用于训练作业的数据上传至OBS目录。 已经在OBS目录下创建了至少1个空的文件夹,用于存储训练输出的内容。 ModelArts不支持加密的OBS桶,创建OBS桶时,请勿开启桶加密。 由于训练作业运行需消耗资源,为了避免训练失败请确保账户未欠费。 确保使用的OBS目录与ModelArts在同一区域。 检查是否配置了访问授权。如果未配置,请参见使用委托授权完成操作。 (可选)如果使用已有算法创建训练作业,需要确认“算法管理”中已准备好算法,具体操作请参见准备算法简介。 (可选)如果使用 自定义镜像 创建训练作业,需要上传镜像到SWR服务中,具体操作请参见如何登录并上传镜像到SWR。
  • 操作流程介绍 创建训练作业的操作步骤如下所示。 进入创建训练作业页面。 配置训练作业基本信息。 根据不同的算法来源,选择不同的训练作业创建方式。 使用预置镜像创建训练作业:选择创建方式(使用预置镜像) 使用自定义镜像创建训练作:选择创建方式(使用自定义镜像) 使用已有算法创建训练作业:选择创建方式(使用我的算法) 使用订阅算法创建训练作业:选择创建方式(使用订阅算法) 配置训练参数:配置训练作业的输入、输出、超参、环境变量等参数。 根据需要选择不同的资源池用于训练作业,推荐使用专属资源池,两者的差异说明请参见专属资源池和公共资源池的能力差异。 配置资源池(公共资源池) 配置资源池(专属资源池) (可选)选择训练模式:当训练作业的算法框架选用的是MindSpore类引擎、资源池类型选用的是Ascend资源时,支持选择训练模式。 (可选)设置标签:如果需要对训练作业进行资源分组管理,可以设置标签。 后续操作。
  • 查找训练作业 当用户使用 IAM 账号登录时,训练作业列表会显示IAM账号下所有训练作业。ModelArts提供查找训练作业功能帮助用户快速查找训练作业。 操作一:单击“只显示自己”按钮,训练作业列表仅显示当前子账号下创建的训练作业。 操作二:按照名称、ID、作业类型、状态、创建时间、算法、资源池等条件筛选的高级搜索。 操作三:单击作业列表右上角“刷新”图标,刷新作业列表。 操作四:自定义列功能设置。 图1 查找训练作业
  • 模型开发简介 AI模型开发的过程,称之为Modeling,一般包含两个阶段: 开发阶段:准备并配置环境,调试代码,使代码能够开始进行深度学习训练,推荐在ModelArts开发环境中调试。 实验阶段:调整数据集、调整超参等,通过多轮实验,训练出理想的模型,推荐在ModelArts训练中进行实验。 两个过程可以相互转换。如开发阶段代码稳定后,则会进入实验阶段,通过不断尝试调整超参来迭代模型;或在实验阶段,有一个可以优化训练的性能的想法,则会回到开发阶段,重新优化代码。 图1 模型开发过程 ModelArts提供了模型训练的功能,方便您查看训练情况并不断调整您的模型参数。您还可以基于不同的数据,选择不同规格的资源池用于模型训练。除支持用户自己开发的模型外,ModelArts还提供了从AI Gallery订阅算法,您可以不关注模型开发,直接使用AI Gallery的算法,通过算法参数的调整,得到一个满意的模型。 请参考以下指导在ModelArts上训练模型: 将已标注的数据上传至OBS服务使用,请参考准备数据。 训练模型的算法实现与指导请参考准备算法章节。 使用控制台创建训练作业请参考创建训练作业章节。使用订阅算法创建训练作业示例请参考使用AI Gallery订阅的算法构建模型。使用自定义算法构建模型示例请参考使用自定义算法在ModelArts上构建模型。 关于训练作业日志、训练资源占用等详情请参考查看训练作业日志。 停止或删除模型训练作业,请参考停止、重建或查找作业。 模型超参自动调优指南,请参考自动模型优化(AutoSearch)。 如果您在训练过程中遇到问题,文档中提供了部分故障案例供参考,请参考训练故障排查。
  • 选择算法的实现方式 ModelArts提供如下方式实现模型训练。 使用订阅算法 ModelArts的AI Gallery,发布了较多官方算法,同时管理了其他开发者分享的算法,不需要进行代码开发,即可使用现成的算法进行模型构建。订阅操作请参考使用订阅算法。 使用预置框架 如果您需要使用自己开发的算法,可以选择使用ModelArts预置框架。ModelArts支持了大多数主流的AI引擎,详细请参见预置训练引擎。这些预置引擎预加载了一些额外的python包,例如numpy等;也支持您通过在代码目录中使用“requirements.txt”文件安装依赖包。使用预置框架创建训练作业请参考使用预置框架(自定义脚本)指导。 使用自定义镜像 订阅算法和预置框架涵盖了大部分的训练场景。针对特殊场景,ModelArts支持用户构建自定义镜像用于模型训练。自定义镜像需上传至 容器镜像服务 (SWR),才能用于ModelArts上训练,请参考使用自定义镜像训练模型。由于自定义镜像的制作要求用户对容器相关知识有比较深刻的了解,除非订阅算法和预置引擎无法满足需求,否则不推荐使用。
  • 选择算法的学习方式 ModelArts支持用户根据实际需求进行不同方式的模型训练。 离线学习 离线学习是训练中最基本的方式。离线学习需要一次性提供训练所需的所有数据,在训练完成后,目标函数的优化就停止了。使用离线学习的优势是模型稳定性高,便于做模型的验证与评估。 增量学习 增量学习是一个连续不断的学习过程。相较于离线学习,增量学习不需要一次性存储所有的训练数据,缓解了存储资源有限的问题;另一方面,增量学习节约了重新训练中需要消耗大量算力、时间以及经济成本。
  • 什么是断点续训练和增量训练 断点续训练是指因为某些原因(例如容错重启、资源抢占、作业卡死等)导致训练作业还未完成就被中断,下一次训练可以在上一次的训练基础上继续进行。这种方式对于需要长时间训练的模型而言比较友好。 增量训练是指增加新的训练数据到当前训练流程中,扩展当前模型的知识和能力。 断点续训练和增量训练均是通过checkpoint机制实现。 checkpoint的机制是:在模型训练的过程中,不断地保存训练结果(包括但不限于EPOCH、模型权重、优化器状态、调度器状态)。即便模型训练中断,也可以基于checkpoint接续训练。 当需要从训练中断的位置接续训练,只需要加载checkpoint,并用checkpoint信息初始化训练状态即可。用户需要在代码里加上reload ckpt的代码,使能读取前一次训练保存的预训练模型。
  • ModelArts中如何实现断点续训练和增量训练 在ModelArts训练中实现断点续训练或增量训练,建议使用“训练输出”功能。 在创建训练作业时,设置训练“输出”参数为“train_url”,在指定的训练输出的数据存储位置中保存checkpoint,且“预下载至本地目录”选择“下载”。选择预下载至本地目录时,系统在训练作业启动前,自动将数据存储位置中的checkpoint文件下载到训练容器的本地目录。 断点续训练建议和训练容错检查(即故障自动重启)功能同时使用。在创建训练作业页面,开启“故障自动重启”开关。训练环境预检测失败、或者训练容器硬件检测故障、或者训练作业失败时会自动重新下发并运行训练作业。
  • 如何判断训练作业资源利用率高低 在训练管理的训练作业列表页可以查看作业资源利用率情况。当作业worker-0实例的GPU/NPU的平均利用率低于50%时,在训练作业列表中会进行告警提示。 图2 作业列表显示作业资源利用率情况 此处的作业资源利用率只涉及GPU和NPU资源。作业worker-0实例的GPU/NPU平均利用率计算方法:将作业worker-0实例的各个GPU/NPU加速卡每个时间点的利用率汇总取平均值。
  • 如何提高训练作业资源利用率 适当增大batch_size:较大的batch_size可以让GPU/NPU计算单元获得更高的利用率,但是也要根据实际情况来选择batch_size,防止batch_YLLsize过大导致内存溢出。 提升数据读取的效率:如果读取一个batch数据的时间要长于GPU/NPU计算一个batch的时间,就有可能出现GPU/NPU利用率上下浮动的情况。建议优化数据读取和数据增强的性能,例如将数据读取并行化,或者使用NVIDIA Data Loading Library(DALI)等工具提高数据增强的速度。 模型保存不要太频繁:模型保存操作一般会阻塞训练,如果模型较大,并且较频繁地进行保存,就会影响GPU/NPU利用率。同理,其他非GPU/NPU操作尽量不要阻塞训练主进程太多的时间,如日志打印,保存训练指标信息等。
  • Ascend场景日志说明 使用Ascend资源运行训练作业时,会产生Ascend相关日志。Ascend训练场景下会生成device日志、plog日志、proc log单卡训练日志、MindSpore日志、普通日志。 其中,Ascend训练场景下的普通日志包括训练进程日志、pip-requirement.txt安装日志、ModelArts平台日志、ma-pre-start日志和davincirun日志。 Ascend日志结构举例说明如下: obs://dgg-test-user/snt9-test-cases/log-out/ # 作业日志路径 ├──modelarts-job-9ccf15f2-6610-42f9-ab99-059ba049a41e ├── ascend ├── process_log ├── rank_0 ├── plog # plog日志 ... ├── device-0 # device日志 ... ├── mindspore # MindSpore日志 ├──modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-worker-0.log # 普通日志 ├──modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-proc-rank-0-device-0.txt # proc log单卡训练日志 表1 Ascend场景下日志说明 日志类型 日志说明 日志文件名 device日志 HOST侧用户进程,在DEVICE侧产生的AICPU、HCCP的日志,回传到HOST侧(训练容器)。 在训练进程结束后,该日志会上传至ModelArts训练容器的 ~/ascend/log/目录中。 如果出现如下情况,则device日志会获取不到。 节点异常重启 被主动停止的节点 “~/ascend/log/device-{device-id}/device-{pid}_{timestamp}.log” 其中,pid是HOST侧用户进程号。 样例: device-166_20220718191853764.log plog日志 HOST侧用户进程,在HOST侧产生的日志(例如:ACL /GE)。 默认设置plog日志打印, “ascend/log”文件夹及相关文件默认不生成日志文件。 “~/ascend/log/plog/plog-{pid}_{timestamp}.log” 其中,pid是HOST侧用户进程号。 样例:plog-166_20220718191843620.log proc log proc log是单卡训练日志重定向文件,方便用户快速定位对应计算节点的日志。 “[modelarts-job-uuid]-proc-rank-[rank id]-device-[device logic id].txt” device id为本次训练作业的NPU卡编号,取值单卡为0,8卡为0~7。 例如:Ascend规格为 8*Snt9时,device id取值为0~7;Ascend规格为 1*Snt9时,device id取值为0。 rank id为本次训练作业的全局NPU卡编号,取值为0~计算节点数*卡数-1,单个计算节点下,rank id与device id取值相同。 样例: modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-proc-rank-0-device-0.txt MindSpore日志 使用MindSpore+Ascend训练时会产生单独的MindSpore日志。 MindSpore的日志介绍请参见MindSpore官网。 普通训练日志 ma-pre-start日志(Ascend场景特有):如果用户有定义ma-pre-start脚本,会产生该脚本执行日志。 davincirun日志(Ascend场景特有):Ascend训练进程通过davincirun.py文件启动,该启动文件产生的日志。 训练进程日志:用户训练代码的标准输出。 pip-requirement.txt安装日志:如果用户有定义pip-requirement.txt文件,会产生pip包安装日志。 ModelArts平台日志:ModelArts平台产生的系统日志,主要用于运维人员定位平台问题。 合并输出在日志文件modelarts-job-[job id]-[task id].log中。 task id表示计算节点id,单节点时取值为worker-0,多节点时取值为worker-0、worker-1、...worker-{n-1},n为计算节点个数。 样例: modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-worker-0.log
  • Ascend日志相关环境变量设置 您可以通过ma-pre-start脚本修改默认环境变量配置。 ASCEND_GLOBAL_ LOG _LEVEL=3 # 设置日志级别 debug级别为0;info级别为1;warning级别为2;error级别为3。 ASCEND_SLOG_PRINT_TO_STDOUT=1 # 设置plog日志是否在屏幕上显示,1表示默认设置在屏幕上显示日志。 ASCEND_GLOBAL_EVENT_ENABLE=1 # 设置事件级别 不开启Event日志级别为0;开启Event日志级别为1。 ma-pre-start脚本在与训练启动文件同级的目录下放置,命名为ma-pre-start.sh or ma-pre-start.py脚本。 在训练启动文件被执行前,系统会在 /home/work/user-job-dir/ 目录下执行上述ma-pre-start脚本,使用该机制可以更新容器镜像内安装的Ascend RUN包,或者设置一些训练运行时额外需要的全局环境变量。
共100000条