华为云用户手册

  • (可选)选择训练模式 当训练作业的算法框架选用的是预置框架的MindSpore类引擎、资源池类型选用的是Ascend资源时,则支持选择训练模式。ModelArts提供了3种训练模式供用户选择,支持根据实际场景获取不同的诊断信息。 普通模式:默认训练场景。 高性能模式:最小化调测信息,可以提升运行速度,适合于网络稳定并追求高性能的场景。 故障诊断模式:收集更多的信息用于定位,适合于执行出现问题需要收集故障信息进行定位的场景。此模式提供故障诊断,用户可以根据实际需求选择诊断类别。
  • 后续操作 当创建训练作业的参数配置完成后,单击“提交”,在信息确认页面单击“确定”,提交创建训练作业任务。 训练作业一般需要运行一段时间,前往训练作业列表,可以查看训练作业的基本情况。 在训练作业列表中,刚创建的训练作业状态为“等待中”。 当训练作业的状态变为“已完成”时,表示训练作业运行结束,其生成的模型将存储至对应的“输出”目录中。 当训练作业的状态变为“运行失败”或“异常”时,可以单击训练作业的名称进入详情页面,通过查看日志等手段处理问题。 训练作业运行过程中将按照选择的资源进行计费。
  • 配置训练作业基本信息 在创建训练作业页面填写训练作业基本信息。 表1 创建训练作业的基本信息 参数名称 说明 名称 必填,训练作业的名称。 系统会自动生成一个名称,可以根据业务需求重新命名,命名规则如下: 支持1~64位字符。 可以包含大小写字母、数字、中划线(-)或下划线(_)。 描述 训练作业的简介,便于在训练作业列表了解作业信息。 设置实验 将训练作业分类有序地放入实验中进行管理。 如果选择“纳入新实验”,需要配置“新建实验名称”和“新建实验描述”。 如果选择“纳入已有实验”,需要选择“实验名称”。 如果选择“不纳入实验”,则不在实验中进行统一管理。 作业模式 创建生产训练作业时,必须选择“生产模型”。如果选择“调试模式”,则请参考创建调试训练作业创建调试训练作业。
  • 选择创建方式(自定义算法) 如果在算法管理中已经创建算法,此处建议选择““我的算法””页签中已经准备好的算法。如果没有已经准备好的算法,此处可以选择“自定义算法”创建方式。如果选择使用自定义算法创建训练作业,则参考表2选择训练作业的创建方式。 表2 创建训练作业的创建方式(使用自定义算法) 参数名称 说明 创建方式 必选,选择“自定义算法”。 启动方式 必选,选择“预置框架”,并选择训练作业要使用的预置框架引擎和引擎版本。 如果引擎版本选择“自定义”,则需要配置“镜像”参数,选择 自定义镜像 用于训练作业。 镜像 仅当预置框架的引擎版本选择“自定义”时才显示该参数,且是必填参数。 容器镜像地址的填写支持如下方式。 选择自有镜像或他人共享的镜像:单击右边的“选择”,从容器镜像中选择用于训练的容器镜像。所需镜像需要提前上传到SWR服务中。 选择公开镜像:直接输入SWR服务中公开镜像的地址。地址直接填写“组织名称/镜像名称:版本名称”,不需要带 域名 信息,系统会自动拼接域名地址。 代码目录 必填,选择训练代码文件所在的OBS目录。 需要提前将代码上传至OBS桶中,目录内文件总大小要小于或等于5GB,文件数要小于或等于1000个,文件深度要小于或等于32。 训练代码文件会在训练作业启动的时候被系统自动下载到训练容器的“${MA_JOB_DIR}/demo-code”目录中,“demo-code”为存放代码目录的最后一级OBS目录。例如,“代码目录”选择的是“/test/code”,则训练代码文件会被下载到训练容器的“${MA_JOB_DIR}/code”目录中。 启动文件 必填,选择代码目录中训练作业的Python启动脚本。 ModelArts只支持使用Python语言编写的启动文件,因此启动文件必须以“.py”结尾。 本地代码目录 指定训练容器的本地目录,启动训练时系统会将代码目录下载至此目录。 此参数可选,默认本地代码目录为“/home/ma-user/modelarts/user-job-dir”。 工作目录 训练时,系统会自动cd到此目录下执行启动文件。
  • 前提条件 已经将用于训练作业的数据上传至OBS目录。 已经在OBS目录下创建了至少1个空的文件夹,用于存储训练输出的内容。 ModelArts不支持加密的OBS桶,创建OBS桶时,请勿开启桶加密。 由于训练作业运行需消耗资源,为了避免训练失败请确保账户未欠费。 确保使用的OBS目录与ModelArts在同一区域。 检查是否配置了访问授权。如果未配置,请参见使用委托授权完成操作。 已经准备好训练算法,具体操作请参见创建算法。
  • 选择创建方式(使用自定义镜像) 如果选择使用自定义镜像创建训练作业,则参考表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 启动命令 必填,镜像的启动命令。 运行训练作业时,当“代码目录”下载完成后,“启动命令”会被自动执行。 如果训练启动脚本用的是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目录,以实际情况为准。 说明: 为保证数据安全,请勿输入敏感信息,例如明文密码。 本地代码目录 指定训练容器的本地目录,启动训练时系统会将代码目录下载至此目录。 此参数可选,默认本地代码目录为“/home/ma-user/modelarts/user-job-dir”。 工作目录 训练时,系统会自动cd到此目录下执行启动文件。
  • 操作流程介绍 创建训练作业的操作步骤如下所示。 进入创建训练作业页面。 配置训练作业基本信息。 根据不同的算法来源,选择不同的训练作业创建方式。 使用已有算法创建训练作业:选择创建方式(使用我的算法) 使用订阅算法创建训练作业:选择创建方式(使用订阅算法) 使用预置镜像创建训练作业:选择创建方式(自定义算法) 使用自定义镜像创建训练作:选择创建方式(使用自定义镜像) 配置训练参数:配置训练作业的输入、输出、超参、环境变量等参数。 根据需要选择不同的资源池用于训练作业,推荐使用专属资源池,两者的差异说明请参见专属资源池和公共资源池的能力差异。 配置资源池(公共资源池) 配置资源池(专属资源池) (可选)选择训练模式:当训练作业的算法框架选用的是预置框架的MindSpore类引擎、资源池类型选用的是Ascend资源时,则支持选择训练模式。 (可选)设置标签:如果需要对训练作业进行资源分组管理,可以设置标签。 后续操作。
  • 功能介绍 通过对ModelArts数据集能力进行封装,实现数据集的版本自动发布的功能。数据集版本发布节点主要用于将已存在的数据集或者标注任务进行版本发布,每个版本相当于数据的一个快照,可用于后续的数据溯源。主要应用场景如下: 对于数据标注这种操作,可以在标注完成后自动帮助用户发布新的数据集版本,结合as_input的能力提供给后续节点使用。 当模型训练需要更新数据时,可以使用数据集导入节点先导入新的数据,然后再通过该节点发布新的版本供后续节点使用。
  • 属性总览 您可以使用ReleaseDatasetStep来构建数据集版本发布节点,ReleaseDatasetStep结构如下: 表1 ReleaseDatasetStep 属性 描述 是否必填 数据类型 name 数据集版本发布节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 是 str inputs 数据集版本发布节点的输入列表 是 ReleaseDatasetInput或者ReleaseDatasetInput的列表 outputs 数据集版本发布节点的输出列表 是 ReleaseDatasetOutput或者ReleaseDatasetOutput的列表 title title信息,主要用于前端的名称展示 否 str description 数据集版本发布节点的描述信息 否 str policy 节点执行的policy 否 StepPolicy depend_steps 依赖的节点列表 否 Step或者Step的列表 表2 ReleaseDatasetInput 属性 描述 是否必填 数据类型 name 数据集版本发布节点的输入名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符)。同一个Step的输入名称不能重复 是 str data 数据集版本发布节点的输入数据对象 是 数据集或标注任务相关对象,当前仅支持Dataset,DatasetConsumption,DatasetPlaceholder,LabelTask,LabelTaskPlaceholder,LabelTaskConsumption,DataConsumptionSelector 表3 ReleaseDatasetOutput 属性 描述 是否必填 数据类型 name 数据集版本发布节点的输出名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符)。同一个Step的输出名称不能重复 是 str dataset_version_config 数据集版本发布相关配置信息 是 DatasetVersionConfig 表4 DatasetVersionConfig 属性 描述 是否必填 数据类型 version_name 数据集版本名称,推荐使用类似V001的格式,不填则默认从V001往上递增。 否 str或者Placeholder version_format 版本格式,默认为"Default",也可支持"CarbonData"。 否 str train_evaluate_sample_ratio 训练-验证集比例,默认值为"1.00"。取值范围为0-1.00, 例如"0.8"表示训练集比例为80%,验证集比例为20%。 否 str或者Placeholder clear_hard_property 是否清除难例,默认为“True”。 否 bool或者Placeholder remove_sample_usage 是否清除数据集已有的usage信息,默认为“True”。 否 bool或者Placeholder label_task_type 标注任务的类型。当输入是数据集时,该字段必填,用来指定数据集版本的标注场景。输入是标注任务时该字段不用填写。 否 LabelTaskTypeEnum 支持以下几种类型: IMAGE_CLASSIFICATION (图像分类) OBJECT_DETECTION = 1 (物体检测) IMAGE_SEGMENTATION (图像分割) TEXT_CLASSIFICATION (文本分类) NAMED_ENTITY_RECOGNITION (命名实体) TEXT_TRIPLE (文本三元组) AUDIO_CLASSIFICATION (声音分类) SPEECH_CONTENT (语音内容)SPEECH_SEGMENTATION (语音分割) TABLE (表格数据) VIDEO_ANNOTATION (视频标注) description 版本描述信息。 否 str 如果您没有特殊需求,则可直接使用内置的默认值,例如example = DatasetVersionConfig()
  • 使用案例 场景一:基于数据集发布版本 使用场景:当数据集更新了数据时,可以通过该节点发布新的数据集版本供后续的节点使用。 from modelarts import workflow as wf # 通过ReleaseDatasetStep将输入的数据集对象发布新的版本,输出带有版本信息的数据集对象 # 定义数据集对象 dataset = wf.data.DatasetPlaceholder(name="input_dataset") # 定义训练验证切分比参数 train_ration = wf.Placeholder(name="placeholder_name", placeholder_type=wf.PlaceholderType.STR, default="0.8") release_version = wf.steps.ReleaseDatasetStep( name="release_dataset", # 数据集发布节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="数据集版本发布", # 标题信息,不填默认使用name值 inputs=wf.steps.ReleaseDatasetInput(name="input_name", data=dataset), # ReleaseDatasetStep的输入,数据集对象在运行时配置;data字段也可使用wf.data.Dataset(dataset_name="dataset_name")表示 outputs=wf.steps.ReleaseDatasetOutput( name="output_name", dataset_version_config=wf.data.DatasetVersionConfig( label_task_type=wf.data.LabelTaskTypeEnum.IMAGE_CLASSIFICATION, # 数据集发布版本时需要指定标注任务的类型 train_evaluate_sample_ratio=train_ration # 数据集的训练验证切分比 ) ) # ReleaseDatasetStep的输出 ) workflow = wf.Workflow( name="dataset-release-demo", desc="this is a demo workflow", steps=[release_version] ) 场景二:基于标注任务发布版本 当标注任务更新了数据或者标注信息时,可以通过该节点发布新的数据集版本供后续的节点使用。 from modelarts import workflow as wf # 通过ReleaseDatasetStep将输入的标注任务对象发布新的版本,输出带有版本信息的数据集对象 # 定义标注任务对象 label_task = wf.data.LabelTaskPlaceholder(name="label_task_placeholder_name") # 定义训练验证切分比参数 train_ration = wf.Placeholder(name="placeholder_name", placeholder_type=wf.PlaceholderType.STR, default="0.8") release_version = wf.steps.ReleaseDatasetStep( name="release_dataset", # 数据集发布节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="数据集版本发布", # 标题信息,不填默认使用name值 inputs=wf.steps.ReleaseDatasetInput(name="input_name", data=label_task), # ReleaseDatasetStep的输入, 标注任务对象在运行时配置;data字段也可使用wf.data.LabelTask(dataset_name="dataset_name", task_name="label_task_name")表示 outputs=wf.steps.ReleaseDatasetOutput(name="output_name", dataset_version_config=wf.data.DatasetVersionConfig(train_evaluate_sample_ratio=train_ration)), # 数据集的训练验证切分比 ) workflow = wf.Workflow( name="dataset-release-demo", desc="this is a demo workflow", steps=[release_version] ) 场景三:基于数据集标注节点,构建数据集版本发布节点 使用场景:数据集标注节点的输出作为数据集版本发布节点的输入。 from modelarts import workflow as wf # 通过ReleaseDatasetStep将输入的标注任务对象发布新的版本,输出带有版本信息的数据集对象 # 定义训练验证切分比参数 train_ration = wf.Placeholder(name="placeholder_name", placeholder_type=wf.PlaceholderType.STR, default="0.8") release_version = wf.steps.ReleaseDatasetStep( name="release_dataset", # 数据集发布节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="数据集版本发布", # 标题信息,不填默认使用name值 inputs=wf.steps.ReleaseDatasetInput(name="input_name", data=labeling_step.outputs["output_name"].as_input()), # ReleaseDatasetStep的输入, 标注任务对象在运行时配置;data字段也可使用wf.data.LabelTask(dataset_name="dataset_name", task_name="label_task_name")表示 outputs=wf.steps.ReleaseDatasetOutput(name="output_name", dataset_version_config=wf.data.DatasetVersionConfig(train_evaluate_sample_ratio=train_ration)), # 数据集的训练验证切分比 depend_steps = [labeling_step] # 依赖的数据集标注节点对象 ) # labeling_step是wf.steps.LabelingStep的实例对象,output_name是wf.steps.LabelingOutput的name字段值 workflow = wf.Workflow( name="dataset-release-demo", desc="this is a demo workflow", steps=[release_version] )
  • 配置用户名密码鉴权 以在虚拟机上使用ma-cli configure为例,介绍如何配置用户名密码进行鉴权。 以下样例中所有以${}装饰的字符串都代表一个变量,用户可以根据实际情况指定对应的值。 比如${your_password}表示输入用户自己的密码信息。 # 默认使用DEFAULT鉴权配置项,默认提示账号、用户名及密码(其中账号和用户名如果不需要填写可以使用Enter跳过) $ ma-cli configure --auth PWD --region ${your_region} account: ${your_account} username: ${your_username} password: ${your_password} # 输入在控制台不会回显
  • 鉴权信息说明 在虚拟机及个人PC场景,需要配置鉴权信息,目前支持用户名密码鉴权(默认)和AK/SK鉴权; 在使用账号认证时,需要指定username和password;在使用 IAM 用户认证时,需要指定account、username和password; 在ModelArts Notebook中可以不用执行鉴权命令,默认使用委托信息,不需要手动进行鉴权操作; 如果用户在ModelArts Notebook中也配置了鉴权信息,那么将会优先使用用户指定的鉴权信息。 在鉴权时,注意您的敏感信息数据保护,避免敏感信息泄露。
  • 命令参数总览 $ ma-cli configure -h Usage: ma-cli configure [OPTIONS] Options: -auth, --auth [PWD|AKSK|ROMA] Authentication type. -rp, --region-profile PATH ModelArts region file path. -a, --account TEXT Account of an IAM user. -u, --username TEXT Username of an IAM user. -p, --password TEXT Password of an IAM user -ak, --access-key TEXT User access key. -sk, --secret-key TEXT User secret key. -r, --region TEXT The region you want to visit. -pi, --project-id TEXT User project id. -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.
  • AKSK鉴权 如下命令表示使用AKSK进行鉴权,需要交互式输入AK及SK信息。默认提示AK和SK,且输入在控制台不会回显。 以下样例中所有以${}装饰的字符串都代表一个变量,用户可以根据实际情况指定对应的值。 比如${access key}表示输入用户自己的access key。 ma-cli configure --auth AKSK access key [***]: ${access key} secret key [***]: ${secret key}
  • 发布至AI Gallery ModelArts提供了“AI Gallery”功能,方便将个人的模型等共享给所有ModelArts用户,您也可以从“AI Gallery”获取他人共享的内容,快速完成构建。在您完成模型的训练和导入之后,您可以将自己的模型分享至“AI Gallery”,进行知识共享。 登录ModelArts管理控制台,在左侧导航栏中选择“AI应用”,进入AI应用列表页面。 单击AI应用的“版本数量”,在展开的版本列表中,单击“操作”列的“发布”进入发布页面。 在发布弹出框中,单击“前往AI Gallery”进入AI Gallery。 图1 前往AI Gallery 进入AI Gallery后,请参考发布免费模型。
  • 发布至AI云商店 华为云云商店有完整的售前、交易、售后的保障体系,用户无需担忧交易,省心省力。在您完成模型的训练和导入之后,您可以将自己的模型发布至AI云商店进行商品售卖。请在首次发布商品前入驻华为云商店成为企业级卖家。 登录ModelArts管理控制台,在左侧导航栏中选择“AI应用”,进入AI应用列表页面。 单击AI应用的“版本数量”,在展开的版本列表中,单击“操作”列的“发布”进入发布页面。 在发布弹出框中,单击“前往AI 云商店”进入商店。 图2 前往云商店 进入云商店后,请参考发布AI资产类商品操作指导。
  • 制作流程 场景一: 预置镜像的环境软件满足要求,只需要导入模型包,就能用于创建AI应用,通过镜像保存功能制作。具体案例参考在Notebook中通过镜像保存功能制作自定义镜像用于。 图1 AI应用的自定义镜像制作场景一 场景二: 预置镜像既不满足软件环境要求,同时需要放入模型包,在Notebook中通过Dockerfile制作。具体案例参考在Notebook中通过Dockerfile从0制作自定义镜像用于推理。 图2 AI应用的自定义镜像制作场景二 场景三:预置镜像既不满足软件环境要求,同时需要放入模型包,新的镜像超过35G,在服务器(如E CS )上制作。具体案例参考在ECS中通过Dockerfile从0制作自定义镜像用于推理。 图3 AI应用的自定义镜像制作场景三
  • 自定义镜像的配置规范 镜像对外接口 设置镜像的对外服务接口,推理接口需与config.json文件中apis定义的url一致,当镜像启动时可以直接访问。下面是mnist镜像的访问示例,该镜像内含mnist数据集训练的模型,可以识别手写数字。其中listen_ip为容器IP,您可以通过启动自定义镜像,在容器中获取容器IP。 请求示例 curl -X POST \ http://{listen_ip}:8080/ \ -F images=@seven.jpg 图4 listen_ip获取示例 返回示例 {"mnist_result": 7} (可选)健康检查接口 如果在滚动升级时要求不中断业务,那么必须在config.json文件中配置健康检查的接口,供ModelArts调用,在config.json文件中配置。当业务可提供正常服务时,健康检查接口返回健康状态,否则返回异常状态。 如果要实现无损滚动升级,必须配置健康检查接口。 自定义镜像如果需要在“在线服务”模块使用OBS外部存储挂载功能,需要新建一个OBS挂载专属目录如“/obs-mount/”,避免选择存量目录覆盖已有文件。OBS挂载仅开放对挂载目录文件新增、查看、修改功能,如果需要删除文件请到OBS并行文件系统中手动删除。 健康检查接口示例如下。 URI GET /health 请求示例curl -X GET \ http://{listen_ip}:8080/health 响应示例 {"health": "true"} 状态码 表1 状态码 状态码 编码 状态码说明 200 OK 请求成功 日志文件输出 为保证日志内容可以正常显示,日志信息需要打印到标准输出。 镜像启动入口 如果需要部署批量服务,镜像的启动入口文件需要为“/home/run.sh”,采用CMD设置默认启动路径,例如Dockerfile配置如下: CMD ["sh", "/home/run.sh"] 镜像依赖组件 如果需要部署批量服务,镜像内需要集成python、jre/jdk、zip等组件包。 (可选)保持Http长链接,无损滚动升级 如果需要支持滚动升级的过程中不中断业务,那么需要将服务的Http的“keep-alive”参数设置为200s。以gunicorn服务框架为例,gunicorn缺省情形下不支持keep-alive,需要同时安装gevent并配置启动参数“--keep-alive 200 -k gevent”。不同服务框架参数设置有区别,请以实际情况为准。 (可选)处理SIGTERM信号,容器优雅退出 如果需要支持滚动升级的过程中不中断业务,那么需要在容器中捕获SIGTERM信号,并且在收到SIGTERM信号之后等待60秒再优雅退出容器。提前优雅退出容器可能会导致在滚动升级的过程中业务概率中断。要保证容器优雅退出,从收到SIGTERM信号开始,业务需要将收到的请求全部处理完毕再结束,这个处理时长最多不超过90秒。例如run.sh如下所示: #!/bin/bash gunicorn_pid="" handle_sigterm() { echo "Received SIGTERM, send SIGTERM to $gunicorn_pid" if [ $gunicorn_pid != "" ]; then sleep 60 kill -15 $gunicorn_pid # 传递 SIGTERM 给gunicorn进程 wait $gunicorn_pid # 等待gunicorn进程完全终止 fi } trap handle_sigterm TERM
  • 代码改造点 模型分发:DataParallel(model) 完整代码由于代码变动较少,此处进行简略介绍。 import torch class Net(torch.nn.Module): pass model = Net().cuda() ### DataParallel Begin ### model = torch.nn.DataParallel(Net().cuda()) ### DataParallel End ###
  • 约束限制 服务升级关系着业务实现,不当的升级操作会导致升级期间业务中断的情况,请谨慎操作。 ModelArts支持部分场景下在线服务进行无损滚动升级。按要求进行升级前准备,做好验证,即可实现业务不中断的无损升级。 表1 支持无损滚动升级的场景 创建AI应用的元模型来源 服务使用的是公共资源池 服务使用的是专属资源池 从训练中选择元模型 不支持 不支持 从容器镜像中选择元模型 不支持 支持,创建AI应用的自定义镜像需要满足创建AI应用的自定义镜像规范。 从OBS中选择元模型 不支持 不支持
  • 方式二:通过服务详情页面修改服务信息 登录ModelArts管理控制台,在左侧菜单栏中选择“模型部署”,进入目标服务类型管理页面。 单击目标服务名称,进入服务详情页面。 您可以通过单击页面右上角“修改”,修改服务基本信息,然后根据提示提交修改任务。 当修改了服务的某些参数配置时,系统会自动重启服务使修改生效。在提交修改服务任务时,如果涉及重启,会有弹窗提醒。 在线服务参数说明请参见部署模型为在线服务。修改在线服务还需要配置“最大无效实例数”设置并行升级的最大节点数,升级阶段节点无效。
  • 方式一:通过服务管理页面修改服务信息 登录ModelArts管理控制台,在左侧菜单栏中选择“模型部署”,进入目标服务类型管理页面。 在服务列表中,单击目标服务操作列的“修改”,修改服务基本信息,然后根据提示提交修改任务。 当修改了服务的某些参数配置时,系统会自动重启服务使修改生效。在提交修改服务任务时,如果涉及重启,会有弹窗提醒。 在线服务参数说明请参见部署模型为在线服务。修改在线服务还需要配置“最大无效实例数”设置并行升级的最大节点数,升级阶段节点无效。
  • 资源规格查询 您在创建作业类型节点之前可以通过以下操作来获取该账号所支持的训练资源规格列表以及引擎规格列表: 导包 from modelarts.session import Session from modelarts.estimatorV2 import TrainingJob from modelarts.workflow.client.job_client import JobClient session初始化 # 如果您在本地IDEA环境中开发工作流,则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, # 账号的AK信息 secret_key=__SK, # 账号的SK信息 region_name="***", # 账号所属的region project_id="***" ,# 账号的项目ID ) # 如果您在Notebook环境中开发工作流,则Session初始化使用如下方式 session = Session() 公共池查询 # 公共资源池规格列表查询 spec_list = TrainingJob(session).get_train_instance_types(session) # 返回的类型为list,可按需打印查看 print(spec_list) 专属池查询 # 运行中的专属资源池列表查询 pool_list = JobClient(session).get_pool_list() # 返回专属资源池的详情列表 pool_id_list = JobClient(session).get_pool_id_list() # 返回专属资源池ID列表 专属资源池规格ID列表如下,根据所选资源池的实际规格自行选择: 1. modelarts.pool.visual.xlarge 对应1卡 2. modelarts.pool.visual.2xlarge 对应2卡 3. modelarts.pool.visual.4xlarge 对应4卡 4. modelarts.pool.visual.8xlarge 对应8卡 引擎规格查询 # 引擎规格查询 engine_dict = TrainingJob(session).get_engine_list(session) # 返回的类型为dict,可按需打印查看 print(engine_dict)
  • 使用案例 主要包含七种场景的用例: 使用订阅自AI Gallery的算法 使用算法管理中的算法 使用自定义算法(代码目录+启动文件+官方镜像) 使用自定义算法(代码目录+脚本命令+自定义镜像) 基于数据集版本发布节点构建作业类型节点 作业类型节点结合可视化能力 输入使用DataSelector对象,支持选择OBS或者数据集 使用订阅自AI Gallery的算法 from modelarts import workflow as wf # 构建一个OutputStorage对象,对训练输出目录做统一管理 storage = wf.data.OutputStorage(name="storage_name", title="title_info", description="description_info") # name字段必填,title, description可选填 # 定义输入的数据集对象 dataset = wf.data.DatasetPlaceholder(name="input_dataset") # 通过JobStep来定义一个训练节点,输入使用数据集,并将训练结果输出到OBS job_step = wf.steps.JobStep( name="training_job", # 训练节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="图像分类训练", # 标题信息,不填默认使用name algorithm=wf.AIGalleryAlgorithm( subscription_id="subscription_id", # 算法订阅ID,也可直接填写版本号 item_version_id="item_version_id", # 算法订阅版本ID,也可直接填写版本号 parameters=[ wf.AlgorithmParameters( name="parameter_name", value=wf.Placeholder(name="parameter_name", placeholder_type=wf.PlaceholderType.STR, default="fake_value",description="description_info") ) # 算法超参的值使用Placeholder对象来表示,支持int, bool, float, str四种类型 ] ), # 训练使用的算法对象,示例中使用AIGallery订阅的算法;部分算法超参的值如果无需修改,则在parameters字段中可以不填写,系统自动填充相关超参值 inputs=wf.steps.JobInput(name="data_url", data=dataset), # JobStep的输入在运行时配置;data字段也可使用wf.data.Dataset(dataset_name="fake_dataset_name", version_name="fake_version_name")表示 outputs=wf.steps.JobOutput(name="train_url", obs_config=wf.data.OBSOutputConfig(obs_path=storage.join("directory_path"))), # JobStep的输出 spec=wf.steps.JobSpec( resource=wf.steps.JobResource( flavor=wf.Placeholder(name="train_flavor", placeholder_type=wf.PlaceholderType.JSON, description="训练资源规格") ) )# 训练资源规格信息 ) workflow = wf.Workflow( name="job-step-demo", desc="this is a demo workflow", steps=[job_step], storages=[storage] ) 使用算法管理中的算法 from modelarts import workflow as wf # 构建一个OutputStorage对象,对训练输出目录做统一管理 storage = wf.data.OutputStorage(name="storage_name", title="title_info", description="description_info") # name字段必填,title, description可选填 # 定义输入的数据集对象 dataset = wf.data.DatasetPlaceholder(name="input_dataset") # 通过JobStep来定义一个训练节点,输入使用数据集,并将训练结果输出到OBS job_step = wf.steps.JobStep( name="training_job", # 训练节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="图像分类训练", # 标题信息,不填默认使用name algorithm=wf.Algorithm( algorithm_id="algorithm_id", # 算法ID parameters=[ wf.AlgorithmParameters( name="parameter_name", value=wf.Placeholder(name="parameter_name", placeholder_type=wf.PlaceholderType.STR, default="fake_value",description="description_info") ) # 算法超参的值使用Placeholder对象来表示,支持int, bool, float, str四种类型 ] ), # 训练使用的算法对象,示例中的算法来源于算法管理;部分算法超参的值如果无需修改,则在parameters字段中可以不填写,系统自动填充相关超参值 inputs=wf.steps.JobInput(name="data_url", data=dataset), # JobStep的输入在运行时配置;data字段也可使用wf.data.Dataset(dataset_name="fake_dataset_name", version_name="fake_version_name")表示 outputs=wf.steps.JobOutput(name="train_url", obs_config=wf.data.OBSOutputConfig(obs_path=storage.join("directory_path"))), # JobStep的输出 spec=wf.steps.JobSpec( resource=wf.steps.JobResource( flavor=wf.Placeholder(name="train_flavor", placeholder_type=wf.PlaceholderType.JSON, description="训练资源规格") ) )# 训练资源规格信息 ) workflow = wf.Workflow( name="job-step-demo", desc="this is a demo workflow", steps=[job_step], storages=[storage] ) 使用自定义算法(代码目录+启动文件+官方镜像) from modelarts import workflow as wf # 构建一个OutputStorage对象,对训练输出目录做统一管理 storage = wf.data.OutputStorage(name="storage_name", title="title_info", description="description_info") # name字段必填,title, description可选填 # 定义输入的数据集对象 dataset = wf.data.DatasetPlaceholder(name="input_dataset") # 通过JobStep来定义一个训练节点,输入使用数据集,并将训练结果输出到OBS job_step = wf.steps.JobStep( name="training_job", # 训练节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="图像分类训练", # 标题信息,不填默认使用name algorithm=wf.BaseAlgorithm( code_dir="fake_code_dir", # 代码目录存储的路径 boot_file="fake_boot_file", # 启动文件存储路径,需要在代码目录下 engine=wf.steps.JobEngine(engine_name="fake_engine_name", engine_version="fake_engine_version"), # 官方镜像的名称以及版本信息 parameters=[ wf.AlgorithmParameters( name="parameter_name", value=wf.Placeholder(name="parameter_name", placeholder_type=wf.PlaceholderType.STR, default="fake_value",description="description_info") ) # 算法超参的值使用Placeholder对象来表示,支持int, bool, float, str四种类型 ] ), # 自定义算法使用代码目录+启动文件+官方镜像的方式实现 inputs=wf.steps.JobInput(name="data_url", data=dataset), # JobStep的输入在运行时配置;data字段也可使用wf.data.Dataset(dataset_name="fake_dataset_name", version_name="fake_version_name")表示 outputs=wf.steps.JobOutput(name="train_url", obs_config=wf.data.OBSOutputConfig(obs_path=storage.join("directory_path"))), # JobStep的输出 spec=wf.steps.JobSpec( resource=wf.steps.JobResource( flavor=wf.Placeholder(name="train_flavor", placeholder_type=wf.PlaceholderType.JSON, description="训练资源规格") ) )# 训练资源规格信息 ) workflow = wf.Workflow( name="job-step-demo", desc="this is a demo workflow", steps=[job_step], storages=[storage] ) 使用自定义算法(代码目录+脚本命令+自定义镜像) from modelarts import workflow as wf # 构建一个OutputStorage对象,对训练输出目录做统一管理 storage = wf.data.OutputStorage(name="storage_name", title="title_info", description="description_info") # name字段必填,title, description可选填 # 定义输入的数据集对象 dataset = wf.data.DatasetPlaceholder(name="input_dataset") # 通过JobStep来定义一个训练节点,输入使用数据集,并将训练结果输出到OBS job_step = wf.steps.JobStep( name="training_job", # 训练节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="图像分类训练", # 标题信息,不填默认使用name algorithm=wf.BaseAlgorithm( code_dir="fake_code_dir", # 代码目录存储的路径 command="fake_command", # 执行的脚本命令 engine=wf.steps.JobEngine(image_url="fake_image_url"), # 自定义镜像的url,格式为:组织名/镜像名称:版本号,不需要携带相应的域名地址;如果image_url需要设置为运行态可配置,则使用如下方式:image_url=wf.Placeholder(name="image_url", placeholder_type=wf.PlaceholderType.STR, placeholder_format="swr", description="自定义镜像") parameters=[ wf.AlgorithmParameters( name="parameter_name", value=wf.Placeholder(name="parameter_name", placeholder_type=wf.PlaceholderType.STR, default="fake_value",description="description_info") ) # 算法超参的值使用Placeholder对象来表示,支持int, bool, float, str四种类型 ] ), 自定义算法使用代码目录+脚本命令+自定义镜像的方式实现 inputs=wf.steps.JobInput(name="data_url", data=dataset), # JobStep的输入在运行时配置;data字段也可使用wf.data.Dataset(dataset_name="fake_dataset_name", version_name="fake_version_name")表示 outputs=wf.steps.JobOutput(name="train_url", obs_config=wf.data.OBSOutputConfig(obs_path=storage.join("directory_path"))), # JobStep的输出 spec=wf.steps.JobSpec( resource=wf.steps.JobResource( flavor=wf.Placeholder(name="train_flavor", placeholder_type=wf.PlaceholderType.JSON, description="训练资源规格") ) )# 训练资源规格信息 ) workflow = wf.Workflow( name="job-step-demo", desc="this is a demo workflow", steps=[job_step], storages=[storage] ) 上述四种方式使用据集对象作为输入,如果您需要使用OBS路径作为输入时,只需将JobInput中的data数据替换为data=wf.data.OBSPlaceholder(name="obs_placeholder_name", object_type="directory")或者data=wf.data.OBSPath(obs_path="fake_obs_path")即可。 此外,在构建工作流时就指定好数据集对象或者OBS路径的方式可以减少配置操作,方便您在开发态进行调试。但是对于发布到运行态或者gallery的工作流,更推荐的方式是采用数据占位符的方式进行编写,您可以在工作流启动之前对参数进行配置,自由度更高。 基于数据集版本发布节点构建作业类型节点 使用场景:数据集版本发布节点的输出作为作业类型节点的输入。 from modelarts import workflow as wf # 定义数据集对象 dataset = wf.data.DatasetPlaceholder(name="input_dataset") # 定义训练验证切分比参数 train_ration = wf.Placeholder(name="placeholder_name", placeholder_type=wf.PlaceholderType.STR, default="0.8") release_version_step = wf.steps.ReleaseDatasetStep( name="release_dataset", # 数据集发布节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="数据集版本发布", # 标题信息,不填默认使用name值 inputs=wf.steps.ReleaseDatasetInput(name="input_name", data=dataset), # ReleaseDatasetStep的输入,数据集对象在运行时配置;data字段也可使用wf.data.Dataset(dataset_name="dataset_name")表示 outputs=wf.steps.ReleaseDatasetOutput( name="output_name", dataset_version_config=wf.data.DatasetVersionConfig( label_task_type=wf.data.LabelTaskTypeEnum.IMAGE_CLASSIFICATION, # 数据集发布版本时需要指定标注任务的类型 train_evaluate_sample_ratio=train_ration # 数据集的训练验证切分比 ) ) # ReleaseDatasetStep的输出 ) # 构建一个OutputStorage对象,对训练输出目录做统一管理 storage = wf.data.OutputStorage(name="storage_name", title="title_info", description="description_info") # name字段必填,title, description可选填 # 通过JobStep来定义一个训练节点,输入使用数据集,并将训练结果输出到OBS job_step = wf.steps.JobStep( name="training_job", # 训练节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="图像分类训练", # 标题信息,不填默认使用name algorithm=wf.AIGalleryAlgorithm( subscription_id="subscription_id", # 算法订阅ID item_version_id="item_version_id", # 算法订阅版本ID parameters=[ wf.AlgorithmParameters( name="parameter_name", value=wf.Placeholder(name="parameter_name", placeholder_type=wf.PlaceholderType.STR, default="fake_value",description="description_info") ) # 算法超参的值使用Placeholder对象来表示,支持int, bool, float, str四种类型 ] ), # 训练使用的算法对象,示例中使用AI Gallery订阅的算法;部分算法超参的值如果无需修改,则在parameters字段中可以不填写,系统自动填充相关超参值 inputs=wf.steps.JobInput(name="data_url", data=release_version_step.outputs["output_name"].as_input()), # 使用数据集版本发布节点的输出作为JobStep的输入 outputs=wf.steps.JobOutput(name="train_url", obs_config=wf.data.OBSOutputConfig(obs_path=storage.join("directory_path"))), # JobStep的输出 spec=wf.steps.JobSpec( resource=wf.steps.JobResource( flavor=wf.Placeholder(name="train_flavor", placeholder_type=wf.PlaceholderType.JSON, description="训练资源规格") ) ), # 训练资源规格信息 depend_steps=release_version_step # 依赖的数据集版本发布节点对象 ) # release_version_step是wf.steps.ReleaseDatasetStep的实例对象,output_name是wf.steps.ReleaseDatasetOutput的name字段值 workflow = wf.Workflow( name="job-step-demo", desc="this is a demo workflow", steps=[release_version_step, job_step], storages=[storage] ) 作业类型节点结合可视化能力 节点可视化特性将用户在使用Workflow时产生的一些衡量指标进行一个可视化的展示,支持数据的实时可视化,并且允许独立呈现可视化外挂节点。形态上基于作业类型节点原有的使用方式,新增一个针对metrics信息展示的输出,通过MetricsConfig对象进行配置。 表16 MetricsConfig 属性 描述 是否必填 数据类型 metric_files metrics输出文件列表 是 list,列表内元素支持(str、Placeholder、Storage) realtime_visualization 输出的metrics信息是否需要实时展示 否 bool,默认为False visualization 是否呈现独立的可视化节点 否 bool,默认为True 对于输出的metrics文件,数据内容必须为标准的json数据,大小限制为1M,并且与当前支持的几种数据格式保持一致: 键值对类型的数据 [ { "key": "loss", "title": "loss", "type": "float", "data": { "value": 1.2 } }, { "key": "accuracy", "title": "accuracy", "type": "float", "data": { "value": 1.6 } } ] 折线图数据(type是line chart) [ { "key": "metric", "title": "metric", "type": "line chart", "data": { "x_axis": [ { "title": "step/epoch", "value": [ 1, 2, 3 ] } ], "y_axis": [ { "title": "value", "value": [ 0.5, 0.4, 0.3 ] } ] } } ] 柱状图数据(type是histogram) [ { "key": "metric", "title": "metric", "type": "histogram", "data": { "x_axis": [ { "title": "step/epoch", "value": [ 1, 2, 3 ] } ], "y_axis": [ { "title": "value", "value": [ 0.5, 0.4, 0.3 ] } ] } } ] 混淆矩阵 [ { "key": "confusion_matrix", "title": "confusion_matrix", "type": "table", "data": { "cell_value": [ [ 1, 2 ], [ 2, 3 ] ], "col_labels": { "title": "labels", "value": [ "daisy", "dandelion" ] }, "row_labels": { "title": "predictions", "value": [ "daisy", "dandelion" ] } } } ] 一维表格 [ { "key": "Application Evaluation Results", "title": "Application Evaluation Results", "type": "one-dimensional-table", "data": { "cell_value": [ [ 10, 2, 0.5 ] ], "labels": [ "samples", "maxResTine", "p99" ] } } ] 使用案例: from modelarts import workflow as wf # 构建一个Storage对象,对训练输出目录做统一管理 storage = wf.data.Storage(name="storage_name", title="title_info", description="description_info", with_execution_id=True, create_dir=True) # name字段必填,title, description可选填 # 定义输入的数据集对象 dataset = wf.data.DatasetPlaceholder(name="input_dataset") # 通过JobStep来定义一个训练节点,输入使用数据集,并将训练结果输出到OBS job_step = wf.steps.JobStep( name="training_job", # 训练节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="图像分类训练", # 标题信息,不填默认使用name algorithm=wf.AIGalleryAlgorithm( subscription_id="subscription_id", # 算法订阅ID item_version_id="item_version_id", # 算法订阅版本ID,也可直接填写版本号 parameters=[ wf.AlgorithmParameters( name="parameter_name", value=wf.Placeholder(name="parameter_name", placeholder_type=wf.PlaceholderType.STR, default="fake_value",description="description_info") ) # 算法超参的值使用Placeholder对象来表示,支持int, bool, float, str四种类型 ] ), # 训练使用的算法对象,示例中使用AI Gallery订阅的算法;部分算法超参的值如果无需修改,则在parameters字段中可以不填写,系统自动填充相关超参值 inputs=wf.steps.JobInput(name="data_url", data=dataset), # JobStep的输入在运行时配置;data字段也可使用wf.data.Dataset(dataset_name="fake_dataset_name", version_name="fake_version_name")表示 outputs=[ wf.steps.JobOutput(name="train_url", obs_config=wf.data.OBSOutputConfig(obs_path=storage.join("directory_path"))),# JobStep的输出 wf.steps.JobOutput(name="metrics_output", metrics_config=wf.data.MetricsConfig(metric_files=storage.join("directory_path/metrics.json", create_dir=False))) # 相关metrics信息由作业的脚本代码自行输出到配置的路径下 ], spec=wf.steps.JobSpec( resource=wf.steps.JobResource( flavor=wf.Placeholder(name="train_flavor", placeholder_type=wf.PlaceholderType.JSON, description="训练资源规格") ) )# 训练资源规格信息 ) workflow = wf.Workflow( name="job-step-demo", desc="this is a demo workflow", steps=[job_step], storages=[storage] ) Workflow不会自动获取训练输出的指标信息,要求用户自行在算法代码中获取指标信息并且按照指定的数据格式构造出metrics.json文件,自行上传到MetricsConfig中配置的OBS路径下,Workflow只进行数据的读取以及渲染展示。 输入使用DataSelector对象,支持选择OBS或者数据集 该方式主要用于输入支持可选择的场景,使用DataSelector对象作为输入时,用户在页面配置时可自由选择数据集对象或者OBS对象作为训练的输入,代码示例如下: from modelarts import workflow as wf # 构建一个OutputStorage对象,对训练输出目录做统一管理 storage = wf.data.OutputStorage(name="storage_name", title="title_info", description="description_info") # name字段必填,title, description可选填 # 定义DataSelector对象 data_selector = wf.data.DataSelector(name="input_data", data_type_list=["dataset", "obs"]) # 通过JobStep来定义一个训练节点,输入使用数据集,并将训练结果输出到OBS job_step = wf.steps.JobStep( name="training_job", # 训练节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 title="图像分类训练", # 标题信息,不填默认使用name algorithm=wf.AIGalleryAlgorithm( subscription_id="subscription_id", # 算法订阅ID,也可直接填写版本号 item_version_id="item_version_id", # 算法订阅版本ID,也可直接填写版本号 parameters=[ wf.AlgorithmParameters( name="parameter_name", value=wf.Placeholder(name="parameter_name", placeholder_type=wf.PlaceholderType.STR, default="fake_value",description="description_info") ) # 算法超参的值使用Placeholder对象来表示,支持int, bool, float, str四种类型 ] ), # 训练使用的算法对象,示例中使用AIGallery订阅的算法;部分算法超参的值如果无需修改,则在parameters字段中可以不填写,系统自动填充相关超参值 inputs=wf.steps.JobInput(name="data_url", data=data_selector), # JobStep的输入在运行时配置,可自由选择OBS或者数据集作为输入 outputs=wf.steps.JobOutput(name="train_url", obs_config=wf.data.OBSOutputConfig(obs_path=storage.join("directory_path"))), # JobStep的输出 spec=wf.steps.JobSpec( resource=wf.steps.JobResource( flavor=wf.Placeholder(name="train_flavor", placeholder_type=wf.PlaceholderType.JSON, description="训练资源规格") ) )# 训练资源规格信息 ) workflow = wf.Workflow( name="job-step-demo", desc="this is a demo workflow", steps=[job_step], storages=[storage] ) 使用DataSelector作为输入时,需要用户自行保证算法的输入同时支持数据集或者OBS。
  • 属性总览 您可以使用JobStep来构建作业类型节点,JobStep结构如下 表1 JobStep 属性 描述 是否必填 数据类型 name 作业节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复 是 str algorithm 算法对象 是 BaseAlgorithm, Algorithm, AIGalleryAlgorithm spec 作业使用的资源规格相关配置 是 JobSpec inputs 作业节点的输入列表 是 JobInput或者JobInput的列表 outputs 作业节点的输出列表 是 JobOutput或者JobOutput的列表 title title信息,主要用于前端的名称展示 否 str description 作业节点的描述信息 否 str policy 节点执行的policy 否 StepPolicy depend_steps 依赖的节点列表 否 Step或者Step的列表 表2 JobInput 属性 描述 是否必填 数据类型 name 作业类型节点的输入名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符)。同一个Step的输入名称不能重复 是 str data 作业类型节点的输入数据对象 是 数据集或OBS相关对象,当前仅支持Dataset,DatasetPlaceholder,DatasetConsumption,OBSPath,OBSConsumption,OBSPlaceholder,DataConsumptionSelector 表3 JobOutput 属性 描述 是否必填 数据类型 name 作业类型节点的输出名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符)。同一个Step的输出名称不能重复 是 str obs_config 输出的OBS相关配置 否 OBSOutputConfig model_config 输出的模型相关配置 否 ModelConfig metrics_config metrics相关配置 否 MetricsConfig 表4 OBSOutputConfig 属性 描述 是否必填 数据类型 obs_path 已存在的OBS目录 是 str、Placeholder、Storage metric_file 存储metric信息的文件名称 否 str、Placeholder 表5 BaseAlgorithm 属性 描述 是否必填 数据类型 id 算法管理的算法ID 否 str subscription_id 订阅算法的订阅ID 否 str item_version_id 订阅算法的版本号 否 str code_dir 代码目录 否 str,Placeholder,Storage boot_file 启动文件 否 str,Placeholder,Storage command 启动命令 否 str,Placeholder parameters 算法超参 否 AlgorithmParameters的列表 engine 作业使用的镜像信息 否 JobEngine environments 环境变量 否 dict 表6 Algorithm 属性 描述 是否必填 数据类型 algorithm_id 算法管理的算法ID 是 str parameters 算法超参 否 Algorithm Parameters的列表 表7 AIGalleryAlgorithm 属性 描述 是否必填 数据类型 subscription_id 订阅算法的订阅ID 是 str item_version_id 订阅算法的版本号 是 str parameters 算法超参 否 Algorithm Parameters的列表 表8 AlgorithmParameters 属性 描述 是否必填 数据类型 name 算法超参的名称 是 str value 算法超参的值 是 int, bool, float, str, Placeholder, Storage 表9 JobEngine 属性 描述 是否必填 数据类型 engine_id 镜像ID 否 str,Placeholder engine_name 镜像名称 否 str,Placeholder engine_version 镜像版本 否 str,Placeholder image_url 镜像url 否 str,Placeholder 表10 JobSpec 属性 描述 是否必填 数据类型 resource 资源信息 是 JobResource log_export_path 日志输出路径 否 LogExportPath schedule_policy 作业调度配置策略 否 SchedulePolicy volumes 作业挂载的文件系统信息 否 list[Volume] 表11 JobResource 属性 描述 是否必填 数据类型 flavor 资源规格 是 Placeholder node_count 节点个数,默认为1,多节点表示支持分布式 否 int,Placeholder 表12 SchedulePolicy 属性 描述 是否必填 数据类型 priority 作业调度的优先级,仅支持配置为1、2、3,分别对应低、中、高三种优先级 是 int,Placeholder 表13 Volume 属性 描述 是否必填 数据类型 nfs NFS文件系统对象,在一个Volume对象中,nfs、pacific、pfs同时只能配置一个 否 NFS pacific pacific文件系统对象,在一个Volume对象中,nfs、pacific、pfs同时只能配置一个 否 Placeholder pfs OBS并行文件系统对象,在一个Volume对象中,nfs、pacific、pfs同时只能配置一个 否 PFS,Placeholder 表14 NFS 属性 描述 是否必填 数据类型 nfs_server_path NFS文件系统的服务地址 是 str,Placeholder local_path 挂载到容器里面的路径 是 str,Placeholder read_only 是否只读的方式挂载 否 bool,Placeholder 表15 PFS 属性 描述 是否必填 数据类型 pfs_path 并行文件系统的路径 是 str,Placeholder local_path 挂载到容器里面的路径 是 str,Placeholder
  • 常见问题 首次使用ModelArts如何配置授权? 直接选择“新增委托”中的“普通用户”权限即可,普通用户包括用户使用ModelArts完成AI开发的所有必要功能权限,如数据的访问、训练任务的创建和管理等。一般用户选择此项即可。 如何获取访问密钥AK/SK? 如果在其他功能(例如PyCharmtoolKit/VSCode登录,访问在线服务等)中使用到访问密钥AK/SK认证,获取AK/SK方式请参考如何获取访问密钥章节。 如何删除已有委托列表下面的委托名称? 图8 已有委托 需要前往 统一身份认证 服务IAM控制台的委托页面删除。 图9 统一身份认证 进入ModelArts控制台的某个页面时,为什么会提示权限不足? 图10 页面提示权限不足 可能原因是用户委托权限配置不足或模块能力升级,需要更新授权信息。根据界面操作提示追加授权即可。 为什么专属资源池需要增加CCE、BMS、IMS、DEW相关授权? 专属资源池能力升级,新上线ModelArts Lite功能,这项功能需要用户授权允许ModelArts访问云容器引擎服务CCE、裸金属服务BMS、 镜像服务 IMS和密钥管理服务DEW。当用户未使用ModelArts Lite功能时,可以不增加CCE、BMS、IMS、DEW授权,也不影响原有专属资源池的使用。 目前ModelArts Lite功能是“受邀开通”状态,作为企业用户您可以咨询您对口的技术支持开通或提工单咨询。
  • 删除授权 为了更好的管理您的授权,您可以删除某一IAM用户的授权,也可批量清空所有用户的授权。 删除某一用户的授权 在“全局配置”页面,展示当前账号下为其IAM用户配置的授权列表,针对某一用户,您可以单击“操作”列的“删除”,输入“DELETE”后单击“确认”,可删除此用户的授权。删除生效后,此用户将无法继续使用ModelArts的相关功能。 批量清空所有授权 在“全局配置”页面,单击授权列表上方的“清空授权”,输入“DELETE”后单击“确认”,可删除当前账号下的所有授权。删除生效后,此账号及其所有IAM子用户将无法继续使用ModelArts的相关功能。
  • 场景描述 ModelArts与其他服务类似,对外暴露的每个功能,都通过IAM的权限来进行控制。比如,用户(此处指IAM子用户,而非租户)希望在ModelArts创建训练作业,则该用户必须拥有 "modelarts:trainJob:create" 的权限才可以完成操作(无论界面操作还是API调用)。 而ModelArts还有一个特殊的地方在于,为了完成AI计算的各种操作,AI平台在任务执行过程中需要访问用户的其他服务,典型的就是训练过程中,需要访问OBS读取用户的训练数据。在这个过程中,就出现了ModelArts“代表”用户去访问其他云服务的情形。从安全角度出发,ModelArts代表用户访问任何云服务之前,均需要先获得用户的授权,而这个动作就是一个“委托”的过程。用户授权ModelArts再代表自己访问特定的云服务,以完成其在ModelArts平台上执行的AI计算任务。 ModelArts提供了一键式自动授权功能,用户可以在ModelArts的全局配置功能中,快速完成委托授权,由ModelArts为用户自动创建委托并配置到ModelArts服务中。 一键式自动授权方式为保证使用业务过程中有足够的权限,基于依赖服务的预置系统策略指定授权范围,创建的委托的权限比较大,基本覆盖了依赖服务的全部权限。如果您需要对委托授权的权限范围进行精确控制,请使用定制化委托授权。更多权限控制的内容请参见权限管理章节。 本章节主要介绍一键式自动授权方式。一键式自动授权方式支持给IAM子用户、联邦用户(虚拟IAM用户)、委托用户和所有用户授权。
  • 修改授权权限范围 在查看授权详情时,如果想要修改授权范围,可以在权限详情页单击“去IAM修改委托权限”。 图6 去IAM修改委托权限 进入IAM控制台的委托页面。找到对应的委托信息,修改该委托的基本信息,主要是持续时间。“持续时间”可以选择永久、1天,或者自定义天数,例如 30天。 图7 手动创建的委托 在授权记录页面单击“授权”,勾选要配置的策略,单击下一步设置最小授权范围,单击确定,完成授权修改。 设置最小授权范围时,可以选择指定的区域,也可以选择所有区域,即不设置范围。
  • 约束与限制 华为云账号 只有华为云账号可以使用委托授权,可以为当前账号授权,也可以为当前账号下的所有IAM用户授权。 多个IAM用户或账号,可使用同一个委托。 一个账号下,最多可创建50个委托。 对于首次使用ModelArts的新用户,请直接新增委托即可。一般用户新增普通用户权限即可满足使用要求。如果有精细化权限管理的需求,可以自定义权限按需设置。 IAM用户 如果已获得委托授权,则可以在全局配置页面中查看到已获得的委托授权信息。 如果未获得委托授权,当打开“访问授权”页面时,ModelArts会提醒您当前用户未配置授权,需联系此IAM用户的管理员账号进行委托授权。
共100000条