华为云用户手册

  • 通过Sleep命令使训练作业保持运行 如果训练作业使用的是预置框架: 在创建训练作业时,“创建方式”选择“自定义算法”,“启动方式”选择“预置框架”,代码目录中新增sleep.py并将此脚本作为“启动文件”。这样启动的作业将会持续运行60分钟。您可通过Cloud Shell进入容器进行调试。 sleep.py示例: import os os.system('sleep 60m') 图1 预置框架启动方式 如果训练作业使用的是 自定义镜像 在创建训练作业时,“创建方式”选择“自定义算法”,“启动方式”选择“自定义”,“启动命令”输入“sleep 60m”。这样启动的作业将会持续运行60分钟。您可通过Cloud Shell进入容器进行调试。 图2 自定义启动方式
  • 出错的任务如何卡在运行中状态 创建训练作业时,启动命令末尾新增"|| sleep 5h",并启动训练任务,例如下方的cmd为您的启动命令: cmd || sleep 5h 如果训练失败,则会执行sleep命令,此时可通过Cloud Shell登录容器镜像中调试。 在Cloud Shell中调试多节点训练作业时,需要在Cloud Shell中切换work0、work1来实现对不同节点下发启动命令,否则任务会处于等待其他节点的状态。
  • 如何通过训练日志定位问题 在ModelArts中训练作业遇到问题时,可首先查看日志,多数场景下的问题可以通过日志报错信息直接定位。 ModelArts提供了训练作业失败定位与分析功能,如果训练作业运行失败,ModelArts会自动识别导致作业失败的原因,在训练日志界面上给出提示。提示包括三部分:失败的可能原因、推荐的解决方案以及对应的日志(底色标红部分)。 图1 训练故障识别 ModelArts会对部分常见训练错误给出分析建议,目前还不能识别所有错误,提供的失败可能原因仅供参考。针对分布式作业,只会显示当前节点的一个分析结果,作业的失败需要综合各个节点的失败原因做一个综合判断。 常见训练问题定位思路如下: 根据日志界面提示中提供的分析建议解决。 参考案例解决:会提供当前故障对应的指导文档链接,请参照文档中的解决方案修复问题。 重建作业:建议重建作业进行重试,大概率能修复问题。 上一步不能解决问题时,可以尝试分析日志中提示的错误信息,定位并解决问题。 也可以前往ModelArts论坛中查看是否有同类问题。Ascend训练场景可以前往昇腾论坛查看或提问。 最后,如果以上均不能解决问题,可以提工单进行人工咨询。 父主题: 查看训练作业日志
  • 如何查看训练作业日志 在训练作业详情页,训练日志窗口提供日志预览、日志下载、日志中搜索关键字、系统日志过滤能力。 预览 系统日志窗口提供训练日志预览功能,如果训练作业有多个节点,则支持查看不同计算节点的日志,通过右侧下拉框可以选择目标节点预览。 图1 查看不同计算节日志 当日志文件过大时,系统日志窗口仅加载最新的部分日志,并在日志窗口上方提供全量日志访问链接。打开该链接可在新页面查看全部日志。 图2 查看全量日志 如果全部日志超过500M,可能会引起浏览页面卡顿,建议您直接下载日志查看。 预览链接在生成后的一小时内,支持任何人打开并查看。您可以分享链接至他人。 请注意日志中不能包含隐私内容,否则会造成信息泄露。 下载 训练日志仅保留30天,超过30天会被清理。如果用户需要永久保存日志,请单击系统日志窗口右上角下载按钮下载日志至本地保存,支持批量下载多节点日志。用户也可以在创建训练作业时打开永久保存日志按钮,保存训练日志至指定OBS路径。 针对使用Ascend规格创建的训练作业,部分系统日志暂不支持直接在训练日志窗口下载,请在创建训练作业时指定OBS路径用于保存训练日志。 图3 下载日志 搜索关键字 用户可以在系统日志右上角的搜索框搜索关键字,如图4所示。 图4 搜索关键字 系统支持高亮关键字并实现搜索结果间的跳转。搜索功能仅支持搜索当前页面加载的日志,如果日志加载不全(请关注页面提示)则需要下载或者通过打开全量日志访问链接进行搜索。全量日志访问链接打开的新页面可以通过Ctrl+F进行搜索。 系统日志过滤 图5 系统日志复选框 如果勾选了系统日志复选框,则日志中呈现系统日志和用户日志。如果去勾选,则只显示用户日志。 父主题: 查看训练作业日志
  • 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包,或者设置一些训练运行时额外需要的全局环境变量。
  • 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侧(训练容器)。 如果出现如下情况,则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
  • 普通日志的文件格式 普通日志的文件格式如下,其中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平台日志可以通过关键字在训练的普通日志文件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
  • 训练日志定义 训练日志用于记录训练作业运行过程和异常信息,为快速定位作业运行中出现的问题提供详细信息。用户代码中的标准输出、标准错误信息会在训练日志中呈现。在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路径。Ascend训练场景下,默认要求填写作业日志在OBS的存放路径,其他资源的训练场景下,永久保存日志开关需要用户手动开启。 图2 开启永久保存日志开关 实时日志和历史日志都是标准日志输出,内容上没有区别。Ascend训练场景下,永久日志中会包含Ascend日志,这部分日志内容在ModelArts界面上看不到。
  • 模式说明 训练作业默认设置为普通模式,普通模式的调测信息可参考查看训练作业日志。 高性能模式的使用场景:最小化调测信息,可以提升运行速度,适合于网络稳定并追求高性能的场景。 故障诊断模式的使用场景:收集更多的信息用于定位,适合于执行出现问题需要收集故障信息进行定位的场景。此模式提供故障诊断,用户可以根据实际需求选择诊断类别。 各模式获取的调测信息如表1所示。 表1 MindSpore引擎各模式的调测信息 调测信息 普通模式 高性能模式 故障诊断模式 说明 MindSpore框架日志级别 Info级别 error级别 Info级别 MindSpore框架运行时日志。 RDR(Running Data Recorder) 关闭 关闭 开启 出现运行异常会自动地导出MindSpore中预先记录的数据以辅助定位运行异常的原因。不同的运行异常将会导出不同的数据。 RDR详细的介绍请参考MindSpore官网说明。 analyze_fail.dat 默认提供,上传至训练作业日志路径中 图编译失败自动导出故障信息,用于infer过程分析。 dump数据 默认提供,上传至训练作业日志路径中 后端执行期异常触发dump数据。 在故障诊断模式下,开启故障诊断功能后,支持用户查看以下故障诊断数据。以下数据存储至训练日志路径的OBS目录下。 故障诊断模式的训练输出日志文件说明: {obs-log-path}/ modelarts-job-{job-id}-worker-{index}.log # 在屏幕上显示日志(汇总) modelarts-job-{job-id}-proc-rank-{rank-id}-device-{device-id}.txt # 每个device的日志显示在屏幕上 modelarts-job-{job-id}/ ascend/ npu_collect/rank_{id}/ # TFAdapter DUMP GRAPH 与 GE DUMP GRAPH 的输出路径,仅在使用TensorFlow框架时生成 process_log/rank_{id}/ # Plog 日志路径 msnpureport/{task-index}/ #msnpureport工具执行日志,用户无需关注 mindspore/ log/ # MindSpore 框架日志与 MindSpore 故障诊断数据 表2 故障诊断数据一览表(MindSpore) 故障诊断分类 故障诊断内容 CANN框架日志和故障诊断数据 HOST侧的INFO及INFO以上级别日志,包括HOST侧CANN软件桟日志、HOST侧驱动日志文件等。 MindSpore框架日志和故障诊断数据 MindSpore框架生成的日志,INFO及INFO以上级别日志。 RDR(Running Data Recorder)文件。 出现运行异常会自动地导出MindSpore中预先记录的数据以辅助定位运行异常的原因。不同的运行异常将会导出不同的数据。 analyze_fail.dat,图编译失败自动导出故障信息,用于infer过程分析。 dump数据,后端执行期异常触发dump数据。
  • 查看算法详情 登录ModelArts管理控制台。 在左侧导航栏中,选择“算法管理”,进入“我的算法”页面。 在“我的算法”列表中,单击算法名称进入详情页。 选择“基本信息”页签可以查看算法信息。 表1 算法基本信息 参数 说明 名称 算法的名称。 ID 算法的唯一标识。 描述 算法的简介。 单击编辑图标,可以更新描述。 预置框架 算法使用的预置框架引擎及版本。只有使用预置框架创建的算法才有该参数。 自定义镜像 算法使用的容器镜像。只有使用自定义引擎版本或自定义镜像创建的算法才有该参数。 代码目录 算法代码存放的OBS目录。 启动文件 启动文件的OBS存放目录。只有使用预置框架创建的算法才有该参数。 启动命令 显示启动命令。只有使用自定义镜像创建的算法才有该参数。 输入 算法的输入参数。 输出 算法的输出参数。 超参 算法的超参信息。 支持的策略 算法的自动搜索策略。如果空白即表示不支持自动搜索,否则显示自动搜索的参数信息。 训练约束 算法的训练约束信息,如果显示“否”则表示不存在约束,否则会显示支持的资源类型和训练场景的支持情况。 选择“训练列表”页签可以查看使用该算法的训练作业信息,例如训练作业名称、状态。 “基本信息”页签,单击“编辑”,支持修改除名称和ID之外的算法信息。修改完成,单击“保存”即可完成修改。 在算法详情页,单击右上角的“发布”,支持将算法发布到AI Gallery。 父主题: 准备算法
  • 开启无条件自动重启 开启无条件自动重启有2种方式:控制台设置或API接口设置。 控制台设置 在创建训练作业页面,开启“自动重启”开关,并勾选“无条件自动重启”,开启无条件自动重启。开启无条件自动重启后,只要系统检测到训练异常,就无条件重启训练作业。如果未勾选“无条件自动重启”只是打开了“自动重启”开关,则表示仅环境问题导致训练作业异常时才会自动重启,其他问题导致训练作业异常时会直接返回“运行失败”。 图1 开启无条件重启 API接口设置 通过API接口创建训练作业时,在“metadata”字段的“annotations”中传入“fault-tolerance/job-retry-num”和“fault-tolerance/job-unconditional-retry”字段。“fault-tolerance/job-retry-num”赋值为1~128表示开启自动重启,“fault-tolerance/job-unconditional-retry”赋值为“true”表示启用了无条件自动重启。 { "kind": "job", "metadata": { "annotations": { "fault-tolerance/job-retry-num": "8", "fault-tolerance/job-unconditional-retry": "true" } } }
  • 背景信息 训练过程中可能会碰到预期外的情况导致训练失败,且无法及时重启训练作业,导致训练周期长,而无条件自动重启可以避免这类问题。无条件自动重启是指当训练作业失败时,不管什么原因系统都会自动重启训练作业,提高训练成功率和提升作业的稳定性。为了避免无效重启浪费算力资源,系统最多只支持连续无条件重启3次。 为了避免丢失训练进度、浪费算力,开启此功能前请确认代码已适配断点续训,操作指导请参见断点续训练和增量训练。 当训练过程中触发了自动重启,则系统会记录重启信息,在训练作业详情页可以查看故障恢复详情,具体请参见查看故障恢复详情。
  • 创建算法 进入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引擎。 对于用户希望优化的超参,需在“超参”设置中定义,可以给定名称、类型、默认值、约束等,具体设置方法可以参考定义超参。 单击勾选“自动搜索”,为算法设置算法搜索功能。自动搜索作业运行过程中,ModelArts后台通过指标正则表达式获取搜索指标参数,朝指定的优化方向进行超参优化。用户需要在代码中打印搜索参数并在控制台配置以下参数。 图1 设置算法搜索功能 搜索指标 搜索指标为目标函数的值,通常可以设置为loss、accuracy等。通过优化搜索指标的目标值超优化方向收敛,找到最契合的超参,提高模型精度和收敛速度。 表1 搜索指标参数 参数 说明 名称 搜索指标的名称。需要与您在代码中打印的搜索指标参数保持一致。 优化方向 可选“最大化”或者“最小化”。 指标正则 填入正则表达式。您可以单击智能生成功能自动获取正则表达式。 设置自动化搜索参数 从已设置的“超参”中选择可用于搜索优化的超参。优化的超参仅支持float类型,选中自动化搜索参数后,需设置取值范围。 搜索算法配置 ModelArts内置三种超参搜索算法,用户可以根据实际情况选择对应的算法,支持多选。对应的算法和参数解析请参考以下: bayes_opt_search:贝叶斯优化(SMAC) tpe_search:TPE算法 anneal_search:模拟退火算法(Anneal) 提交创建算法完成后即可执行下一步,创建训练作业。
  • 背景信息 如果用户使用的AI引擎为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,并且优化的超参类型为float类型,ModelArts支持用户使用超参搜索功能。 在0代码修改的基础下,实现算法模型的超参搜索。需要完成以下步骤: 准备工作 创建算法 创建训练作业 查看超参搜索作业详情
  • 模拟退火算法(Anneal) 模拟退火算法即Anneal算法,是随机搜索中一个简单但有效的变体,它利用了响应曲面中的平滑度。退火速率不自适应。Anneal算法从先前采样的一个试验点作为起点,然后从与先验分布相似的分布中采样每组超参数,但其密度更集中在选择的试验点周围。随着时间推移,算法会倾向于从越来越接近最佳点处采样。在采样过程中,算法可能绘制一个次佳试验作为最佳试验,以一定概率跳出局部最优解。 表1 模拟退火算法的参数说明 参数 说明 取值参考 num_samples 搜索尝试的超参组数 int,一般在10-20之间,值越大,搜索时间越长,效果越好 avg_best_idx 要探索试验的几何分布平均,从按照分数排序的试验中选择 float,一般不建议用户修改 shrink_coef 随着更多的点被探索,邻域采样大小的减少率 float,一般不建议用户修改 父主题: 搜索算法
  • TPE算法 TPE算法全称Tree-structured Parzen Estimator,是一种利用高斯混合模型来学习超参模型的算法。在每次试验中,对于每个超参,TPE为与最佳目标值相关的超参维护一个高斯混合模型l(x),为剩余的超参维护另一个高斯混合模型g(x),选择l(x)/g(x)最大化时对应的超参作为下一组搜索值。 表1 TPE算法的参数说明 参数 说明 取值参考 num_samples 搜索尝试的超参组数 int,一般在10-20之间,值越大,搜索时间越长,效果越好 n_initial_points 采用TPE接近目标函数之前,对目标函数的随机评估数 int,一般不建议用户修改 gamma TPE算法的一定分位数,用于划分l(x)和g(x) float,范围(0,1),一般不建议用户修改 父主题: 搜索算法
  • 贝叶斯优化(SMAC) 贝叶斯优化假设超参和目标函数存在一个函数关系。基于已搜索超参的评估值,通过高斯过程回归来估计其他搜索点处目标函数值的均值和方差。根据均值和方差构造采集函数(Acquisition Function),下一个搜索点为采集函数的极大值点。相比网格搜索,贝叶斯优化会利用之前的评估结果,从而降低迭代次数、缩短搜索时间;缺点是不容易找到全局最优解。 表1 贝叶斯优化的参数说明 参数 说明 取值参考 num_samples 搜索尝试的超参组数 int,一般在10-20之间,值越大,搜索时间越长,效果越好 kind 采集函数类型 string,默认为'ucb',可能取值还有'ei'、'poi',一般不建议用户修改 kappa 采集函数ucb的调节参数,可理解为上置信边界 float,一般不建议用户修改 xi 采集函数poi和ei的调节参数 float,一般不建议用户修改 父主题: 搜索算法
  • 超参搜索简介 ModelArts训练支持超参搜索功能,自动实现模型超参搜索,为您的模型匹配最合适的超参。 在模型训练过程中,有很多超参需要根据任务进行调整,比如learning_rate、weight_decay等,这一工作往往需要一个有经验的算法工程师花费一定精力和大量时间进行手动调优。ModelArts支持的超参搜索功能,在无需算法工程师介入的情况下,即可自动进行超参的调优,在速度和精度上超过人工调优。 ModelArts支持以下三种超参搜索算法: 贝叶斯优化(SMAC) TPE算法 模拟退火算法(Anneal) 父主题: 自动模型优化(AutoSearch)
  • ModelArts中如何实现断点续训练和增量训练 在ModelArts训练中实现断点续训练或增量训练,建议使用“训练输出”功能。 在创建训练作业时,设置训练“输出”参数为“train_url”,在指定的训练输出的数据存储位置中保存checkpoint,且“预下载至本地目录”选择“下载”。选择预下载至本地目录时,系统在训练作业启动前,自动将数据存储位置中的checkpoint文件下载到训练容器的本地目录。 图1 训练输出设置 断点续训练建议和训练容错检查(即自动重启)功能同时使用。在创建训练作业页面,开启“自动重启”开关。训练环境预检测失败、或者训练容器硬件检测故障、或者训练作业失败时会自动重新下发并运行训练作业。
  • 什么是断点续训练和增量训练 断点续训练是指因为某些原因(例如容错重启、资源抢占、作业卡死等)导致训练作业还未完成就被中断,下一次训练可以在上一次的训练基础上继续进行。这种方式对于需要长时间训练的模型而言比较友好。 增量训练是指增加新的训练数据到当前训练流程中,扩展当前模型的知识和能力。 断点续训练和增量训练均是通过checkpoint机制实现。 checkpoint的机制是:在模型训练的过程中,不断地保存训练结果(包括但不限于EPOCH、模型权重、优化器状态、调度器状态)。即便模型训练中断,也可以基于checkpoint接续训练。 当需要从训练中断的位置接续训练,只需要加载checkpoint,并用checkpoint信息初始化训练状态即可。用户需要在代码里加上reload ckpt的代码,使能读取前一次训练保存的预训练模型。
  • 查找训练作业 当用户使用 IAM 账号登录时,训练作业列表会显示IAM账号下所有训练作业。ModelArts提供查找训练作业功能帮助用户快速查找训练作业。 操作一:单击“只显示自己”按钮,训练作业列表仅显示当前子账号下创建的训练作业。 操作二:按照名称、ID、作业类型、状态、创建时间、算法、资源池等条件筛选的高级搜索。 操作三:单击作业列表右上角“刷新”图标,刷新作业列表。 操作四:自定义列功能设置。 图1 查找训练作业
  • 添加输出目录 添加输出目录的代码比较简单,即在代码中添加一个输出评估结果文件的目录,被称为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)
  • 复制数据集到本地 复制数据集到本地主要是为了防止长时间访问OBS容易导致OBS连接中断使得作业卡住,所以一般先将数据复制到本地再进行操作。 数据集复制有两种方式,推荐使用OBS路径复制。 OBS路径(推荐) 直接使用moxing的copy_parallel接口,复制对应的OBS路径。 ModelArts数据管理中的数据集(即manifest文件格式) 使用moxing的copy_manifest接口将文件复制到本地并获取新的manifest文件路径,然后使用SDK解析新的manifest文件。 ModelArts数据管理模块在重构升级中,对未使用过数据管理的用户不可见。建议新用户将训练数据存放至OBS桶中使用。
  • 如何提高训练作业资源利用率 适当增大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操作尽量不要阻塞训练主进程太多的时间,如日志打印,保存训练指标信息等。
  • 如何判断训练作业资源利用率高低 在模型训练的训练作业列表页可以查看作业资源利用率情况。当作业worker-0实例的GPU/NPU的平均利用率低于50%时,在训练作业列表中会进行告警提示。 图2 作业列表显示作业资源利用率情况 此处的作业资源利用率只涉及GPU和NPU资源。作业worker-0实例的GPU/NPU平均利用率计算方法:将作业worker-0实例的各个GPU/NPU加速卡每个时间点的利用率汇总取平均值。
  • 返回结果 表4 返回结果 类型 说明 GetResult 参数解释: SDK公共结果对象。 表5 GetResult 参数名称 参数类型 描述 status int 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。完整的状态码列表请参见状态码。 默认取值: 无 reason str 参数解释: HTTP文本描述。 默认取值: 无 errorCode str 参数解释: OBS服务端错误码,当status参数小于300时为空。 默认取值: 无 errorMessage str 参数解释: OBS服务端错误描述,当status参数小于300时为空。 默认取值: 无 requestId str 参数解释: OBS服务端返回的请求ID。 默认取值: 无 indicator str 参数解释: OBS服务端返回的错误定位码。 默认取值: 无 hostId str 参数解释: 请求的服务端ID,当status参数小于300时为空。 默认取值: 无 resource str 参数解释: 发生错误时相关的桶或对象,当status参数小于300时为空。 默认取值: 无 header list 参数解释: 响应消息头列表,由多个元组构成。每个元组均包含两个元素,代表响应头的键值对。 默认取值: 无 body object 参数解释: 操作成功后的结果数据,当status大于300时为空。该值根据调用接口的不同而不同,参见“桶相关接口”章节和“对象相关接口”章节的详细描述。 默认取值: 无 表6 GetResult.body GetResult.body类型 说明 CopyPartResponse 参数解释: 复制段响应结果。详见CopyPartResponse。 表7 CopyPartResponse 参数名称 参数类型 描述 etag str 参数解释: 段的base64编码的128位MD5摘要。ETag是段内容的唯一标识,可以通过该值识别段内容是否有变化。 取值范围: 长度为32的字符串。 默认取值: 无 crc64 str 参数解释: 对象的crc64值,即根据ECMA-182标准计算得出的64位CRC。crc64是对象内容的唯一标识,可以通过该值识别对象内容是否有变化。比如上传对象时crc64为A,下载对象时crc64为B,则说明对象内容发生了变化。crc64只反映变化的内容,而不是其元数据。 约束限制: 当上传对象校验了crc64值或开启了桶crc64特性的情况下才会返回。 不支持POSIX、SFS对象。 始终返回完整对象的crc64值。 取值范围: 根据ECMA-182标准计算得出的64位CRC。 默认取值: 无 lastModified str 参数解释: 对象的最近一次修改时间。 约束限制: 日期格式为GMT的格式。 例如:Wed, 25 Mar 2020 02:39:52 GMT。 默认取值: 无 sseKms str 参数解释: 表示服务端加密是SSE-KMS方式。对象使用SSE-KMS方式加密。 取值范围: 可选值:kms,即选择SSE-KMS方式加密对象。 默认取值: 无 sseKmsKey str 参数解释: SSE-KMS加密方式下使用的KMS主密钥的ID值。 取值范围: 有效值支持两种格式: regionID:domainID(账号ID):key/key_id key_id 其中: regionID是使用密钥所属region的ID,可在地区和终端节点页面获取; domainID是使用密钥所属账号的账号ID,获取方法参见如何获取账号ID和用户ID?(Python SDK); key_id是从 数据加密 服务创建的密钥ID,获取方法请参见查看密钥。 默认取值: 如果用户没有提供该头域,那么默认的主密钥将会被使用。 如果默认主密钥不存在,将默认创建并使用。 sseC str 参数解释: 使用SSE-C方式加解密对象时,选择的加解密算法。 取值范围: 支持的值为AES256,即高级加密标准(Advanced Encryption Standard,AES)。 默认取值: 无 sseCKeyMd5 str 参数解释: SSE-C方式下加密使用密钥的MD5值,该值用于验证密钥传输过程中是否出错。 约束限制: 由密钥值经过MD5加密再经过Base64编码后得到,示例:4XvB3tbNTN+tIEVa0/fGaQ== 默认取值: 无
  • 接口约束 您必须是桶拥有者或拥有复制段的权限,才能复制段。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:PutObject权限,如果使用桶策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点。 拷贝段的结果不能仅根据HTTP返回头域中的status_code来判断请求是否成功,头域中status_code返回200时表示服务端已经收到请求,且开始处理拷贝段请求。拷贝是否成功会在响应消息的body中,只有body体中有ETag标签才表示成功,否则表示拷贝失败。
  • 请求参数 表1 请求参数列表 参数名称 参数类型 是否必选 描述 bucketName str 必选 参数解释: 目标桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无 objectKey str 必选 参数解释: 对象名。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 说明: 对象链接地址格式为:https://桶名. 域名 /文件夹目录层级/对象名。如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级。 partNumber int 必选 参数解释: 段号。 取值范围: [1,10000] 默认取值: 无 uploadId str 必选 参数解释: 分段上传任务的ID,例如:000001648453845DBB78F2340DD460D8 取值范围: 长度为32的字符串。 默认取值: 无 copySource str 必选 参数解释: 指定源桶、源对象和源对象版本号(可为空)的参数,格式:源桶名/源对象名?versionId=源对象版本号。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。 例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。 默认取值: 无 copySourceRange str 可选 参数解释: 指定复制源对象的范围。例如:0-999,即对象的第1个字节到1000字节。 取值范围: 取值区间:[0,对象长度-1],格式:x-y,即对象的第x+1字节到第y+1字节。 约束限制: 如果range的最大长度超出对象长度-1,仍旧取对象长度-1。 默认取值: 无 destSseHeader SseCHeader 或 SseKmsHeader 可选 参数解释: 服务端加密头域,用于加密目标对象。详见SseCHeader或SseKmsHeader sourceSseHeader SseCHeader 可选 参数解释: 服务端解密头域,用于解密源对象。详见SseCHeader 表2 SseCHeader 参数名称 参数类型 是否必选 描述 encryption str 必选 参数解释: 以SSE-C方式加密对象。 取值范围: AES256,即高级加密标准(Advanced Encryption Standard,AES)。 默认取值: 无 key str 必选 参数解释: SSE-C方式下加密的密钥,与加密方式对应,如encryption=‘AES256’,密钥就是由AES256加密算法得到的密钥。 取值范围: 长度为32字符串。 默认取值: 无 表3 SseKmsHeader 参数名称 参数类型 是否必选 描述 encryption str 必选 参数解释: 以SSE-KMS方式加密对象。 取值范围: 可选值:kms,即选择SSE-KMS方式加密对象。 默认取值: 无 key str 可选 参数解释: SSE-KMS方式下加密的主密钥。 取值范围: 支持两种格式的密钥描述方式: regionID:domainID(租户ID):key/key_id key_id 其中: regionID是使用密钥所属region的ID,可在地区和终端节点页面获取; domainID是使用密钥所属账号的账号ID,获取方法参见如何获取账号ID和用户ID?(Python SDK); key_id是从数据加密服务创建的密钥ID,获取方法请参见查看密钥。 默认取值: 如果用户没有提供该头域,那么默认的主密钥将会被使用。 如果默认主密钥不存在,将默认创建并使用。
共100000条