云服务器内容精选

  • 步骤1:查询用户的所有主机集群 接口信息: URI:GET /v2/host-groups API Explorer 在线调试请参见:查询主机集群列表 。 请求示例: GET https://{endpoint}/v2/host-groups?region_name=cn-north-7&project_id=6039d4480efc4dddb178abff98719913&offset=1&limit=10&sort_key=create_time&sort_dir=DESC 响应示例: { "total" : 1, "host_groups" : [ { "name" : "testwyk", "description" : "11122211", "os" : "linux", "nick_name" : "AB边账号", "id" : 200001291, "group_id" : "ab7647b0863c4e969c8949d38d591339", "region_name" : "cn-north-7", "project_id" : "6039d4480efc4dddb178abff98719913", "permission" : { "can_view" : true, "can_edit" : true, "can_delete" : true, "can_add_host" : true, "can_manage" : true }, "created_by" : { "user_id" : "6baa7454109d47c192f22078fe6cda20", "user_name" : "devcloud_devcloud_l00490255_01" }, "updated_by" : { "user_id" : "6baa7454109d47c192f22078fe6cda20", "user_name" : "devcloud_devcloud_l00490255_01" }, "auto_connection_test_switch" : 0, "slave_cluster_id" : "", "created_time" : "2021-04-01 17:05:53", "updated_time" : "2021-04-21 14:29:14", "host_count" : 1, "project_name" : null } ] }
  • 步骤2:查询主机列表 接口信息: URI:GET /v2/host-groups/{group_id}/hosts API Explorer在线调试请参见:查询主机列表。 请求示例: GET https://{endpoint}/v2/host-groups/ab7647b0863c4e969c8949d38d591339/hosts?offset=0&limit=10&sort_key=AS_PROXY&sort_dir=asc&with_auth=false 响应示例: { "hosts" : [ { "hostname" : "100.101.28.203", "ip" : "100.101.28.203", "port" : 22, "os" : "linux", "authorization" : { "username" : "root", "password" : null, "private_key" : null, "trusted_type" : 0 }, "permission" : { "can_view" : true, "can_edit" : true, "can_delete" : true, "can_add_host" : true, "can_connection_test" : true }, "nickName" : "AB边账号", "id" : 200001149, "host_id" : "2cc913cc9a494f09b7320801ebacad02", "group_id" : "ab7647b0863c4e969c8949d38d591339", "as_proxy" : false, "proxy_host_id" : null, "owner_id" : "6baa7454109d47c192f22078fe6cda20", "owner_name" : "devcloud_devcloud_l00490255_01", "updator_id" : "6baa7454109d47c192f22078fe6cda20", "updator_name" : "devcloud_devcloud_l00490255_01", "connection_status" : "success", "install_icagent" : false, "create_time" : "2021-04-15 11:01:51", "update_time" : "2021-04-21 15:04:24", "connection_result" : "连接成功", "lastest_connection_time" : "2021-04-15 11:02:00", "nick_name" : "AB边账号", "proxy_host" : null, "group_name" : null, "project_id" : "6039d4480efc4dddb178abff98719913", "project_name" : null } ], "total" : 1, "group_name" : "test" }
  • 操作步骤 创建对端网关。 发送“POST https://{endpoint}/v5/{project_id}/customer-gateways”,project_id为项目ID。 在Request Header中增加“X-Auth-Token”。 在Request Body中传入参数如下。 { "customer_gateway": { "name": "cgw-3ebf", "id_type": "ip", "id_value": "10.***.***.21" } } 查看请求响应结果。 请求成功时,响应参数如下,id就是对端网关的ID。 1 2 3 4 5 6 7 8 9 10 11 { "customer_gateway": { "id": "03c0aa3d-demo-a8df-va86-9d82473765d4", "name": "cgw-3ebf", "id_type": "ip", "id_value": "10.***.***.21", "created_at": "2021-12-21T16:49:28.108+08:00", "updated_at": "2021-12-21T16:49:28.108+08:00" }, "request_id": "e55783ba-5cc8-40c1-ad81-12cce6f773d2" } 查询对端网关详情。 发送“GET https://{endpoint}/v5/{project_id}/customer-gateways/{customer_gateway_id}”,project_id为项目ID。 在Request Header中增加“X-Auth-Token”。 查看请求响应结果。 请求成功时,响应参数如下,id就是对端网关的ID。 1 2 3 4 5 6 7 8 9 10 11 { "customer_gateway": { "id": "03c0aa3d-demo-a8df-va86-9d82473765d4", "name": "cgw-3ebf", "id_type": "ip", "id_value": "10.***.***.21", "created_at": "2021-12-21T16:49:28.108+08:00", "updated_at": "2021-12-21T16:49:28.108+08:00" }, "request_id": "8cf476c4-c3d4-4516-bfbc-01e2473e549b" }
  • 步骤1:查询用户的所有仓库 接口信息: URI:GET v2/projects/repositories API Explorer在线调试请参见: 查询用户的所有仓库。 请求示例: GET https://codehub-ext.cn-north-7.myhuaweicloud.com/v2/projects/repositories 响应示例: { "result": { "total": 40, "repositories": [ { "star": false, "status": 5, "userRole": null, "repository_uuid": "25c88b23d4dc400fa7b3e2a152e4d53c", "repository_id": 522140, "repository_name": "1111111111111", "ssh_url": "git@codehub.devcloud.test.area.test.com:testzxq00001/1111111111111.git", "https_url": "https://codehub.devcloud.test.area.test.com/testzxq00001/1111111111111.git", "group_name": "testzxq00001", "web_url": "https://devcloud.test.area.test.com/codehub/522140/home", "visibility_level": 0, "created_at": "2020-07-22 10:45:56", "updated_at": "2020-07-22 10:45:56", "repository_size": "0.16M", "lfs_size": "0.00M", "creator_name": "devcloud_codehub_l00314597_01", "domain_name": "devcloud_codehub_l00314597_01", "is_owner": 1, "iam_user_uuid": "a618e34bd5704be3ae3395dfede06041", "project_uuid": "a689e057c2304abfa35d4ff65630a90a", "project_is_deleted": "false" } ] }, "status": "success"}
  • 步骤2:查询仓库详情 接口信息: URI:GET v2/repositories/{project_uuid} API Explorer在线调试请参见: 查询某个仓库的详细信息。 请求示例: GET https://codehub-ext.cn-north-7.myhuaweicloud.com/v2/repositories/73de3f67b30a46a4a7305f3be980c3b1 响应示例: { "result": { "star": null, "status": null, "userRole": null, "repository_uuid": "25c88b23d4dc400fa7b3e2a152e4d53c", "repository_id": 522140, "repository_name": "1111111111111", "ssh_url": "git@codehub.devcloud.test.area.test.com:testzxq00001/1111111111111.git", "https_url": "https://codehub.devcloud.test.area.test.com/testzxq00001/1111111111111.git", "group_name": "testzxq00001", "web_url": "https://devcloud.test.area.test.com/codehub/522140/home", "visibility_level": 0, "created_at": "2020-07-22 10:45:56", "updated_at": null, "repository_size": null, "lfs_size": null, "creator_name": null, "domain_name": null, "is_owner": null, "iam_user_uuid": null, "project_uuid": "a689e057c2304abfa35d4ff65630a90a", "project_is_deleted": "false" }, "status": "success" }
  • 操作步骤 查询弹性云服务器详情 接口相关信息 URI格式: GET /v1/{project_id}/cloudservers/{server_id} 详情请参见“查询云服务器详情”。 请求示例 GET https://{endpoint}/v1/743b4c0428d945316666666666666666/cloudservers/893c7791-f1df-4c3d-8383-3caae9656c62 {endpoint}信息请从地区和终端节点获取。 响应示例 { "server": { "fault": null, "id": "b8b1b475-d6c9-4733-a3db-c3a526407286", "name": "ecs-test", "addresses": { "24bbb54c-659f-4141-8db9-a957e12b6ee8": [{ "version": "4", "addr": "192.168.0.16", "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:37:de:ee", "OS-EXT-IPS:type": "fixed", "OS-EXT-IPS:port_id": "390b39b0-9a77-4ec2-ae1e-3af358f78999" }, { "version": "4", "addr": "121.xx.xx.64", "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:37:de:ee", "OS-EXT-IPS:type": "floating", "OS-EXT-IPS:port_id": "390b39b0-9a77-4ec2-ae1e-3af358f78999" }] }, "flavor": { "disk": "0", "vcpus": "2", "ram": "4096", "id": "c6s.large.2", "name": "c6s.large.2" }, "accessIPv4": "", "accessIPv6": "", "status": "SHUTOFF", "progress": null, "hostId": "604599c4eeeaa05d8865749e4c97979e14d74c6639a08460051b3a97", "updated": "2021-02-18T12:38:39Z", "created": "2021-02-18T12:37:42Z", "metadata": { "metering.image_id": "6674d782-54ba-4f04-896d-95edd50f2eb9", "metering.imagetype": "gold", "metering.resourcespeccode": "c6s.large.2.linux", "image_name": "CentOS 8.2 64bit", "os_bit": "64", "cascaded.instance_extrainfo": "stopped_release_resource:True,pcibridge:1", "metering.resourcetype": "1", "vpc_id": "24bbb54c-659f-4141-8db9-a957e12b6ee8", "os_type": "Linux", "charging_mode": "0", "__support_agent_list": "ces" }, "tags": [], "description": "", "locked": false, "config_drive": "", "tenant_id": "0b3ade290700f3612f29c005b9d16666", "user_id": "0b3ade2a03800fec1f20c005d6116666", "key_name": null, "os-extended-volumes:volumes_attached": [{ "device": "/dev/vda", "bootIndex": "0", "id": "0dc13ef4-dcf6-49d2-8d34-395d94767917", "delete_on_termination": "true" }], "OS-EXT-STS:task_state": null, "OS-EXT-STS:power_state": 4, "OS-EXT-STS:vm_state": "stopped", "OS-EXT-SRV-ATTR:host": "604599c4eeeaa05d8865749e4c97979e14d74c6639a08460051b3a97", "OS-EXT-SRV-ATTR:instance_name": "instance-003ef12a", "OS-EXT-SRV-ATTR:hypervisor_hostname": "5edb1b44af14ebaaa784cfba010f78f113b1fd0865fef854c264a925", "OS-DCF:diskConfig": "MANUAL", "OS-EXT-AZ:availability_zone": "cn-east-3c", "os:scheduler_hints": { }, "OS-EXT-SRV-ATTR:root_device_name": "/dev/vda", "OS-EXT-SRV-ATTR:ramdisk_id": "", "enterprise_project_id": "0", "OS-EXT-SRV-ATTR:user_data": null, "OS-SRV-USG:launched_at": "2021-02-18T12:37:57.000000", "OS-EXT-SRV-ATTR:kernel_id": "", "OS-EXT-SRV-ATTR:launch_index": 0, "host_status": "UP", "OS-EXT-SRV-ATTR:reservation_id": "r-q8xjhqzk", "OS-EXT-SRV-ATTR:hostname": "ecs-test", "OS-SRV-USG:terminated_at": null, "sys_tags": [{ "key": "_sys_enterprise_project_id", "value": "0" }], "security_groups": [{ "id": "d0d30ee2-5b34-44d4-b5a3-68b9d64e7286", "name": "Sys-WebServer" }], "image": { "id": "6674d782-54ba-4f04-896d-95edd50f2eb9" }, "hypervisor": null, "auto_terminate_time": "" } } 根据公网IP查询公网IP详情 接口相关信息 URI格式: GET /v1/{project_id}/publicips 详情请参见“查询弹性公网IP列表”。 请求示例 GET https://{endpoint}/v1/743b4c0428d945316666666666666666/publicips?public_ip_address=121.xx.xx.64 {endpoint}信息请从地区和终端节点获取。 public_ip_address参数传入的公网IP地址从1的返回信息中获取,从返回body体中的"server"下的"address"信息中找到"OS-EXT-IPS:type"为"floating"的"addr"字段,即为公网IP地址。 响应示例 { "publicips": [{ "id": "92597d39-b81d-42b0-8d02-fe8afe7ef076", "type": "5_bgp", "port_id": "390b39b0-9a77-4ec2-ae1e-3af358f78999", "public_ip_address": "121.xx.xx.64", "private_ip_address": "192.168.0.16", "status": "ACTIVE", "tenant_id": "0b3ade290700f3612f29c005b9d16666", "create_time": "2021-02-18 12:38:08", "bandwidth_id": "3a087bbd-0bcf-4401-9e2b-6a96fa2e3471", "bandwidth_name": "ecs-test-bandwidth-891e", "bandwidth_share_type": "PER", "bandwidth_size": 5, "profile": {}, "enterprise_project_id": "0", "ip_version": 4 }] }
  • 涉及接口 用户用例操作包括,创建测试用例、更新测试用例、批量删除测试用例、获取测试用例详情、批量执行用例接口、批量更新测试用例结果,涉及接口如下: 创建自定义测试服务类型用例:新建用例进行测试。 更新自定义测试服务类型用例:修改用例信息。 批量删除自定义测试服务类型用例:可同时删除多个用例。 获取测试用例详情:单个查询用例详情。 批量执行测试用例:同时执行多个测试用例。 批量更新测试用例结果:用例结果产生后,同时更新多个测试用例结果。
  • 操作步骤 调用认证鉴权接口获取用户的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格式:GET https://{ma_endpoint}/v2/{project_id}/ training-job-flavors? flavor_type=CPU 请求消息头:X-Auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写: ma_endpoint为ModelArts的终端节点。 project_id为用户的项目ID。 “X-Auth-Token”的值是上一步获取到的Token值。 返回状态码“200”,响应Body如下所示: { "total_count": 2, "flavors": [ { "flavor_id": "modelarts.vm.cpu.2u", "flavor_name": "Computing CPU(2U) instance", "flavor_type": "CPU", "billing": { "code": "modelarts.vm.cpu.2u", "unit_num": 1 }, "flavor_info": { "max_num": 1, "cpu": { "arch": "x86", "core_num": 2 }, "memory": { "size": 8, "unit": "GB" }, "disk": { "size": 50, "unit": "GB" } } }, { "flavor_id": "modelarts.vm.cpu.8u", "flavor_name": "Computing CPU(8U) instance", "flavor_type": "CPU", "billing": { "code": "modelarts.vm.cpu.8u", "unit_num": 1 }, "flavor_info": { "max_num": 16, "cpu": { "arch": "x86", "core_num": 8 }, "memory": { "size": 32, "unit": "GB" }, "disk": { "size": 50, "unit": "GB" } } } ] } 根据“flavor_id”字段选择并记录创建训练作业时需要的规格类型,本章以“modelarts.vm.cpu.8u”为例,并记录“max_num”字段的值为“16”。 调用获取训练作业支持的AI预置框架接口查看训练作业的引擎类型和版本。 请求消息体: URI格式:GET https://{ma_endpoint}/v2/{project_id}/job/ training-job-engines 请求消息头: X-Auth-Token→MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 其中,加粗的斜体字段需要根据实际值填写。 返回状态码“200”,响应Body如下所示(引擎较多,只展示部分): { "total": 28, "items": [ ...... { "engine_id": "mindspore_1.6.0-cann_5.0.3.6-py_3.7-euler_2.8.3-aarch64", "engine_name": "Ascend-Powered-Engine", "engine_version": "mindspore_1.6.0-cann_5.0.3.6-py_3.7-euler_2.8.3-aarch64", "v1_compatible": false, "run_user": "1000", "image_info": { "cpu_image_url": "", "gpu_image_url": "atelier/mindspore_1_6_0:train", "image_version": "mindspore_1.6.0-cann_5.0.3.6-py_3.7-euler_2.8.3-aarch64-snt9-roma-20211231193205-33131ee" } }, ...... { "engine_id": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "engine_name": "PyTorch", "engine_version": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "tags": [ { "key": "auto_search", "value": "True" } ], "v1_compatible": false, "run_user": "1102", "image_info": { "cpu_image_url": "aip/pytorch_1_8:train", "gpu_image_url": "aip/pytorch_1_8:train", "image_version": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64-20210912152543-1e0838d" } }, ...... { "engine_id": "tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64", "engine_name": "TensorFlow", "engine_version": "tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64", "tags": [ { "key": "auto_search", "value": "True" } ], "v1_compatible": false, "run_user": "1102", "image_info": { "cpu_image_url": "aip/tensorflow_2_1:train", "gpu_image_url": "aip/tensorflow_2_1:train", "image_version": "tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64-20210912152543-1e0838d" } }, ...... ] } 根据“engine_name”和“engine_version”字段选择创建训练作业时需要的引擎规格,并记录对应的“engine_name”和“engine_version”,本章以Pytorch引擎为例创建作业,记录“engine_name”为“PyTorch”,“engine_version”为“pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64”。 调用创建算法接口创建一个算法,记录算法id。 请求消息体: URI格式:POST https://{ma_endpoint}/v2/{project_id}/ algorithms 请求消息头: X-Auth-Token→MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 其中,加粗的斜体字段需要根据实际值填写。 请求body: { "metadata": { "name": "test-pytorch-cpu", "description": "test pytorch job in cpu in mode gloo" }, "job_config": { "boot_file": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/test-pytorch.py", "code_dir": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/", "engine": { "engine_name": "PyTorch", "engine_version": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64" }, "inputs": [{ "name": "data_url", "description": "数据来源1" }], "outputs": [{ "name": "train_url", "description": "输出数据1" }], "parameters": [{ "name": "dist", "description": "", "value": "False", "constraint": { "editable": true, "required": false, "sensitive": false, "type": "Boolean", "valid_range": [], "valid_type": "None" } }, { "name": "world_size", "description": "", "value": "1", "constraint": { "editable": true, "required": false, "sensitive": false, "type": "Integer", "valid_range": [], "valid_type": "None" } } ], "parameters_customization": true }, "resource_requirements": [] } 其中,加粗的斜体字段需要根据实际值填写: “metadata”字段下的“name”和“description”分别为算法的名称和描述。 “job_config”字段下的“code_dir”和“boot_file”分别为算法的代码目录和代码启动文件。代码目录为代码启动文件的一级目录。 “job_config”字段下的“inputs”和“outputs”分别为算法的输入输出管道。可以按照实例指定“data_url”和“train_url”,在代码中解析超参分别指定训练所需要的数据文件本地路径和训练生成的模型输出本地路径。 “job_config”字段下的“parameters_customization”表示是否支持自定义超参,此处填true。 “job_config”字段下的“parameters”表示算法本身的超参。“name”填写超参名称(64个以内字符,仅支持大小写字母、数字、下划线和中划线),“value”填写超参的默认值,“constraint”填写超参的约束,例如此处“type”填写“String”(支持String、Integer、Float和Boolean),“editable”填写“true”,“required”填写“false”等。 “job_config”字段下的“engine”表示算法所依赖的引擎,使用3记录的“engine_name”和“engine_version”。 返回状态码“200 OK”,表示创建算法成功,响应Body如下所示: { "metadata": { "id": "01c399ae-8593-4ef5-9e4d-085950aacde1", "name": "test-pytorch-cpu", "description": "test pytorch job in cpu in mode gloo", "create_time": 1641890623262, "workspace_id": "0", "ai_project": "default-ai-project", "user_name": "", "domain_id": "0659fbf6de00109b0ff1c01fc037d240", "source": "custom", "api_version": "", "is_valid": true, "state": "", "size": 4790, "tags": null, "attr_list": null, "version_num": 0, "update_time": 0 }, "share_info": {}, "job_config": { "code_dir": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/", "boot_file": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/test-pytorch.py", "parameters": [ { "name": "dist", "description": "", "i18n_description": null, "value": "False", "constraint": { "type": "Boolean", "editable": true, "required": false, "sensitive": false, "valid_type": "None", "valid_range": [] } }, { "name": "world_size", "description": "", "i18n_description": null, "value": "1", "constraint": { "type": "Integer", "editable": true, "required": false, "sensitive": false, "valid_type": "None", "valid_range": [] } } ], "parameters_customization": true, "inputs": [ { "name": "data_url", "description": "数据来源1" } ], "outputs": [ { "name": "train_url", "description": "输出数据1" } ], "engine": { "engine_id": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "engine_name": "PyTorch", "engine_version": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "tags": [ { "key": "auto_search", "value": "True" } ], "v1_compatible": false, "run_user": "1102", "image_info": { "cpu_image_url": "aip/pytorch_1_8:train", "gpu_image_url": "aip/pytorch_1_8:train", "image_version": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64-20210912152543-1e0838d" } }, "code_tree": { "name": "cpu/", "children": [ { "name": "test-pytorch.py" } ] } }, "resource_requirements": [], "advanced_config": {} } 记录“metadata”字段下的“id”(算法id,32位UUID)字段的值便于后续步骤使用。 调用创建训练作业接口使用刚创建的算法返回的uuid创建一个训练作业,记录训练作业id。 请求消息体: URI格式:POST https://{ma_endpoint}/v2/{project_id}/training-jobs 请求消息头: X-Auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type →application/json 其中,加粗的斜体字段需要根据实际值填写。 请求Body: { "kind": "job", "metadata": { "name": "test-pytorch-cpu01", "description": "test pytorch work cpu in mode gloo" }, "algorithm": { "id": "01c399ae-8593-4ef5-9e4d-085950aacde1", "parameters": [{ "name": "dist", "value": "False" }, { "name": "world_size", "value": "1" } ], "inputs": [{ "name": "data_url", "remote": { "obs": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/data/" } } }], "outputs": [{ "name": "train_url", "remote": { "obs": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/outputs/" } } }] }, "spec": { "resource": { "flavor_id": "modelarts.vm.cpu.8u", "node_count": 1 }, "log_export_path": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/log/" } } } 其中,加粗的斜体字段需要根据实际值填写: “kind”填写训练作业的类型,默认为job。 “metadata”下的“name”和“description”填写训练作业的名称和描述。 “algorithm”下的“id”填写4获取的算法ID。 “algorithm”的“inputs”和“outputs”填写训练作业输入输出管道的具体信息。实例中“inputs”中“remote”下的“obs_url”表示从OBS桶中选择训练数据的OBS路径。实例中“outputs”下种“remote”下的“obs_url”表示上传训练输出至指定OBS路径。 “spec”字段下的“flavor_id”表示训练作业所依赖的规格,使用2记录的flavor_id。“node_count”表示训练是否需要多机训练(分布式训练),此处为单机情况使用默认值“1”。“log_export_path”用于指定用户需要上传日志的obs目录。 返回状态码“201 Created”,表示训练作业创建成功,响应Body如下所示: { "kind": "job", "metadata": { "id": "66ff6991-fd66-40b6-8101-0829a46d3731", "name": "test-pytorch-cpu01", "description": "test pytorch work cpu in mode gloo", "create_time": 1641892642625, "workspace_id": "0", "ai_project": "default-ai-project", "user_name": "", "annotations": { "job_template": "Template DL", "key_task": "worker" } }, "status": { "phase": "Creating", "secondary_phase": "Creating", "duration": 0, "start_time": 0, "node_count_metrics": null, "tasks": [ "worker-0" ] }, "algorithm": { "id": "01c399ae-8593-4ef5-9e4d-085950aacde1", "name": "test-pytorch-cpu", "code_dir": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/", "boot_file": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/test-pytorch.py", "parameters": [ { "name": "dist", "description": "", "i18n_description": null, "value": "False", "constraint": { "type": "Boolean", "editable": true, "required": false, "sensitive": false, "valid_type": "None", "valid_range": [] } }, { "name": "world_size", "description": "", "i18n_description": null, "value": "1", "constraint": { "type": "Integer", "editable": true, "required": false, "sensitive": false, "valid_type": "None", "valid_range": [] } } ], "parameters_customization": true, "inputs": [ { "name": "data_url", "description": "数据来源1", "local_dir": "/home/ma-user/modelarts/inputs/data_url_0", "remote": { "obs": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/data/" } } } ], "outputs": [ { "name": "train_url", "description": "输出数据1", "local_dir": "/home/ma-user/modelarts/outputs/train_url_0", "remote": { "obs": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/outputs/" } }, "mode": "upload_periodically", "period": 30 } ], "engine": { "engine_id": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "engine_name": "PyTorch", "engine_version": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "usage": "training", "support_groups": "public", "tags": [ { "key": "auto_search", "value": "True" } ], "v1_compatible": false, "run_user": "1102" } }, "spec": { "resource": { "flavor_id": "modelarts.vm.cpu.8u", "flavor_name": "Computing CPU(8U) instance", "node_count": 1, "flavor_detail": { "flavor_type": "CPU", "billing": { "code": "modelarts.vm.cpu.8u", "unit_num": 1 }, "flavor_info": { "cpu": { "arch": "x86", "core_num": 8 }, "memory": { "size": 32, "unit": "GB" }, "disk": { "size": 50, "unit": "GB" } } } }, "log_export_path": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/log/" }, "is_hosted_log": true } } 记录“metadata”下的“id”(训练作业的任务ID)字段的值便于后续步骤使用。 “Status”下的“phase”和“secondary_phase”为表示训练作业的状态和下一步状态。示例中“Creating”表示训练作业正在创建中。 调用查询训练作业详情接口使用刚创建的训练作业返回的uuid查询训练作业状态。 请求消息体: URI格式:GET https://{ma_endpoint}/v2/{project_id}/training-jobs/{training_job_id} 请求消息头:X-Auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写: “training_job_id”为5记录的训练作业的任务ID。 返回状态码“200 OK”,响应Body如下所示: { "kind": "job", "metadata": { "id": "66ff6991-fd66-40b6-8101-0829a46d3731", "name": "test-pytorch-cpu01", "description": "test pytorch work cpu in mode gloo", "create_time": 1641892642625, "workspace_id": "0", "ai_project": "default-ai-project", "user_name": "hwstaff_z00424192", "annotations": { "job_template": "Template DL", "key_task": "worker" } }, "status": { "phase": "Running", "secondary_phase": "Running", "duration": 268000, "start_time": 1641892655000, "node_count_metrics": [ [ 1641892645000, 0 ], [ 1641892654000, 0 ], [ 1641892655000, 1 ], [ 1641892922000, 1 ], [ 1641892923000, 1 ] ], "tasks": [ "worker-0" ] }, "algorithm": { "id": "01c399ae-8593-4ef5-9e4d-085950aacde1", "name": "test-pytorch-cpu", "code_dir": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/", "boot_file": "/cnnorth4-job-test-v2/pytorch/fast_example/code/cpu/test-pytorch.py", "parameters": [ { "name": "dist", "description": "", "i18n_description": null, "value": "False", "constraint": { "type": "Boolean", "editable": true, "required": false, "sensitive": false, "valid_type": "None", "valid_range": [] } }, { "name": "world_size", "description": "", "i18n_description": null, "value": "1", "constraint": { "type": "Integer", "editable": true, "required": false, "sensitive": false, "valid_type": "None", "valid_range": [] } } ], "parameters_customization": true, "inputs": [ { "name": "data_url", "description": "数据来源1", "local_dir": "/home/ma-user/modelarts/inputs/data_url_0", "remote": { "obs": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/data/" } } } ], "outputs": [ { "name": "train_url", "description": "输出数据1", "local_dir": "/home/ma-user/modelarts/outputs/train_url_0", "remote": { "obs": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/outputs/" } }, "mode": "upload_periodically", "period": 30 } ], "engine": { "engine_id": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "engine_name": "PyTorch", "engine_version": "pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64", "usage": "training", "support_groups": "public", "tags": [ { "key": "auto_search", "value": "True" } ], "v1_compatible": false, "run_user": "1102" } }, "spec": { "resource": { "flavor_id": "modelarts.vm.cpu.8u", "flavor_name": "Computing CPU(8U) instance", "node_count": 1, "flavor_detail": { "flavor_type": "CPU", "billing": { "code": "modelarts.vm.cpu.8u", "unit_num": 1 }, "flavor_info": { "cpu": { "arch": "x86", "core_num": 8 }, "memory": { "size": 32, "unit": "GB" }, "disk": { "size": 50, "unit": "GB" } } } }, "log_export_path": { "obs_url": "/cnnorth4-job-test-v2/pytorch/fast_example/log/" }, "is_hosted_log": true } } 根据响应可以了解训练作业的版本详情,其中“status”为“Running”表示训练作业正在运行。 调用查询训练作业指定任务的日志(OBS链接)接口获取训练作业日志的对应的obs路径。 请求消息体: URI格式:GET https://{ma_endpoint}/v2/{project_id}/training-jobs/{training_job_id}/tasks/{task_id}/logs/url 请求消息头: X-Auth-Token→MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... Content-Type→text/plain 其中,加粗的斜体字段需要根据实际值填写: “task_id”为训练作业的任务名称,一般使用work-0。 Content-Type可以设置成不同方式。text/plain,返回OBS临时预览链接。application/octet-stream,返回OBS临时下载链接。 返回状态码“200 OK”,响应Body如下所示: { "obs_url": "https://modelarts-training-log-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/66ff6991-fd66-40b6-8101-0829a46d3731/worker-0/modelarts-job-66ff6991-fd66-40b6-8101-0829a46d3731-worker-0.log?AWSAccessKeyId=GFGTBKOZENDD83QEMZMV&Expires=1641896599&Signature=BedFZHEU1oCmqlI912UL9mXlhkg%3D" } 返回字段表示日志的obs路径。复制至浏览器即可看到对应效果。 调用查询训练作业指定任务的运行指标接口查看训练作业的运行指标详情。 请求消息体: URI格式:GET https://{ma_endpoint}/v2/{project_id}/training-jobs/{training_job_id}/metrics/{task_id} 请求消息头:X-Auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写。 返回状态码“200 OK”,响应Body如下所示: { "metrics": [ { "metric": "cpuUsage", "value": [ -1, -1, 28.622, 35.053, 39.988, 40.069, 40.082, 40.094 ] }, { "metric": "memUsage", "value": [ -1, -1, 0.544, 0.641, 0.736, 0.737, 0.738, 0.739 ] }, { "metric": "npuUtil", "value": [ -1, -1, -1, -1, -1, -1, -1, -1 ] }, { "metric": "npuMemUsage", "value": [ -1, -1, -1, -1, -1, -1, -1, -1 ] }, { "metric": "gpuUtil", "value": [ -1, -1, -1, -1, -1, -1, -1, -1 ] }, { "metric": "gpuMemUsage", "value": [ -1, -1, -1, -1, -1, -1, -1, -1 ] } ] } 可以看到CPU等相关的使用率指标。 当训练作业使用完成或不再需要时,调用删除训练作业接口删除训练作业。 请求消息体: URI格式:DELETE https://{ma_endpoint}/v2/{project_id}/training-jobs/{training_job_id} 请求消息头:X-Auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX... 其中,加粗的斜体字段需要根据实际值填写。 返回状态码“202 No Content”响应,则表示删除作业成功。
  • 概述 使用PyTorch框架创建训练作业的流程如下: 调用认证鉴权接口获取用户Token,在后续的请求中需要将Token放到请求消息头中作为认证。 调用获取训练作业支持的公共规格接口获取训练作业支持的资源规格。 调用获取训练作业支持的AI预置框架接口查看训练作业支持的引擎类型和版本。 调用创建算法接口创建一个算法,记录算法id。 调用创建训练作业接口使用刚创建的算法返回的uuid创建一个训练作业,记录训练作业id。 调用查询训练作业详情接口使用刚创建的训练作业返回的id查询训练作业状态。 调用查询训练作业指定任务的日志(OBS链接)接口获取训练作业日志的对应的obs路径。 调用查询训练作业指定任务的运行指标接口查看训练作业的运行指标详情。 当训练作业使用完成或不再需要时,调用删除训练作业接口删除训练作业。
  • 前提条件 已获取IAM的EndPoint和ModelArts的EndPoint。 确认服务的部署区域,获取项目ID和名称、获取账号名和ID和获取用户名和用户ID。 已准备好PyTorch框架的训练代码,例如将启动文件“test-pytorch.py”存放在OBS的“obs://cnnorth4-job-test-v2/pytorch/fast_example/code/cpu”目录下。 已经准备好训练作业的数据文件,例如将训练数据集存放在OBS的“obs://cnnorth4-job-test-v2/pytorch/fast_example/data”目录下。 已经创建好训练作业的模型输出位置,例如“obs://cnnorth4-job-test-v2/pytorch/fast_example/outputs”。 已经创建好训练作业的日志输出位置,例如“obs://cnnorth4-job-test-v2/pytorch/fast_example/log”。
  • 操作步骤 创建策略。 接口相关信息 URI格式:POST /v3/{project_id}/policies 详情请参见:创建策略 。 请求示例 POST: https://{endpoint}/v3/0605767b5780d5762fc5c0118072a564/policies {endpoint}信息请从地区和终端节点获取。 Body: { "policy": { "name": "dh_test_policy", "trigger": { "properties": { "pattern": ["FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA;BYHOUR=23;BYMINUTE=00"] } }, "operation_definition": { "retention_duration_days": 30 } } } 响应示例 { "policy": { "id": "30d7cf2d-14fc-415b-b7da-858b37f47250", "name": "dh_test_policy", "operation_type": "backup", "operation_definition": { "retention_duration_days": 30 }, "enabled": true, "trigger": { "id": "7954175b-ef2c-432c-b936-f6c83df7a593", "name": "default", "type": "time", "properties": { "pattern": [ "FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA;BYHOUR=23;BYMINUTE=00" ], "start_time": "2020-08-17 08:39:44" } }, "associated_vaults": null } } 设置存储库策略。 接口相关信息 POST /v3/{project_id}/vaults/{vault_id}/associatepolicy 详情请参见设置存储库策略。 请求示例 POST: https://{endpoint}/v3/0605767b5780d5762fc5c0118072a564 /vaults/ea7b8717-2543-478a-a92d-3ca7ee448f67/associatepolicy {endpoint}信息请从地区和终端节点获取。 Body: { "policy_id": "30d7cf2d-14fc-415b-b7da-858b37f47250" } 响应示例 { "associate_policy": { "vault_id": "ea7b8717-2543-478a-a92d-3ca7ee448f67", "policy_id": "30d7cf2d-14fc-415b-b7da-858b37f47250" } }
  • 操作步骤 查询支持边缘小站接入的区域列表并确认拟接入的区域ID。 接口相关信息 URI格式:GET /v1/{domain_id}/regions 接口详情请参见:查询支持的区域列表。 请求示例 GET https://{endpoint}/v1/{domain_id}/regions {endpoint}信息请从地区和终端节点获取。 {domain_id}信息获取方式参见获取账号ID。 响应示例 状态码: 200 OK { "regions" : [ { "region_id" : "cn-north-9", "display_name" : "华北-乌兰察布一" }, { "region_id" : "cn-south-1", "display_name" : "华南-广州" } ] } 创建边缘小站。 接口相关信息 URI格式:POST /v1/{domain_id}/edge-sites 接口详情请参见:创建边缘小站 请求示例 POST https://{endpoint}/v1/{domain_id}/edge-sites {endpoint}信息请从地区和终端节点获取。 {domain_id}信息获取方式参见获取账号ID。 请求Body体 { "edge_site": { "name": "test11111111", "description": "teasra", "region_id": "br-iaas-odin1", "location": { "name": "test11111111111", "description": "description", "country": "CN", "province": "安徽省", "city": "合肥市", "district": "瑶海区", "condition": { "environment": 0, "space": 0, "transport": 0 } } } } 响应示例 状态码: 200 OK { "edge_site": { "id": "cc89b1e5-521d-4a85-be83-e6f7217fc63e", "domain_id": "2b76febbe5d34eac85d26435c1f15809", "name": "test11111111", "description": "teasra", "region_id": "br-iaas-odin1", "project_id": "060576838600d5762f2dc000470eb164", "availability_zone_id": null, "status": "initial", "location": { "name": "test11111111111", "description": "description", "country": "CN", "province": "安徽省", "city": "合肥市", "district": "瑶海区", "condition": { "environment": 0, "space": 0, "transport": 0 } }, "created_at": "2022-04-15T07:59:20.641Z", "updated_at": null } }
  • 查询应用列表 接口相关信息 URI格式:GET /v1/apm2/openapi/cmdb/business/get-business-list 请求示例 GET https://{ APM _endpoint}/v1/apm2/openapi/cmdb/business/get-business-list {APM_endpoint}信息请从地区和终端节点获取。 响应示例 { "business_nodes" : [ { "default" : true, "id" : 2, "gmt_create" : null, "gmt_modify" : null, "name" : "apm", "display_name" : "apm", "is_default" : true, "inner_domain_id" : 1, "eps_id" : "**********" } ] }
  • 业务流程 图1 个人密码修改流程图 第三方通过企业用户账号、密码登录, 获取Token 。 第三方向网关APIG发送账号鉴权请求。 网关接收请求后,向CloudPortal发送账号鉴权请求。 CloudPortal鉴权通过后返回Token。 网关APIG将Token信息返回给第三方。 初始化参数,填入用户账号、旧密码、新密码参数。 第三方携带参数向网关APIG发送修改密码请求。 网关接收请求后,向CloudPortal发送修改密码请求。CloudPortal收到请求后,修改用户密码。