华为云用户手册

  • 训练日志定义 训练日志用于记录训练作业运行过程和异常信息,为快速定位作业运行中出现的问题提供详细信息。用户代码中的标准输出、标准错误信息会在训练日志中呈现。在ModelArts中训练作业遇到问题时,可首先查看日志,多数场景下的问题可以通过日志报错信息直接定位。 训练日志包括普通训练日志和Ascend相关日志。 普通日志说明:当使用Ascend之外的资源训练时仅产生普通训练日志,普通日志中包含训练进程日志、pip-requirement.txt安装日志和ModelArts平台日志。 Ascend场景日志说明:使用Ascend资源训练时会产生device日志、plog日志、proc log单卡训练日志、MindSpore日志、普通日志。 图1 ModelArts训练日志 只有MindSpore+Ascend训练场景下会产生单独的MindSpore日志。其他AI引擎的日志都包含在普通日志中,无法区分。
  • 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
  • 训练日志的时效性 从日志产生的时效性上可以分为以下3种情况: 实时日志:训练作业实时运行时产生,在ModelArts训练作业详情页面上可以查看。 历史日志:训练作业结束后,可以在ModelArts训练作业详情页面上查看历史日志,ModelArts系统自动保存30天。 永久日志:转存到OBS桶中的训练日志,在创建训练作业时,打开永久保存日志开关设置作业日志路径即可将日志转存至OBS路径。Ascend训练场景下,默认要求填写作业日志在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
  • 功能介绍 ModelArts CLI,即ModelArts命令行工具,是一个跨平台命令行工具,用于连接ModelArts服务并在ModelArts资源上执行管理命令。用户可以使用交互式命令行提示符或脚本通过终端执行命令。为了方便理解,下面将ModelArts CLI统称为ma-cli。ma-cli支持用户在ModelArts Notebook及线下虚拟机中与云端服务交互,使用ma-cli命令可以实现命令自动补全、鉴权、镜像构建、提交ModelArts训练作业、提交 DLI Spark作业、OBS数据复制等。
  • 命令预览 $ ma-cli -h Usage: ma-cli [OPTIONS] COMMAND [ARGS]... Options: -V, -v, --version 1.2.1 -C, --config-file TEXT Configure file path for authorization. -D, --debug Debug Mode. Shows full stack trace when error occurs. -P, --profile TEXT CLI connection profile to use. The default profile is "DEFAULT". -h, -H, --help Show this message and exit. Commands: configure Configures authentication and endpoints info for the CLI. image Support get registered image list、register or unregister image、debug image, build image in Notebook. obs-copy Copy file or directory between OBS and local path. ma-job ModelArts job submission and query job details. dli-job DLI spark job submission and query job details. auto-completion Auto complete ma-cli command in terminal, support "bash(default)/zsh/fish".
  • 命令说明 表1 ma-cli支持的命令 命令 命令详情 configure ma-cli鉴权命令,支持用户名密码、AK/SK image ModelArts镜像构建、镜像注册、查询已注册镜像信息等 obs-copy 本地和OBS文件/文件夹间的相互复制 ma-job ModelArts训练作业管理,包含作业提交、资源查询等 dli-job DLI Spark任务提交及资源管理 auto-completion 命令自动补全
  • Step 1 打通VPC 通过打通VPC,可以方便用户跨VPC使用资源,提升资源利用率。 在“网络”页签,单击网络列表中某个网络操作列的“打通VPC”。 图1 打通VPC 在打通VPC弹框中,打开“打通VPC”开关,在下拉框中选择可用的VPC和子网。 需要打通的对端网络不能和当前网段重叠。 图2 打通VPC参数选择 如果没有VPC可选,可以单击右侧的“创建虚拟私有云”,跳转到网络控制台,申请创建虚拟私有云。 如果没有子网可选,可以单击右侧的“创建子网”,跳转到网络控制台,创建可用的子网。 支持1个VPC下多个子网的打通,如果VPC下有多个子网,会显示“+”,您可单击“+”即可添加子网(上限10个)。 如果需要使用打通VPC的方式实现专属资源池访问公网,由于要访问的公网地址不确定,一般是建议用户在VPC中创建SNAT。此场景下,在打通VPC后,专属资源池中作业访问公网地址,默认不能转发到用户VPC的SNAT,需要提交工单联系技术支持在专属资源池VPC的路由中添加指向对等连接的默认路由。当您开启默认路由后,在打通VPC时,会给ModelArts网络0.0.0.0/0路由作为默认路由,此时无需提交工单添加默认路由即可完成网络配置。
  • 场景介绍 当专属资源池中的节点含有GPU/Ascend资源时,用户基于自己的业务,可能会有自定义GPU/Ascend驱动的需求,ModelArts面向此类客户提供了自助升级专属资源池GPU/Ascend驱动的能力。 驱动升级有两种升级方式:安全升级、强制升级。 安全升级:不影响正在运行的业务,开始升级后会先将节点进行隔离(不能再下发新的作业),待节点上的存量作业运行完成后再进行升级,因需要等待作业完成,故升级周期可能比较长。 强制升级:忽略资源池中正在运行的作业,直接进行驱动升级,可能会导致运行中作业失败,需谨慎选择。
  • 查找训练作业 当用户使用 IAM 账号登录时,训练作业列表会显示IAM账号下所有训练作业。ModelArts提供查找训练作业功能帮助用户快速查找训练作业。 操作一:单击“只显示自己”按钮,训练作业列表仅显示当前子账号下创建的训练作业。 操作二:按照名称、ID、作业类型、状态、创建时间、算法、资源池等条件筛选的高级搜索。 操作三:单击作业列表右上角“刷新”图标,刷新作业列表。 操作四:自定义列功能设置。 图1 查找训练作业
  • 操作步骤 登录 云审计 服务管理控制台。 在管理控制台左上角单击图标,选择区域。 在左侧导航栏中,单击“事件列表”,进入“事件列表”页面。 事件列表支持通过筛选来查询对应的操作事件。当前事件列表支持四个维度的组合查询,详细信息如下: 事件来源、资源类型和筛选类型。 在下拉框中选择查询条件。 其中筛选类型选择事件名称时,还需选择某个具体的事件名称。 选择资源ID时,还需输入某个具体的资源ID。 选择资源名称时,还需选择或手动输入某个具体的资源名称。 操作用户:在下拉框中选择某一具体的操作用户,此操作用户指用户级别,而非租户级别。 事件级别:可选项为“所有事件级别”、“normal”、“warning”、“incident”,只可选择其中一项。 时间范围:可选择查询最近七天内任意时间段的操作事件。 在需要查看的事件左侧,单击展开该事件的详细信息。 单击需要查看的事件“操作”列的“查看事件”,可以在弹窗中查看该操作事件结构的详细信息。 更多关于云审计服务事件结构的信息,请参见《云审计服务用户指南》。
  • 标注图片(物体检测) 标注作业详情页中,展示了此数据集中“全部”“未标注”和“已标注”的图片,默认显示“未标注”的图片列表。 在“未标注”页签图片列表中,单击图片,自动跳转到标注页面。在标注页面,常用按钮的使用可参见表2。 在页面上方工具栏选择合适的标注图形,系统默认的标注图形为矩形。本示例使用矩形工具进行标注。 页面左侧可以选择多种形状对图片进行标注。标注第一张图片时,一旦选择其中一种,其他图片默认使用此形状进行标注,用户可以根据自己需求再进行切换。 表1 支持的标注框 图标 使用说明 矩形。也可使用快捷键 【1】。鼠标单击标注对象左上角边缘位置,界面将出现矩形框,移动鼠标使得矩形框覆盖标注对象,然后单击完成标注。 多边形。也可使用快捷键【2】。在标注对象所在范围内,鼠标左键单击完成一个点的标注,沿着物体的形状边缘,通过鼠标指定多个点,最终单击到第一个点的位置,由所有的点组成一个多边形形状。使得需标注的对象在此标注框内。 圆形。也可使用快捷键【3】。在标注对象中,选择物体的中心点位置,单击鼠标确定圆心,然后移动鼠标,使得圆形框覆盖标注对象,然后再单击鼠标完成标注。 直线。也可使用快捷键【4】。在标注对象中,选择物体的起始点,单击鼠标确定直线的起始点,然后使得直线覆盖标注对象,然后再单击鼠标完成标注。 虚线。也可使用快捷键【5】。在标注对象中,选择物体的起始点,单击鼠标确定虚线的起始点,然后使得虚线覆盖标注对象,然后再单击鼠标完成标注。 点。也可使用快捷键【6】。单击图片中的物体所在位置,即可完成点的标注。 在弹出的添加标签文本框中,直接输入新的标签名,在文本框前面选中标签颜色,然后单击“添加”。如果已存在标签,从下拉列表中选择已有的标签,单击“添加”。 逐步标注图片中所有物体所在位置,一张图片可添加多个标签。完成一张图片标注后,可单击图片右上角来切换下一张(也可使用快捷键【D】直接切换),快速选中其他未标注的图片,然后在标注页面中执行标注操作。 图5 添加物体检测标签 单击页面上方“返回数据标注预览”查看标注信息,在弹框中单击“确定”保存当前标注并离开标注页面。 选中的图片被自动移动至“已标注”页签,且在“未标注”和“全部”页签中,标签的信息也将随着标注步骤进行更新,如增加的标签名称、标签对应的图片数量。 表2 标注界面的常用按钮 按钮图标 功能说明 撤销上一个操作。也可使用快捷键【Ctrl+Z】 重做上一个操作。也可使用快捷键【Ctrl+Shift+Z】 放大图片。也可以使用滚轮进行放大。 缩小图片。也可以使用滚轮进行缩小。 删除当前图片中的所有标注框。也可使用快捷键【Shift+Delete】 显示或隐藏标注框。只有在已标注图片中可使用此操作。也可使用快捷键【Shift+H】 拖动,可将标注好的框拖动至其他位置,也可以选择框的边缘,更改框的大小。也可使用【X+鼠标左键】 复位,与上方拖动为同组操作,当执行了拖动后,可以单击复位按钮快速将标注框恢复为拖动前的形状和位置。也可使用快捷键【Esc】
  • 标注图片(图像分割) 标注作业详情页中,展示了此标注作业中“全部”、“未标注”和“已标注”的图片,默认显示“未标注”的图片列表。 在“未标注”页签图片列表中,单击图片,自动跳转到标注页面。在标注页面,常用按钮的使用可参见表4。 选择标注方式。 在标注页面,上方工具栏提供了常用的表3及表4,系统默认的标注方式为多边形标注。选择多边形标注或极点标注。 标注第一张图片时,一旦选择其中一种,其他所有图片都需要使用此方式进行标注。 图6 工具栏 图7 工具栏 表3 标注方式 图标 使用说明 多边形。在标注对象所在范围内,鼠标左键单击完成一个点的标注,沿着物体的形状边缘,通过鼠标指定多个点,最终单击到第一个点的位置,由所有的点组成一个多边形形状。使得需标注的对象在此标注框内。 极点标注。在目标物体轮廓的最上、最左、最下、最右的位置分别标注四个极点,极点要在物体的轮廓上。系统将根据标注的极点推理出物体的轮廓。 表4 工具栏常用按钮 按钮图标 功能说明 撤销上一个操作。 重做上一个操作。 放大图片。 缩小图片。 删除当前图片中的所有标注框。 显示或隐藏标注框。只有在已标注图片中可使用此操作。 拖动,可将标注好的框拖动至其他位置,也可以选择框的边缘,更改框的大小。 复位,与上方拖动为同组操作,当执行了拖动后,可以单击复位按钮快速将标注框恢复为拖动前的形状和位置。 全屏显示标注的图片。 标注物体。 以极点标注为例。识别图片中的物体,单击左键分别定位物体的最上、最左、最下、最右的位置点。确定位置后,将弹出对话框,填入标签名称,单击确定添加物体的标签。确定后系统将自动推理出物体的轮廓。 完成一张图片标注后,可单击图片下方展开缩略图,查看图片列表,快速选中其他未标注的图片,然后在标注页面中执行标注操作。 图8 标注物体轮廓 单击页面上方“返回数据标注预览”查看标注信息,在弹框中单击“确定”保存当前标注并离开标注页面。 选中的图片被自动移动至“已标注”页签,且在“未标注”和“全部”页签中,标签的信息也将随着标注步骤进行更新,如增加的标签名称、标签对应的图片数量。
  • 操作步骤 创建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创建训练作业。
  • 如何将训练作业纳入实验 训练作业纳入实验的方式是在“创建训练作业”页面指定作业所属实验。有以下几个选项: 纳入新实验:实验不支持单独创建,只支持随着训练作业创建。此处填写新建的实验名称,在提交作业成功后,会同时创建该实验,并将该作业纳入新建的实验中。此处会校验实验名称,如果重名则无法提交作业。 纳入已有实验:您可以在下拉框中选择已有实验,将作业纳入已存在的实验。 不纳入实验:如果您不想通过实验管理您的作业,可以选择此选项。不纳入实验的作业无法在训练作业首页的“实验”中查看到。
  • 查看实验详情 在实验列表单击某个实验名称进入实验详情页面。实验详情上方会显示实验的基本信息,下方会显示该实验下的作业列表。 图3 查看实验详情 单击支持编辑实验名称/描述。 打开“只看自己”按钮,可查看自己创建的纳入实验的作业。 账号下有多个IAM用户时,默认只显示当前登录的IAM用户的作业列表。 按照名称、ID、算法、状态、创建时间、作业类型、资源池等条件筛选的高级搜索。 支持作业列表刷新。单击作业列表右上角“刷新”图标,刷新作业列表。 支持自定义列表选项。单击作业列表右上角“设置”图标,自定义选择需要在作业列表中显示的选项。
  • 文件型数据标注状态 数据标注状态分为“未标注”和“已标注”。 未标注:仅导入标注对象(指待标注的图片,文本等),不导入标注内容(指标注结果信息)。 已标注:同时导入标注对象和标注内容,当前“自由格式”的数据集不支持导入标注内容。 为了确保能够正确读取标注内容,要求用户严格按照规范存放数据: 导入方式选择目录时,需要用户选择“标注格式”,并按照标注格式的要求存放数据,详细规范请参见标注格式章节。 导入方式选择manifest时,需要满足manifest文件的规范。 数据标注状态选择“已标注”,您需要保证目录或manifest文件满足相应的格式规范,否则可能存在导入失败的情况。 导入已标注的文件,导入完成后,请检查您导入的数据是否为已标注状态。
  • 表格数据集从OBS导入操作 ModelArts支持从OBS导入表格数据,即csv文件。 表格数据集导入说明: 导入成功的前提是,数据源的schema需要与创建数据集指定的schema保持一致。其中schema指表格的列名和类型,创建数据集时一旦指定,不支持修改。 从OBS导入csv文件,不会校验数据类型,但是列数需要跟数据集的schema保持一致。如果数据格式不合法,会将数据置为null,详见表4。 导入的csv文件要求如下:需要选择文件所在目录,其中csv文件的列数需要跟数据集schema一致。支持自动获取csv文件的schema。 ├─dataset-import-example │ table_import_1.csv │ table_import_2.csv │ table_import_3.csv │ table_import_4.csv
  • 数据去冗余算子(RRD算子) 可以依据用户设置的比例去除差异最大的数据。 图5 RRD效果图 表2 高级参数说明 参数名 是否必选 默认值 参数说明 sample_ratio 否 0.9 数据留下的百分比。取值范围为0~1。例如0.9表示保留百分之90的原数据。 n_clusters auto auto 数据样本的种类数,默认为auto,即按照目录中图片个数取类别总数,可指定具体类别数,如 4 do_validation 否 True 是否进行数据校验,可填True或者False。表示数据去冗余前需要进行数据校验,否则只进行数据去重。 输入要求 算子输入分为两种,“数据集”或“OBS目录”。 选择“数据集”,请从下拉框中选择ModelArts中管理的数据集及其版本。要求数据集类型与您在本任务中选择的场景类别一致。 选择“OBS目录”,存放结构又分两种情况,“仅包含图片”或“包含图片和标注信息”。 “仅包含图片”:当目录下全是图片时,支持jpg、jpeg、png、bmp格式,嵌套子目录的图片也将全部读入。 “包含图片和标注信息”:根据不同数据类型,结构不同。 图像分类,其目录结构如下所示。如下目录结构,仅支持单标签场景。 input_path/ --label1/ ----1.jpg --label2/ ----2.jpg --../ 物体检测,其目录结构如下所示。支持jpg、jpeg、png、bmp格式的图片,xml为标准的PACAL VOC格式标注文件。 input_path/ --1.jpg --1.xml --2.jpg --2.xml ... 输出说明 图像分类 输出数据的目录结构如下所示。 output_path/ --Data/ ----class1/ # 如果输入数据有标注信息会一并输出,class1为标注类别 ------1.jpg ----class2/ ------2.jpg ------3.jpg --output.manifest 其中manifest文件内容示例如下所示。 { "id": "xss", "source": "obs://home/fc8e2688015d4a1784dcbda44d840307_14.jpg", "usage": "train", "annotation": [ { "name": "Cat", "type": "modelarts/image_classification" } ] } 物体检测 输出数据的目录结构如下所示。 output_path/ --Data/ ----1.jpg ----1.xml # 如果输入数据有标注信息会一并输出,xml为标注文件 ----2.jpg ----3.jpg --output.manifest 其中manifest文件内容示例如下所示。 { "source":"obs://fake/be462ea9c5abc09f.jpg", "annotation":[ { "annotation-loc":"obs://fake/be462ea9c5abc09f.xml", "type":"modelarts/object_detection", "annotation-format":"PASCAL VOC", "annotated-by":"modelarts/hard_example_algo" } ] }
  • 数据去重算子(SimDeduplication算子) 可以依据用户设置的相似程度阈值完成图像去重处理。图像去重是图像数据处理常见的数据处理方法。图像重复指图像内容完全一样,或者有少量的尺度、位移、色彩、亮度变化,或者是添加了少量其他内容等。 图4 SimDeduplication效果图 表1 高级参数说明 参数名 是否必选 默认值 参数说明 simlarity_threshold 否 0.9 相似程度阈值,两张图片间的相似度大于阈值时,其中一张会作为重复图片被过滤掉。取值范围为0~1。 do_validation 否 True 是否进行数据校验,可填True或者False。表示数据去重前需要进行数据校验,否则只进行数据去重。 输入要求 算子输入分为两种,“数据集”或“OBS目录”。 选择“数据集”,请从下拉框中选择ModelArts中管理的数据集及其版本。要求数据集类型与您在本任务中选择的场景类别一致。 选择“OBS目录”,存放结构又分两种情况,“仅包含图片”或“包含图片和标注信息”。 “仅包含图片”:当目录下全是图片时,支持jpg、jpeg、png、bmp格式,嵌套子目录的图片也将全部读入。 “包含图片和标注信息”:根据不同数据类型,结构不同。 图像分类,其目录结构如下所示。如下目录结构,仅支持单标签场景。 input_path/ --label1/ ----1.jpg --label2/ ----2.jpg --../ 物体检测,其目录结构如下所示。支持jpg、jpeg、png、bmp格式的图片,xml为标准的PACAL VOC格式标注文件。 input_path/ --1.jpg --1.xml --2.jpg --2.xml ... 输出说明 图像分类 输出数据的目录结构如下所示。 output_path/ --Data/ ----class1/ # 如果输入数据有标注信息会一并输出,class1为标注类别 ------1.jpg ----class2/ ------2.jpg ------3.jpg --output.manifest 其中manifest文件内容示例如下所示。 { "id": "xss", "source": "obs://home/fc8e2688015d4a1784dcbda44d840307_14.jpg", "usage": "train", "annotation": [ { "name": "Cat", "type": "modelarts/image_classification" } ] } 物体检测 输出数据的目录结构如下所示。 output_path/ --Data/ ----1.jpg ----1.xml # 如果输入数据有标注信息会一并输出,xml为标注文件 ----2.jpg ----3.jpg --output.manifest 其中manifest文件内容示例如下所示。 { "source":"obs://fake/be462ea9c5abc09f.jpg", "annotation":[ { "annotation-loc":"obs://fake/be462ea9c5abc09f.xml", "type":"modelarts/object_detection", "annotation-format":"PASCAL VOC", "annotated-by":"modelarts/hard_example_algo" } ] }
  • 从JupyterLab中下载大于100MB的文件到本地 大于100MB的文件需要先从Notebook中上传到OBS,再从OBS下载到本地,具体操作如下: 在Notebook中,新建一个大于100MB的“ipynb”文件,使用MoXing先将该文件从Notebook上传到OBS中,示例代码如下: 1 2 import moxing as mox mox.file.copy('/home/ma-user/work/obs_file.txt', 'obs://bucket_name/obs_file.txt') 其中“/home/ma-user/work/obs_file.txt”为文件在Notebook中的存储路径,“obs://bucket_name/obs_file.txt”为该文件上传到OBS的存储路径,其中“bucket_name”为OBS中创建的桶的名称,“obs_file.txt”为上传的文件。 使用OBS或ModelArts SDK将OBS中的文件下载到本地。 方式一:使用OBS进行下载 在OBS中,可以将样例中的“obs_file.txt”下载到本地。如果您的数据较多,推荐OBS Browser+下载数据或文件夹。使用OBS下载文件的操作指导参见下载文件 方式二:使用ModelArts SDK进行下载 在您的本地环境下载并安装ModelArts SDK。 完成ModelArts SDK的Session鉴权。 将OBS中的文件下载到本地,详请参见从OBS下载数据。示例代码如下: 1 2 3 4 5 6 7 8 9 10 from modelarts.session import Session # 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 __AK = os.environ["HUAWEICLOUD_SDK_AK"] __SK = os.environ["HUAWEICLOUD_SDK_SK"] # 如果进行了加密还需要进行解密操作 session = Session(access_key=__AK,secret_key=__SK, project_id='***', region_name='***') session.download_data(bucket_path="/bucket_name/obs_file.txt",path="/home/user/obs_file.txt")
  • 使用ma-cli ma-job get-event命令查询ModelArts训练作业事件 执行ma-cli ma-job get-event命令查看ModelArts训练作业事件。 $ ma-cli ma-job get-event -h Usage: ma-cli ma-job get-event [OPTIONS] Get job running event. Example: # Get training job running event ma-cli ma-job get-event --job-id ${job_id} Options: -i, --job-id TEXT Get training job event by job id. [required] -C, --config-file TEXT Configure file path for authorization. -D, --debug Debug Mode. Shows full stack trace when error occurs. -P, --profile TEXT CLI connection profile to use. The default profile is "DEFAULT". -H, -h, --help Show this message and exit. 参数名 参数类型 是否必选 参数说明 -i / --job-id String 是 查询指定训练任务ID的事件。 示例:查看指定ID的训练作业的事件详情等。 ma-cli ma-job get-event --job-id b63e90baxxx
  • 使用ma-cli ma-job get-engine命令查询ModelArts训练AI引擎 执行ma-cli ma-job get-engine命令查询ModelArts训练使用的AI引擎。 $ ma-cli ma-job get-engine -h Usage: ma-cli ma-job get-engine [OPTIONS] Get job engine info. Example: # Get training job engines ma-cli ma-job get-engine Options: -v, --verbose Show detailed information about training engines. -C, --config-file TEXT Configure file path for authorization. -D, --debug Debug Mode. Shows full stack trace when error occurs. -P, --profile TEXT CLI connection profile to use. The default profile is "DEFAULT". -H, -h, --help Show this message and exit. 表4 参数说明 参数名 参数类型 是否必选 参数说明 -v / --verbose Bool 否 显示详细的信息开关,默认关闭。 示例:查看训练作业的AI引擎。 ma-cli ma-job get-engine
  • 使用ma-cli ma-job get-log命令查询ModelArts训练作业日志 执行ma-cli ma-job get-log命令查询ModelArts训练作业日志。 $ ma-cli ma-job get-log -h Usage: ma-cli ma-job get-log [OPTIONS] Get job log details. Example: # Get job log by job id ma-cli ma-job get-log --job-id ${job_id} Options: -i, --job-id TEXT Get training job details by job id. [required] -t, --task-id TEXT Get training job details by task id (default "worker-0"). -C, --config-file TEXT Configure file path for authorization. -D, --debug Debug Mode. Shows full stack trace when error occurs. -P, --profile TEXT CLI connection profile to use. The default profile is "DEFAULT". -h, -H, --help Show this message and exit. 参数名 参数类型 是否必选 参数说明 -i / --job-id String 是 查询指定训练任务ID的任务日志。 -t / --task-id String 否 查询指定task的日志,默认是work-0。 示例:查询指定训练任务ID的作业日志。 ma-cli ma-job get-log --job-id b63e90baxxx
  • 使用ma-cli ma-job get-flavor命令查询ModelArts训练资源规格 执行ma-cli ma-job get-flavor命令查询ModelArts训练的资源规格。 $ ma-cli ma-job get-flavor -h Usage: ma-cli ma-job get-flavor [OPTIONS] Get job flavor info. Example: # Get training job flavors ma-cli ma-job get-flavor Options: -t, --flavor-type [CPU|GPU|Ascend] Type of training job flavor. -v, --verbose Show detailed information about training flavors. -C, --config-file TEXT Configure file path for authorization. -D, --debug Debug Mode. Shows full stack trace when error occurs. -P, --profile TEXT CLI connection profile to use. The default profile is "DEFAULT". -H, -h, --help Show this message and exit. 表5 参数说明 参数名 参数类型 是否必选 参数说明 -t / --flavor-type String 否 资源规格类型,如果不指定默认返回所有的资源规格。 -v / --verbose Bool 否 显示详细的信息开关,默认关闭。 示例:查看训练作业的资源规格及类型。 ma-cli ma-job get-flavor
  • 使用ma-cli ma-job stop命令停止ModelArts训练作业 执行ma-cli ma-job stop命令,可停止指定作业id的训练作业。 $ ma-cli ma-job stop -h Usage: ma-cli ma-job stop [OPTIONS] Stop training job by job id. Example: Stop training job by job id ma-cli ma-job stop --job-id ${job_id} Options: -i, --job-id TEXT Get training job event by job id. [required] -y, --yes Confirm stop operation. -C, --config-file TEXT Configure file path for authorization. -D, --debug Debug Mode. Shows full stack trace when error occurs. -P, --profile TEXT CLI connection profile to use. The default profile is "DEFAULT". -H, -h, --help Show this message and exit. 表6 参数说明 参数名 参数类型 是否必选 参数说明 -i / --job-id String 是 ModelArts训练作业ID。 -y / --yes Bool 否 强制关闭指定训练作业。 示例:停止运行中的训练作业。 ma-cli ma-job stop --job-id efd3e2f8xxx
  • 示例:基于自定义镜像创建训练作业 指定命令行options参数提交训练作业 ma-cli ma-job submit --image-url atelier/pytorch_1_8:pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64-20220926104358-041ba2e \ --code-dir obs://your-bucket/mnist/code/ \ --user-command "export LD_LIBRARY_PATH=/usr/local/cuda/compat:$LD_LIBRARY_PATH && cd /home/ma-user/modelarts/user-job-dir/code && /home/ma-user/anaconda3/envs/PyTorch-1.8/bin/python main.py" \ --data-url obs://your-bucket/mnist/dataset/MNIST/ \ --log-url obs://your-bucket/mnist/logs/ \ --train-instance-type modelarts.vm.cpu.8u \ --train-instance-count 1 \ -q 使用自定义镜像的train.yaml样例: # .ma/train.yaml样例(自定义镜像) image-url: atelier/pytorch_1_8:pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64-20220926104358-041ba2e user-command: export LD_LIBRARY_PATH=/usr/local/cuda/compat:$LD_LIBRARY_PATH && cd /home/ma-user/modelarts/user-job-dir/code && /home/ma-user/anaconda3/envs/PyTorch-1.8/bin/python main.py train-instance-type: modelarts.vm.cpu.8u train-instance-count: 1 data-url: obs://your-bucket/mnist/dataset/MNIST/ code-dir: obs://your-bucket/mnist/code/ log-url: obs://your-bucket/mnist/logs/ ##[Optional] Uncomment to set uid when use custom image mode uid: 1000 ##[Optional] Uncomment to upload output file/dir to OBS from training platform output: - name: output_dir obs_path: obs://your-bucket/mnist/output1/ ##[Optional] Uncomment to download input file/dir from OBS to training platform input: - name: data_url obs_path: obs://your-bucket/mnist/dataset/MNIST/ ##[Optional] Uncomment pass hyperparameters parameters: - epoch: 10 - learning_rate: 0.01 - pretrained: ##[Optional] Uncomment to use dedicated pool pool_id: pool_xxxx ##[Optional] Uncomment to use volumes attached to the training job volumes: - efs: local_path: /xx/yy/zz read_only: false nfs_server_path: xxx.xxx.xxx.xxx:/
  • 使用ma-cli ma-job submit命令提交ModelArts训练作业 执行ma-cli ma-job submit命令提交ModelArts训练作业。 ma-cli ma-job submit命令需要指定一个位置参数YAML_FILE表示作业的配置文件路径,如果不指定该参数,则表示配置文件为空。配置文件是一个YAML格式的文件,里面的参数就是命令的option参数。此外,如果用户在命令行中同时指定YAML_FILE配置文件和option参数,命令行中指定的option参数的值将会覆盖配置文件相同的值。 $ma-cli ma-job submit -h Usage: ma-cli ma-job submit [OPTIONS] [YAML_FILE]... Submit training job. Example: ma-cli ma-job submit --code-dir obs://your_bucket/code/ --boot-file main.py --framework-type PyTorch --working-dir /home/ma-user/modelarts/user-job-dir/code --framework-version pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64 --data-url obs://your_bucket/dataset/ --log-url obs://your_bucket/logs/ --train-instance-type modelarts.vm.cpu.8u --train-instance-count 1 Options: --name TEXT Job name. --description TEXT Job description. --image-url TEXT Full swr custom image path. --uid TEXT Uid for custom image (default: 1000). --working-dir TEXT ModelArts training job working directory. --local-code-dir TEXT ModelArts training job local code directory. --user-command TEXT Execution command for custom image. --pool-id TEXT Dedicated pool id. --train-instance-type TEXT Train worker specification. --train-instance-count INTEGER Number of workers. --data-url TEXT OBS path for training data. --log-url TEXT OBS path for training log. --code-dir TEXT OBS path for source code. --output TEXT Training output parameter with OBS path. --input TEXT Training input parameter with OBS path. --env-variables TEXT Env variables for training job. --parameters TEXT Training job parameters (only keyword parameters are supported). --boot-file TEXT Training job boot file path behinds `code_dir`. --framework-type TEXT Training job framework type. --framework-version TEXT Training job framework version. --workspace-id TEXT The workspace where you submit training job(default "0") --policy [regular|economic|turbo|auto] Training job policy, default is regular. --volumes TEXT Information about the volumes attached to the training job. -q, --quiet Exit without waiting after submit successfully. -C, --config-file PATH Configure file path for authorization. -D, --debug Debug Mode. Shows full stack trace when error occurs. -P, --profile TEXT CLI connection profile to use. The default profile is "DEFAULT". -H, -h, --help Show this message and exit. 表3 参数说明 参数名 参数类型 是否必选 参数说明 YAML_FILE String 否 表示训练作业的配置文件,如果不传则表示配置文件为空。 --code-dir String 是 训练源代码的OBS路径。 --data-url String 是 训练数据的OBS路径。 --log-url String 是 存放训练生成日志的OBS路径。 --train-instance-count String 是 训练作业计算节点个数,默认是1,表示单节点。 --boot-file String 否 当使用自定义镜像或自定义命令时可以省略,当使用预置命令提交训练作业时需要指定该参数。 --name String 否 训练任务名称。 --description String 否 训练任务描述信息。 --image-url String 否 自定义镜像SWR地址,遵循organization/image_name:tag --uid String 否 自定义镜像运行的UID,默认值1000。 --working-dir String 否 运行算法时所在的工作目录。 --local-code-dir String 否 算法的代码目录下载到训练容器内的本地路径。 --user-command String 否 自定义镜像执行命令。需为/home下的目录。 当code-dir以file://为前缀时,当前字段不生效。 --pool-id String 否 训练作业选择的资源池ID。可在ModelArts管理控制台,单击左侧“专属资源池”,在专属资源池列表中查看资源池ID。 --train-instance-type String 否 训练作业选择的资源规格。 --output String 否 训练的输出信息,指定后,训练任务将会把训练脚本中指定输出参数对应训练容器的输出目录上传到指定的OBS路径。如果需要指定多个参数,可以使用--output output1=obs://bucket/output1 --output output2=obs://bucket/output2 --input String 否 训练的输入信息,指定后,训练任务将会把对应OBS上的数据下载到训练容器,并将数据存储路径通过指定的参数传递给训练脚本。如果需要指定多个参数,可以使用--input data_path1=obs://bucket/data1 --input data_path2=obs://bucket/data2 --env-variables String 否 训练时传入的环境变量,如果需要指定多个参数,可以使用--env-variables ENV1=env1 --env-variables ENV2=env2 --parameters String 否 训练入参,可以通过--parameters "--epoch 0 --pretrained"指定多个参数。 --framework-type String 否 训练作业选择的引擎规格。 --framework-version String 否 训练作业选择的引擎版本。 -q / --quiet Bool 否 提交训练任务成功后直接退出,不再同步打印作业状态。 --workspace-id String 否 作业所处的工作空间,默认值为“0”。 --policy String 否 训练资源规格模式,可选值regular、economic、turbo、auto。 --volumes String 否 挂载EFS,如果需要指定多个参数,可以使用--volumes。 "local_path=/xx/yy/zz;read_only=false;nfs_server_path=xxx.xxx.xxx.xxx:/" -volumes "local_path=/xxx/yyy/zzz;read_only=false;nfs_server_path=xxx.xxx.xxx.xxx:/"
  • 示例:基于ModelArts预置镜像提交训练作业 指定命令行options参数提交训练作业 ma-cli ma-job submit --code-dir obs://your-bucket/mnist/code/ \ --boot-file main.py \ --framework-type PyTorch \ --working-dir /home/ma-user/modelarts/user-job-dir/code \ --framework-version pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64 \ --data-url obs://your-bucket/mnist/dataset/MNIST/ \ --log-url obs://your-bucket/mnist/logs/ \ --train-instance-type modelarts.vm.cpu.8u \ --train-instance-count 1 \ -q 使用预置镜像的train.yaml样例: # .ma/train.yaml样例(预置镜像) # pool_id: pool_xxxx train-instance-type: modelarts.vm.cpu.8u train-instance-count: 1 data-url: obs://your-bucket/mnist/dataset/MNIST/ code-dir: obs://your-bucket/mnist/code/ working-dir: /home/ma-user/modelarts/user-job-dir/code framework-type: PyTorch framework-version: pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64 boot-file: main.py log-url: obs://your-bucket/mnist/logs/ ##[Optional] Uncomment to set uid when use custom image mode uid: 1000 ##[Optional] Uncomment to upload output file/dir to OBS from training platform output: - name: output_dir obs_path: obs://your-bucket/mnist/output1/ ##[Optional] Uncomment to download input file/dir from OBS to training platform input: - name: data_url obs_path: obs://your-bucket/mnist/dataset/MNIST/ ##[Optional] Uncomment pass hyperparameters parameters: - epoch: 10 - learning_rate: 0.01 - pretrained: ##[Optional] Uncomment to use dedicated pool pool_id: pool_xxxx ##[Optional] Uncomment to use volumes attached to the training job volumes: - efs: local_path: /xx/yy/zz read_only: false nfs_server_path: xxx.xxx.xxx.xxx:/
  • 配置训练参数 训练过程中可以从OBS桶或者数据集中获取输入数据进行模型训练,训练输出的结果也支持存储至OBS桶中。创建训练作业时可以参考表4配置输入、输出、超参、环境变量等参数。 创建训练作业时选择的创建方式不同,训练作业的输入、输出和超参显示不同。如果参数值置灰,即表示该参数已经在算法代码中配置了且不支持修改。 表4 配置训练参数 参数名称 子参数 说明 输入 参数名称 算法代码需要通过“输入”的“参数名称”去读取训练的输入数据。 建议设置为“data_url”。训练输入参数要与所选算法的“输入”参数匹配,请参见创建算法时的表4。 数据集 单击“数据集”,在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”。训练输出参数要与所选算法的“输出”参数匹配,请参见创建算法时的表5。 数据存储位置 单击“数据存储位置”,从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~128,缺省值为3。创建训练后不支持修改重启次数,请合理设置次数。 勾选无条件自动重启后,只要系统检测到训练异常,就无条件重启训练作业。为了避免无效重启浪费算力资源,系统最多只支持连续无条件重启3次。 当训练过程中触发了自动重启,则系统会记录重启信息,在训练作业详情页可以查看故障恢复详情,具体请参见训练作业重调度。
共100000条