华为云用户手册

  • 响应消息 响应参数如表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"}
  • 响应消息 响应参数如表3所示。 表3 响应参数 参数 参数类型 说明 is_success Boolean 请求是否成功。 error_message String 调用失败时的错误信息。调用成功时无此字段。 error_code String 调用失败时的错误码,具体请参见错误码。调用成功时无此字段。 config_total_count Integer 查询到的训练作业参数的总数。 configs Array of ConfigResponse objects configs参数属性列表。 表4 configs属性列表说明 参数 参数类型 说明 config_name String 训练作业参数的名称。 config_desc String 训练作业参数的描述信息。 create_time Long 训练作业的创建时间。 engine_type integer 训练作业的引擎类型。 engine_name String 训练作业的引擎名称。 engine_id Long 训练作业的引擎ID。 engine_version String 训练作业使用的引擎版本。 user_image_url String 自定义镜像 训练作业的自定义镜像的SWR-URL。如:“100.125.5.235:20202/jobmng/custom-cpu-base:1.0” user_command String 自定义镜像训练作业的自定义镜像的容器的启动命令。形式为:“bash /home/work/run_train.sh python /home/work/user-job-dir/app/train.py {python_file_parameter}”。
  • 响应示例 成功响应示例 { "is_success": true, "config_total_count": 3, "configs": [ { "config_name": "testConfig", "config_desc": "This is config", "create_time": 1524189990635, "engine_type": 1, "engine_name": "TensorFlow", "engine_id": 1, "engine_version": "TF-1.4.0-python2.7", "user_image_url": "100.125.5.235:20202/jobmng/custom-cpu-base:1.0", "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" } ]} 失败响应示例 { "is_success": false, "error_message": "Error string", "error_code": "ModelArts.0105"}
  • 操作步骤 调用认证鉴权接口获取用户的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”响应,则表示删除作业成功。
  • 前提条件 已获取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”。
  • 概述 使用PyTorch框架创建训练作业的流程如下: 调用认证鉴权接口获取用户Token,在后续的请求中需要将Token放到请求消息头中作为认证。 调用获取训练作业支持的公共规格接口获取训练作业支持的资源规格。 调用获取训练作业支持的AI预置框架接口查看训练作业支持的引擎类型和版本。 调用创建算法接口创建一个算法,记录算法id。 调用创建训练作业接口使用刚创建的算法返回的uuid创建一个训练作业,记录训练作业id。 调用查询训练作业详情接口使用刚创建的训练作业返回的id查询训练作业状态。 调用查询训练作业指定任务的日志(OBS链接)接口获取训练作业日志的对应的obs路径。 调用查询训练作业指定任务的运行指标接口查看训练作业的运行指标详情。 当训练作业使用完成或不再需要时,调用删除训练作业接口删除训练作业。
  • 前提条件 已获取IAM的EndPoint和ModelArts的EndPoint。 确认服务的部署区域,获取项目名称和ID、获取账号名和ID和获取用户名和ID。 已准备好用于智能标注的图像分类的数据集,并获取数据集ID,例如“6mHUGe7ETlhayb4qDMN”,数据集的创建和ID获取请参见创建图像分类数据集并进行标注任务。 用于智能标注的数据集必须存在至少2种标签,且每种标签已标注的图片不少于5张。 用于智能标注的数据集必须存在未标注图片。 检查用于标注的图片数据,确保您的图片数据中,不存在RGBA四通道图片。如果存在四通道图片,智能标注任务将运行失败,因此,请从数据集中删除四通道图片后,再启动智能标注。 启动智能标注前要保证当前数据集不存在正在进行中的智能标注任务。
  • 操作步骤 调用认证鉴权接口获取用户的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格式:POST https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}/tasks 请求消息头: X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 其中,加粗的斜体字段需要根据实际值填写: ma_endpoint为ModelArts的终端节点。 project_id为用户的项目ID。 dataset_id为待启动智能标注任务的数据集ID。 X-auth-Token的值为获取到的Token值。 请求body: { "task_type" : "auto-label", "collect_key_sample" : true, "config" : { "algorithm_type" : "fast"}} 只有“task_type”填写“auto-label”才表示创建的是智能标注任务。 返回状态码为“200 OK”,响应Body如下所示: { "task_id": "7eAtpiNSaI1mCHJK3SJ"} “task_id”为创建的智能标注任务ID,记录该值用于后续步骤。 调用获取智能任务的信息接口根据智能标注的任务ID查询任务详情。 请求消息体: URI格式:GET https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}/tasks/{task_id} 请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写,task_id为上一步记录的任务ID。 返回状态码为“200 OK”,响应Body如下所示: { "resource_id": "6mHUGe7ETlhayb4qDMN", "create_time": "2021-06-18 19:14:55", "progress": 30, "status": 1, "message": "Submit auto labeling task succeed, waiting for auto labeling task to finish. ", "code": "ModelArts.4914", "elapsed_time": 55, "result": { "total_sample_count": 30, "annotated_sample_count": 28, "events": [ { "name": "start", "create_time": 1624014895314, "elapsed_time": 21, "ordinal": 1, "level": 1, "status": "success" }, { "name": "init", "create_time": 1624014916770, "elapsed_time": 0, "ordinal": 2, "level": 1, "status": "success" }, { "name": "labeling", "create_time": 1624014916770, "ordinal": 3, "level": 1, "events": [ { "name": "jobstat_init", "create_time": 1624014927183, "elapsed_time": 0, "ordinal": 1, "level": 2, "status": "success" }, { "name": "jobstat_waiting", "create_time": 1624014927184, "elapsed_time": 0, "ordinal": 2, "level": 2, "status": "success" }, { "name": "jobstat_running", "create_time": 1624014927184, "elapsed_time": 20, "ordinal": 3, "level": 2, "status": "running" }, { "name": "jobstat_completed", "ordinal": 4, "level": 2, "status": "waiting" } ], "status": "running" }, { "name": "result_processing", "ordinal": 4, "level": 1, "status": "waiting" }, { "name": "end", "ordinal": 5, "level": 1, "status": "waiting" } ], "train_job_name": "AUTO_TRAINING_cls_6mHUGe7ETlhayb4qDMN_7eAtpiNSaI", "train_job_id": "932777", "version_id": "1777740", "continuity": false }, "export_type": 0, "config": { "ambiguity": false, "name": "ouIsrAuG226MgMknu9j", "worker_server_num": 0, "collect_sample": false, "confidence_scope": "0.0-0.5", "algorithm_type": "fast", "image_brightness": false, "image_colorfulness": false }} 根据响应可以了解智能标注任务详情,其中“progress”为“30”表示当前任务进度为30%,“status”为“1”表示任务状态为在运行中。 待智能标注任务完成后,调用查询智能标注的样本列表接口可以查看标注结果。 请求消息体: URI格式:GET https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}/auto-annotations/samples 请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写。 返回状态码为“200 OK”,响应Body如下所示: { "sample_count": 2, "samples": [ { "sample_id": "44827d0dc5fd6ff5be6dd0e14103121e", "sample_type": 0, "labels": [ { "name": "rose", "type": 0, "id": "1", "property": { "@modelarts:hard_coefficient": "0.0", "@modelarts:hard": "false" }, "score": 1 } ], "source": "https://test.obs.{ma_endpoint}.com:443/DATASETS/input/145862135_ab710de93c_n.jpg......", "preview": "https://test.obs.{ma_endpoint}.com:443/DATASETS/input/145862135_ab710de93c_n.jpg......", "metadata": { "@modelarts:new_source": "s3://test/DATASETS/input/145862135_ab710de93c_n.jpg", "@modelarts:hard_coefficient": 1, "@modelarts:origin_source": "s3://test/DATASETS/input/145862135_ab710de93c_n.jpg", "@modelarts:hard": true, "@modelarts:source_image_info": "https://test.obs.{ma_endpoint}.com:443/DATASETS/input/145862135_ab710de93c_n.jpg......", "@modelarts:data_checked": true, "@modelarts:origin_source_id": "44827d0dc5fd6ff5be6dd0e14103121e", "@modelarts:import_origin": 0, "@modelarts:size": [ 320, 238, 3 ], "@modelarts:check_result": [ { "language": "en-us", "result_property": 0, "result_descriptions": [] }, { "language": "zh-cn", "result_property": 0, "result_descriptions": [] } ], "@modelarts:hard_reasons": [ 3 ] }, "sample_time": 1623922030282, "sample_status": "UN_ANNOTATION", "annotated_by": "" }, { "sample_id": "1b87c42574ddc1faf05580d2e3a7bd4f", "sample_type": 0, "labels": [ { "name": "dasiy", "type": 0, "id": "1", "property": { "@modelarts:hard_coefficient": "0.0", "@modelarts:hard": "false" }, "score": 1 } ], "source": "https://test.obs.{ma_endpoint}.com:443/DATASETS/input/153210866_03cc9f2f36.jpg?......", "preview": "https://test.obs.{ma_endpoint}.com:443/DATASETS/input/153210866_03cc9f2f36.jpg?......", "metadata": { "@modelarts:new_source": "s3://test/DATASETS/input/153210866_03cc9f2f36.jpg", "@modelarts:hard_coefficient": 0, "@modelarts:origin_source": "s3://test/DATASETS/input/153210866_03cc9f2f36.jpg", "@modelarts:hard": false, "@modelarts:source_image_info": "https://test.obs.{ma_endpoint}.com:443/DATASETS/input/153210866_03cc9f2f36.jpg?......", "@modelarts:data_checked": true, "@modelarts:origin_source_id": "1b87c42574ddc1faf05580d2e3a7bd4f", "@modelarts:import_origin": 0, "@modelarts:size": [ 500, 375, 3 ], "@modelarts:check_result": [ { "language": "en-us", "result_property": 0, "result_descriptions": [] }, { "language": "zh-cn", "result_property": 0, "result_descriptions": [] } ], "@modelarts:hard_reasons": [] }, "sample_time": 1623922028739, "sample_status": "UN_ANNOTATION", "annotated_by": "" } ]} 根据响应可以了解智能标注的样本数量和样本列表,由“sample_count”参数可知总共标注了2个样本,从“@modelarts:hard”参数可知有一个难例样本。 调用批量更新样本标签接口根据上一步获取的智能标注样本列表确认智能标注结果。 请求消息体: URI格式:PUT https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}/data-annotations/samples 请求消息头: X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 其中,加粗的字段需要根据实际值填写。 复制上一步的响应body,只保留“sample_id”和“labels”字段直接作为请求body,如下所示: { "samples": [ { "sample_id": "44827d0dc5fd6ff5be6dd0e14103121e", "labels": [ { "name": "rose", "type": 0, "id": "1", "property": { "@modelarts:hard_coefficient": "0.0", "@modelarts:hard": "false" }, "score": 1 } ], }, { "sample_id": "1b87c42574ddc1faf05580d2e3a7bd4f", "labels": [ { "name": "dasiy", "type": 0, "id": "1", "property": { "@modelarts:hard_coefficient": "0.0", "@modelarts:hard": "false" }, "score": 1 } ], } ]} 返回状态码为“200 OK”表示确认完成,响应Body如下所示: { "success" : true}
  • 请求示例 如下以创建名为“testConfig”,描述为“This is config”的训练作业参数为例。 POST https://endpoint/v1/{project_id}/training-job-configs{ "config_name": "testConfig", "config_desc": "This is 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" } ], "spec_id": 1, "dataset_id": "38277e62-9e59-48f4-8d89-c8cf41622c24", "dataset_version_id": "2ff0d6ba-c480-45ae-be41-09a8369bfc90", "engine_id": 1, "train_url": "/usr/train/", "log_url": "/usr/log/", "model_id": 1}
  • 模型管理权限 表1 模型管理细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 导入模型 POST /v1/{project_id}/models modelarts:model:create obs:bucket:ListAllMybuckets obs:object:PutObjectAcl obs:bucket:ListBucket obs:bucket:HeadBucket obs:object:GetObject obs:object:PutObject √ √ 查询模型列表 GET /v1/{project_id}/models modelarts:model:list - √ √ 删除模型 DELETE /v1/{project_id}/models/{model_id} modelarts:model:delete - √ √ 查询模型详情 GET /v1/{project_id}/models/{model_id} modelarts:model:get - √ √ 父主题: 权限策略和授权项
  • 作业状态参考 作业状态如表1所示。 表1 作业状态 状态值 作业状态说明 0 JOBSTAT_UNKNOWN,作业状态未知。 1 JOBSTAT_INIT,作业初始化状态。 2 JOBSTAT_IMAGE_CREATING,作业镜像正在创建。 3 JOBSTAT_IMAGE_FAILED,作业镜像创建失败。 4 JOBSTAT_SUBMIT_TRYING,作业正在提交。 5 JOBSTAT_SUBMIT_FAILED,作业提交失败。 6 JOBSTAT_DELETE_FAILED,作业删除失败。 7 JOBSTAT_WAITING,作业正在排队中。 8 JOBSTAT_RUNNING,作业正在运行中。 9 JOBSTAT_KILLING,作业正在取消。 10 JOBSTAT_COMPLETED,作业已经完成。 11 JOBSTAT_FAILED,作业运行失败。 12 JOBSTAT_KILLED,作业取消成功。 13 JOBSTAT_CANCELED,作业取消。 14 JOBSTAT_LOST,作业丢失。 15 JOBSTAT_SCALING,作业正在扩容。 16 JOBSTAT_SUBMIT_MODEL_FAILED,提交模型失败。 17 JOBSTAT_DEPLOY_SERVICE_FAILED,部署服务失败。 18 JOBSTAT_CHECK_INIT,审核作业初始化。 19 JOBSTAT_CHECK_RUNNING,审核作业正在运行中。 20 JOBSTAT_CHECK_RUNNING_COMPLETED,审核作业已经完成。 21 JOBSTAT_CHECK_FAILED,审核作业失败。 父主题: 训练管理(旧版)
  • 响应示例 成功响应示例 { "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}
  • 数据管理权限 表1 数据集管理的细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 查询数据集列表 GET /v2/{project_id}/datasets modelarts:dataset:list - √ √ 创建数据集 POST /v2/{project_id}/datasets modelarts:dataset:create obs:bucket:HeadBucket obs:bucket:ListBucket obs:object:PutObject obs:object:PutObject obs:bucket:ListAllMyBuckets √ √ 查询数据集详情 GET /v2/{project_id}/datasets/{dataset_id} modelarts:dataset:get - √ √ 更新数据集 PUT /v2/{project_id}/datasets/{dataset_id} modelarts:dataset:update - √ √ 删除数据集 DELETE /v2/{project_id}/datasets/{dataset_id} modelarts:dataset:delete obs:bucket:ListAllMyBuckets obs:bucket:ListBucket obs:object:DeleteObject √ √ 查询数据集的统计信息 GET /v2/{project_id}/datasets/{dataset_id}/data-annotations/stats modelarts:dataset:get - √ √ 查询数据集监控数据 GET /v2/{project_id}/datasets/{dataset_id}/metrics modelarts:dataset:get - √ √ 查询团队标注任务统计信息 GET /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id}/data-annotations/stats modelarts:dataset:getWorkforceTask - √ √ 查询团队标注任务成员的进度信息 GET /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id}/metrics modelarts:dataset:getWorkforceTask - √ √ 表2 数据集版本管理的细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 查询数据集的版本列表 GET /v2/{project_id}/datasets/{dataset_id}/versions modelarts:dataset:get - √ √ 创建数据集标注版本 POST /v2/{project_id}/datasets/{dataset_id}/versions modelarts:dataset:publishVersion obs:object:PutObject √ √ 查询数据集版本详情 GET /v2/{project_id}/datasets/{dataset_id}/versions/{version_id} modelarts:dataset:get - √ √ 删除数据集标注版本 DELETE /v2/{project_id}/datasets/{dataset_id}/versions/{version_id} modelarts:dataset:deleteVersion obs:bucket:ListAllMyBuckets obs:bucket:ListBucket obs:object:DeleteObject √ √ 表3 样本管理的细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 查询样本列表 GET /v2/{project_id}/datasets/{dataset_id}/data-annotations/samples modelarts:sample:listSamples obs:object:GetObject √ √ 批量添加样本 POST /v2/{project_id}/datasets/{dataset_id}/data-annotations/samples modelarts:sample:addSamples obs:object:PutObject √ √ 批量删除样本 POST /v2/{project_id}/datasets/{dataset_id}/data-annotations/samples/delete modelarts:sample:deleteSamples obs:object:DeleteObject √ √ 查询单个样本信息 GET /v2/{project_id}/datasets/{dataset_id}/data-annotations/samples/{sample_id} modelarts:sample:getSample obs:object:GetObject √ √ 获取样本搜索条件 GET /v2/{project_id}/datasets/{dataset_id}/data-annotations/search-condition modelarts:sample:listSamples - √ √ 分页查询团队标注任务下的样本列表 GET /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id}/data-annotations/samples modelarts:sample:listSamples obs:object:GetObject √ √ 查询团队标注的样本信息 GET /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id}/data-annotations/samples/{sample_id} modelarts:sample:getSample obs:object:GetObject √ √ 表4 标签管理的细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 查询数据集标签列表 GET /v2/{project_id}/datasets/{dataset_id}/data-annotations/labels modelarts:dataset:getDataset - √ √ 创建数据集标签 POST /v2/{project_id}/datasets/{dataset_id}/data-annotations/labels modelarts:dataset:updateDataset - √ √ 批量修改标签 PUT /v2/{project_id}/datasets/{dataset_id}/data-annotations/labels modelarts:dataset:updateDataset - √ √ 批量删除标签 POST /v2/{project_id}/datasets/{dataset_id}/data-annotations/labels/delete modelarts:dataset:updateDataset - √ √ 按标签名称更新单个标签 PUT /v2/{project_id}/datasets/{dataset_id}/data-annotations/labels/{label_name} modelarts:dataset:updateDataset - √ √ 按标签名称删除标签及仅包含此标签的文件 DELETE /v2/{project_id}/datasets/{dataset_id}/data-annotations/labels/{label_name} modelarts:dataset:updateDataset obs:object:DeleteObject √ √ 表5 人工标注的细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 批量更新样本标签 PUT /v2/{project_id}/datasets/{dataset_id}/data-annotations/samples modelarts:dataset:updateDataset obs:object:GetObject √ √ 表6 标注任务管理的细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 查询数据集的团队标注任务列表 GET /v2/{project_id}/datasets/{dataset_id}/workforce-tasks modelarts:dataset:listWorkforceTasks - √ √ 创建团队标注任务 POST /v2/{project_id}/datasets/{dataset_id}/workforce-tasks modelarts:dataset:createWorkforceTask - √ √ 查询团队标注任务详情 GET /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id} modelarts:dataset:getWorkforceTask - √ √ 启动团队标注任务 POST /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id}/acceptance modelarts:dataset:updateWorkforceTask - √ √ 更新团队标注任务 PUT /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id} modelarts:dataset:updateWorkforceTask - √ √ 删除团队标注任务 DELETE /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id} modelarts:dataset:deleteWorkforceTask - √ √ 创建团队标注验收任务 POST /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id}/acceptance modelarts:dataset:updateWorkforceTask - √ √ 查询团队标注验收任务报告 GET /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id}/acceptance/report modelarts:dataset:getWorkforceTask - √ √ 更新团队标注验收任务状态 PUT /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id}/acceptance/status modelarts:dataset:updateWorkforceTask - √ √ 表7 团队标注流程管理的细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 提交验收任务的样本评审意见 POST /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id}/acceptance/batch-comment modelarts:dataset:updateWorkforceTask - √ √ 批量更新团队标注样本的标签 PUT /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id}/data-annotations/samples modelarts:dataset:updateWorkforceTask - √ √ 表8 标注团队管理的细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 查询标注团队列表 GET /v2/{project_id}/workforces modelarts:processTask:listWorkforce - √ √ 创建标注团队 POST /v2/{project_id}/workforces modelarts:processTask:createWorkforce - √ √ 查询标注团队详情 GET /v2/{project_id}/workforces/{workforce_id} modelarts:processTask:getWorkforce - √ √ 更新标注团队 PUT /v2/{project_id}/workforces/{workforce_id} modelarts:processTask:updateWorkforce - √ √ 删除标注团队 DELETE /v2/{project_id}/workforces/{workforce_id}/workers/{worker_id} modelarts:processTask:updateWorkforce - √ √ 表9 标注团队成员管理的细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 向标注成员发送邮件 POST /v2/{project_id}/datasets/{dataset_id}/workforce-tasks/{workforce_task_id}/notify modelarts:dataset:updateWorkforceTask - √ √ 查询所有团队的标注成员列表 GET /v2/{project_id}/workforces/workers modelarts:processTask:getWorkforce - √ √ 查询标注团队的成员列表 GET /v2/{project_id}/workforces/{workforce_id}/workers modelarts:processTask:getWorkforce - √ √ 创建标注团队的成员 POST /v2/{project_id}/workforces/{workforce_id}/workers modelarts:processTask:updateWorkforce - √ √ 批量删除标注团队成员 POST /v2/{project_id}/workforces/{workforce_id}/workers/batch-delete modelarts:processTask:updateWorkforce - √ √ 查询标注团队成员详情 GET /v2/{project_id}/workforces/{workforce_id}/workers/{worker_id} modelarts:processTask:getWorkforce - √ √ 更新标注团队成员 PUT /v2/{project_id}/workforces/{workforce_id}/workers/{worker_id} modelarts:processTask:updateWorkforce - √ √ 删除标注团队成员 DELETE /v2/{project_id}/workforces/{workforce_id}/workers/{worker_id} modelarts:processTask:updateWorkforce - √ √ 表10 数据导入任务的细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 查询数据集导入任务列表 GET /v2/{project_id}/datasets/{dataset_id}/import-tasks modelarts:dataset:getDataset - √ √ 创建导入任务 POST /v2/{project_id}/datasets/{dataset_id}/import-tasks modelarts:dataset:createImportTask - √ √ 查询数据集导入任务的详情 GET /v2/{project_id}/datasets/{dataset_id}/import-tasks/{task_id} modelarts:dataset:getDataset - √ √ 表11 数据导出任务的细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 查询数据集导出任务列表 GET /v2/{project_id}/datasets/{dataset_id}/export-tasks modelarts:dataset:getDataset - √ √ 创建数据集导出任务 POST /v2/{project_id}/datasets/{dataset_id}/export-tasks modelarts:dataset:createExportTask - √ √ 查询数据集导出任务的状态 GET /v2/{project_id}/datasets/{resource_id}/export-tasks/{task_id} modelarts:dataset:getDataset - √ √ 表12 数据同步任务的细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 同步数据集 POST /v2/{project_id}/datasets/{dataset_id}/sync-data modelarts:dataset:updateDataset obs:bucket:ListBucket obs:bucket:ListAllMyBuckets √ √ 查询数据集同步任务的状态 GET /v2/{project_id}/datasets/{dataset_id}/sync-data/status modelarts:dataset:getDataset - √ √ 表13 智能任务的细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 查询智能标注的样本列表 GET /v2/{project_id}/datasets/{dataset_id}/auto-annotations/samples modelarts:sample:listSamples obs:object:GetObject √ √ 查询单个智能标注样本的信息 GET /v2/{project_id}/datasets/{dataset_id}/auto-annotations/samples/{sample_id} modelarts:sample:getSample obs:object:GetObject √ √ 分页查询智能任务列表 GET /v2/{project_id}/datasets/{dataset_id}/tasks modelarts:dataset:getDataset - √ √ 启动智能任务 POST /v2/{project_id}/datasets/{dataset_id}/tasks modelarts:dataset:updateDataset obs:bucket:PutBucketAcl obs:bucket:GetBucketAcl obs:bucket:GetBucketPolicy obs:bucket:DeleteBucketPolicy obs:bucket:ListBucket obs:bucket:ListAllMyBuckets obs:object:DeleteObject obs:bucket:ListBucketVersions √ √ 获取智能任务的信息 GET /v2/{project_id}/datasets/{dataset_id}/tasks/{task_id} modelarts:dataset:getDataset - √ √ 停止智能任务 POST /v2/{project_id}/datasets/{dataset_id}/tasks/{task_id}/stop modelarts:dataset:updateDataset - √ √ 表14 处理任务的细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 查询处理任务列表 GET /v2/{project_id}/processor-tasks modelarts:processTask:listProcessTasks - √ √ 创建处理任务 POST /v2/{project_id}/processor-tasks modelarts:processTask:createProcessTask obs:bucket:HeadBucket obs:bucket:ListBucket obs:object:PutObject obs:object:PutObject obs:bucket:ListAllMyBuckets obs:bucket:PutBucketAcl obs:bucket:GetBucketAcl obs:bucket:GetBucketPolicy obs:bucket:DeleteBucketPolicy √ √ 查询数据处理的算法类别 GET /v2/{project_id}/processor-tasks/items modelarts:processTask:getProcessTask - √ √ 查询处理任务详情 GET /v2/{project_id}/processor-tasks/{task_id}/versions/{version_id} modelarts:processTask:getProcessTask - √ √ 更新处理任务 PUT /v2/{project_id}/processor-tasks/{task_id} modelarts:processTask:updateProcessTask - √ √ 删除处理任务 DELETE /v2/{project_id}/processor-tasks/{task_id} modelarts:processTask:deleteProcessTask obs:bucket:PutBucketAcl obs:bucket:GetBucketAcl obs:bucket:GetBucketPolicy obs:bucket:DeleteBucketPolicy obs:bucket:ListBucket obs:bucket:ListAllMyBuckets obs:object:DeleteObject √ √ 查询数据处理任务的版本列表 GET /v2/{project_id}/processor-tasks/{task_id}/versions modelarts:processTask:getProcessTask obs:bucket:HeadBucket obs:bucket:ListBucket obs:object:PutObject obs:object:PutObject obs:bucket:ListAllMyBuckets obs:bucket:PutBucketAcl obs:bucket:GetBucketAcl obs:bucket:GetBucketPolicy obs:bucket:DeleteBucketPolicy √ √ 创建数据处理任务版本 POST /v2/{project_id}/processor-tasks/{task_id}/versions modelarts:processTask:createProcessTask - √ √ 查询数据处理任务的版本详情 GET /v2/{project_id}/processor-tasks/{task_id}/versions modelarts:processTask:getProcessTask - √ √ 删除数据处理任务的版本 DELETE /v2/{project_id}/processor-tasks/{task_id}/versions/{version_id} modelarts:processTask:deleteProcessTask obs:bucket:PutBucketAcl obs:bucket:GetBucketAcl obs:bucket:GetBucketPolicy obs:bucket:DeleteBucketPolicy obs:bucket:ListBucket obs:bucket:ListAllMyBuckets obs:object:DeleteObject √ √ 查询数据处理任务版本的结果展示 GET /v2/{project_id}/processor-tasks/{task_id}/versions/{version_id}/results modelarts:processTask:getProcessTask obs:object:GetObject √ √ 停止数据处理任务的版本 POST /v2/{project_id}/processor-tasks/{task_id}/versions/{version_id}/stop modelarts:processTask:updateProcessTask - √ √ 父主题: 权限策略和授权项
  • 训练作业权限 表1 训练作业(新版)细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 创建训练作业 POST /v2/{project_id}/training-jobs modelarts:trainJob:create swr:repository:listTags swr:repository:getRepository swr:repository:listRepositories smn:topic:publish smn:topic:list obs:object:GetObjectAcl obs:object:PutObjectAcl obs:object:PutObject obs:object:GetObject obs:object:DeleteObject obs:object:ModifyObjectMetaData √ √ 更新训练作业 PUT /v2/{project_id}/training-jobs/{training_job_id} modelarts:trainJob:update - √ √ 删除训练作业 DELETE /v2/{project_id}/training-jobs/{training_job_id} modelarts:trainJob:delete - √ √ 查询训练作业详情 GET /v2/{project_id}/training-jobs/{training_job_id} modelarts:trainJob:get - √ √ 查询训练作业列表 POST /v2/{project_id}/training-job-searches modelarts:trainJob:list - √ √ 训练作业日志预览 GET /v2/{project_id}/training-jobs/{training_job_id}/tasks/{task_id}/logs/preview - - √ √ 训练作业日志下载 GET /v2/{project_id}/training-jobs/{training_job_id}/tasks/{task_id}/logs/url modelarts:trainJob:logExport - √ √ 创建算法 POST /v2/{project_id}/algorithms modelarts:aiAlgorithm:create - √ √ 更新算法 PUT /v2/{project_id}/algorithms/{algorithm_id} modelarts:aiAlgorithm:update - √ √ 删除算法 DELETE /v2/{project_id}/algorithms/{algorithm_id} modelarts:aiAlgorithm:delete - √ √ 查询算法列表 GET /v2/{project_id}/algorithms modelarts:aiAlgorithm:list - √ √ 查询算法详情 GET /v2/{project_id}/algorithms/{algorithm_id} modelarts:aiAlgorithm:get - √ √ 父主题: 权限策略和授权项
  • 概述 管理ModelArts服务的委托授权流程如下: 调用认证鉴权接口获取用户Token,在后续的请求中需要将Token放到请求消息头中作为认证。 调用创建ModelArts委托接口完成包含OBS、SWR等依赖服务的ModelArts委托。 调用配置授权接口配置ModelArts授权。该接口支持管理员给IAM子用户设置委托,支持设置当前用户的访问密钥。 若没有授权,ModelArts服务的数据管理、训练管理、开发环境、在线服务等功能将不能正常使用。 调用查看授权列表接口查看用户的授权信息。 在管理用户授权时,可以调用删除授权接口删除指定用户的授权或者删除全量用户的授权。
  • 操作步骤 调用认证鉴权接口获取用户的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... 调用创建ModelArts委托接口完成包含OBS、SWR、IEF等依赖服务的ModelArts委托。 请求消息体: URI:POST https://{endpoint}/v2/{project_id}/agency 请求消息头: X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 请求Body: { "agency_name_suffix" : "iam-user01"} 其中,加粗的斜体字段需要根据实际值填写: endpoint为ModelArts的终端节点。 project_id为用户的项目ID。 “X-auth-Token”是上一步获取到的Token值。 “agency_name_suffix”是自定义的委托名称后缀。 返回状态码“200 OK”表示委托“ma_agency_iam-user01”创建成功,响应Body如下所示: { "agency_name": "ma_agency_iam-user01"} 调用配置授权接口配置ModelArts授权。该接口支持管理员给IAM子用户设置委托,支持设置当前用户的访问密钥。 请求消息体: URI:POST https://{endpoint}/v2/{project_id}/authorizations 请求消息头: X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 请求Body: { "user_id": "****af917080f5d21f55c018ba19****", "type": "agency", "content": "ma_agency_iam-user01"} 其中,加粗的斜体字段需要根据实际值填写,“user_id”为IAM用户ID,“content”为上一步创建的ModelArts委托。 返回状态码“200 OK”表示配置授权完成,响应Body如下所示: { "result": true} 调用查看授权列表接口查看用户的授权信息。 请求消息体: URI:GET https://{endpoint}/v2/{project_id}/authorizations 请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写。 返回状态码“200 OK”,响应Body如下所示: { "auth": [ { "create_time": 1622804433221, "user_id": "all-users", "user_name": "all-users", "type": "agency", "content": "modelarts_agency" }, { "create_time": 1625457065365, "user_id": "****af917080f5d21f55c018ba19****", "user_name": null, "type": "agency", "content": "ma_agency_iam-user01" } ], "total_count": 2} 根据响应可以了解用户的授权信息。 在管理用户授权时,可以调用删除授权接口删除指定用户的授权或者删除全量用户的授权。 请求消息体: URI:DELETE https://{endpoint}/v2/{project_id}/authorizations?user_id=****d80fb058844ae8b82aa66d9fe**** 请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写,“****d80fb058844ae8b82aa66d9fe****”是指定用户的IAM用户ID。 返回状态码“200 OK”表示删除成功,响应Body如下所示: { "result": true} 如果请求参数user_id="all-users",表示删除全量用户授权,返回状态码“200 OK”表示删除成功,响应Body如下所示: { "result": true, "success_message": "Delete all-users auth info successfully!"}
  • 概述 创建数据集并进行标注的流程如下: 调用认证鉴权接口获取用户Token,在后续的请求中需要将Token放到请求消息头中作为认证。 调用创建数据集接口创建一个图像分类类型的数据集。 调用查询数据集详情接口根据数据集ID查询数据集的详情。 调用查询样本列表接口根据数据集ID获取数据集的样本详情。 调用批量更新样本标签接口根据数据集ID和样本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格式:POST https://{ma_endpoint}/v2/{project_id}/datasets 请求消息头: X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 请求body: { "workspace_id" : "0", "dataset_name" : "dataset-f9e8", "dataset_type" : 0, "data_sources" : [ { "data_type" : 0, "data_path" : "/test-obs/classify/input/cat-dog/" } ], "description" : "", "work_path" : "/test-obs/classify/output/", "work_path_type" : 0, "labels" : [ { "name" : "Cat", "type" : 0, "property" : { "@modelarts:color" : "#3399ff" } }, { "name" : "Dog", "type" : 0, "property" : { "@modelarts:color" : "#3399ff" } } ]} 其中,加粗的斜体字段需要根据实际值填写: ma_endpoint为ModelArts的终端节点。 project_id为用户的项目ID。 X-auth-Token的值为获取到的Token值。 “dataset_name”为创建的数据集名称。 “dataset_type”为“0”表示数据集类型为图像分类。 “data_path”为数据源所在的存储路径。 “work_path”为数据集输出位置。 “labels”为数据集的标签列表,填写标签信息。 返回状态码为“201 Created”,响应Body如下: { "dataset_id": "2MCIopOFu0bOmSxFkZ4"} “dataset_id”为新建的数据集ID,记录该值用于后续步骤。 调用查询数据集详情接口根据数据集ID查询数据集的详情。 请求消息体: URI格式:GET https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id} 请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写,dataset_id为上一步记录的数据集ID。 返回状态码为“200 OK”,响应Body如下所示: { "dataset_id" : "DINKm5SUIDhhGb1eWm3", "dataset_name" : "dataset-f9e8", "dataset_type" : 0, "data_format" : "Default", "next_version_num" : 4, "status" : 1, "data_sources" : [ { "data_type" : 0, "data_path" : "/test-obs/classify/input/cat-dog/" } ], "create_time" : 1605690595404, "update_time" : 1605690595404, "description" : "", "current_version_id" : "54IXbeJhfttGpL46lbv", "current_version_name" : "V003", "total_sample_count" : 10, "annotated_sample_count" : 10, "unconfirmed_sample_count" : 0, "work_path" : "/test-obs/classify/output/", "inner_work_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/", "inner_annotation_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/annotation/", "inner_data_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/data/", "inner_log_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/logs/", "inner_temp_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/temp/", "inner_task_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/task/", "work_path_type" : 0, "workspace_id" : "0", "enterprise_project_id" : "0", "workforce_task_count" : 0, "feature_supports" : [ "0" ], "managed" : false, "import_data" : false, "ai_project" : "default-ai-project", "label_task_count" : 1, "dataset_format" : 0, "dataset_version_count" : 3, "dataset_version" : "v1", "content_labeling" : true, "labels" : [ { "name" : "Cat", "type" : 0, "property" : { "@modelarts:color" : "#3399ff" } }, { "name" : "Dog", "type" : 0, "property" : { "@modelarts:color" : "#3399ff" } } ]} 根据响应可以了解数据集详情,其中“status”为“1”表示数据集创建成功且状态正常。 调用查询样本列表接口根据数据集ID获取数据集的样本详情。 请求消息体: URI格式:GET https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}/data-annotations/samples 请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写。 返回状态码为“200 OK”,响应Body如下所示: { "sample_count" : 2, "samples" : [ { "sample_id": "012f99f3cf405860130b6ed2350c2228", "sample_type": 0, "labels": [], "source": "https://test-obs.obs.{ma_endpoint}.com:443/classify/input/cat-dog/36502.jpg......", "preview": "https://test-obs.obs.{ma_endpoint}.com:443/classify/input/cat-dog/36502.jpg......", "metadata": { "@modelarts:source_image_info": "https://test-obs.obs.{ma_endpoint}.com:443/classify/input/cat-dog/36502.jpg......", "@modelarts:import_origin": 0 }, "sample_time": 1623914750831, "sample_status": "UN_ANNOTATION" }, { "sample_id": "0192f3acfb000666033a0f85c21577c7", "sample_type": 0, "labels": [], "source": "https://test-obs.obs.xxx.com:443/classify/input/cat-dog/36139.jpg......", "preview": "https://test-obs.obs.xxx.com:443/classify/input/cat-dog/36139.jpg......", "metadata": { "@modelarts:source_image_info": "https://test-obs.obs.xxx.com:443/classify/input/cat-dog/36139.jpg......", "@modelarts:import_origin": 0 }, "sample_time": 1623914751076, "sample_status": "UN_ANNOTATION" } ]} 根据响应可以了解数据集的样本数量,以及每个样本的详细信息,其中“sample_count”为“2”表示该数据集共有2个样本,记录“sample_id”(样本ID)用于后续人工标注。 调用批量更新样本标签接口根据数据集ID和样本ID给样本添加标签进行人工标注。 请求消息体: URI格式:PUT https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}/data-annotations/samples 请求消息头: X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 请求body: { "samples" : [ { "sample_id" : "012f99f3cf405860130b6ed2350c2228", "labels" : [ { "name" : "Cat" } ] }, { "sample_id" : "0192f3acfb000666033a0f85c21577c7", "labels" : [ { "name" : "Dog" } ] } ]} 其中,加粗的字段需要根据实际值填写: “sample_id”为要标注的样本ID,为上一步记录的值。 “labels”为样本需要标注的标签。 返回状态码为“200 OK”表示标注成功,响应Body如下所示: { "success" : true} 调用查询数据集的统计信息接口查看数据集的标注统计信息。 消息请求体: URI格式:GET https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}/data-annotations/stats 请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写。 返回状态码为“200 OK”,响应Body如下所示: { "label_stats": [ { "name": "Cat", "type": 0, "property": { "@modelarts:color": "#3399ff" }, "count": 5, "sample_count": 2 }, { "name": "Dog", "type": 0, "property": { "@modelarts:color": "", "@modelarts:shortcut": "" }, "count": 4, "sample_count": 3 } ], "sample_stats": { "un_annotation": 10, "all": 15, "total": 15, "deleted": 0, "manual_annotation": 5, "auto_annotation": 0, "lefted": 15 }, "key_sample_stats": { "total": 15, "non_key_sample": 15, "key_sample": 0 }, "deletion_stats": {}, "metadata_stats": {}, "data_spliting_enable": true} 根据响应可以了解数据集的标签统计信息、样本状态统计信息等。 当数据集使用完成或不再使用时,调用删除数据集接口删除数据集。 请求消息体: URI格式:DELETE https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id} 请求消息头: X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 其中,加粗的斜体字段需要根据实际值填写。 返回状态码“204 No Content”表示数据集删除成功。
  • 操作步骤 调用认证鉴权接口获取用户的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:POST https://{endpoint}/v1/{project_id}/workspaces 请求消息头: X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 请求Body: {"name": "test_workspace","description": "It is my workspace","enterprise_project_id": "0","auth_type": "PUBLIC","grants": [{"user_id": "aa7efa8801024da08a7fa92dc0******","user_name": ""}]} 其中,加粗的斜体字段需要根据实际值填写: endpoint为ModelArts的终端节点。 project_id为用户的项目ID。 “X-auth-Token”是上一步获取到的Token值。 “user_id”为用户ID。 返回状态码“200 OK”,响应Body如下所示: { "id": "f3deca1406da4910a50f3919940b9bda", "name": "test_workspace", "description": "It is my workspace", "owner": "test166", "create_time": 1625453558000, "update_time": 1625453558000, "enterprise_project_id": "0", "enterprise_project_name": "default", "auth_type": "public", "status": "NORMAL", "status_info": ""} “id”为新建的工作空间ID,记录该值用于后续步骤。 调用查询工作空间详情接口根据工作空间ID查询工作空间的详细信息。 请求消息体: URI:GET https://{endpoint}/v1/{project_id}/workspaces/{workspaces_id} 请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写,“workspace_id”为2获取的工作空间ID。 返回状态码“200 OK”,响应Body如下所示: { "id": "f3deca1406da4910a50f3919940b9bda", "name": "test_workspace", "description": "It is my workspace", "owner": "test166", "create_time": 1625453558000, "update_time": 1625453558000, "enterprise_project_id": "0", "enterprise_project_name": "default", "auth_type": "public", "status": "NORMAL", "status_info": ""} 根据响应可以了解工作空间的详细信息,其中“status”为“NORMAL”表示工作空间的状态正常。 调用修改工作空间接口根据工作空间ID修改工作空间的名称、描述、授权类型等信息。 请求消息体: URI:PUT https://{endpoint}/v1/{project_id}/workspaces/{workspaces_id} 请求消息头: X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 请求Body: {"name": "new_name","description": "update description","auth_type":"INTERNAL","grants":[{"user_id": "aa7efa8801024da08a7fa92dc0******"}]} 其中,加粗的斜体字段需要根据实际值填写,“name”和“description”填写要修改的工作空间名称和描述。 返回状态码“200 OK”表示修改完成,响应Body如下所示: { "workspace_id": "f3deca1406da4910a50f3919940b9bda"} 当不需要该工作空间时,可以调用删除工作空间接口删除工作空间。 请求消息体: URI:DELETE https://{endpoint}/v1/{project_id}/workspaces/{workspaces_id} 请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写。 返回状态码“200 OK”表示删除成功,响应Body如下所示: { "workspace_id": "f3deca1406da4910a50f3919940b9bda"}
  • DevServer权限 表1 DevServer细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 创建DevServer实例 POST /v1/{project_id}/dev-servers modelarts:devserver:create ecs:serverKeypairs:createecs:*:get iam:users:getUser iam:users:listUsers iam:projects:listProjects vpc.*.list eps.*.list evs.*.list ims.*.list ims.*.get √ × 查询DevServer实例列表 GET /v1/{project_id}/dev-servers modelarts:devserver:listByUser - √ × 查询租户所有DevServer实例列表 GET /v1/{project_id}/dev-servers/all modelarts:devserver:list - √ × 查询DevServer实例详情 GET /v1/{project_id}/dev-servers/{id} modelarts:devserver:get - √ × 删除DevServer实例 DELETE /v1/{project_id}/dev-servers/{id} modelarts:devserver:delete - √ × 启动DevServer实例 PUT /v1/{project_id}/dev-servers/{id}/start modelarts:devserver:start - √ × 停止DevServer实例 PUT /v1/{project_id}/dev-servers/{id}/stop modelarts:devserver:stop - √ × 同步DevServer实例状态 PUT /v1/{project_id}/dev-servers/sync modelarts:devserver:sync - √ × 父主题: 权限策略和授权项
  • 服务管理权限 表1 服务管理细化权限说明 权限 对应API接口 授权项 依赖的授权项 IAM项目 企业项目 部署模型服务 POST /v1/{project_id}/services modelarts:service:create - √ √ 查询模型服务列表 GET /v1/{project_id}/services modelarts:service:list - √ √ 查询模型服务详情 GET /v1/{project_id}/services/{service_id} modelarts:service:get - √ √ 更新模型服务 PUT /v1/{project_id}/services/{service_id} modelarts:service:update - √ √ 删除模型服务 DELETE /v1/{project_id}/services/{service_id} modelarts:service:delete - √ √ 启动停止服务 PUT /v1/{project_id}/services/{service_id} (request body携带status信息) modelarts:service:action - √ √ 启动停止边缘节点服务实例 PUT /v1/{project_id}/services/{service_id}/nodes/{node_id}/status (request body携带status信息) modelarts:nodeservice:action - √ √ 查询服务监控信息 GET /v1/{project_id}/services/{service_id}/monitor modelarts:service:getMonitor - √ √ 查询服务更新日志 GET /v1/{project_id}/services/{service_id}/logs modelarts:service:getLogs - √ √ 查询服务事件日志 GET /v1/{project_id}/services/{service_id}/events modelarts:service:getEvents - √ √ 父主题: 权限策略和授权项
  • 状态码 状态码如表1那所示。 表1 状态码 状态码 编码 状态码说明 100 Continue 继续请求。 这个临时响应用来通知客户端,它的部分请求已经被服务器接收,且仍未被拒绝。 101 Switching Protocols 切换协议。只能切换到更高级的协议。 例如,切换到HTTP的新版本协议。 200 OK 接口调用成功。 201 Created 创建类的请求完全成功。 202 Accepted 已经接受请求,但未处理完成。 203 Non-Authoritative Information 非授权信息,请求成功。 204 NoContent 请求完全成功,同时HTTP响应不包含响应体。 在响应OPTIONS方法的HTTP请求时返回此状态码。 205 Reset Content 重置内容,服务器处理成功。 206 Partial Content 服务器成功处理了部分GET请求。 300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。 301 Moved Permanently 永久移动,请求的资源已被永久的移动到新的URI,返回信息会包括新的URI。 302 Found 资源被临时移动。 303 See Other 查看其它地址。 使用GET和POST请求查看。 304 Not Modified 所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。 305 Use Proxy 所请求的资源必须通过代理访问。 306 Unused 已经被废弃的HTTP状态码。 400 BadRequest 非法请求。 建议直接修改该请求,不要重试该请求。 401 Unauthorized 在客户端提供认证信息后,返回该状态码,表明服务端指出客户端所提供的认证信息不正确或非法。 402 Payment Required 保留请求。 403 Forbidden 请求被拒绝访问。 返回该状态码,表明请求能够到达服务端,且服务端能够理解用户请求,但是拒绝做更多的事情,因为该请求被设置为拒绝访问,建议直接修改该请求,不要重试该请求。 404 NotFound 所请求的资源不存在。 建议直接修改该请求,不要重试该请求。 405 MethodNotAllowed 请求中带有该资源不支持的方法。 建议直接修改该请求,不要重试该请求。 406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求。 407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权。 408 Request Time-out 服务器等候请求时发生超时。 客户端可以随时再次提交该请求而无需进行任何更改。 409 Conflict 服务器在完成请求时发生冲突。 返回该状态码,表明客户端尝试创建的资源已经存在,或者由于冲突请求的更新操作不能被完成。 410 Gone 客户端请求的资源已经不存在。 返回该状态码,表明请求的资源已被永久删除。 411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息。 412 Precondition Failed 未满足前提条件,服务器未满足请求者在请求中设置的其中一个前提条件。 413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息。 414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理。 415 Unsupported Media Type 服务器无法处理请求附带的媒体格式。 416 Requested range not satisfiable 客户端请求的范围无效。 417 Expectation Failed 服务器无法满足Expect的请求头信息。 422 UnprocessableEntity 请求格式正确,但是由于含有语义错误,无法响应。 429 TooManyRequests 表明请求超出了客户端访问频率的限制或者服务端接收到多于它能处理的请求。建议客户端读取相应的Retry-After首部,然后等待该首部指出的时间后再重试。 500 InternalServerError 表明服务端能被请求访问到,但是不能理解用户的请求。 501 Not Implemented 服务器不支持请求的功能,无法完成请求。 502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。 503 ServiceUnavailable 被请求的服务无效。 建议直接修改该请求,不要重试该请求。 504 ServerTimeout 请求在给定的时间内无法完成。客户端仅在为请求指定超时(Timeout)参数时会得到该响应。 505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理。 父主题: 公共参数
  • URI GET /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。
  • 响应示例 成功响应示例 { "is_success": true, "job_id": 10, "job_name": "TestModelArtsJob", "job_desc": "TestModelArtsJob desc", "version_id": 10, "version_name": "jobVersion", "pre_version_id": 5, "engine_type": 1, "engine_name": "TensorFlow", "engine_id": 1, "engine_version": "TF-1.4.0-python2.7", "status": 10, "app_url": "/usr/app/", "boot_file_url": "/usr/app/boot.py", "create_time": 1524189990635, "parameter": [ { "label": "learning_rate", "value": 0.01 } ], "duration": 532003, "spec_id": 1, "core": 2, "cpu": 8, "gpu_num": 2, "gpu_type": "Pnt1", "worker_server_num": 1, "data_url": "/usr/data/", "train_url": "/usr/train/", "log_url": "/usr/log/", "dataset_version_id": "2ff0d6ba-c480-45ae-be41-09a8369bfc90", "dataset_id": "38277e62-9e59-48f4-8d89-c8cf41622c24", "data_source": [ { "type": "obs", "data_url": "/qianjiajun-test/minst/data/" } ], "user_image_url": "100.125.5.235:20202/jobmng/custom-cpu-base:1.0", "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", "model_id": 1, "model_metric_list": "{\"metric\":[{\"metric_values\":{\"recall\":0.005833,\"precision\":0.000178,\"accuracy\":0.000937},\"reserved_data\":{},\"metric_meta\":{\"class_name\":0,\"class_id\":0}}],\"total_metric\":{\"total_metric_meta\":{},\"total_reserved_data\":{},\"total_metric_values\":{\"recall\":0.005833,\"id\":0,\"precision\":0.000178,\"accuracy\":0.000937}}}", "system_metric_list": { "cpuUsage": [ "0", "3.10", "5.76", "0", "0", "0", "0" ], "memUsage": [ "0", "0.77", "2.09", "0", "0", "0", "0" ], "gpuUtil": [ "0", "0.25", "0.88", "0", "0", "0", "0" ]}, "dataset_name": "dataset-test", "dataset_version_name": "dataset-version-test", "spec_code": "xxxxxxxx", "start_time": 1563172362000, "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 } } ], "pool_id": "pool9928813f", "pool_name": "pnt1", "nas_mount_path": "/home/work/nas", "nas_share_addr": "192.168.8.150:/", "nas_type": "nfs"} 失败响应示例 { "is_success": false, "error_message": "Error string", "error_code": "ModelArts.0105"}
  • 请求示例 如下以更新名为“config”的作业参数为例。 PUT https://endpoint/v1/{project_id}/training-job-configs/config{ "config_desc": "This is 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 } ], "spec_id": 1, "dataset_id": "38277e62-9e59-48f4-8d89-c8cf41622c24", "dataset_version_id": "2ff0d6ba-c480-45ae-be41-09a8369bfc90", "engine_id": 1, "train_url": "/usr/train/", "log_url": "/usr/log/", "model_id": 1}
  • 响应消息 响应参数如表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。
  • 响应示例 成功响应示例 { "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"}
  • 请求示例 如下以创建名为“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 } ]}
  • 调用API获取项目ID 项目ID通过调用查询指定条件下的项目信息API获取。 获取项目ID的接口为GET https://{iam-endpoint}/v3/projects,其中{iam-endpoint}为IAM的终端节点,可以从地区和终端节点处获取。 响应示例如下,例如ModelArts部署的区域为"cn-north-4",响应消息体中查找“name”为"cn-north-4",其中projects下的“id”即为项目ID。 {"projects": [{"domain_id": "65382450e8f64ac0870cd180d14e684b","is_domain": false,"parent_id": "65382450e8f64ac0870cd180d14e684b","name": "cn-north-4","description": "","links": {"next": null,"previous": null,"self": "https://www.example.com/v3/projects/a4a5d4098fb4474fa22cd05f897d6b99"},"id": "a4a5d4098fb4474fa22cd05f897d6b99","enabled": true}],"links": {"next": null,"previous": null,"self": "https://www.example.com/v3/projects"}}
共99354条