华为云用户手册

  • ModelArts Standard中如何实现断点续训练 在ModelArts Standard训练中实现断点续训练或增量训练,建议使用“训练输出”功能。 在创建训练作业时,设置训练“输出”参数为“train_url”,在指定的训练输出的数据存储位置中保存Checkpoint,且“预下载至本地目录”选择“下载”。选择预下载至本地目录时,系统在训练作业启动前,自动将数据存储位置中的Checkpoint文件下载到训练容器的本地目录。 图1 训练输出设置 断点续训练建议和训练容错检查(即自动重启)功能同时使用。在创建训练作业页面,开启“自动重启”开关。训练环境预检测失败、或者训练容器硬件检测故障、或者训练作业失败时会自动重新下发并运行训练作业。
  • 前提条件 由于训练作业运行需消耗资源,为了避免训练失败请确保账户未欠费。 已经将用于训练作业的数据上传至OBS目录。 已经在OBS目录下创建了至少1个空的文件夹,用于存储训练输出的内容。 ModelArts不支持加密的OBS桶,创建OBS桶时,请勿开启桶加密。 确保使用的OBS目录与ModelArts在同一区域。 检查是否配置了访问授权。如果未配置,请参见快速配置ModelArts委托授权完成操作。
  • 查看实验详情 在实验列表单击某个实验名称进入实验详情页面。实验详情上方会显示实验的基本信息,下方会显示该实验下的作业列表。 图3 查看实验详情 单击支持编辑实验名称/描述。 打开“只显示自己”按钮,可查看自己创建的纳入实验的作业。 账号下有多个 IAM 用户时,默认只显示当前登录的IAM用户的作业列表。 按照名称、ID、算法、状态、创建时间、作业类型、资源池等条件筛选的高级搜索。 支持作业列表刷新。单击作业列表右上角“刷新”图标,刷新作业列表。 支持自定义列表选项。单击作业列表右上角“设置”图标,自定义选择需要在作业列表中显示的选项。
  • 如何将训练作业纳入实验 训练作业纳入实验的方式是在“创建训练作业”页面指定作业所属实验。有以下几个选项: 纳入新实验:实验不支持单独创建,只支持随着训练作业创建。此处填写新建的实验名称,在提交作业成功后,会同时创建该实验,并将该作业纳入新建的实验中。此处会校验实验名称,如果重名则无法提交作业。 纳入已有实验:您可以在下拉框中选择已有实验,将作业纳入已存在的实验。 不纳入实验:如果您不想通过实验管理您的作业,可以选择此选项。不纳入实验的作业无法在训练作业首页的“实验”中查看到。
  • 查找训练作业 当用户使用IAM账号登录时,训练作业列表会显示IAM账号下所有训练作业。ModelArts提供查找训练作业功能帮助用户快速查找训练作业。 操作一:单击“只显示自己”按钮,训练作业列表仅显示当前子账号下创建的训练作业。 操作二:按照名称、ID、作业类型、状态、创建时间、算法、资源池等条件筛选的高级搜索。 操作三:单击作业列表右上角“刷新”图标,刷新作业列表。 操作四:自定义列功能设置。 图1 查找训练作业
  • 复制数据集到本地 复制数据集到本地主要是为了防止长时间访问OBS容易导致OBS连接中断使得作业卡住,所以一般先将数据复制到本地再进行操作。 数据集复制有两种方式,推荐使用OBS路径复制。 OBS路径(推荐) 直接使用moxing的copy_parallel接口,复制对应的OBS路径。 ModelArts数据管理中的数据集(即manifest文件格式) 使用moxing的copy_manifest接口将文件复制到本地并获取新的manifest文件路径,然后使用SDK解析新的manifest文件。 ModelArts数据管理模块在重构升级中,对未使用过数据管理的用户不可见。建议新用户将训练数据存放至OBS桶中使用。
  • 添加输出目录 添加输出目录的代码比较简单,即在代码中添加一个输出评估结果文件的目录,被称为train_url,也就是页面上的训练输出位置。并把train_url添加到使用的函数analysis中,使用save_path来获取train_url。示例代码如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 FLAGS = tf.app.flags.FLAGS tf.app.flags.DEFINE_string('model_url', '', 'path to saved model') tf.app.flags.DEFINE_string('data_url', '', 'path to output files') tf.app.flags.DEFINE_string('train_url', '', 'path to output files') tf.app.flags.DEFINE_string('adv_param_json', '{"attack_method":"FGSM","eps":40}', 'params for adversarial attacks') FLAGS(sys.argv, known_only=True) ... # analyse res = analyse( task_type=task_type, pred_list=pred_list, label_list=label_list, name_list=file_name_list, label_map_dict=label_dict, save_path=FLAGS.train_url)
  • 如何提高训练作业资源利用率 适当增大batch_size:较大的batch_size可以让GPU/NPU计算单元获得更高的利用率,但是也要根据实际情况来选择batch_size,防止batch_size过大导致内存溢出。 提升数据读取的效率:如果读取一个batch数据的时间要长于GPU/NPU计算一个batch的时间,就有可能出现GPU/NPU利用率上下浮动的情况。建议优化数据读取和数据增强的性能,例如将数据读取并行化,或者使用NVIDIA Data Loading Library(DALI)等工具提高数据增强的速度。 模型保存不要太频繁:模型保存操作一般会阻塞训练,如果模型较大,并且较频繁地进行保存,就会影响GPU/NPU利用率。同理,其他非GPU/NPU操作尽量不要阻塞训练主进程太多的时间,如日志打印,保存训练指标信息等。
  • 如何判断训练作业资源利用率高低 在模型训练的训练作业列表页可以查看作业资源利用率情况。当作业worker-0实例的GPU/NPU的平均利用率低于50%时,在训练作业列表中会进行告警提示。 图1 作业列表显示作业资源利用率情况 此处的作业资源利用率只涉及GPU和NPU资源。作业worker-0实例的GPU/NPU平均利用率计算方法:将作业worker-0实例的各个GPU/NPU加速卡每个时间点的利用率汇总取平均值。
  • 如何查看训练作业日志 在训练作业详情页,训练日志窗口提供日志预览、日志下载、日志中搜索关键字、系统日志过滤能力。 预览 系统日志窗口提供训练日志预览功能,如果训练作业有多个节点,则支持查看不同计算节点的日志,通过右侧下拉框可以选择目标节点预览。 图4 查看不同计算节日志 当日志文件过大时,系统日志窗口仅加载最新的部分日志,并在日志窗口上方提供全量日志访问链接。打开该链接可在新页面查看全部日志。 图5 查看全量日志 如果全部日志超过500M,可能会引起浏览页面卡顿,建议您直接下载日志查看。 预览链接在生成后的一小时内,支持任何人打开并查看。您可以分享链接至他人。 请注意日志中不能包含隐私内容,否则会造成信息泄露。 下载 训练日志仅保留30天,超过30天会被清理。如果用户需要永久保存日志,请单击系统日志窗口右上角下载按钮下载日志至本地保存,支持批量下载多节点日志。用户也可以在创建训练作业时打开永久保存日志按钮,保存训练日志至指定OBS路径。 针对使用Ascend规格创建的训练作业,部分系统日志暂不支持直接在训练日志窗口下载,请在创建训练作业时指定OBS路径用于保存训练日志。 图6 下载日志 搜索关键字 用户可以在系统日志右上角的搜索框搜索关键字,如图7所示。 图7 搜索关键字 系统支持高亮关键字并实现搜索结果间的跳转。搜索功能仅支持搜索当前页面加载的日志,如果日志加载不全(请关注页面提示)则需要下载或者通过打开全量日志访问链接进行搜索。全量日志访问链接打开的新页面可以通过Ctrl+F进行搜索。 系统日志过滤 图8 系统日志复选框 如果勾选了系统日志复选框,则日志中呈现系统日志和用户日志。如果去勾选,则只显示用户日志。 查看动态路由加速日志 当训练作业的实例数大于或等于3,环境变量配置了“ROUTE_PLAN=true”,且使用的是Ascend资源时,则可以根据Rank-ID查看动态路由加速的日志,还可以查看训练作业是否启用了动态路由加速。 图9 查看动态路由加速日志
  • 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单卡训练日志 表2 Ascend场景下日志说明 日志类型 日志说明 日志文件名 device日志 HOST侧用户进程,在DEVICE侧产生的AICPU、HCCP的日志,回传到HOST侧(训练容器)。 如果出现如下情况,则device日志会获取不到。 节点异常重启 被主动停止的节点 在训练进程结束后,该日志会生成到训练容器中。其中,使用MindSpore预置框架训练的device日志会自动上传到OBS,使用其他预置框架和自定义镜像训练的device日志如果需要自动上传到OBS,则需要在代码中配置ASCEND_PRO CES S_ LOG _PATH,具体请参考如下示例。 # set npu plog env ma_vj_name=`echo ${MA_VJ_NAME} | sed 's:ma-job:modelarts-job:g'` task_name="worker-${VC_TASK_INDEX}" task_plog_path=${MA_LOG_DIR}/${ma_vj_name}/${task_name} mkdir -p ${task_plog_path} export ASCEND_PROCESS_LOG_PATH=${task_plog_path} “~/ascend/log/device-{device-id}/device-{pid}_{timestamp}.log” 其中,pid是HOST侧用户进程号。 样例: device-166_20220718191853764.log plog日志 HOST侧用户进程,在HOST侧产生的日志(例如:ACL /GE)。 plog日志会生成到训练容器中。其中,使用MindSpore预置框架训练的plog日志会自动上传到OBS,使用自定义镜像训练的plog日志如果需要自动上传到OBS,则需要在代码中配置ASCEND_PROCESS_LOG_PATH,具体请参考如下示例。 # set npu plog env ma_vj_name=`echo ${MA_VJ_NAME} | sed 's:ma-job:modelarts-job:g'` task_name="worker-${VC_TASK_INDEX}" task_plog_path=${MA_LOG_DIR}/${ma_vj_name}/${task_name} mkdir -p ${task_plog_path} export ASCEND_PROCESS_LOG_PATH=${task_plog_path} “~/ascend/log/plog/plog-{pid}_{timestamp}.log” 其中,pid是HOST侧用户进程号。 样例:plog-166_20220718191843620.log proc log proc log是单卡训练日志重定向文件,方便用户快速定位对应计算节点的日志。使用自定义镜像训练的作业不涉及proc log;使用预置框架训练的proc log日志会生成到训练容器中,且自动保存到OBS。 “[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预置框架训练的plog日志会自动上传到OBS,使用自定义镜像训练的plog日志如果需要自动上传到OBS,则需要在代码中配置ASCEND_PROCESS_LOG_PATH,具体请参考如下示例。 # set npu plog env ma_vj_name=`echo ${MA_VJ_NAME} | sed 's:ma-job:modelarts-job:g'` task_name="worker-${VC_TASK_INDEX}" task_plog_path=${MA_LOG_DIR}/${ma_vj_name}/${task_name} mkdir -p ${task_plog_path} export ASCEND_PROCESS_LOG_PATH=${task_plog_path} MindSpore的日志介绍请参见MindSpore官网。 普通训练日志 普通训练日志会生成到训练容器的“/home/ma-user/modelarts/log”目录中,且自动上传到OBS。普通训练日志的类型如下所示。 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
  • 训练日志定义 训练日志用于记录训练作业运行过程和异常信息,为快速定位作业运行中出现的问题提供详细信息。用户代码中的标准输出、标准错误信息会在训练日志中呈现。在ModelArts中训练作业遇到问题时,可首先查看日志,多数场景下的问题可以通过日志报错信息直接定位。 训练日志包括普通训练日志和Ascend相关日志。 普通日志说明:当使用Ascend之外的资源训练时仅产生普通训练日志,普通日志中包含训练进程日志、pip-requirement.txt安装日志和ModelArts平台日志。 Ascend场景日志说明:使用Ascend资源训练时会产生device日志、plog日志、proc log单卡训练日志、MindSpore日志、普通日志。 图1 ModelArts训练日志 只有MindSpore+Ascend训练场景下会产生单独的MindSpore日志。其他AI引擎的日志都包含在普通日志中,无法区分。
  • 训练日志的时效性 从日志产生的时效性上可以分为以下3种情况: 实时日志:训练作业实时运行时产生,在ModelArts训练作业详情页面上可以查看。 历史日志:训练作业结束后,可以在ModelArts训练作业详情页面上查看历史日志,ModelArts系统自动保存30天。 永久日志:转存到OBS桶中的训练日志,在创建训练作业时,打开永久保存日志开关设置作业日志路径即可将日志转存至OBS路径。 图2 开启永久保存日志开关 实时日志和历史日志都是标准日志输出,内容上没有区别。Ascend训练场景下,永久日志中会包含Ascend日志,这部分日志内容在ModelArts界面上看不到。
  • 普通日志说明 普通日志中包含训练进程日志、pip-requirement.txt安装日志和ModelArts Standard平台日志。 表1 普通日志类型 日志类型 说明 训练进程日志 用户训练代码的标准输出。 pip-requirement.txt安装日志 如果用户有定义pip-requirement.txt文件,会产生pip包安装日志。 ModelArts平台日志 ModelArts平台产生的系统日志,主要用于运维人员定位平台问题。 普通日志的文件格式如下,其中task id为训练作业中的节点id。 统一日志格式:modelarts-job-[job id]-[task id].log 样例:log/modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-worker-0.log 单机训练作业只会生成一个日志文件,单机作业的task id默认为worker-0。 分布式场景下有多个节点日志文件并存,通过task id区分不同节点,例如:worker-0,worker-1等。 训练进程日志、“pip-requirement.txt”安装日志和ModelArts平台日志都包含在普通日志文件“modelarts-job-[job id]-[task id].log”中。 ModelArts平台日志可以通过关键字在训练的普通日志文件“modelarts-job-[job id]-[task id].log”中筛查,筛查关键字有:“[ModelArts Service Log]”或“Platform=ModelArts-Service”。 类型一:[ModelArts Service Log] xxx [ModelArts Service Log][init] download code_url: s3://dgg-test-user/snt9-test-cases/mindspore/lenet/ 类型二:time=“xxx” level=“xxx” msg=“xxx” file=“xxx” Command=xxx Component=xxx Platform=xxx time="2021-07-26T19:24:11+08:00" level=info msg="start the periodic upload task, upload period = 5 seconds " file="upload.go:46" Command=obs/upload Component=ma-training-toolkit Platform=ModelArts-Service
  • (可选)选择训练模式 当训练作业的算法框架选用的是预置框架的MindSpore类引擎、资源池类型选用的是Ascend资源时,则支持选择训练模式。ModelArts提供了3种训练模式供用户选择,支持根据实际场景获取不同的诊断信息。 普通模式:默认训练场景。 高性能模式:最小化调测信息,可以提升运行速度,适合于网络稳定并追求高性能的场景。 故障诊断模式:收集更多的信息用于定位,适合于执行出现问题需要收集故障信息进行定位的场景。此模式提供故障诊断,用户可以根据实际需求选择诊断类别。
  • 后续操作 当创建训练作业的参数配置完成后,单击“提交”,在信息确认页面单击“确定”,提交创建训练作业任务。 训练作业一般需要运行一段时间,前往训练作业列表,可以查看训练作业的基本情况。 在训练作业列表中,刚创建的训练作业状态为“等待中”。 当训练作业的状态变为“已完成”时,表示训练作业运行结束,其生成的模型将存储至对应的“输出”目录中。 当训练作业的状态变为“运行失败”或“异常”时,可以单击训练作业的名称进入详情页面,通过查看日志等手段处理问题。
  • 配置训练参数 训练过程中可以从OBS桶或者数据集中获取输入数据进行模型训练,训练输出的结果也支持存储至OBS桶中。创建训练作业时可以参考表4配置输入、输出、超参、环境变量等参数。 创建训练作业时选择的创建方式不同,训练作业的输入、输出和超参显示不同。如果参数值置灰,即表示该参数已经在算法代码中配置了且不支持修改。 表4 配置训练参数 参数名称 子参数 说明 输入 参数名称 算法代码需要通过“输入”的“参数名称”去读取训练的输入数据。 建议设置为“data_url”。训练输入参数要与所选算法的“输入”参数匹配,请参见创建算法时的表4。 数据集 单击“数据集”,在ModelArts数据集列表中勾选目标数据集并选择对应的版本。 训练启动时,系统将自动下载输入路径中的数据到训练运行容器。 数据存储位置 单击“数据存储位置”,从OBS桶中选择训练输入数据的存储位置。文件总大小要小于或等于10GB,文件数要小于或等于1000个,单个文件大小要小于或等于1GB。 训练启动时,系统将自动下载输入路径中的数据到训练运行容器。 获取方式 以参数名称为“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”。训练输出参数要与所选算法的“输出”参数匹配,请参见创建算法时的表5。 数据存储位置 单击“数据存储位置”,从OBS桶中选择训练输出数据的存储位置。文件总大小要小于或等于1GB,文件数要小于或等于128个,单个文件大小要小于或等于128MB。 训练过程中,系统将自动从训练容器的本地代码目录下同步文件到数据存储位置。 说明: 数据存储位置仅支持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", "") 预下载至本地目录 选择是否将输出目录下的文件预下载至本地目录。 不下载:表示启动训练作业时不会将输出数据的存储位置中的文件下载到训练容器的本地代码目录中。 下载:表示系统会在启动训练作业时自动将输出数据的存储位置中的所有文件下载到训练容器的本地代码目录中。下载时间会随着文件变大而变长,为了防止训练时间过长,请及时清理训练容器的本地代码目录中的无用文件。如果要使用设置断点续训练,则必须选择“下载”。 超参 - 超参用于训练调优。此参数由选择的算法决定,如果在算法中已经定义了超参,则此处会显示算法中所有的超参。 超参支持修改和删除,状态取决于算法中的超参“约束”设置,详情请参见表6。 单击“本地上传”可以本地批量导入超参,需要按模板填写超参且总数不能超过100条,否则会导入失败。 说明: 为保证数据安全,请勿输入敏感信息,例如明文密码。 环境变量 - 根据业务需求增加环境变量。训练容器中预置的环境变量请参见管理训练容器环境变量。 单击“本地上传”可以本地批量导入环境变量,需要按模板填写环境变量且总数不能超过100条,否则会导入失败。 说明: 为保证数据安全,请勿输入敏感信息,例如明文密码。 自动重启 - 打开开关后,可以设置重启次数和是否启用无条件自动重启。 打开自动重启开关后,当由于环境问题导致训练作业异常时,系统将自动修复异常或隔离节点,并重启训练作业,提高训练成功率。为了避免丢失训练进度、浪费算力,开启此功能前请确认代码已适配断点续训,操作指导请参见设置断点续训练。 “重启次数”的取值范围是1~128,缺省值为3。创建训练后不支持修改重启次数,请合理设置次数。 勾选“无条件自动重启”后,只要系统检测到训练异常,就无条件重启训练作业。为了避免无效重启浪费算力资源,系统最多只支持连续无条件重启3次。 系统支持自动监控作业进程的状态和资源利用率来判定作业是否卡死,开启“作业卡死重启”开关后,支持将标记为卡死的作业进行进程级自动重启,以提高资源使用率。因系统无法核实代码逻辑且检测存在周期性,卡死检测存在一定的误报概率,开启开关即表示接受误报率。为了避免无效重启浪费算力资源,系统最多只支持连续作业卡死重启3次。 当训练过程中触发了自动重启,则系统会记录重启信息,在训练作业详情页可以查看故障恢复详情,具体请参见训练作业重调度。
  • 配置训练作业基本信息 在创建训练作业页面填写训练作业基本信息。 表1 创建训练作业的基本信息 参数名称 说明 名称 必填,训练作业的名称。 系统会自动生成一个名称,可以根据业务需求重新命名,命名规则如下: 支持1~64位字符。 可以包含大小写字母、数字、中划线(-)或下划线(_)。 描述 训练作业的简介,便于在训练作业列表了解作业信息。 设置实验 将训练作业分类有序地放入实验中进行管理。 如果选择“纳入新实验”,需要配置“新建实验名称”和“新建实验描述”。 如果选择“纳入已有实验”,需要选择“实验名称”。 如果选择“不纳入实验”,则不在实验中进行统一管理。
  • 选择创建方式(自定义算法) 如果在算法管理中已经创建算法,此处建议选择““我的算法””页签中已经准备好的算法。如果没有已经准备好的算法,此处可以选择“自定义算法”创建方式。如果选择使用自定义算法创建训练作业,则参考表2选择训练作业的创建方式。 表2 创建训练作业的创建方式(使用自定义算法) 参数名称 说明 创建方式 必选,选择“自定义算法”。 启动方式 必选,选择“预置框架”,并选择训练作业要使用的预置框架引擎和引擎版本。 如果引擎版本选择“自定义”,则需要配置“镜像”参数,选择自定义镜像用于训练作业。 镜像 仅当预置框架的引擎版本选择“自定义”时才显示该参数,且是必填参数。 容器镜像地址的填写支持如下方式。 选择自有镜像或他人共享的镜像:单击右边的“选择”,从容器镜像中选择用于训练的容器镜像。所需镜像需要提前上传到SWR服务中。 选择公开镜像:直接输入SWR服务中公开镜像的地址。地址直接填写“组织名称/镜像名称:版本名称”,不需要带 域名 信息,系统会自动拼接域名地址。 代码来源 选择训练代码来源。 对象OBS存储:如果训练代码存放在OBS中,则选择“对象OBS存储”。 文件存储:如果训练代码存放在文件存储中,则选择“文件存储”。 代码目录 仅当“代码来源”选择“对象OBS存储”时才显示该参数。 必填,选择训练代码文件所在的OBS目录。 需要提前将代码上传至OBS桶中,目录内文件总大小要小于或等于5GB,文件数要小于或等于1000个,文件深度要小于或等于32。 训练代码文件会在训练作业启动的时候被系统自动下载到训练容器的“${MA_JOB_DIR}/demo-code”目录中,“demo-code”为存放代码目录的最后一级OBS目录。例如,“代码目录”选择的是“/test/code”,则训练代码文件会被下载到训练容器的“${MA_JOB_DIR}/code”目录中。 启动文件 必填,选择代码目录中训练作业的Python启动脚本。 ModelArts只支持使用Python语言编写的启动文件,因此启动文件必须以“.py”结尾。 本地代码目录 仅当“代码来源”选择“对象OBS存储”时才显示该参数。 指定训练容器的本地目录,启动训练时系统会将代码目录下载至此目录。 此参数可选,默认本地代码目录为“/home/ma-user/modelarts/user-job-dir”。 工作目录 训练时,系统会自动cd到此目录下执行启动文件。 选择预置框架+自定义时,该功能的后台行为与直接基于预置框架运行训练作业相同,例如: 系统将会自动注入一系列环境变量。 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 系统将会自动添加预置框架关联的超参。
  • 选择创建方式(使用自定义镜像) 如果选择使用自定义镜像创建训练作业,则参考表3选择训练作业的创建方式。 表3 创建训练作业的创建方式(使用自定义镜像) 参数名称 说明 创建方式 必选,选择“自定义算法”。 启动方式 必选,选择“自定义”。 镜像 必填,填写容器镜像的地址。 容器镜像地址的填写支持如下方式。 选择自有镜像或他人共享的镜像:单击右边的“选择”,从容器镜像中选择用于训练的容器镜像。所需镜像需要提前上传到SWR服务中。 选择公开镜像:直接输入SWR服务中公开镜像的地址。地址直接填写“组织名称/镜像名称:版本名称”,不需要带域名信息,系统会自动拼接域名地址。 代码目录 选择训练代码文件所在的OBS目录。如果自定义镜像中不含训练代码则需要配置该参数,如果自定义镜像中已包含训练代码则不需要配置。 需要提前将代码上传至OBS桶中,目录内文件总大小要小于或等于5GB,文件数要小于或等于1000个,文件深度要小于或等于32。 训练代码文件会在训练作业启动的时候被系统自动下载到训练容器的“${MA_JOB_DIR}/demo-code”目录中,“demo-code”为存放代码目录的最后一级OBS目录。例如,“代码目录”选择的是“/test/code”,则训练代码文件会被下载到训练容器的“${MA_JOB_DIR}/code”目录中。 运行用户ID 容器运行时的用户ID,该参数为选填参数,建议使用默认值1000。 如果需要指定uid,则uid数值需要在规定范围内,不同资源池的uid范围如下: 公共资源池:1000-65535 专属资源池:0-65535 如果运行用户ID配置为0,则训练容器中的运行用户是root。 启动命令 必填,镜像的启动命令。 运行训练作业时,当“代码目录”下载完成后,“启动命令”会被自动执行。 如果训练启动脚本用的是py文件,例如“train.py”,则启动命令如下所示。 python ${MA_JOB_DIR}/demo-code/train.py 如果训练启动脚本用的是sh文件,例如“main.sh”,则启动命令如下所示。 bash ${MA_JOB_DIR}/demo-code/main.sh 启动命令支持使用“;”和“&&”拼接多条命令,命令中的“demo-code”为存放代码目录的最后一级OBS目录,以实际情况为准。 当存在输入管道、输出管道、或是超参的情况下,请保证启动命令的最后一条命令是运行训练脚本。 原因:系统会将输入管道、输出管道、以及超参添加到启动命令的末尾,如果最后一条命令不是运行训练脚本则会报错。 例如:启动命令的最后一条是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,就会报错。 说明: 为保证数据安全,请勿输入敏感信息,例如明文密码。 本地代码目录 仅当“代码来源”选择“对象OBS存储”时才显示该参数。 指定训练容器的本地目录,启动训练时系统会将代码目录下载至此目录。 此参数可选,默认本地代码目录为“/home/ma-user/modelarts/user-job-dir”。 工作目录 训练时,系统会自动cd到此目录下执行启动文件。 训练支持的自定义镜像使用说明请参考自定义镜像的启动命令规范。
  • 操作流程介绍 创建训练作业的操作步骤如下所示。 进入创建训练作业页面。 配置训练作业基本信息。 根据不同的算法来源,选择不同的训练作业创建方式。 使用已有算法创建训练作业:选择创建方式(使用我的算法) 使用订阅算法创建训练作业:选择创建方式(使用订阅算法) 使用预置镜像创建训练作业:选择创建方式(自定义算法) 使用自定义镜像创建训练作:选择创建方式(使用自定义镜像) 配置训练参数:配置训练作业的输入、输出、超参、环境变量等参数。 根据需要选择不同的资源池用于训练作业,推荐使用专属资源池,两者的差异说明请参见专属资源池和公共资源池的能力差异。 配置资源池(公共资源池) 配置资源池(专属资源池) (可选)选择训练模式:当训练作业的算法框架选用的是预置框架的MindSpore类引擎、资源池类型选用的是Ascend资源时,则支持选择训练模式。 (可选)设置标签:如果需要对训练作业进行资源分组管理,可以设置标签。 后续操作。
  • 前提条件 已经将用于训练作业的数据上传至OBS目录。 已经在OBS目录下创建了至少1个空的文件夹,用于存储训练输出的内容。 ModelArts不支持加密的OBS桶,创建OBS桶时,请勿开启桶加密。 由于训练作业运行需消耗资源,为了避免训练失败请确保账户未欠费。 确保使用的OBS目录与ModelArts在同一区域。 检查是否配置了访问授权。如果未配置,请参见快速配置ModelArts委托授权完成操作。 已经准备好训练算法,具体操作请参见创建算法。
  • 配置路径说明 创建算法时,您需要在创建页面提供代码目录路径、代码目录路径中的启动文件、训练输入路径参数和训练输出路径参数。这四种输入搭建了用户代码和ModelArts Standard后台交互的桥梁。 代码目录路径 您需要在OBS桶中指定代码目录,并将训练代码、依赖安装包或者预生成模型等训练所需文件上传至该代码目录下。训练作业创建完成后,ModelArts会将代码目录及其子目录下载至后台容器中。 例如:OBS路径“obs://obs-bucket/training-test/demo-code”作为代码目录,OBS路径下的内容会被自动下载至训练容器的“${MA_JOB_DIR}/demo-code”目录中,demo-code为OBS存放代码路径的最后一级目录,用户可以根据实际修改。 请注意不要将训练数据放在代码目录路径下。训练数据比较大,训练代码目录在训练作业启动后会下载至后台,可能会有下载失败的风险。建议训练代码目录大小小于或等于50MB。 代码目录路径中的启动文件 代码目录路径中的启动文件作为训练启动的入口,当前只支持python格式。预置框架启动文件的启动流程说明请参见预置框架启动文件的启动流程说明。 训练输入路径参数 训练数据需上传至OBS桶或者存储至数据集中。在训练代码中,用户需解析输入路径参数。系统后台会自动下载输入参数路径中的训练数据至训练容器的本地目录。请保证您设置的桶路径有读取权限。在训练作业启动后,ModelArts会挂载硬盘至“/cache”目录,用户可以使用此目录来存储临时文件。“/cache”目录大小请参考训练环境中不同规格资源“/cache”目录的大小。 训练输出路径参数 建议设置一个空目录为训练输出路径。在训练代码中,您需要解析输出路径参数。系统后台会自动上传训练输出至指定的训练输出路径,请保证您设置的桶路径有写入权限和读取权限。 在ModelArts中,训练代码需包含(可选)引入依赖和解析和设置输入路径参数、输出路径参数步骤。
  • 解析和设置输入路径参数、输出路径参数 运行在ModelArts Standard的训练作业会读取存储在OBS服务的数据,或者输出训练结果至OBS服务指定路径,输入和输出数据需要配置2个地方: 训练代码中需解析输入路径参数和输出路径参数。ModelArts Standard推荐以下方式实现参数解析。 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路径。
  • 训练代码完整示例 训练代码示例中涉及的代码与您使用的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'))
  • 场景一:使用Ascend-Powered-Engine预置框架+ Mindspore+NPU训练 当使用Ascend-Powered-Engine预置框架创建训练作业时,可以参考表1创建训练作业实现动态路由加速。表中仅提供了关键参数的配置说明,其他参数请根据业务需要配置。 表1 使用预置框架创建训练作业 参数名称 说明 创建方式 选择“自定义算法”。 启动方式 选择“预置框架”。 预置框架引擎选择“Ascend-Powered-Engine”,引擎版本选择Mindspore相关的版本。 代码目录 选择训练代码文件所在的OBS目录。 动态路由加速通过改变rank编号来优化网络通信,因此代码中对rank的使用必须统一,避免因rank编号不一致导致通信异常。 启动文件 选择代码目录中训练作业的Python启动脚本。 环境变量 添加如下环境变量。 ROUTE_PLAN = true 不能配置环境变量“MA_RUN_METHOD”,确保是使用rank table file(RTF)文件启动训练作业的“启动文件”。 资源池 选择专属资源池。 实例规格 选择的实例规格必须满足以下条件: 必须是节点满卡,否则可能会影响动态路由加速的效果。例如,在节点8卡场景下,每个节点必须是8卡,不能出现2卡或4卡的情况。 必须是snt9b或snt9b23的Ascend资源。 实例数 选择的实例数必须大于或等于3。
  • 场景二:使用自定义镜像+Pytorch+NPU训练 当使用自定义镜像和Ascend资源池创建训练作业时,可以参考表2创建训练作业实现动态路由加速。表中仅提供了关键参数的配置说明,其他参数请根据业务需要配置。 表2 使用自定义镜像创建训练作业 参数名称 说明 创建方式 选择“自定义算法”。 启动方式 选择“自定义”。 镜像 选择用于训练的自定义镜像。必须是使用Pytorch框架的训练镜像。 代码目录 选择训练代码文件所在的OBS目录。 动态路由加速通过改变rank编号来优化网络通信,因此代码中对rank的使用必须统一,避免因rank编号不一致导致通信异常。 启动命令 输入镜像的Python启动命令。 其中,要修改训练启动脚本中的如下代码,不同NPU硬件的修改值有差异。 snt9b场景 MASTER_ADDR="${MA_VJ_NAME}-${MA_TASK_NAME}-${MA_MASTER_INDEX:-0}.${MA_VJ_NAME}" NODE_RANK="${RANK_AFTER_ACC:-$VC_TASK_INDEX}" snt9b23场景 MASTER_ADDR="${VC_WORKER_HOSTS%%,*}" NODE_RANK="${RANK_AFTER_ACC:-$VC_TASK_INDEX}" 环境变量 添加如下环境变量。 ROUTE_PLAN = true 资源池 选择专属资源池。 实例规格 选择的实例规格必须满足以下条件: 必须是节点满卡,否则可能会影响动态路由加速的效果。例如,在节点8卡场景下,每个节点必须是8卡,不能出现2卡或4卡的情况。 必须是snt9b或snt9b23的Ascend资源。 实例数 选择的实例数必须大于或等于3。
  • 选择算法的实现方式 ModelArts提供如下方式实现模型训练前的算法准备。 使用订阅算法 ModelArts的AI Gallery提供了可以直接订阅的算法,不需要进行代码开发,即可使用现成的算法进行模型构建。 使用预置框架 如果您需要使用自己开发的算法,可以选择使用ModelArts预置框架。ModelArts支持了大多数主流的AI引擎,详细请参见预置训练引擎。这些预置引擎预加载了一些额外的python包,例如numpy等;也支持您通过在代码目录中使用“requirements.txt”文件安装依赖包。使用预置框架创建训练作业请参考开发用于预置框架训练的代码指导。 使用预置框架 + 自定义镜像: 如果先前基于预置框架且通过指定代码目录和启动文件的方式来创建的算法;但是随着业务逻辑的逐渐复杂,您期望可以基于预置框架修改或增加一些软件依赖的时候,此时您可以使用预置框架 + 自定义镜像的功能,即选择预置框架名称后,在预置框架版本下拉列表中选择“自定义”。 此功能与直接基于预置框架创建算法的区别仅在于,镜像是由用户自行选择的。用户可以基于预置框架制作自定义镜像。基于预置框架制作自定义镜像代码可参考使用预置镜像制作自定义镜像用于训练模型章节。 完全自定义镜像: 订阅算法和预置框架涵盖了大部分的训练场景。针对特殊场景,ModelArts支持用户构建自定义镜像用于模型训练。用户遵循ModelArts镜像的规范要求制作镜像,选择自己的镜像,并且通过指定代码目录(可选)和启动命令的方式来创建的训练作业。 自定义镜像需上传至 容器镜像服务 (SWR),才能用于ModelArts上训练,请参考使用自定义镜像训练模型。由于自定义镜像的制作要求用户对容器相关知识有比较深刻的了解,除非订阅算法和预置引擎无法满足需求,否则不推荐使用。 当使用完全自定义镜像创建训练作业时,“启动命令”必须在“/home/ma-user”目录下执行,否则训练作业可能会运行异常。
  • 模型训练使用流程 AI模型开发的过程,称之为Modeling,一般包含两个阶段: 开发阶段:准备并配置环境,调试代码,使代码能够开始进行深度学习训练,推荐在ModelArts开发环境中调试。 实验阶段:调整数据集、调整超参等,通过多轮实验,训练出理想的模型,推荐在ModelArts训练中进行实验。 两个过程可以相互转换。如开发阶段代码稳定后,则会进入实验阶段,通过不断尝试调整超参来迭代模型;或在实验阶段,有一个可以优化训练的性能的想法,则会回到开发阶段,重新优化代码。 图1 模型开发过程 ModelArts提供了模型训练的功能,方便您查看训练情况并不断调整您的模型参数。您还可以基于不同的数据,选择不同规格的资源池用于模型训练。 请参考以下指导在ModelArts Standard上训练模型。 图2 ModelArts Standard模型训练流程 表1 Standard模型训练流程 操作任务 子任务 说明 准备工作 准备训练代码 模型训练必备要素包括训练代码、训练框架、训练数据。 训练代码包含训练作业的启动文件或启动命令、训练依赖包等内容。 当使用预置框架创建训练作业时,训练代码的开发规范可以参考开发用于预置框架训练的代码。 当使用自定义镜像创建训练作业时,训练代码的开发规范可以参考开发用于自定义镜像训练的代码。 准备训练框架(即训练镜像) 模型训练有多种训练框架来源,具体可以参考准备模型训练镜像。 ModelArts Standard平台提供了模型训练常用的预置框架,可以直接使用。 当预置框架不满足训练要求时,支持用户构建自定义镜像用于训练。 准备训练数据 训练数据除了训练数据集,也可以是预测模型。在创建训练作业前,需要先准备好训练数据。 当训练数据可以直接使用,无需二次处理时,可以直接将数据上传至OBS桶。在创建训练作业时,训练的输入参数位置可以直接填写OBS桶路径。 当训练数据集的数据未标注或者需要进一步的数据预处理,可以先将数据导入ModelArts数据管理模块进行数据预处理。在创建训练作业时,训练的输入参数位置可以选择数据管理模块的数据集。 创建调试训练作业 调试训练作业 模型训练前,一般会先对代码进行调试,ModelArts提供多种方式创建调试训练作业。 ModelArts提供了云化版本的JupyterLab,无需关注安装配置,即开即用。 ModelArts也提供了本地IDE的方式开发模型,通过开启SSH远程开发,本地IDE可以远程连接到调试训练作业中,进行调试和运行代码。本地IDE方式不影响用户的编码习惯,并且调试完成的代码可以零成本直接创建生产训练作业。支持的本地IDE请参考使用PyCharm ToolKit创建并调试训练作业。 创建算法 创建算法 创建生产训练作业之前,需要先准备算法,可以是用户自己准备的算法,也可以使用从AI Gallery订阅的算法。 创建生产训练作业 训练作业基础功能 ModelArts Standard支持通过Console控制台的可视化界面创建训练作业,创建时基于算法来源和训练框架又区分多种创建方式,具体请参见表2。 ModelArts Standard也支持通过调用API接口创建训练作业,请参见以PyTorch框架创建训练作业。 训练作业进阶功能 ModelArts Standard还支持以下训练进阶功能,例如: 增量训练 分布式训练 训练加速 训练高可靠性 查看训练结果和日志 查看训练作业详情 训练作业运行中或运行结束后,可以在训练作业详情页面查看训练作业的参数设置,训练作业事件等。 查看训练作业日志 训练日志用于记录训练作业运行过程和异常信息,可以通过查看训练作业日志定位作业运行中出现的问题。 表2 训练作业的创建方式介绍 创建方式 适用场景 使用预置框架创建训练作业 如果您已在本地使用一些常用框架完成算法开发,您可以选择常用框架,创建训练作业来构建模型 使用自定义镜像创建训练作业 如果您开发算法时使用的框架并不是常用框架,您可以将算法构建为一个自定义镜像,通过自定义镜像创建训练作业。 使用已有算法创建训练作业 算法管理中,管理了用户自己创建的算法和AI Gallery订阅的算法,您可以使用算法管理中的算法,快速创建训练作业,构建模型。 使用订阅算法创建训练作业 AI Gallery中提供了现成的算法,供用户使用,您可以直接订阅AI Gallery中的算法,快速创建训练作业,构建模型。 父主题: 使用ModelArts Standard训练模型
  • 修改成员信息 团队中的成员,当其信息发生变化时,可以编辑其基本情况。 在“团队详情”区域,选择需修改的成员。 在成员所在行的“操作”列,单击“修改”。在弹出的对话框中,修改其“描述”或“角色”。 成员的“邮箱”无法修改,如果需要修改邮箱地址,建议先删除此成员,然后再基于新的邮箱地址添加新成员。 “角色”支持“Labeler”、“Reviewer”和“Team Manager”,“Team Manager”只能设置为一个人。
共100000条
提示

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