华为云用户手册

  • 功能介绍 统一存储主要用于工作流的目录管理,帮助用户统一管理一个工作流中的所有存储路径,主要分为以下两个功能: 输入目录管理:开发者在编辑开发工作流时可以对所有数据的存储路径做统一管理,规定用户按照自己的目录规划来存放数据,而存储的根目录可以根据用户自己的需求自行配置。该方式只做目录的编排,不会自动创建新的目录。 输出目录管理:开发者在编辑开发工作流时可以对所有的输出路径做统一管理,用户无需手动创建输出目录,只需要在工作流运行前配置存储根路径,并且可以根据开发者的目录编排规则在指定目录下查看输出的数据信息。此外同一个工作流的多次运行支持输出到不同的目录下,对不同的执行做了很好的数据隔离。
  • 常用方式 InputStorage(路径拼接) 该对象主要用于帮助用户统一管理输入的目录,使用示例如下: import modelarts.workflow as wf storage = wf.data.InputStorage(name="storage_name", title="title_info", description="description_info") # name字段必填,title, description可选填 input_data = wf.data.OBSPath(obs_path = storage.join("directory_path")) # 注意,如果是目录则最后需要加"/",例如:storage.join("/input/data/") 工作流运行时,如果storage对象配置的根路径为"/root/",则最后得到的路径为"/root/directory_path" OutputStorage(目录创建) 该对象主要用于帮助用户统一管理输出的目录,保证工作流每次执行输出到新目录,使用示例如下: import modelarts.workflow as wf storage = wf.data.OutputStorage(name="storage_name", title="title_info", description="description_info") # name字段必填,title, description可选填 output_path = wf.data.OBSOutputConfig(obs_path = storage.join("directory_path")) # 注意,只能创建目录,不能创建文件 。 工作流运行时,如果storage对象配置的根路径为"/root/",则系统自动创建相对目录,最后得到的路径为"/root/执行ID/directory_path"
  • 进阶用法 Storage 该对象是InputStorage和OutputStorage的基类,包含了两者的所有能力,可以供用户灵活使用。 属性 描述 是否必填 数据类型 name 名称。 是 str title 不填默认使用name的值。 否 str description 描述信息。 否 str create_dir 表示是否自动创建目录,默认为“False”。 否 bool with_execution_id 表示创建目录时是否拼接execution_id,默认为“False”。该字段只有在create_dir为True时才支持设置为True。 否 bool 使用示例如下: 实现InputStorage相同的能力 import modelarts.workflow as wf # 构建一个Storage对象, with_execution_id=False, create_dir=False storage = wf.data.Storage(name="storage_name", title="title_info", description="description_info", with_execution_id=False, create_dir=False) input_data = wf.data.OBSPath(obs_path = storage.join("directory_path")) # 注意,如果是目录则最后需要加"/",例如:storage.join("/input/data/") 工作流运行时,如果storage对象配置的根路径为"/root/",则最后得到的路径为"/root/directory_path" 实现OutputStorage相同的能力 import modelarts.workflow as wf # 构建一个Storage对象, with_execution_id=True, create_dir=True storage = wf.data.Storage(name="storage_name", title="title_info", description="description_info", with_execution_id=True, create_dir=True) output_path = wf.data.OBSOutputConfig(obs_path = storage.join("directory_path")) # 注意,只能创建目录,不能创建文件 工作流运行时,如果storage对象配置的根路径为"/root/",则系统自动创建相对目录,最后得到的路径为"/root/执行ID/directory_path" 通过join方法的参数实现同一个Storage的不同用法 import modelarts.workflow as wf # 构建一个Storage对象, 并且假设Storage配置的根目录为"/root/" storage = wf.data.Storage(name="storage_name", title="title_info", description="description_info", with_execution_id=False, create_dir=False) input_data1 = wf.data.OBSPath(obs_path = storage) # 得到的路径为:/root/ input_data2 = wf.data.OBSPath(obs_path = storage.join("directory_path")) # 得到的路径为:/root/directory_path,需要用户自行保证该路径存在 output_path1 = wf.data.OBSOutputConfig(obs_path = storage.join(directory="directory_path", with_execution_id=False, create_dir=True)) # 系统自动创建目录,得到的路径为:/root/directory_path output_path2 = wf.data.OBSOutputConfig(obs_path = storage.join(directory="directory_path", with_execution_id=True, create_dir=True)) # 系统自动创建目录,得到的路径为:/root/执行ID/directory_path Storage可实现链式调用 使用示例如下: import modelarts.workflow as wf # 构建一个基类Storage对象, 并且假设Storage配置的根目录为"/root/" storage = wf.data.Storage(name="storage_name", title="title_info", description="description_info", with_execution_id=False, create_dir=Fals) input_storage = storage.join("directory_path_1") # 得到的路径为:/root/directory_path_1 input_storage_next = input_storage.join("directory_path_2") # 得到的路径为: /root/directory_path_1/directory_path_2
  • 动态扩容EVS有什么限制 Notebook实例的存储配置采用的是云硬盘EVS。 图1 创建Notebook实例时选择云硬盘EVS存储 单次最大可以扩容100GB,扩容后的总容量不超过4096GB。 云硬盘EVS存储容量最大支持4096GB,达到4096GB时,不允许再扩容。 实例停止后,扩容后的容量仍然有效。计费也是按照扩容后的云硬盘EVS容量进行计费。 云硬盘EVS只要使用就会计费,请在停止Notebook实例后,确认不使用就及时删除数据,释放资源,避免产生费用。
  • Step2 准备脚本文件并上传至OBS中 准备本案例所需训练脚本mindspore-verification.py文件和Ascend的启动脚本文件(共5个)。 训练脚本文件具体内容请参见训练mindspore-verification.py文件。 Ascend的启动脚本文件包括以下5个,具体脚本内容请参见Ascend的启动脚本文件。 run_ascend.py common.py rank_table.py manager.py fmk.py mindspore-verification.py和run_ascend.py脚本文件在创建训练作业时的“启动命令”参数中调用,具体请参见启动命令。 run_ascend.py脚本运行时会调用common.py、rank_table.py、manager.py、fmk.py脚本。 上传训练脚本mindspore-verification.py文件至OBS桶的“obs://test-modelarts/ascend/demo-code/”文件夹下。 上传Ascend的启动脚本文件(共5个)至OBS桶的“obs://test-modelarts/ascend/demo-code/run_ascend/”文件夹下。
  • Step5 在ModelArts上创建Notebook并调试 将上传到SWR上的镜像注册到ModelArts的镜像管理中。 登录ModelArts管理控制台,在左侧导航栏中选择“镜像管理 ”,单击“注册镜像”,根据界面提示注册镜像。注册后的镜像可以用于创建Notebook。 在Notebook中使用 自定义镜像 创建Notebook并调试,调试成功后,保存镜像。 在Notebook中使用自定义镜像创建Notebook操作请参见基于自定义镜像创建Notebook实例。 保存Notebook镜像操作请参见保存Notebook镜像环境。 已有的镜像调试成功后,再使用ModelArts训练模块训练作业。
  • 训练mindspore-verification.py文件 mindspore-verification.py文件内容如下: import os import numpy as np from mindspore import Tensor import mindspore.ops as ops import mindspore.context as context print('Ascend Envs') print('------') print('JOB_ID: ', os.environ['JOB_ID']) print('RANK_TABLE_FILE: ', os.environ['RANK_TABLE_FILE']) print('RANK_SIZE: ', os.environ['RANK_SIZE']) print('ASCEND_DEVICE_ID: ', os.environ['ASCEND_DEVICE_ID']) print('DEVICE_ID: ', os.environ['DEVICE_ID']) print('RANK_ID: ', os.environ['RANK_ID']) print('------') context.set_context(device_target="Ascend") x = Tensor(np.ones([1,3,3,4]).astype(np.float32)) y = Tensor(np.ones([1,3,3,4]).astype(np.float32)) print(ops.add(x, y))
  • 场景描述 目标:构建安装如下软件的容器镜像,并在ModelArts平台上使用Ascend规格资源运行训练任务。 ubuntu-18.04 cann-6.3.RC2 (商用版本) python-3.7.13 mindspore-2.1.1 本教程以cann-6.3.RC2.、mindspore-2.1.1为例介绍。 本示例仅用于示意Ascend容器镜像制作流程,且在匹配正确的Ascend驱动/固件版本的专属资源池上运行通过。
  • Step1 创建OBS桶和文件夹 在OBS服务中创建桶和文件夹,用于存放样例数据集以及训练代码。如下示例中,请创建命名为“test-modelarts”的桶,并创建如表1所示的文件夹。 创建OBS桶和文件夹的操作指导请参见创建桶和新建文件夹。 请确保您使用的OBS与ModelArts在同一区域。 表1 OBS桶文件夹列表 文件夹名称 用途 obs://test-modelarts/ascend/demo-code/ 用于存储Ascend训练脚本文件。 obs://test-modelarts/ascend/demo-code/run_ascend/ 用于存储Ascend训练脚本的启动脚本。 obs://test-modelarts/ascend/log/ 用于存储训练日志文件。
  • 背景信息 ModelArts的用户需要为不同的业务目标开发算法、管理和部署模型,此时可以创建多个工作空间,把不同应用开发过程的输出内容划分到不同工作空间中,便于管理和使用。 基于工作空间可以实现资源逻辑隔离、资源配额管理、细粒度鉴权和资源清理能力。工作空间组件可以将ModelArts各类资源整合,以工作空间体现给企业项目管理服务。 工作空间支持3种访问控制: PUBLIC:租户(主账号和所有子账号)内部公开访问。 PRIVATE:仅创建者和主账号可访问。 INTERNAL:创建者、主账号、指定 IAM 子账号可访问当授权类型为INTERNAL时需要指定可访问的子账号的账号名,可选择多个。 每个账号每个IAM项目都会分配1个默认工作空间,默认工作空间的访问控制为PUBLIC。 通过工作空间的访问控制能力,可限制仅允许部分人访问对应的工作空间。通过此功能可实现类似如下场景: 教育场景:老师可给每个学生分配1个INTERNAL的工作空间并且限制该工作空间被指定学生访问,这样可使得学生可独立完成在ModelArts上的实验。 企业场景:管理者可创建用于生产任务的工作空间并限制仅让运维人员使用,用于日常调试的工作空间并限制仅让开发人员使用。通过这种方式让不同的企业角色只能在指定工作空间下使用资源。
  • 创建工作空间 登录ModelArts管理控制台。 在左侧导航栏中,选择“工作空间”进入工作空间列表。 单击“创建工作空间”,进入创建页面。 表1 创建工作空间 参数名称 说明 工作空间名称 必填,工作空间的名称。 支持4~64位可见字符,名称可以包含字母、中文、数字、中划线(-)或下划线(_)。 描述 工作空间的简介。支持0~256位字符。 企业项目 必填,选择绑定的企业项目。当没有合适的企业项目时,可以单击“新建企业项目”跳转到企业项目管理页面,创建新的企业项目再绑定。 企业项目是一种云资源管理方式,企业项目管理服务提供统一的云资源按项目管理,以及项目内的资源管理、成员管理。 授权类型 必填,选择工作空间的访问权限。 “PUBLIC”:租户(主账号和所有子账号)内部公开访问。 “PRIVATE”:仅创建者和主账号可访问。 “INTERNAL”:创建者、主账号、指定的子账号可访问。当授权类型为INTERNAL时,需要配置“授权对象类型”和“授权对象”指定可访问的子账号。 当“授权对象类型”选择“IAM子用户”时,“授权对象”选择指定的IAM子用户,可选择多个。 当“授权对象类型”选择“联邦用户”时,“授权对象”输入联邦用户的用户名或用户ID,支持配置多个。 当“授权对象类型”选择“委托用户”时,“授权对象”选择委托名称,可选择多个。 工作空间参数配置完成后,单击“立即创建”完成创建任务。
  • 管理工作空间配额 工作空间创建成功后,可以查看配额信息或修改配额值。 在ModelArts管理控制台的左侧导航栏中,选择“工作空间”进入工作空间列表。 在工作空间列表,单击操作列的“配额管理”进入工作空间详情页。 在配额信息页面可以查看工作空间设置的配额值、已用的配额、最后修改时间等配额信息。 单击配额信息右侧的“修改配额”可以修改配额值。配置值的配置说明请参见表2。 表2 配额信息 配额名称 配额值说明 单位 自动学习(预测分析)训练时长 默认无限制,支持设置1~60000。 分钟 自动学习(图像分类、物体检测、声音分类)训练时长 默认无限制,支持设置1~60000。 分钟 训练作业GPU规格训练时长(单张Pnt1单节点为统计基础单元) 默认无限制,支持设置1~60000。 分钟 训练作业CPU规格训练时长(单核单节点为统计基础单元) 默认无限制,支持设置1~60000。 分钟 可视化作业使用时长 默认无限制,支持设置1~60000。 分钟 开发环境CPU规格使用时长(单核为统计基础单元) 默认无限制,支持设置1~60000。 分钟 开发环境GPU规格使用时长(单张Pnt1为统计基础单元) 默认无限制,支持设置1~60000。 分钟 推理服务CPU规格使用时长(单节点为统计基础单元) 默认无限制,支持设置1~60000。 分钟 推理服务GPU规格使用时长(单节点为统计基础单元) 默认无限制,支持设置1~60000。 分钟 训练作业CPU规格训练核数 默认无限制,支持设置1~10000。 核 训练作业GPU规格训练卡数 默认无限制,支持设置1~1000。 卡 训练作业 RAM 规格训练内存大小 默认无限制,支持设置1~100000。 GB 智能标注GPU规格使用时长 默认无限制,支持设置1~60000。 分钟 工作空间的配额值修改完成后,单击“提交修改”,当“配额值”数据刷新表示修改成功。
  • 删除工作空间 当不需要使用工作空间时,支持删除工作空间。工作空间删除后会默认清理该工作空间下所有资源。其中,默认工作空间“default”不支持删除。 删除操作无法恢复,请谨慎操作。 在ModelArts管理控制台的左侧导航栏中,选择“工作空间”进入工作空间列表。 在工作空间列表,单击操作列的“删除”,在删除工作空间弹窗中确认待删除的工作空间信息以及该工作空间下将被一起删除的资源,确认无误后,输入“DELETE”,单击“确定”,工作空间的状态变为“删除中”,待资源清理完成,该工作空间会从列表删除。
  • Step5 在开发环境中调试代码 由于已经连接至云端开发环境,此时可以方便的在本地PyCharm中编码、调测并运行。实际运行环境为云上开发环境,资源为云上昇腾AI处理器资源。可以做到本地编写修改代码,直接在云上环境运行。 像本地运行代码一样,直接单击运行按钮运行代码即可,此时虽然是在本地IDE单击的运行按钮,实际上运行的是云端开发环境里的代码,日志可以回显在本地的日志窗口。 图5 调试代码 也可以单击右上角的Run/Debug Configuration来设置运行的参数。 图6 设置运行参数 当需要调试代码时,可以直接打断点,然后使用debug方式运行程序。 图7 代码打断点 图8 Debug方式调试 此时可以进入debug模式,代码运行暂停在该行,且可以查看变量的值。 图9 Debug模式 使用debug方式调试代码的前提是本地的代码和云端的代码是完全一致的,如果不一致可能会导致在本地打断点的行和实际运行时该行的代码并不一样,会出现意想不到的错误。 因此在配置云上Python Interpreter时,推荐选择Automatically upload选项,以保证本地的文件修改能自动上传到云端。如果没有选择自动上传,则本地代码修改完后,也可以参考Step6 同步上传本地文件至Notebook手动上传目录或代码。
  • 前提条件 本地已安装2019.2及以上版本的PyCharm专业版。SSH远程调试功能只限PyCharm专业版。 创建一个Notebook实例,并开启远程SSH开发。该实例状态必须处于“运行中”,具体参见创建Notebook实例章节。 在Notebook实例详情页面获取开发环境IP地址(例如:dev-modelarts-cnnorth4.huaweicloud.com)和端口号。 图1 Notebook实例详情页面 准备好密钥对。 密钥对在用户第一次创建时,自动下载,之后使用相同的密钥时不会再有下载界面(用户一定要保存好),或者每次都使用新的密钥对。
  • 通过条件筛选数据 在数据概览页中,默认展示数据集的概览情况。在界面右上方,单击“开始标注”,进入数据集的详细数据页面,默认展示数据集中全部数据。在“全部”、“未标注”或“已标注”页签下,您可以在筛选条件区域,添加筛选条件,快速过滤出您想要查看的数据。 支持的筛选条件如下所示,您可以设置一个或多个选项进行筛选。 难例集:难例或非难例。 标签:您可以选择全部标签,或者基于您指定的标签,选中其中一个或多个。 样本创建时间:1个月内、1天内或自定义,如果选择自定义,可以在时间框中指定明确时间范围。 文件名或目录:根据文件名称或者文件存储目录筛选。 标注人:选择执行标注操作的账号名称。 样本属性:表示自动分组生成的属性。只有启用了自动分组任务后才可使用此筛选条件。 数据属性:暂不支持。 图2 筛选条件
  • 创建训练作业 方式一:使用PyTorch预置框架功能,通过mp.spawn命令启动训练作业。 创建训练作业的关键参数如表1所示。 表1 创建训练作业(预置框架) 参数名称 说明 创建方式 选择“自定义算法”。 启动方式 选择“预置框架”,引擎选择“PyTorch”,PyTorch版本根据训练要求选择。 代码目录 选择OBS桶中训练code文件夹所在路径,例如“obs://test-modelarts/code/”。 启动文件 选择代码目录中训练作业的Python启动脚本。例如“obs://test-modelarts/code/main.py”。 超参 当资源规格为单机多卡时,需要指定超参world_size和rank。 当资源规格为多机时(即计算节点个数大于 1),无需设置超参world_size和rank,超参会由平台自动注入。 方式二:使用自定义镜像功能,通过torch.distributed.launch命令启动训练作业。 创建训练作业的关键参数如表2所示。 表2 创建训练作业(自定义镜像+torch.distributed.launch命令) 参数名称 说明 创建方式 选择“自定义算法”。 启动方式 选择“自定义”。 镜像 选择用于训练的PyTorch镜像。 代码目录 选择OBS桶中训练code文件夹所在路径,例如“obs://test-modelarts/code/”。 启动命令 输入镜像的Python启动命令,例如: bash ${MA_JOB_DIR}/code/torchlaunch.sh 方式三:使用自定义镜像功能,通过torch.distributed.run命令启动训练作业。 创建训练作业的关键参数如表3所示。 表3 创建训练作业(自定义镜像+torch.distributed.run命令) 参数名称 说明 创建方式 选择“自定义算法”。 启动方式 选择“自定义”。 镜像 选择用于训练的PyTorch镜像。 代码目录 选择OBS桶中训练code文件夹所在路径,例如“obs://test-modelarts/code/”。 启动命令 输入镜像的Python启动命令,例如: bash ${MA_JOB_DIR}/code/torchrun.sh
  • 代码示例 文件目录结构如下所示,将以下文件上传至OBS桶中: code # 代码根目录 └─torch_ddp.py # PyTorch DDP训练代码文件 └─main.py # 使用PyTorch预置框架功能,通过mp.spawn命令启动训练的启动文件 └─torchlaunch.sh # 使用自定义镜像功能,通过torch.distributed.launch命令启动训练的启动文件 └─torchrun.sh # 使用自定义镜像功能,通过torch.distributed.run命令启动训练的启动文件 torch_ddp.py内容如下: import os import torch import torch.distributed as dist import torch.nn as nn import torch.optim as optim from torch.nn.parallel import DistributedDataParallel as DDP # 用于通过 mp.spawn 启动 def init_from_arg(local_rank, base_rank, world_size, init_method): rank = base_rank + local_rank dist.init_process_group("nccl", rank=rank, init_method=init_method, world_size=world_size) ddp_train(local_rank) # 用于通过 torch.distributed.launch 或 torch.distributed.run 启动 def init_from_env(): dist.init_process_group(backend='nccl', init_method='env://') local_rank=int(os.environ["LOCAL_RANK"]) ddp_train(local_rank) def cleanup(): dist.destroy_process_group() class ToyModel(nn.Module): def __init__(self): super(ToyModel, self).__init__() self.net1 = nn.Linear(10, 10) self.relu = nn.ReLU() self.net2 = nn.Linear(10, 5) def forward(self, x): return self.net2(self.relu(self.net1(x))) def ddp_train(device_id): # create model and move it to GPU with id rank model = ToyModel().to(device_id) ddp_model = DDP(model, device_ids=[device_id]) loss_fn = nn.MSELoss() optimizer = optim.SGD(ddp_model.parameters(), lr=0.001) optimizer.zero_grad() outputs = ddp_model(torch.randn(20, 10)) labels = torch.randn(20, 5).to(device_id) loss_fn(outputs, labels).backward() optimizer.step() cleanup() if __name__ == "__main__": init_from_env() main.py内容如下: import argparse import torch import torch.multiprocessing as mp parser = argparse.ArgumentParser(description='ddp demo args') parser.add_argument('--world_size', type=int, required=True) parser.add_argument('--rank', type=int, required=True) parser.add_argument('--init_method', type=str, required=True) args, unknown = parser.parse_known_args() if __name__ == "__main__": n_gpus = torch.cuda.device_count() world_size = n_gpus * args.world_size base_rank = n_gpus * args.rank # 调用 DDP 示例代码中的启动函数 from torch_ddp import init_from_arg mp.spawn(init_from_arg, args=(base_rank, world_size, args.init_method), nprocs=n_gpus, join=True) torchlaunch.sh内容如下: #!/bin/bash # 系统默认环境变量,不建议修改 MASTER_HOST="$VC_WORKER_HOSTS" MASTER_ADDR="${VC_WORKER_HOSTS%%,*}" MASTER_PORT="6060" JOB_ID="1234" NNODES="$MA_NUM_HOSTS" NODE_RANK="$VC_TASK_INDEX" NGPUS_PER_NODE="$MA_NUM_GPUS" # 自定义环境变量,指定python脚本和参数 PYTHON_SCRIPT=${MA_JOB_DIR}/code/torch_ddp.py PYTHON_ARGS="" CMD="python -m torch.distributed.launch \ --nnodes=$NNODES \ --node_rank=$NODE_RANK \ --nproc_per_node=$NGPUS_PER_NODE \ --master_addr $MASTER_ADDR \ --master_port=$MASTER_PORT \ --use_env \ $PYTHON_SCRIPT \ $PYTHON_ARGS " echo $CMD $CMD torchrun.sh内容如下: PyTorch 2.1版本需要将“rdzv_backend”参数设置为“static:--rdzv_backend=static”。 #!/bin/bash # 系统默认环境变量,不建议修改 MASTER_HOST="$VC_WORKER_HOSTS" MASTER_ADDR="${VC_WORKER_HOSTS%%,*}" MASTER_PORT="6060" JOB_ID="1234" NNODES="$MA_NUM_HOSTS" NODE_RANK="$VC_TASK_INDEX" NGPUS_PER_NODE="$MA_NUM_GPUS" # 自定义环境变量,指定python脚本和参数 PYTHON_SCRIPT=${MA_JOB_DIR}/code/torch_ddp.py PYTHON_ARGS="" if [[ $NODE_RANK == 0 ]]; then EXT_ARGS="--rdzv_conf=is_host=1" else EXT_ARGS="" fi CMD="python -m torch.distributed.run \ --nnodes=$NNODES \ --node_rank=$NODE_RANK \ $EXT_ARGS \ --nproc_per_node=$NGPUS_PER_NODE \ --rdzv_id=$JOB_ID \ --rdzv_backend=c10d \ --rdzv_endpoint=$MASTER_ADDR:$MASTER_PORT \ $PYTHON_SCRIPT \ $PYTHON_ARGS " echo $CMD $CMD
  • 调用mox.file 输入如下代码,实现如下几个简单的功能。 引入MoXing Framework。 在已有的“modelarts-test08/moxing”目录下,创建一个“test01”文件夹。 调用代码检查“test01”文件夹是否存在,如果存在,表示上一个操作已成功。 1 2 3 4 import moxing as mox mox.file.make_dirs('obs://modelarts-test08/moxing/test01') mox.file.exists('obs://modelarts-test08/moxing/test01') 执行结果如图3所示。注意,每输入一行代码,单击下“Run”运行。您也可以进入OBS管理控制台,检查“modelarts-test08/moxing”目录,查看“test01”文件夹是否已创建成功。更多MoXing的常用操作请参见MoXing常用操作的样例代码。 图3 运行示例
  • 操作步骤 下载Grafana安装包。 进入下载链接,单击Download the installer,等待下载成功即可。 安装Grafana。 双击安装包,按照指示流程安装完成即可。 在Windows的“服务”中,找到Grafana,将其开启,如果已经开启,则直接进入4。 登录Grafana。 Grafana默认在本地的3000端口启动,打开链接http://localhost:3000,出现Grafana的登录界面。首次登录用户名和密码为admin,登录成功后请根据提示修改密码。
  • ModelArts Standard中如何实现增量训练 增量训练是通过Checkpoint机制实现。 Checkpoint的机制是:在模型训练的过程中,不断地保存训练结果(包括但不限于EPOCH、模型权重、优化器状态、调度器状态)。当需要增加新的数据继续训练时,只需要加载Checkpoint,并用Checkpoint信息初始化训练状态即可。用户需要在代码里加上reload ckpt的代码,使能读取前一次训练保存的预训练模型。 在ModelArts训练中实现增量训练,建议使用“训练输出”功能。 在创建训练作业时,设置训练“输出”参数为“train_url”,在指定的训练输出的数据存储位置中保存Checkpoint,且“预下载至本地目录”选择“下载”。选择预下载至本地目录时,系统在训练作业启动前,自动将数据存储位置中的Checkpoint文件下载到训练容器的本地目录。 图1 训练输出设置
  • 什么是增量训练 增量训练(Incremental Learning)是机器学习领域中的一种训练方法,它允许人工智能(AI)模型在已经学习了一定知识的基础上,增加新的训练数据到当前训练流程中,扩展当前模型的知识和能力,而不需要从头开始。 增量训练不需要一次性存储所有的训练数据,缓解了存储资源有限的问题;另一方面,增量训练节约了重新训练中需要消耗大量算力、时间以及经济成本。 增量训练特别适用于以下情况: 数据流更新:在实际应用中,数据可能会持续更新,增量训练允许模型适应新的数据而不必重新训练。 资源限制:如果重新训练一个大型模型成本过高,增量训练可以是一个更经济的选择。 避免灾难性遗忘:在传统训练中,新数据可能会覆盖旧数据的知识,导致模型忘记之前学到的内容。增量训练通过保留旧知识的同时学习新知识来避免这个问题。 增量训练在很多领域都有应用,比如 自然语言处理 、计算机视觉和推荐系统等。它使得AI系统能够更加灵活和适应性强,更好地应对现实世界中不断变化的数据环境。
  • 查看Notebook实例事件 在Notebook的整个生命周期,包括实例的创建、启动、停止、规格变更等关键操作以及实例的运行状态等在后台都有记录,用户可以在Notebook实例详情页中查看具体的事件,通过实例的事件,从而看到实例的运行或者异常等状态详情。在右侧可以手动刷新事件,也可以设置间隔30秒,1分钟,5分钟自动刷新事件。 图1 查看Notebook实例事件并设置自动刷新 表1 实例创建过程的事件列表 事件名称 事件描述 事件级别 Scheduled 实例被调度成功 提示 PullingImage 正在拉取镜像 提示 PulledImage 镜像拉取完毕 提示 NotebookHealthy 实例运行中,处于健康状态 重要 CreateNotebookFailed 创建实例失败 紧急 PullImageFailed 镜像拉取失败 紧急 FailedCreate Failed to create notebook container. Please contact SRE to check node {node_name} 紧急 CreateContainerError Failed to create container. Please contact SRE to check node {node_name} 紧急 FailedAttachVolume Failed to attach volume. Please contact SRE to check node {node_name} 重要 MountVolumeFailed Mount volume failed; Check whether the DEW secret is correct if the instance cannot change to running in five minutes 紧急 Mount volume failed; Check if vpc of sfs-turbo is interconnected if the instance cannot change to running in five minutes 紧急 Mount volume failed; Please contact SRE to check node {node_name} if the instance cannot change to running in five minutes 紧急 表2 实例启动过程的事件列表 事件名称 事件描述 事件级别 EmptyDirExceeded Usage of empty-dir volume exceeds its limit. A new container will be scheduled and created automatically soon. 紧急 NodeResourcePressure Insufficient node resources. A new container will be scheduled and created automatically soon. 紧急 EphemeralStorageExceeded Local ephemeral storage exceeds its limit. A new container will be scheduled and created automatically soon. 紧急 FailedToStartContainer Failed to start container. Please contact SRE to check node {node_name} 紧急 Scheduled 实例被调度成功 提示 PullingImage 正在拉取镜像 提示 PulledImage 镜像拉取完毕 提示 NotebookHealthy 实例运行中,处于健康状态 重要 RunHookScript 运行自定义脚本 提示 StartNotebookFailed 实例启动失败 紧急 PullImageFailed 镜像拉取失败 紧急 CreateKernelFailed conda命令不可用导致创建jupyter kernel失败 (The jupyter launcher page does not contain the kernel due to conda environment issues, please ensure that {conda_env} is available and the command: {conda_cmdt} env list can be run properly) 重要 权限问题导致创建jupyter kernel失败 (The jupyter launcher page does not contain the kernel due to permission issues, please ensure that the uid {ma_uid} have write permissions to {conda_path}) 重要 ConfigurationError conda命令不可用导致配置modelarts sdk和ma-cli路径到conda env失败 (The modelarts sdk and cli is unavailable in the conda envs due to conda environment issues, please ensure that the {conda_env} is available and the command: {conda_cmd} env list can be run properly) 重要 权限问题导致配置modelarts sdk和ma-cli路径到conda env失败 (The modelarts sdk and cli is unavailable in the conda env due to permission issues,please ensure that the uid {ma_uid} have write permissions to {conda_path}) 重要 FailedToPullImageReason Failed to pull image. Please make sure the image exists in SWR repo, otherwise contact SRE to check node {node_name} 重要 Failed to pull image. Please contact SRE to check node {node_name} 说明: {node_name}表示节点名称,为可变变量,一般为IP形式,如:192.168.1.1 表3 实例停止过程的事件列表 事件名称 事件描述 事件级别 StopNotebook 实例停止 重要 StopNotebookResourceIdle 实例因资源空闲即将自动停止或实例因资源空闲自动停止 重要 表4 更新实例过程的事件列表 事件名称 事件描述 事件级别 UpdateName 更新实例名称 提示 UpdateDescription 更新实例描述 提示 UpdateFlavor 更新实例规格 重要 UpdateImage 更新实例镜像 重要 UpdateStorageSize 实例存储正在扩容 (User %s is updating storage size from %sGB to %sGB) 重要 实例扩容完成 (User %s updated storage size successfully) 重要 UpdateKeyPair 配置实例密钥对 (User %s updated the instance keypair to "{%s}") 重要 更新实例密钥对 (User %s updated the instance keypair from %s to %s) 重要 UpdateWhitelist 更新实例访问白名单 重要 UpdateHook 更新自定义脚本 重要 UpdateStorageSizeFailed 资源售罄引起的实例存储扩容失败 (The EVS disk is sold out) 紧急 内部错误引起的实例扩容失败 (The EVS disk size updated failed. Operations and maintenance personnel are handling the problem) 紧急 表5 镜像保存过程中的事件列表 事件名称 事件描述 事件级别 SaveImage 保存镜像成功 重要 SavedImageFailed D进程引起的保存镜像失败 (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) 紧急 任务超时引起的保存镜像失败 (Operations personnel are handling the problem) 紧急 SWR故障引起的保存镜像失败 (Failed to save the image because the SWR service is faulty) 紧急 表6 实例运行过程的事件列表 事件名称 事件描述 事件级别 NotebookUnhealthy 实例处于不健康状态 紧急 OutOfMemory 实例被OOM掉了 紧急 JupyterProcessKilled jupyter进程被killed掉了 紧急 CacheVolumeExceedQuota /cache目录文件大小超过最大限制 紧急 NotebookHealthy 实例从不健康恢复到了健康状态 重要 EVSSoldOut EVS存储售罄 紧急 表7 OBS动态挂载产生的事件列表 事件名称 事件描述 事件级别 DynamicMountStorage 挂载OBS存储 重要 DynamicUnmountStorage 卸载OBS存储 重要 表8 用户侧触发的事件 事件名称 事件描述 事件级别 RefreshCredentialsFailed 用户鉴权失败 紧急 父主题: 管理Notebook实例
  • ModelArts Standard资源池说明 在使用ModelArts进行AI开发时,您可以选择使用如下两种资源池: 专属资源池:专属资源池不与其他用户共享,资源更可控。在使用专属资源池之前,您需要先创建一个专属资源池,然后在AI开发过程中选择此专属资源池。 公共资源池:公共资源池提供公共的大规模计算集群,根据用户作业参数分配使用,资源按作业隔离。 用户下发训练作业、部署模型、使用开发环境实例等,均可以使用ModelArts提供的公共资源池完成,按照使用量计费,方便快捷。 专属资源池和公共资源池的能力主要差异如下: 专属资源池为用户提供独立的计算集群、网络,不同用户间的专属资源池物理隔离,公共资源池仅提供逻辑隔离,专属资源池的隔离性、安全性要高于公共资源池。 专属资源池用户资源独享,在资源充足的情况下,作业是不会排队的;而公共资源池使用共享资源,在任何时候都有可能排队。 专属资源池支持打通用户的网络,在该专属资源池中运行的作业可以访问打通网络中的存储和资源。例如,在创建训练作业时选择打通了网络的专属资源池,训练作业创建成功后,支持在训练时访问SFS中的数据。 专属资源池支持自定义物理节点运行环境相关的能力,例如GPU/Ascend驱动的自助升级,而公共资源池暂不支持。
  • 专属资源池使用说明 如果您是初次使用专属资源池,建议您可从本章节开始,了解ModelArts提供的资源池详细说明。 在对专属资源池有一定了解后,如果您需要创建一个自己的专属资源池,您可参考创建Standard专属资源池来进行创建。 专属资源池创建成功后,可在查看Standard专属资源池详情中查看专属资源池的详细信息。 如果专属资源池的规格与您的业务不符,可通过扩缩容Standard专属资源池来调整专属资源池的规格。 每个用户对集群的驱动要求不同,在专属资源池列表页中,可自行选择加速卡驱动,并根据业务需要进行立即变更或平滑升级。ModelArts提供了自助升级专属资源池GPU/Ascend驱动的能力,可参考升级Standard专属资源池驱动进行升级。 专属资源池提供了故障节点修复的功能,可参考修复Standard专属资源池故障节点修复故障节点。 专属资源池提供了动态设置作业类型的功能,可参考修改Standard专属资源池支持的作业类型更新作业类型。 专属资源池提供了工作空间功能,管理员可以根据工作空间,隔离不同子用户操作工作空间内资源的权限,您可通过迁移Standard专属资源池和网络至其他工作空间将资源池移动到对应的工作空间下。 专属资源池提供了访问公网的功能,具体可参见配置Standard专属资源池可访问公网。 专属资源池可通过标签来进行管理,具体可参见使用TMS标签实现资源分组管理管理专属资源池标签。 当不再需要使用专属资源池时,您可参考释放Standard专属资源池和删除网络删除专属资源池。
  • 数据域迁移算子(CycleGan算子) 基于CycleGAN用于生成域迁移的图像,即将一类图片转换成另一类图片,把X空间中的样本转换成Y空间中的样本。CycleGAN可以利用非成对数据进行训练。模型训练时运行支持两个输入,分别代表数据的原域和目标域,在训练结束时会生成所有原域向目标域迁移的图像。 图5 CycleGan算子 表3 CycleGan算子高级参数 参数名 默认值 参数说明 do_validation True 是否进行数据校验,默认为True,表示数据生成前需要进行数据校验,否则只进行数据生成。 image_channel 3 生成图像的通道数。 image_height 256 图像相关参数:生成图像的高,大小需要是2的次方。 image_width 256 图像相关参数:生成图像的宽,大小需要是2的次方 batch_size 1 训练相关参数:批量训练样本个数。 max_epoch 100 训练相关参数:训练遍历数据集次数。 g_learning_rate 0.0001 训练相关参数:生成器训练学习率。 d_learning_rate 0.0001 训练相关参数:判别器训练学习率。 log_frequency 5 训练相关参数:日志打印频率(按step计数)。 save_frequency 5 训练相关参数:模型保存频率(按epoch计数)。 predict False 是否进行推理预测,默认为False。如果设置True,需要在resume参数设置已经训练完成的模型的obs路径。 resume empty 如果predict设置为True,需要填写Tensorflow模型文件的obs路径用于推理预测。当前仅支持“.pb”格式的模型。示例:obs://xxx/xxxx.pb。 默认值为empty。 输入说明 算子输入分为两种,“数据集”或“OBS目录”。 选择“数据集”,请从下拉框中选择ModelArts中管理的数据集及其版本。要求数据集类型与您在本任务中选择的场景类别一致。 选择“OBS目录”,图像生成算子不需要标注信息,输入支持单层级或双层级目录,存放结构支持“单层级”或“双层级”模式。 单层级目录结构如下所示: image_folder----0001.jpg ----0002.jpg ----0003.jpg ... ----1000.jpg 双层级目录结构如下所示: image_folder----sub_folder_1----0001.jpg ----0002.jpg ----0003.jpg ... ----0500.jpg ----sub_folder_2----0001.jpg ----0002.jpg ----0003.jpg ... ----0500.jpg ... ----sub_folder_100----0001.jpg ----0002.jpg ----0003.jpg ... ----0500.jpg 输出说明 输出目录的结构如下所示。其中“model”文件夹存放用于推理的“frozen pb”模型,“samples”文件夹存放训练过程中输出图像,“Data”文件夹存放训练模型生成的图像。 train_url----model----CYcleGan_epoch_10.pb ----CYcleGan_epoch_20.pb ... ----CYcleGan_epoch_1000.pb ----samples----0000_0.jpg ----0000_1.jpg ... ----0100_15.jpg ----Data----CYcleGan_0_0.jpg ----CYcleGan_0_1.jpg ... ----CYcleGan_16_8.jpg ----output_0.manifest 其中manifest文件内容示例如下所示。 { "id": "xss", "source": "obs://home/fc8e2688015d4a1784dcbda44d840307_14.jpg", "usage": "train", "annotation": [ { "name": "Cat", "type": "modelarts/image_classification" } ] }
  • 数据生成算子(StyleGan算子) 图像生成利用Gan网络依据已知的数据集生成新的数据集。Gan是一个包含生成器和判别器的网络,生成器从潜在空间中随机取样作为输入,其输出结果需要尽量模仿训练集中的真实样本。判别器的输入则为真实样本或生成网络的输出,其目的是将生成网络的输出从真实样本中尽可能分辨出来。而生成网络则要尽可能地欺骗判别网络。两个网络相互对抗、不断调整参数,最终目的是使判别网络无法判断生成网络的输出结果是否真实。训练中获得的生成器网络可用于生成与输入图片相似的图片,用作新的数据集参与训练。基于Gan网络生成新的数据集不会生成相应的标签。图像生成过程不会改动原始数据,新生成的图片或xml文件保存在指定的输出路径下。 基于StyleGan2用于在数据集较小的情形下,随机生成相似图像。StyleGAN提出了一个新的生成器结构,能够控制所生成图像的高层级属性(high-level attributes),如发型、雀斑等;并且生成的图像在一些评价标准上得分更好。而本算法又增加了数据增强算法,可以在较少样本的情况下也能生成较好的新样本,但是样本数尽量在70张以上,样本太少生成出来的新图像不会有太多的样式。 图4 StyleGan算子 表2 StyleGan算子高级参数 参数名 默认值 参数说明 resolution 256 生成正方形图像的高宽,大小需要是2的次方。 batch-size 8 批量训练样本个数。 total-kimg 300 总共训练的图像数量为total_kimg*1000。 generate_num 300 生成的图像数量,如果是多个类的,则为每类生成的数量。 predict False 是否进行推理预测,默认为False。如果设置True,需要在resume参数设置已经训练完成的模型的obs路径。 resume empty 如果predict设置为True,需要填写Tensorflow模型文件的obs路径用于推理预测。当前仅支持“.pb”格式的模型。示例:obs://xxx/xxxx.pb。 默认值为empty。 do_validation True 是否做数据校验,默认为True,表示数据生成前需要进行数据校验,否则只进行数据生成。 输入要求 算子输入分为两种,“数据集”或“OBS目录”。 选择“数据集”,请从下拉框中选择ModelArts中管理的数据集及其版本。要求数据集类型与您在本任务中选择的场景类别一致。 选择“OBS目录”,图像生成算子不需要标注信息,输入支持单层级或双层级目录,存放结构支持“单层级”或“双层级”模式。 单层级目录结构如下所示: image_folder----0001.jpg ----0002.jpg ----0003.jpg ... ----1000.jpg 双层级目录结构如下所示: image_folder----sub_folder_1----0001.jpg ----0002.jpg ----0003.jpg ... ----0500.jpg ----sub_folder_2----0001.jpg ----0002.jpg ----0003.jpg ... ----0500.jpg ... ----sub_folder_100----0001.jpg ----0002.jpg ----0003.jpg ... ----0500.jpg 输出说明 输出目录的结构如下所示。其中“model”文件夹存放用于推理的“frozen pb”模型,“samples”文件夹存放训练过程中输出图像,“Data”文件夹存放训练模型生成的图像。 train_url----model----CYcleGan_epoch_10.pb ----CYcleGan_epoch_20.pb ... ----CYcleGan_epoch_1000.pb ----samples----0000_0.jpg ----0000_1.jpg ... ----0100_15.jpg ----Data----CYcleGan_0_0.jpg ----CYcleGan_0_1.jpg ... ----CYcleGan_16_8.jpg ----output_0.manifest 其中manifest文件内容示例如下所示。 { "id": "xss", "source": "obs://home/fc8e2688015d4a1784dcbda44d840307_14.jpg", "usage": "train", "annotation": [ { "name": "Cat", "type": "modelarts/image_classification" } ] }
  • 数据扩增算子说明 数据扩增主要用于训练数据集不足或需要仿真的场景,能通过对已标注的数据集做变换操作来增加训练图片的数量,同时会生成相应的标签。在深度学习领域,增强有重要的意义,能提升模型的泛化能力,增加抗扰动的能力。数据扩增过程不会改动原始数据,扩增后的图片或xml文件保存在指定的输出路径下。 ModelArts提供以下数据扩增算子: 表1 数据扩增算子介绍 算子 算子说明 高级 AddNoise 添加噪声,模拟常见采集设备在采集图片过程中可能会产生的噪声。 noise_type:添加噪声的分布类型,Gauss为高斯噪声,Laplace为拉普拉斯噪声,Poisson是泊松噪声,Impulse是脉冲噪声,SaltAndPepper为椒盐噪声。默认值为Gauss loc:噪声分布的均值,仅在Gauss和Laplace生效。默认值为0 scale:噪声分布的标准差,仅在Gauss和Laplance生效。默认值为1 lam:泊松分布的lambda系数,仅在Poisson有效。默认值为2 p:对于每个像素点,出现脉冲噪声或椒盐噪声的概率,仅在Impulse和SaltAndPepper有效。默认值为0.01 do_validation:数据扩增前是否进行数据校验。默认值为True。 Blur 模糊,使用滤波器对图像进行滤波操作,有时用于模拟成像设备的成像。 blur_type:可选Gauss和Average两种模式,分别为高斯和均值滤波。默认值为Gauss do_validation:数据扩增前是否进行数据校验。默认值为True。 Crop 图片裁剪,随机裁剪图片的一部分作为新的图片。 crop_percent_min:各边裁剪占比的随机取值范围的最小值。默认值为0.0 crop_percent_max:各边裁剪占比的随机取值范围的最大值。默认值为0.2 do_validation:数据扩增前是否进行数据校验。默认值为True。 CutOut 随机擦除,在深度学习中常用的方法,用于模拟物体被障碍物遮挡。 do_validation:数据扩增前是否进行数据校验。默认值为True。 Flip 翻转,沿图片水平轴或竖直轴做翻转,是非常常见的增强方法。 lr_ud:选择翻转的方向,lr为水平翻转,ud为竖直翻转。默认值为lr flip_p:做翻转操作的概率。默认值为1。 do_validation:数据扩增前是否进行数据校验。默认值为True。 Grayscale 图片灰度化,将三通道的彩色图像转换到三通道的灰度图像。 do_validation:数据扩增前是否进行数据校验。默认值为True。 HistogramEqual 直方图均衡化,多半是使用于让图片的视觉效果更加好,在某些场景下会使用。 do_validation:数据扩增前是否进行数据校验。默认值为True。 LightArithmetic 亮度增强 ,对亮度空间做线性增强操作。 do_validation:数据扩增前是否进行数据校验。默认值为True。 LightContrast 亮度对比度增强,使用一定的非线性函数改变亮度空间的亮度值。 func:默认值为gamma gamma为常见方法伽马矫正,公式为255*((v/255)**gamma)') sigmoid为函数为S型曲线,公式为255*1/(1+exp(gain*(cutoff-I_ij/255)))') log为对数函数,公式为255*gain*log_2(1+v/255) linear为线性函数,公式为127 + alpha*(v-127)') do_validation:数据扩增前是否进行数据校验。默认值为True。 MotionBlur 运动模糊,模拟物体运动时产生的残影现象。 do_validation:数据扩增前是否进行数据校验。默认值为True。 Padding 图片填充,在边缘添加黑色的边。 px_top:图像顶端增加的像素行数。默认值为1 px_right:图像右侧增加的像素行数。默认值为1 px_left:图像左侧增加的像素行数。默认值为1 px_bottom:图像底侧增加的像素行数。默认值为1 do_validation:数据扩增前是否进行数据校验。默认值为True。 Resize 调整图片大小。 height:变换后的图片高度。默认值224 width:变换后的图片宽度。默认值224 do_validation:数据扩增前是否进行数据校验。默认值为True。 Rotate 旋转,将图像围绕中心点旋转的操作,操作完成之后保持图片原本的形状不变,不足的部分用黑色填充。 angle_min:旋转角度随机取值范围的最小值,每张图片会从范围中随机取值作为自己的参数。默认值为90° angle_max:旋转角度随机取值范围的最大值,每张图片会从范围中随机取值作为自己的参数。默认值为-90° do_validation:数据扩增前是否进行数据校验。默认值为True。 Saturation 色度饱和度增强,对图片的HSV中的H和S空间做线性的变化,改变图片的色度和饱和度。 do_validation:数据扩增前是否进行数据校验。默认值为True。 Scale 图片缩放,将图片的长或宽随机缩放到一定倍数。 scaleXY:缩放方向,X为水平,Y为垂直。默认值为X scale_min:缩放比例随机取值范围的最小值。默认为0.5 scale_max:缩放比例随机取值范围的最大值。默认值为1.5 do_validation:数据扩增前是否进行数据校验。默认值为True。 Sharpen 图像锐化,用于将边缘清晰化,让物体边缘更加明显。 do_validation:数据扩增前是否进行数据校验。默认值为True。 Shear 图片错切,一般用于图片的几何变换,通过线性函数将像素点进行映射。 shearXY:错切方向,X为水平,Y为竖直。默认值为X shear_min:错切角度随机取值范围的最小值。默认值为-30 shear_max:错切角度随机取值范围的最大值。默认值为30 do_validation:数据扩增前是否进行数据校验。默认值为True。 Translate 图片平移,将图片整体向X轴或Y轴平移,超出原图部分舍弃,丢失部分用黑色填充。 translateXY:平移的方向,X为水平,Y为竖直。默认值为X do_validation:数据扩增前是否进行数据校验。默认值为True。 Weather 添加天气,模拟天气效果。 weather_mode:添加天气的模式,默认值为Rain。 Rain:下雨 Fog:雾 Snow:雪 Clouds:云 do_validation:数据扩增前是否进行数据校验。默认值为True。 输入要求 算子输入分为两种,“数据集”或“OBS目录”。 选择“数据集”,请从下拉框中选择ModelArts中管理的数据集及其版本。要求数据集类型与您在本任务中选择的场景类别一致。 选择“OBS目录”,存放结构支持“包含图片和标注信息”模式。 “包含图片和标注信息”,根据不同场景类型,结构不同。 图像分类场景,其目录结构如下所示。如下目录结构,仅支持单标签场景。 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 ... 输出说明 由于算法中有些操作将会舍弃一些数据,输出文件夹里可能不包含全量数据集。例如,“Rotate”会舍弃标注框超出原始图片边界的图片。 输出目录结构如下所示。其中“Data”文件夹用于存放新生成的图片和标注信息,“manifest”文件存储文件夹中图片的结构,可直接导入到数据管理的数据集中。 |----data_url |----Data |----xxx.jpg |----xxx.xml(xxx.txt) |----output.manifest 其中manifest文件内容示例如下所示。 { "id": "xss", "source": "obs://home/fc8e2688015d4a1784dcbda44d840307_14.jpg", "usage": "train", "annotation": [ { "name": "Cat", "type": "modelarts/image_classification" } ] }
  • 查看Workflow工作流运行记录 运行记录是展示某条工作流所有运行状态数据的地方。 在Workflow列表页,单击某条工作流的名称,进入该工作流的详情页面。 在工作流的详情页,左侧区域即为该条工作流的所有运行记录。 图1 查看运行记录 您可以对当前工作流的所有运行记录,进行删除、编辑以及重新运行的操作。 删除:如果该条运行记录不再需要,您可以单击“删除”,在弹出的确认框中单击“确定”即可完成运行记录的删除。 编辑:如果您想对您当前的工作流下的所有运行记录进行区分,您可以单击“编辑”,对每一条运行记录添加相应的标签予以区分。 重新运行:可以单击“重新运行”直接在某条记录上运行该工作流。 您可以对该条工作流的所有运行记录进行筛选和对比。 筛选:该功能支持您对所有运行记录按照“运行状态”和“运行标签”进行筛选。 图2 筛选 对比:针对某条工作流的所有运行记录,按照状态、运行记录、启动时间、运行时长、参数等进行对比。 图3 对比 当单击“启动”运行工作流时,运行记录列表会自动刷新,并更新至最新一条的执行记录数据,且与DAG图和总览数据面板双向联动更新数据。每次启动后都会新增一条运行记录。 用户可以单击Workflow详情页中任一节点查询节点运行状况。包括节点的属性(节点的运行状态、启动时间以及运行时长)、输入位置与输出位置以及参数(数据集的标注任务名称)。 图4 查看节点运行情况 父主题: 管理Workflow
  • 图像分类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 { "source":"s3://path/to/image1.jpg", "usage":"TRAIN", "hard":"true", "hard-coefficient":0.8, "id":"0162005993f8065ef47eefb59d1e4970", "annotation": [ { "type": "modelarts/image_classification", "name": "cat", "property": { "color":"white", "kind":"Persian cat" }, "hard":"true", "hard-coefficient":0.8, "annotated-by":"human", "creation-time":"2019-01-23 11:30:30" }, { "type": "modelarts/image_classification", "name":"animal", "annotated-by":"modelarts/active-learning", "confidence": 0.8, "creation-time":"2019-01-23 11:30:30" }], "inference-loc":"/path/to/inference-output" } 表1 字段说明 字段 是否必选 说明 source 是 被标注对象的URI。数据来源的类型及示例请参考表2。 usage 否 默认为空,取值范围: TRAIN:指明该对象用于训练。 EVAL:指明该对象用于评估。 TEST:指明该对象用于测试。 INFERENCE:指明该对象用于推理。 如果没有给出该字段,则使用者自行决定如何使用该对象。 id 否 此参数为系统导出的样本id,导入时可以不用填写。 annotation 否 如果不设置,则表示未标注对象。annotation值为一个对象列表,详细参数请参见表3。 inference-loc 否 当此文件由推理服务生成时会有该字段,表示推理输出的结果文件位置。 表2 数据来源类型 类型 示例 OBS “source”:“s3://path-to-jpg” Content “source”:“content://I love machine learning” 表3 annotation对象说明 字段 是否必选 说明 type 是 标签类型。取值范围为: image_classification:图像分类 text_classification:文本分类 text_entity:文本命名实体 object_detection:对象检测 audio_classification:声音分类 audio_content:声音内容 audio_segmentation:声音起止点 name 是/否 对于分类是必选字段,对于其他类型为可选字段,本示例为图片分类名称。 id 是/否 标签ID。对于三元组是必选字段,对于其他类型为可选字段。三元组的实体标签ID格式为“E+数字”,比如“E1”、“E2”,三元组的关系标签ID格式为“R+数字”,例如“R1”、“R2”。 property 否 包含对标注的属性,例如本示例中Cat有两个属性,颜色(color)和品种(kind)。 hard 否 表示是否是难例。“True”表示该标注是难例,“False”表示该标注不是难例。 annotated-by 否 默认为“human”,表示人工标注。 human creation-time 否 创建该标注的时间。是用户写入标注的时间,不是Manifest生成时间。 confidence 否 表示机器标注的置信度。范围为0~1。
共100000条