华为云用户手册

  • URI POST /v1/{project_id}/training-jobs/{job_id}/versions/{version_id}/stop 参数说明如表1所示。 表1 参数说明 参数 是否必选 参数类型 说明 project_id 是 String 用户项目ID。获取方法请参见获取项目ID和名称。 job_id 是 Long 训练作业的ID。 version_id 是 Long 训练作业的版本ID。
  • 开发环境权限(新版) 表1 开发环境细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM 项目 企业项目 创建开发环境实例 POST /v1/{project_id}/notebooks modelarts:notebook:create ecs:serverKeypairs:create swr:repository:getNamespace swr:repository:listNamespace swr:repository:deleteTag swr:repository:getRepository swr:repository:listTags swr:instance:createTempCredential iam:users:getUser iam:users:listUsers iam:projects:listProjects mrs:cluster:get smn:topic:publish obs:object:PutObject obs:object:GetObject obs:object:GetObjectVersion obs:bucket:HeadBucket obs:object:DeleteObject obs:object:GetObject obs:bucket:CreateBucket obs:bucket:ListBucket modelarts:trainJob:list modelarts:trainJob:update modelarts:trainJobVersion:delete modelarts:pool:list √ √ 查询开发环境实例列表 GET /v1/{project_id}/notebooks modelarts:notebook:list - √ √ 查询开发环境实例详情 GET /v1/{project_id}/notebooks/{id} modelarts:notebook:get - √ √ 更新开发环境实例信息 PUT /v1/{project_id}/notebooks/{id} modelarts:notebook:update - √ √ 删除开发环境实例 DELETE /v1/{project_id}/notebooks/{id} modelarts:notebook:delete - √ √ 启动新版开发环境实例 POST /v1/{project_id}/notebooks/{id}/start modelarts:notebook:start - √ √ 停止新版开发环境实例 POST /v1/{project_id}/notebooks/{id}/stop modelarts:notebook:stop - √ √ 查询支持的镜像列表 GET /v1/{project_id}/images modelarts:image:list - √ √ 查询镜像详情 GET /v1/{project_id}/images/{id} modelarts:image:get - √ √ 查询镜像组列表 GET /v1/{project_id}/images/group modelarts:image:listGroup - √ √ 注册 自定义镜像 POST /v1/{project_id}/images modelarts:image:register - √ √ 删除自定义镜像 DELETE /v1/{project_id}/images/{id} modelarts:image:delete - √ √ 保存成自定义镜像 POST /v1/{project_id}/notebooks/{id}/create-image modelarts:image:create - √ √ 获取开发环境挂载的存储列表 POST /v1/{project_id}/notebooks/{id}/create-image modelarts:notebook:listMountedStorages - √ √ 挂载开发环境存储 POST /v1/{project_id}/notebooks/{instance_id}/storage modelarts:notebook:mountStorage - √ √ 获取开发环境挂载的存储详情 GET /v1/{project_id}/notebooks/{instance_id}/storage/{storage_id} modelarts:notebook:getMountedStorage - √ √ 卸载开发环境存储 DELETE /v1/{project_id}/notebooks/{instance_id}/storage/{storage_id} modelarts:notebook:umountStorage - √ √ 更新开发环境实例停止规则 PATCH /v1/{project_id}/notebooks/{id}/lease modelarts:notebook:updateStopPolicy - √ √ 父主题: 权限策略和授权项
  • URI DELETE /v1/{project_id}/training-jobs/{job_id}/versions/{version_id} 参数说明如表1所示。 表1 参数说明 参数 是否必选 参数类型 说明 project_id 是 String 用户项目ID。获取方法请参见获取项目ID和名称。 job_id 是 Long 训练作业的ID。 version_id 是 Long 训练作业的版本ID。
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 error_code String 操作失败的错误码。 error_msg String 操作失败的错误信息。 results Array of BatchResponse objects 向标注成员发送邮件的结果。 success Boolean 操作是否执行成功。可选值如下: true:执行成功 false:执行失败 表4 BatchResponse 参数 参数类型 描述 error_code String 操作失败的错误码。 error_msg String 操作失败的错误信息。 success Boolean 操作是否执行成功。可选值如下: true:执行成功 false:执行失败
  • URI POST /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id}/notify 表1 路径参数 参数 是否必选 参数类型 描述 dataset_id 是 String 数据集ID。 project_id 是 String 用户项目ID。获取方法请参见获取项目ID和名称。 workforce_task_id 是 String 团队标注任务ID。
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 error_code String 操作失败的错误码。 error_msg String 操作失败的错误信息。 results Array of BatchResponse objects 批量删除标注团队成员的结果。 success Boolean 操作是否执行成功。可选值如下: true:执行成功 false:执行失败 表4 BatchResponse 参数 参数类型 描述 error_code String 操作失败的错误码。 error_msg String 操作失败的错误信息。 success Boolean 操作是否执行成功。可选值如下: true:执行成功 false:执行失败
  • 响应消息 响应参数如表3所示。 表3 响应参数 参数 参数类型 说明 is_success Boolean 请求是否成功。 error_code String 调用失败时的错误码,具体请参见错误码。 调用成功时无此字段。 error_message String 调用失败时的错误信息。 调用成功时无此字段。 job_total_count Integer 查询的可视化作业总数。 job_count_limit Integer 用户还可以创建可视化作业的数量。 jobs jobs结构数组 可视化作业的属性列表,具体请参见表4。 quotas Integer 可视化作业的运行数量上限。
  • 响应示例 成功响应示例 { "quotas": 100, "is_success": true, "job_total_count": 1, "job_count_limit": 999, "jobs": [ { "job_id": 1, "job_name": "visualization-job", "status": 1, "create_time": 15099239923, "resource_id": "4787c885-e18d-4ef1-aa12-c4ed0c364b27", "duration": 1502323, "job_desc": "This is a visualization job", "service_url": "https://console.huaweicloud.com/modelarts/tensoarbod/xxxx/111", "train_url": "/obs/name/" } ] } 失败响应示例 { "is_success": false, "error_message": "error message", "error_code": "ModelArts.0103" }
  • 响应示例 状态码: 400 Bad Request。 { "error_code" : "ModelArts.50004000", "error_msg" : "Bad request." } 状态码: 404 Not Found。 { "error_code" : "ModelArts.50015001", "error_msg" : "Pool {name} not found." }
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 statistics statistics object 作业的统计信息。 表3 statistics 参数 参数类型 描述 total Integer 统计信息列表数量。 items Array of WorkloadStatistics objects 特定作业类型统计信息。 表4 WorkloadStatistics 参数 参数类型 描述 type String 作业类型。可选值如下: train:训练作业 infer:推理作业 notebook:Notebook作业 total Integer 作业个数。 status status object 不同状态下作业个数。 表5 status 参数 参数类型 描述 Queue Integer 排队中的作业个数。 Pending Integer 等待中的作业个数。 Abnormal Integer 异常的作业个数。 Terminating Integer 终止中的作业个数。 Creating Integer 创建中的作业个数。 Running Integer 运行中的作业个数。 Completed Integer 已完成的作业个数。 Terminated Integer 已终止的作业个数。 Failed Integer 运行失败的作业个数。 状态码: 400 表6 响应Body参数 参数 参数类型 描述 error_code String ModelArts错误码 error_msg String 具体错误信息 状态码: 404 表7 响应Body参数 参数 参数类型 描述 error_code String ModelArts错误码 error_msg String 具体错误信息
  • 响应消息 响应参数如表9所示。 表9 响应参数 参数 参数类型 说明 is_success Boolean 请求是否成功。 error_message String 调用失败时的错误信息。 调用成功时无此字段。 error_code String 调用失败时的错误码,具体请参见错误码。 调用成功时无此字段。 job_id Long 训练作业的ID。 job_name String 训练作业的名称 status Int 训练作业的运行状态,详细作业状态列表请查看作业状态参考。 create_time Long 训练作业的创建时间,时间戳格式。 version_id Long 训练作业的版本ID。 resource_id String 训练作业的计费资源ID。 version_name String 训练作业的版本名称。
  • 请求示例 如下以创建名为“TestModelArtsJob”,描述为“This is a ModelArts job”为例。 POST https://endpoint/v1/{project_id}/training-jobs { "job_name": "TestModelArtsJob", "job_desc": "This is a ModelArts job", "workspace_id": "af261af2218841ec960b01ab3cf1a5fa", "config": { "worker_server_num": 1, "app_url": "/usr/app/", "boot_file_url": "/usr/app/boot.py", "parameter": [ { "label": "learning_rate", "value": "0.01" }, { "label": "batch_size", "value": "32" } ], "dataset_id": "38277e62-9e59-48f4-8d89-c8cf41622c24", "dataset_version_id": "2ff0d6ba-c480-45ae-be41-09a8369bfc90", "spec_id": 1, "engine_id": 1, "train_url": "/usr/train/", "log_url": "/usr/log/", "model_id": 1, "pool_id": "testpool" } } 如下以创建名为“TestModelArtsJob2”,创建自定义镜像训练。 POST https://endpoint/v1/{project_id}/training-jobs { "job_name": "TestModelArtsJob2", "job_desc": "This is a ModelArts job", "workspace_id": "af261af2218841ec960b01ab3cf1a5fa", "config": { "worker_server_num": 1, "data_url": "/usr/data/", "app_url": "/usr/app/", "boot_file_url": "/usr/app/boot.py", "parameter": [ { "label": "CUSTOM_PA RAM 1", "value": "1" } ], "spec_id": 1, "user_command": "bash -x /home/work/run_train.sh python /home/work/user-job-dir/app/mnist/mnist_softmax.py --data_url /home/work/user-job-dir/app/mnist_data", "user_image_url": "100.125.5.235:20202/jobmng/custom-cpu-base:1.0", "train_url": "/usr/train/", "log_url": "/usr/log/", "model_id": 1, "pool_id": "testpool", "engine_id": 1 } } 如下以创建名为“TestModelArtsJob3”,创建使用存储卷的训练。 POST https://endpoint/v1/{project_id}/training-jobs { "job_name": "TestModelArtsJob3", "job_desc": "This is a ModelArts job", "workspace_id": "af261af2218841ec960b01ab3cf1a5fa", "config": { "worker_server_num": 1, "app_url": "/usr/app/", "boot_file_url": "/usr/app/boot.py", "parameter": [ { "label": "learning_rate", "value": "0.01" }, { "label": "batch_size", "value": "32" } ], "dataset_id": "38277e62-9e59-48f4-8d89-c8cf41622c24", "dataset_version_id": "2ff0d6ba-c480-45ae-be41-09a8369bfc90", "spec_id": 1, "engine_id": 1, "train_url": "/usr/train/", "log_url": "/usr/log/", "model_id": 1, "pool_id": "testpool", "volumes": [ { "nfs": { "id": "43b37236-9afa-4855-8174-32254b9562e7", "src_path": "192.168.8.150:/", "dest_path": "/home/work/nas", "read_only": false } }, { "host_path": { "src_path": "/root/work", "dest_path": "/home/mind", "read_only": false } } ] } }
  • 响应示例 成功响应示例 { "is_success": true, "job_id": "10", "job_name": "TestModelArtsJob", "status": "1", "create_time": "1524189990635", "version_id": "10", "version_name": "V0001", "resource_id": "jobafd08896" } 失败响应示例 { "is_success": false, "error_message": "Job name:TestModelArtsJob is existed", "error_code": "ModelArts.0103" }
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 category String 存储类型。可选值为OBS。 id String 动态挂载实例ID。 mount_path String 在Notebook实例中挂载的路径。 status String 动态挂载OBS状态。枚举值如下: MOUNTING:挂载中 MOUNT_FAILED:挂载失败 MOUNTED:已挂载 UNMOUNTING:卸载中 UNMOUNT_FAILED:卸载失败 UNMOUNTED:卸载完成 uri String OBS对象路径。
  • URI DELETE /v1/{project_id}/notebooks/{instance_id}/storage/{storage_id} 表1 路径参数 参数 是否必选 参数类型 描述 instance_id 是 String Notebook实例ID。 project_id 是 String 用户项目ID,获取方法请参见获取项目ID和名称。 storage_id 是 String OBS存储ID。
  • 操作步骤 调用认证鉴权接口获取用户的Token。 请求消息体: URI格式:POST https://{iam_endpoint}/v3/auth/tokens 请求消息头:Content-Type →application/json 请求Body: { "auth": { "identity": { "methods": ["password"], "password": { "user": { "name": "user_name", "password": "user_password", "domain": { "name": "domain_name" } } } }, "scope": { "project": { "name": "cn-north-1" } } } } 其中,加粗的斜体字段需要根据实际值填写: iam_endpoint为IAM的终端节点。 user_name为IAM用户名。 user_password为用户登录密码。 domain_name为用户所属的帐号名。 cn-north-1为项目名,代表服务的部署区域。 返回状态码“201 Created”,在响应Header中获取“X-Subject-Token”的值即为Token,如下所示: x-subject-token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 调用获取训练作业支持的公共规格接口获取训练作业支持的资源规格。 请求消息体: URI格式:GET https://{ma_endpoint}/v2/{project_id}/ training-job-flavors? flavor_type=CPU 请求消息头:X-Auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写: ma_endpoint为ModelArts的终端节点。 project_id为用户的项目ID。 “X-Auth-Token”的值是上一步获取到的Token值。 返回状态码“200”,响应Body如下所示: { "total_count": 2, "flavors": [ { "flavor_id": "modelarts.vm.cpu.2u", "flavor_name": "Computing CPU(2U) instance", "flavor_type": "CPU", "billing": { "code": "modelarts.vm.cpu.2u", "unit_num": 1 }, "flavor_info": { "max_num": 1, "cpu": { "arch": "x86", "core_num": 2 }, "memory": { "size": 8, "unit": "GB" }, "disk": { "size": 50, "unit": "GB" } } }, { "flavor_id": "modelarts.vm.cpu.8u", "flavor_name": "Computing CPU(8U) instance", "flavor_type": "CPU", "billing": { "code": "modelarts.vm.cpu.8u", "unit_num": 1 }, "flavor_info": { "max_num": 16, "cpu": { "arch": "x86", "core_num": 8 }, "memory": { "size": 32, "unit": "GB" }, "disk": { "size": 50, "unit": "GB" } } } ] } 根据“flavor_id”字段选择并记录创建训练作业时需要的规格类型,本章以“modelarts.vm.cpu.8u”为例,并记录“max_num”字段的值为“16”。 调用获取训练作业支持的AI预置框架接口查看训练作业的引擎类型和版本。 请求消息体: URI格式:GET https://{ma_endpoint}/v2/{project_id}/job/ training-job-engines 请求消息头: X-Auth-Token→MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 其中,加粗的斜体字段需要根据实际值填写。 返回状态码“200”,响应Body如下所示(引擎较多,只展示部分): { "total": 28, "items": [ ...... { "engine_id": "mindspore_1.6.0-cann_5.0.3.6-py_3.7-euler_2.8.3-aarch64", "engine_name": "Ascend-Powered-Engine", "engine_version": "mindspore_1.6.0-cann_5.0.3.6-py_3.7-euler_2.8.3-aarch64", "v1_compatible": false, "run_user": "1000", "image_info": { "cpu_image_url": "", "gpu_image_url": "atelier/mindspore_1_6_0:train", "image_version": "mindspore_1.6.0-cann_5.0.3.6-py_3.7-euler_2.8.3-aarch64-snt9-roma-20211231193205-33131ee" } }, ...... { "engine_id": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "engine_name": "PyTorch", "engine_version": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "tags": [ { "key": "auto_search", "value": "True" } ], "v1_compatible": false, "run_user": "1102", "image_info": { "cpu_image_url": "aip/pytorch_1_8:train", "gpu_image_url": "aip/pytorch_1_8:train", "image_version": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64-20210912152543-1e0838d" } }, ...... { "engine_id": "tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64", "engine_name": "TensorFlow", "engine_version": "tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64", "tags": [ { "key": "auto_search", "value": "True" } ], "v1_compatible": false, "run_user": "1102", "image_info": { "cpu_image_url": "aip/tensorflow_2_1:train", "gpu_image_url": "aip/tensorflow_2_1:train", "image_version": "tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64-20210912152543-1e0838d" } }, ...... ] } 根据“engine_name”和“engine_version”字段选择创建训练作业时需要的引擎规格,并记录对应的“engine_name”和“engine_version”,本章以Pytorch引擎为例创建作业,记录“engine_name”为“PyTorch”,“engine_version”为“pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64”。 调用创建算法接口创建一个算法,记录算法id。 请求消息体: URI格式:POST https://{ma_endpoint}/v2/{project_id}/ algorithms 请求消息头: X-Auth-Token→MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 其中,加粗的斜体字段需要根据实际值填写。 请求body: { "metadata": { "name": "test-pytorch-cpu", "description": "test pytorch job in cpu in mode gloo" }, "job_config": { "boot_file": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/test-pytorch.py", "code_dir": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/", "engine": { "engine_name": "PyTorch", "engine_version": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64" }, "inputs": [{ "name": "data_url", "description": "数据来源1" }], "outputs": [{ "name": "train_url", "description": "输出数据1" }], "parameters": [{ "name": "dist", "description": "", "value": "False", "constraint": { "editable": true, "required": false, "sensitive": false, "type": "Boolean", "valid_range": [], "valid_type": "None" } }, { "name": "world_size", "description": "", "value": "1", "constraint": { "editable": true, "required": false, "sensitive": false, "type": "Integer", "valid_range": [], "valid_type": "None" } } ], "parameters_customization": true }, "resource_requirements": [] } 其中,加粗的斜体字段需要根据实际值填写: “metadata”字段下的“name”和“description”分别为算法的名称和描述。 “job_config”字段下的“code_dir”和“boot_file”分别为算法的代码目录和代码启动文件。代码目录为代码启动文件的一级目录。 “job_config”字段下的“inputs”和“outputs”分别为算法的输入输出管道。可以按照实例指定“data_url”和“train_url”,在代码中解析超参分别指定训练所需要的数据文件本地路径和训练生成的模型输出本地路径。 “job_config”字段下的“parameters_customization”表示是否支持自定义超参,此处填true。 “job_config”字段下的“parameters”表示算法本身的超参。“name”填写超参名称(64个以内字符,仅支持大小写字母、数字、下划线和中划线),“value”填写超参的默认值,“constraint”填写超参的约束,例如此处“type”填写“String”(支持String、Integer、Float和Boolean),“editable”填写“true”,“required”填写“false”等。 “job_config”字段下的“engine”表示算法所依赖的引擎,使用3记录的“engine_name”和“engine_version”。 返回状态码“200 OK”,表示创建算法成功,响应Body如下所示: { "metadata": { "id": "01c399ae-8593-4ef5-9e4d-085950aacde1", "name": "test-pytorch-cpu", "description": "test pytorch job in cpu in mode gloo", "create_time": 1641890623262, "workspace_id": "0", "ai_project": "default-ai-project", "user_name": "", "domain_id": "0659fbf6de00109b0ff1c01fc037d240", "source": "custom", "api_version": "", "is_valid": true, "state": "", "size": 4790, "tags": null, "attr_list": null, "version_num": 0, "update_time": 0 }, "share_info": {}, "job_config": { "code_dir": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/", "boot_file": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/test-pytorch.py", "parameters": [ { "name": "dist", "description": "", "i18n_description": null, "value": "False", "constraint": { "type": "Boolean", "editable": true, "required": false, "sensitive": false, "valid_type": "None", "valid_range": [] } }, { "name": "world_size", "description": "", "i18n_description": null, "value": "1", "constraint": { "type": "Integer", "editable": true, "required": false, "sensitive": false, "valid_type": "None", "valid_range": [] } } ], "parameters_customization": true, "inputs": [ { "name": "data_url", "description": "数据来源1" } ], "outputs": [ { "name": "train_url", "description": "输出数据1" } ], "engine": { "engine_id": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "engine_name": "PyTorch", "engine_version": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "tags": [ { "key": "auto_search", "value": "True" } ], "v1_compatible": false, "run_user": "1102", "image_info": { "cpu_image_url": "aip/pytorch_1_8:train", "gpu_image_url": "aip/pytorch_1_8:train", "image_version": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64-20210912152543-1e0838d" } }, "code_tree": { "name": "cpu/", "children": [ { "name": "test-pytorch.py" } ] } }, "resource_requirements": [], "advanced_config": {} } 记录“metadata”字段下的“id”(算法id,32位UUID)字段的值便于后续步骤使用。 调用创建训练作业接口使用刚创建的算法返回的uuid创建一个训练作业,记录训练作业id。 请求消息体: URI格式:POST https://{ma_endpoint}/v2/{project_id}/training-jobs 请求消息头: X-Auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 其中,加粗的斜体字段需要根据实际值填写。 请求Body: { "kind": "job", "metadata": { "name": "test-pytorch-cpu01", "description": "test pytorch work cpu in mode gloo" }, "algorithm": { "id": "01c399ae-8593-4ef5-9e4d-085950aacde1", "parameters": [{ "name": "dist", "value": "False" }, { "name": "world_size", "value": "1" } ], "inputs": [{ "name": "data_url", "remote": { "obs": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/data/" } } }], "outputs": [{ "name": "train_url", "remote": { "obs": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/outputs/" } } }] }, "spec": { "resource": { "flavor_id": "modelarts.vm.cpu.8u", "node_count": 1 }, "log_export_path": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/log/" } } } 其中,加粗的斜体字段需要根据实际值填写: “kind”填写训练作业的类型,默认为job。 “metadata”下的“name”和“description”填写训练作业的名称和描述。 “algorithm”下的“id”填写4获取的算法ID。 “algorithm”的“inputs”和“outputs”填写训练作业输入输出管道的具体信息。实例中“inputs”中“remote”下的“obs_url”表示从OBS桶中选择训练数据的OBS路径。实例中“outputs”下种“remote”下的“obs_url”表示上传训练输出至指定OBS路径。 “spec”字段下的“flavor_id”表示训练作业所依赖的规格,使用2记录的flavor_id。“node_count”表示训练是否需要多机训练(分布式训练),此处为单机情况使用默认值“1”。“log_export_path”用于指定用户需要上传日志的obs目录。 返回状态码“201 Created”,表示训练作业创建成功,响应Body如下所示: { "kind": "job", "metadata": { "id": "66ff6991-fd66-40b6-8101-0829a46d3731", "name": "test-pytorch-cpu01", "description": "test pytorch work cpu in mode gloo", "create_time": 1641892642625, "workspace_id": "0", "ai_project": "default-ai-project", "user_name": "", "annotations": { "job_template": "Template DL", "key_task": "worker" } }, "status": { "phase": "Creating", "secondary_phase": "Creating", "duration": 0, "start_time": 0, "node_count_metrics": null, "tasks": [ "worker-0" ] }, "algorithm": { "id": "01c399ae-8593-4ef5-9e4d-085950aacde1", "name": "test-pytorch-cpu", "code_dir": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/", "boot_file": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/test-pytorch.py", "parameters": [ { "name": "dist", "description": "", "i18n_description": null, "value": "False", "constraint": { "type": "Boolean", "editable": true, "required": false, "sensitive": false, "valid_type": "None", "valid_range": [] } }, { "name": "world_size", "description": "", "i18n_description": null, "value": "1", "constraint": { "type": "Integer", "editable": true, "required": false, "sensitive": false, "valid_type": "None", "valid_range": [] } } ], "parameters_customization": true, "inputs": [ { "name": "data_url", "description": "数据来源1", "local_dir": "/home/ma-user/modelarts/inputs/data_url_0", "remote": { "obs": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/data/" } } } ], "outputs": [ { "name": "train_url", "description": "输出数据1", "local_dir": "/home/ma-user/modelarts/outputs/train_url_0", "remote": { "obs": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/outputs/" } }, "mode": "upload_periodically", "period": 30 } ], "engine": { "engine_id": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "engine_name": "PyTorch", "engine_version": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "usage": "training", "support_groups": "public", "tags": [ { "key": "auto_search", "value": "True" } ], "v1_compatible": false, "run_user": "1102" } }, "spec": { "resource": { "flavor_id": "modelarts.vm.cpu.8u", "flavor_name": "Computing CPU(8U) instance", "node_count": 1, "flavor_detail": { "flavor_type": "CPU", "billing": { "code": "modelarts.vm.cpu.8u", "unit_num": 1 }, "flavor_info": { "cpu": { "arch": "x86", "core_num": 8 }, "memory": { "size": 32, "unit": "GB" }, "disk": { "size": 50, "unit": "GB" } } } }, "log_export_path": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/log/" }, "is_hosted_log": true } } 记录“metadata”下的“id”(训练作业的任务ID)字段的值便于后续步骤使用。 “Status”下的“phase”和“secondary_phase”为表示训练作业的状态和下一步状态。示例中“Creating”表示训练作业正在创建中。 调用查询训练作业详情接口使用刚创建的训练作业返回的uuid查询训练作业状态。 请求消息体: URI格式:GET https://{ma_endpoint}/v2/{project_id}/training-jobs/{training_job_id} 请求消息头:X-Auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写: “training_job_id”为5记录的训练作业的任务ID。 返回状态码“200 OK”,响应Body如下所示: { "kind": "job", "metadata": { "id": "66ff6991-fd66-40b6-8101-0829a46d3731", "name": "test-pytorch-cpu01", "description": "test pytorch work cpu in mode gloo", "create_time": 1641892642625, "workspace_id": "0", "ai_project": "default-ai-project", "user_name": "hwstaff_z00424192", "annotations": { "job_template": "Template DL", "key_task": "worker" } }, "status": { "phase": "Running", "secondary_phase": "Running", "duration": 268000, "start_time": 1641892655000, "node_count_metrics": [ [ 1641892645000, 0 ], [ 1641892654000, 0 ], [ 1641892655000, 1 ], [ 1641892922000, 1 ], [ 1641892923000, 1 ] ], "tasks": [ "worker-0" ] }, "algorithm": { "id": "01c399ae-8593-4ef5-9e4d-085950aacde1", "name": "test-pytorch-cpu", "code_dir": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/", "boot_file": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/test-pytorch.py", "parameters": [ { "name": "dist", "description": "", "i18n_description": null, "value": "False", "constraint": { "type": "Boolean", "editable": true, "required": false, "sensitive": false, "valid_type": "None", "valid_range": [] } }, { "name": "world_size", "description": "", "i18n_description": null, "value": "1", "constraint": { "type": "Integer", "editable": true, "required": false, "sensitive": false, "valid_type": "None", "valid_range": [] } } ], "parameters_customization": true, "inputs": [ { "name": "data_url", "description": "数据来源1", "local_dir": "/home/ma-user/modelarts/inputs/data_url_0", "remote": { "obs": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/data/" } } } ], "outputs": [ { "name": "train_url", "description": "输出数据1", "local_dir": "/home/ma-user/modelarts/outputs/train_url_0", "remote": { "obs": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/outputs/" } }, "mode": "upload_periodically", "period": 30 } ], "engine": { "engine_id": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "engine_name": "PyTorch", "engine_version": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "usage": "training", "support_groups": "public", "tags": [ { "key": "auto_search", "value": "True" } ], "v1_compatible": false, "run_user": "1102" } }, "spec": { "resource": { "flavor_id": "modelarts.vm.cpu.8u", "flavor_name": "Computing CPU(8U) instance", "node_count": 1, "flavor_detail": { "flavor_type": "CPU", "billing": { "code": "modelarts.vm.cpu.8u", "unit_num": 1 }, "flavor_info": { "cpu": { "arch": "x86", "core_num": 8 }, "memory": { "size": 32, "unit": "GB" }, "disk": { "size": 50, "unit": "GB" } } } }, "log_export_path": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/log/" }, "is_hosted_log": true } } 根据响应可以了解训练作业的版本详情,其中“status”为“Running”表示训练作业正在运行。 调用查询训练作业指定任务的日志(OBS链接)接口获取训练作业日志的对应的obs路径。 请求消息体: URI格式:GET https://{ma_endpoint}/v2/{project_id}/training-jobs/{training_job_id}/tasks/{task_id}/logs/url 请求消息头: X-Auth-Token→MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type→text/plain 其中,加粗的斜体字段需要根据实际值填写: “task_id”为训练作业的任务名称,一般使用work-0。 Content-Type可以设置成不同方式。text/plain,返回OBS临时预览链接。application/octet-stream,返回OBS临时下载链接。 返回状态码“200 OK”,响应Body如下所示: { "obs_url": "https://modelarts-training-log-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/66ff6991-fd66-40b6-8101-0829a46d3731/worker-0/modelarts-job-66ff6991-fd66-40b6-8101-0829a46d3731-worker-0.log?AWSAccessKeyId=GFGTBKOZENDD83QEMZMV&Expires=1641896599&Signature=BedFZHEU1oCmqlI912UL9mXlhkg%3D" } 返回字段表示日志的obs路径。复制至浏览器即可看到对应效果。 调用查询训练作业指定任务的运行指标接口查看训练作业的运行指标详情。 请求消息体: URI格式:GET https://{ma_endpoint}/v2/{project_id}/training-jobs/{training_job_id}/metrics/{task_id} 请求消息头:X-Auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写。 返回状态码“200 OK”,响应Body如下所示: { "metrics": [ { "metric": "cpuUsage", "value": [ -1, -1, 28.622, 35.053, 39.988, 40.069, 40.082, 40.094 ] }, { "metric": "memUsage", "value": [ -1, -1, 0.544, 0.641, 0.736, 0.737, 0.738, 0.739 ] }, { "metric": "npuUtil", "value": [ -1, -1, -1, -1, -1, -1, -1, -1 ] }, { "metric": "npuMemUsage", "value": [ -1, -1, -1, -1, -1, -1, -1, -1 ] }, { "metric": "gpuUtil", "value": [ -1, -1, -1, -1, -1, -1, -1, -1 ] }, { "metric": "gpuMemUsage", "value": [ -1, -1, -1, -1, -1, -1, -1, -1 ] } ] } 可以看到CPU等相关的使用率指标。 当训练作业使用完成或不再需要时,调用删除训练作业接口删除训练作业。 请求消息体: URI格式:DELETE https://{ma_endpoint}/v2/{project_id}/training-jobs/{training_job_id} 请求消息头:X-Auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写。 返回状态码“202 No Content”响应,则表示删除作业成功。
  • 概述 使用PyTorch框架创建训练作业的流程如下: 调用认证鉴权接口获取用户Token,在后续的请求中需要将Token放到请求消息头中作为认证。 调用获取训练作业支持的公共规格接口获取训练作业支持的资源规格。 调用获取训练作业支持的AI预置框架接口查看训练作业支持的引擎类型和版本。 调用创建算法接口创建一个算法,记录算法id。 调用创建训练作业接口使用刚创建的算法返回的uuid创建一个训练作业,记录训练作业id。 调用查询训练作业详情接口使用刚创建的训练作业返回的id查询训练作业状态。 调用查询训练作业指定任务的日志(OBS链接)接口获取训练作业日志的对应的obs路径。 调用查询训练作业指定任务的运行指标接口查看训练作业的运行指标详情。 当训练作业使用完成或不再需要时,调用删除训练作业接口删除训练作业。
  • 前提条件 已获取IAM的EndPoint和ModelArts的EndPoint。 确认服务的部署区域,获取项目ID和名称、获取帐号名和帐号ID和获取用户名和用户ID。 已准备好PyTorch框架的训练代码,例如将启动文件“test-pytorch.py”存放在OBS的“obs://cnnorth4-job-test-v2/pytorch/fast_example/code/cpu”目录下。 已经准备好训练作业的数据文件,例如将训练数据集存放在OBS的“obs://cnnorth4-job-test-v2/pytorch/fast_example/data”目录下。 已经创建好训练作业的模型输出位置,例如“obs://cnnorth4-job-test-v2/pytorch/fast_example/outputs”。 已经创建好训练作业的日志输出位置,例如“obs://cnnorth4-job-test-v2/pytorch/fast_example/log”。
  • 请求消息 请求参数如表2所示。 表2 请求参数 参数 是否必选 参数类型 说明 job_name 是 String 可视化作业名称。限制为1-20位只含数字,字母,下划线,中划线的名称。 job_desc 否 String 对可视化作业的描述,默认为空,字符串的长度限制为[0, 256]。 train_url 是 String OBS路径地址。 job_type 否 String 可视化的类型,可选的有tensorboard和mindinsight,默认为tensorboard。 flavor 否 Object 创建可视化作业选择的规格,用户无需填写。参见表3。 schedule 否 Object 自动停止设置。参见表4。 表3 flavor属性列表 参数 是否必选 参数类型 说明 code 是 String 可视化作业选择的资源规格编码。通过flavor接口获得。 表4 schedule属性列表 参数 是否必选 参数类型 说明 type 是 String 设置为stop。 time_unit 是 String 自动停止功能的时间单位 HOURS。 duration 是 Int 自动停止,时间范围为[0,24]。
  • 请求示例 如下以创建名为“visualization-job”,描述为“this is a visualization job”,OBS路径为“/obs/name/”的可视化作业为例。 POST https://endpoint/v1/{project_id}/visualization-jobs { "job_name": "visualization-job", "job_desc": "this is a visualization job", "train_url": "/obs/name/", "job_type": "mindinsight", "schedule": [ { "type": "stop", "time_unit": "HOURS", "duration": 1 } ] }
  • 响应示例 成功响应示例 { "is_success": true, "job_id": "10", "job_name": "visualization-job", "status": "1", "create_time": "1524189990635" } 失败响应示例 { "is_success": false, "error_message": "error message", "error_code": "ModelArts.0103" }
  • 响应消息 响应参数如表5所示。 表5 响应参数 参数 参数类型 说明 is_success Boolean 请求是否成功。 error_message String 调用失败时的错误信息。 调用成功时无此字段。 error_code String 调用失败时的错误码,具体请参见错误码。 调用成功时无此字段。 job_id Long 可视化作业的ID。 job_name String 可视化作业的名称 status Integer 可视化作业的运行状态,详细作业状态列表请参见作业状态参考。 create_time Long 可视化作业的创建时间,时间戳格式。 service_url String 可视化作业的endpoint。
  • 响应示例 成功响应示例 { "instances": [ { "ai_project": { "id": "default-ai-project" }, "creation_timestamp": "1594887749962", "description": "", "flavor": "modelarts.bm.gpu.v100NV32", "flavor_details": { "name": "modelarts.bm.gpu.v100NV32", "params": { "CPU": 8, "GPU": 1, "gpu_type": "v100NV32", "memory": "64GiB" }, "status": "onSale", "type": "GPU" }, "id": "DE-7d558ef8-c73d-11ea-964c-0255ac100033", "latest_update_timestamp": "1594887749962", "name": "notebook-c6fd", "profile": { "de_type": "Notebook", "description": "multi engine, gpu, python 3.6 for notebook", "flavor_type": "GPU", "id": "Multi-Engine 1.0 (python3)-gpu", "name": "Multi-Engine 1.0 (python3)-gpu", "provision": { "annotations": { "category": "Multi-Engine 1.0 (python3)", "type": "system" }, "spec": { "engine": "CCE", "params": { "annotations": null, "image_name": "mul-kernel-gpu-cuda-cp36", "image_tag": "2.0.5-B003", "namespace": "atelier" } }, "type": "Docker" } }, "spec": { "annotations": { "target_domain": "https://modelarts-notebook-2.xxxxxx.com", "url": "https://modelarts-lvs-common-lb.xxxxxx.com:32000/modelarts/hubv100/notebook/user/DE-7d558ef8-c73d-11ea-964c-0255ac100033" }, "auto_stop": { "duration": 3600, "enable": true, "prompt": true, "remain_time": 3450, "stop_timestamp": 1594891408723 }, "extend_params": null, "failed_reasons": null, "extend_storage": null, "storage": { "location": { "path": "/home/ma-user/work", "volume_size": 5 }, "type": "evs" } }, "status": "RUNNING", "user": { "id": "15dda26361214ca2a5953917d2f48ffb", "name": "ops_dev_env" }, "workspace": { "id": "0" } }, { "ai_project": { "id": "default-ai-project" }, "creation_timestamp": "1594883877728", "description": "", "flavor": "modelarts.vm.cpu.2u", "flavor_details": { "name": "modelarts.vm.cpu.2u", "params": { "CPU": 2, "GPU": 0, "memory": "8GiB" }, "status": "onSale", "type": "CPU" }, "id": "DE-7936a360-c734-11ea-a72b-0255ac100033", "latest_update_timestamp": "1594883877728", "name": "notebook-b1b8", "profile": { "de_type": "Notebook", "description": "multi engine, cpu, python 3.6 for notebook", "flavor_type": "CPU", "id": "Multi-Engine 1.0 (python3)-cpu", "name": "Multi-Engine 1.0 (python3)-cpu", "provision": { "annotations": { "category": "Multi-Engine 1.0 (python3 推荐)", "type": "system" }, "spec": { "engine": "CCE", "params": { "annotations": null, "image_name": "mul-kernel-cpu-cp36", "image_tag": "2.0.5-B003", "namespace": "atelier" } }, "type": "Docker" } }, "spec": { "annotations": { "target_domain": "https://modelarts-notebook.xxxxxx.com", "url": "" }, "auto_stop": { "duration": 3600, "enable": true, "prompt": true }, "extend_params": null, "failed_reasons": null, "storage": { "location": { "path": "/home/ma-user/work", "volume_size": 5 }, "type": "evs" } }, "status": "STOPPED", "user": { "id": "15dda26361214ca2a5953917d2f48ffb", "name": "ops_dev_env" }, "workspace": { "id": "0" } }], "total_count": 2 }
  • URI GET /v1/{project_id}/training-jobs/{job_id}/versions/{version_id}/aom-log 参数说明如表1所示。 表1 路径参数 参数 是否必选 参数类型 说明 project_id 是 String 用户项目ID。获取方法请参见获取项目ID和名称。 job_id 是 Long 训练作业的ID。 version_id 是 Long 训练作业的版本ID。 表2 Query参数 参数 是否必选 参数类型 说明 base_line 否 String 日志的基准位置,根据接口返回获得,为空的时候代表获取最新的日志。 lines 否 Integer 获取日志的长度,默认为50行。lines的范围为[0, 500]。 log_file 是 String 需要查看的日志文件名称,获取方式请参见获取训练作业日志的文件名。 order 否 String 日志查询的方向。 desc:向下查询。 asc:向上查询。
  • 响应示例 成功响应示例 { "is_success": true, "start_line":1551252759254000002, "content": "Log string", "end_line": "1551252759254000003", "lines": "1" } 失败响应示例 { "is_success": false, "error_message": "Error string", "error_code": "ModelArts.0105" }
  • 请求示例 如下以查询“job_id”为10,“version_id”为10,文件名为“log1.log”的日志为例。 GET https://endpoint/v1/{project_id}/training-jobs/10/versions/10/aom-log?log_file=log1.log&base_line= 1551252759254000002&lines=50&order=desc
  • 响应消息 响应参数如表3所示。 表3 响应参数 参数 参数类型 说明 error_message String 调用失败时的错误信息。 调用成功时无此字段。 error_code String 调用失败时的错误码,具体请参见错误码。 调用成功时无此字段。 content String 请求获得日志的内容。 lines Integer 获得日志的行数。 start_line String 该段日志内容的开始位置。 end_line String 该段日志内容的结束位置。 is_success Boolean 请求是否成功。
  • 响应示例 状态码: 200 OK { "sample_count" : 2, "samples" : [ { "sample_id" : "26c6dd793d80d3274eb89349ec76d678", "sample_type" : 0, "labels" : [ ], "source" : "https://test-obs.obs.xxx.com:443/detect/data/dataset-car-and-person/IMG_kitti_0000_000016.png?AccessKeyId=P19W9X830R1Z39P5X5M5&Expires=1606300137&x-obs-security-token=gQpjbi1ub3J0aC03jKj8N6gtS4VsdTTW3QFoHMtpMoFLtCa6W_J4DxT0nYIfx...", "metadata" : { "@modelarts:import_origin" : 0, "@modelarts:size" : [ 1242, 375, 3 ] }, "sample_time" : 1598263639997, "sample_status" : "UN_ANNOTATION", "worker_id" : "8c15ad080d3eabad14037b4eb00d6a6f", "labelers" : [ { "email" : "xxx@xxx.com", "worker_id" : "afdda13895bc66322ffbf36ae833bcf0", "role" : 0 } ] }, { "sample_id" : "2971815bbb11a462161b48dddf19344f", "sample_type" : 0, "labels" : [ ], "source" : "https://test-obs.obs.xxx.com:443/detect/data/dataset-car-and-person/IMG_kitti_0000_000011.png?AccessKeyId=P19W9X830R1Z39P5X5M5&Expires=1606300137&x-obs-security-token=gQpjbi1ub3J0aC03jKj8N6gtS4VsdTTW3QFoHMtpMoFLtC...", "metadata" : { "@modelarts:import_origin" : 0, "@modelarts:size" : [ 1242, 375, 3 ] }, "sample_time" : 1598263639997, "sample_status" : "UN_ANNOTATION", "worker_id" : "8c15ad080d3eabad14037b4eb00d6a6f", "labelers" : [ { "email" : "xxx@xxx.com", "worker_id" : "305595e1901a526017d2e11f3ab0ffe1", "role" : 0 } ] } ] }
  • URI GET /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id}/data-annotations/samples 表1 路径参数 参数 是否必选 参数类型 描述 dataset_id 是 String 数据集ID。 project_id 是 String 用户项目ID。获取方法请参见获取项目ID和名称。 workforce_task_id 是 String 团队标注任务ID。 表2 Query参数 参数 是否必选 参数类型 描述 label_name 否 String 标签名。 label_type 否 Integer 标注类型。可选值如下: 0:图像分类 1:物体检测 3: 图像分割 100:文本分类 101:命名实体 102:文本三元组 200:声音分类 201:语音内容 202:语音分割 400:表格数据集 600:视频标注 900:自由格式 limit 否 Integer 指定每一页返回的最大条目数,取值范围[1,100],默认为10。 locale 否 String 语言。可选值如下: zh-cn:中文 en-us:英文(默认值) offset 否 Integer 分页列表的起始页,默认为0。 process_parameter 否 String 图像缩略设置,同OBS缩略图设置,详见OBS缩略图设置。如:image/resize,m_lfit,h_200表示等比缩放目标缩略图并设置高度为200像素。 sample_state 否 String 样本状态。可选样本状态如下: __ALL__:已标注 __NONE__:未标注 __UNCHECK__:待验收 __ACCEPTED__:验收通过 __REJECTED__:已驳回 __UNREVIEWED__:待审核 __REVIEWED__:已审核 __WORKFORCE_SAMPLED__:已采样 __WORKFORCE_SAMPLED_UNCHECK__:采样待验收 __WORKFORCE_SAMPLED_CHECKED__:采样已验收 __WORKFORCE_SAMPLED_ACCEPTED__:采样已通过 __WORKFORCE_SAMPLED_REJECTED__:采样已驳回 __AUTO_ANNOTATION__:待确认 search_conditions 否 String URL编码后的多维筛选条件(多个SearchCondition之间为and的关系)。
  • 响应参数 状态码: 200 表8 响应Body参数 参数 参数类型 描述 error_code String 操作失败的错误码。 error_msg String 操作失败的错误信息。 results Array of BatchResponse objects 删除标签响应体。 success Boolean 操作是否执行成功。可选值如下: true:执行成功 false:执行失败 表9 BatchResponse 参数 参数类型 描述 error_code String 操作失败的错误码。 error_msg String 操作失败的错误信息。 success Boolean 操作是否执行成功。可选值如下: true:执行成功 false:执行失败
共100000条