云服务器内容精选

  • 新增模型版本 为了提升模型的可追溯性和优化效率,MaaS提供了模型版本管理功能。通过此功能,您能够创建模型的新版本。 一个模型最多支持创建10个版本。 在ModelArts Studio控制台左侧导航栏中,单击“我的模型”进入模型列表。 单击模型名称,进入模型详情页面。 在“我的版本”区域,单击“新增版本”。 在“新增版本”页面,配置模型新版本的参数。 表3 新增模型版本参数说明 参数 说明 新版本号 系统自动编号,不可修改。 版本描述 自定义模型简介。支持100字符。 选择基础模型版本 选择基础模型的版本。 选择权重路径 选择存放模型权重文件的OBS路径,必须选择到模型文件夹。 权重校验 需要选择是否开启权重文件校验。默认开启。部分模型暂不支持权重校验,请以实际环境为准。 当开启权重校验时,平台会对OBS中的权重文件进行校验,确认其是否满足规范。权限校验常见的失败情况及其处理建议请参见权重校验。 当关闭权重校验时,则不进行校验,创建模型可能会因为权重文件不合规而失败。 配置完成后,单击“确定”,新增模型版本。 在版本列表,当“状态”变成“创建成功”时,表示模型新版本创建完成。
  • 删除我的模型 删除操作无法恢复,请谨慎操作。 在ModelArts Studio控制台左侧导航栏中,选择“我的模型”进入模型列表。 在模型列表,单击模型名称,进入“模型详情”页面。 在“我的版本”区域,单击版本号,进入“版本详情”页面。查看该版本的模型“任务记录”是否为空。 是,表示模型未被用于训推任务,可以直接删除。则直接执行下一步。 否,表示模型已被用于训推任务,需要先删除所有任务,再执行下一步。 确认该模型的各个版本的“任务记录”都为空。 当模型存在任务记录会删除失败。 在“模型详情”页面,单击右上角的“删除”,在弹窗中输入“DELETE”,单击“确定”,删除模型。
  • 权重校验 创建模型时,开启权重校验后,平台会自动创建一个权重校验的任务。在模型版本详情页面的“任务记录”区域,可以查看权重校验任务。 图1 查看权重校验任务 当状态显示运行失败时,鼠标悬停在状态即可查看失败信息,根据失败信息处理问题。常见的权重校验失败信息及其处理建议请参见表4。 表4 权重校验常见的失败信息 失败信息 信息解释 处理建议 Unknown error, please contact the operation and maintenance personnel or check the log to locate the specific problem. 未知错误。 查看日志定位处理问题,或者联系技术支持。 Backend model template selection error (metadata error). 后台模型模板选择错误。 查看日志定位处理问题,或者联系技术支持。 Failed to read standard config.json in the background. 后台读取标准config.json失败。 查看日志定位处理问题,或者联系技术支持。 Failed to read generation_config.json. generation_config.json内容格式错误。 检查“generation_config.json”文件中的内容是否为json格式。 The value of do_sample is not set to true in generation_config.json, which is inconsistent with the configured sampling parameters such as temperature, top_p, top_k etc. 在generation_config.json中没有将do_sample的值设置为true,与配置的temperature、top_p、top_k等采样参数矛盾。 将“generation_config.json”文件中的“do_sample”的值设置为“true”。 Failed to read user config.json. config.json不存在或内容不符合json格式。 检查“config.json”文件是否存在,或者是内容是否为json格式。 The quantization_config field is missing in config.json, please check whether it is awq quantization weight. config.json中缺少quantization_config字段,请检查是否为awq量化权重。 检查权重和模型模板是否匹配。 There is an extra quantization_config field in config.json. Please check whether it is a non-quantized weight. config.json中多出quantization_config字段,请检查是否为非量化权重。 检查权重和模型模板是否匹配。 Key fields describing the model structure are missing from config.json, or their values are inconsistent with standard open source. config.json中缺少描述模型结构的关键字段,或其值与标准开源不一致。 检查“config.json”文件中的配置是否与模型官方一致。 Error loading tokenizer in transformers. transformers加载tokenizer出错。 检查词表文件是否正确。 Error loading weights in transformers. transformers加载权重出错。 检查权重文件是否正确。
  • 约束限制 用于生成专属模型的模型权重文件需要满足Hugging Face上的对应模型的文件格式要求。 模型权重文件夹下包括权重类文件、词表类文件和配置类文件。 可以使用transformers的from_pretrained方法对模型权重文件夹进行加载。 当选择ChatGLM3-6B、GLM-4-9B、Qwen-7B、Qwen-14B、Qwen-72B、Baichuan2-7B、Baichuan2-13B、Llama2-7B、Llama2-13B和Llama2-80B基础模型(名字必须一致)创建模型,且“权重设置与词表”选择“自定义权重”时,需要修改权重配置才能正常运行模型,操作步骤请参见修改权重配置。
  • 创建我的模型 登录ModelArts Studio控制台,在顶部导航栏选择目标区域。 在左侧导航栏,单击“我的模型”。 在“我的模型”页面右上角,单击“创建模型”。 在“创建模型”页面,配置相关参数。 表1 创建模型参数说明 参数 说明 来源模型 单击“选择基础模型”,在弹窗中选择模型,单击“确定”。 关于模型的详细介绍,请参见表2。 模型名称 自定义模型名称。支持1~64位,以中文、大小写字母开头,只包含中文、大小写字母、数字、下划线(_)、中划线(-)和(.)。 描述 模型简介。支持100字符。 权重设置与词表 默认选择“自定义权重”。权重文件指的是模型的参数集合。 自定义权重存储路径 单击“自定义权重存储路径”右侧的文件图标,选择存放模型权重文件的OBS路径(必须选择到模型文件夹),然后单击“确定”。 您需要先将权重文件上传至OBS桶中,且权重文件必须满足对应模型的文件格式要求。详细信息,请参见前提条件。 单次上传本地文件到OBS的总大小不能超过5GB,详情请参见如何上传超过5GB的大对象。 权重校验 需要选择是否开启权重文件校验,默认开启。部分模型暂不支持权重校验,请以实际环境为准。 当开启权重校验时,平台会对OBS中的权重文件进行校验,确认其是否满足规范。权限校验常见的失败情况及其处理建议请参见权重校验。 当关闭权重校验时,则不进行校验,创建模型可能会因为权重文件不合规而失败。 表2 模型介绍 模型系列 模型类型 应用场景 支持语言 GLM-4 文本生成 对话问答、长文本推理、代码生成 中文、英文 ChatGLM3 文本生成 对话问答、数学推理、代码生成 中文、英文 百川2 文本生成 对话问答、数学推理、代码生成、翻译 中文、英文 Llama2 文本生成 对话问答、智能创作、文本摘要 英文 Llama3 文本生成 对话问答、智能创作、文本摘要 英文 Llama3.1 文本生成 对话问答、智能创作、文本摘要 英文 Yi 文本生成 代码生成、数学推理、对话问答 中文、英文 通义千问1.5 文本生成 代码生成、数学推理、对话问答 英文 通义千问 文本生成 对话问答、智能创作、文本摘要、翻译、代码生成、数学推理 中文、英文 通义千问2 文本生成 多语言处理、数学推理、对话问答 英文 通义千问2.5 文本生成 多语言处理、数学推理、对话问答 中文、英文 DeepseekCoder 文本生成 对话问答、文本推理 中文、英文 通义千问2-VL 图像理解 图像理解、对话问答 中文、英文 DeepSeek-R1 文本生成 对话问答、文本生成推理 中文、英文 DeepSeek-V3 文本生成 对话问答、翻译 中文、英文 参数配置完成后,单击“创建”,创建自定义模型。 在模型列表,当模型“状态”变成“创建成功”时,表示模型创建完成。
  • 删除/退订/释放节点 如果是“按需计费”的资源池,您可单击操作列的“删除”,在文本框中输入“DELETE”,单击“确定”,确认删除,即可实现对单个节点的资源释放。 如果想批量删除节点,勾选待删除节点名称前的复选框,然后单击名称上方的“删除”,在文本框中输入“DELETE”,单击“确定”,确认删除,即可实现对多个节点的资源释放。 如果是“包年/包月”且资源未到期的资源池,您可单击操作列的“退订”,即可实现对节点的资源释放。支持批量退订节点。 如果是“包年/包月”且资源到期的资源池(处于宽限期),您可单击操作列的“释放”,即可实现对单个节点的资源释放。不支持批量释放处于宽限期的节点。 部分“包年/包月”节点会出现“删除”按钮,原因是该节点为存量节点,单击“删除”即可实现节点的资源释放。
  • 响应参数 状态码: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 错误信息。
  • 请求示例 更新模型服务单个属性。 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 } ] }
  • 请求参数 表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。
  • 操作步骤 调用认证鉴权接口获取用户的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路径。 调用查询训练作业指定任务的运行指标接口查看训练作业的运行指标详情。 当训练作业使用完成或不再需要时,调用删除训练作业接口删除训练作业。
  • 概述 创建开发环境实例的流程如下: 调用认证鉴权接口获取用户Token,在后续的请求中需要将Token放到请求消息头中作为认证。 调用查询支持的镜像列表接口查看开发环境的镜像类型和版本。 调用创建Notebook实例接口创建一个Notebook实例。 调用查询Notebook实例详情接口根据Notebook实例的ID查询实例的创建详情。 调用Notebook时长续约接口重置Notebook实例的使用时长。 调用停止Notebook实例接口停止正在运行的实例。 调用启动Notebook实例接口重新启动实例。 当Notebook实例不再需要时,调用删除Notebook实例接口删除实例。
  • 操作步骤 调用认证鉴权接口获取用户的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!" }
  • 概述 管理ModelArts服务的委托授权流程如下: 调用认证鉴权接口获取用户Token,在后续的请求中需要将Token放到请求消息头中作为认证。 调用创建ModelArts委托接口完成包含OBS、SWR等依赖服务的ModelArts委托。 调用配置授权接口配置ModelArts授权。该接口支持管理员给IAM子用户设置委托,支持设置当前用户的访问密钥。 若没有授权,ModelArts服务的数据管理、训练管理、开发环境、在线服务等功能将不能正常使用。 调用查看授权列表接口查看用户的授权信息。 在管理用户授权时,可以调用删除授权接口删除指定用户的授权或者删除全量用户的授权。