云服务器内容精选

  • 步骤3:基础权限开通 基础权限开通需要登录管理员账号,为子用户账号开通Server功能所需的基础权限(ModelArts FullAccess/BMS FullAccess/E CS FullAccess/VPC FullAccess/VPC Administrator/VPCEndpoint Administrator)。 登录 统一身份认证 服务管理控制台。 单击目录左侧“用户组”,然后在页面右上角单击“创建用户组”。 填写“用户组名称”并单击“确定”。 在操作列单击“用户组管理”,将需要配置权限的用户加入用户组中。 单击用户组名称,进入用户组详情页。 在权限管理页签下,单击“授权”。 图2 “配置权限” 在搜索栏输入“ModelArts FullAccess”,并勾选“ModelArts FullAccess”。 图3 ModelArts FullAccess 以相同的方式,依次添加:BMS FullAccess、ECS FullAccess、VPC FullAccess、VPC Administrator、VPCEndpoint Administrator。(Server Administrator、DNS Administrator为依赖策略,会自动被勾选)。 单击“下一步”,授权范围方案选择“所有资源”。 单击“确认”,完成基础权限开通。
  • 注意事项 本文旨在指导如何在Snt9b裸金属服务器上,进行磁盘合并挂载、安装docker等环境配置。在配置前请注意如下事项: 首次装机时需要配置存储、固件、驱动、网络访问等基础内容,这部分配置尽量稳定减少变化。 裸机上的开发形式建议开发者启动独立的Docker容器作为个人开发环境。Snt9b的裸机包含8卡算力资源,一般来说多人可以共用这个裸机完成开发与调测工作。多人使用为了避免冲突,建议各自在自己的docker容器中进行独立开发,并提前规划好每个人使用的具体卡号,避免相互影响。 ModelArts提供了标准化基础容器镜像,在容器镜像中已经预置了基础MindSpore或PyTorch框架和开发调测工具链,推荐用户直接使用该镜像,用户也可以使用自己的业务镜像或昇腾AscendHub提供的镜像。如果镜像中预置的软件版本不是您期望的版本,可以自行安装替换。 开发形式推荐通过容器中暴露的SSH端口以远程开发的模式(VSCode SSH Remote、 Xshell)连接到容器中进行开发,可以在容器中挂载宿主机的个人存储目录,用于存放代码和数据。 当前指导中很多操作步骤在最新发放的Snt9b裸机环境中已经预置,无需用户再手动配置,用户在操作中如发现某个步骤已有预置配置可直接跳过该步骤。
  • 响应参数 状态码: 200 表5 响应Header参数 参数 参数类型 描述 X-Request-Id String 链路追踪ID。 表6 响应Body参数 参数 参数类型 描述 update_time String 本次更新时间,仅触发服务配置升级时会返回,比如修改config参数,可根据此时间从服务更新记录中过滤出此次的更新结果;修改描述或启停服务不会返回此参数。 resource_ids String 更新的资源ID。 状态码: 401 表7 响应Header参数 参数 参数类型 描述 X-Request-Id String 链路追踪ID。 表8 响应Body参数 参数 参数类型 描述 error_code String 服务内部错误码。 error_msg String 错误信息。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户token。 表3 请求Body参数 参数 是否必选 参数类型 描述 changed_property 是 String 属性名称,目前只支持instance_count(更新模型服务实例数量)。 configs 否 Array of UpdateServiceConfig objects 服务配置。 表4 UpdateServiceConfig 参数 是否必选 参数类型 描述 changed_value 是 String 属性值,只支持整数,changed_property属性值为"instance_count"时,该值必须大于或小于当前实例数。 model_id 是 String 模型ID。
  • 请求示例 更新模型服务单个属性。 PUT https://{endpoint}/v1/{project_id}/services/{service_id}/property { "changed_property" : "instance_count", "configs" : [ { "model_id" : "98240f41-6c69-437c-b894-9c488b1d9c43", "changed_value" : 2 } ] }
  • 前提条件 已获取 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”。
  • 操作步骤 调用认证鉴权接口获取用户的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路径。 调用查询训练作业指定任务的运行指标接口查看训练作业的运行指标详情。 当训练作业使用完成或不再需要时,调用删除训练作业接口删除训练作业。
  • 概述 创建开发环境实例的流程如下: 调用认证鉴权接口获取用户Token,在后续的请求中需要将Token放到请求消息头中作为认证。 调用查询支持的镜像列表接口查看开发环境的镜像类型和版本。 调用创建Notebook实例接口创建一个Notebook实例。 调用查询Notebook实例详情接口根据Notebook实例的ID查询实例的创建详情。 调用Notebook时长续约接口重置Notebook实例的使用时长。 调用停止Notebook实例接口停止正在运行的实例。 调用启动Notebook实例接口重新启动实例。 当Notebook实例不再需要时,调用删除Notebook实例接口删除实例。
  • 概述 管理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。 请求消息体: 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" }
  • 操作步骤 调用认证鉴权接口获取用户的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 }
  • 前提条件 已获取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 请求消息头: 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”表示数据集删除成功。