云服务器内容精选

  • 解释说明 选择批量预测结果的保存位置,可以选择您创建的空文件夹。 批量服务的输出结果目录会有一个manifest文件。 假设用户输出结果路径为/test-bucket/test/,则结果存放位置如下: OBS桶/目录名 ├── test-bucket │ ├── test │ │ ├── infer-result-{{task_id}}.manifest │ │ ├── infer-result-{{task_id}} │ │ │ ├── 1.jpg_result.txt │ │ │ ├── 2.jpg_result.txt 文件格式: 文件名为“infer-result-{{task_id}}.manifest”,task_id为批量任务id,批量服务对应唯一的批量任务id。 当处理文件数目较多时,可能会有多个manifest文件,后缀相同,均为“.manifest”,文件名以后缀区分,例如“infer-result-{{task_id}}_1.manifest”等。 manifest同一目录下会创建infer-result-{{task_id}}目录存放文件处理结果。 manifest文件内容是多行JSON,每行JSON描述一个输入数据的对应输出结果。 JSON内容包含多个字段。 source:输入数据描述,与输入的manifest一致。 result:文件处理结果,取值为“SUC CES SFUL”或“FAILED”,分别代表成功和失败。 inference-loc:result为“SUCCESSFUL”时显示。输出结果路径,格式为“obs://{{桶名}}/{{对象名}}”。 error_message:result为“FAILED”时显示。输出失败原因。
  • 背景说明 访问在线服务的实际业务中,用户可能会存在如下需求: 高吞吐量、低时延 TCP或者RPC请求 因此,ModelArts提供了VPC直连的高速访问通道功能以满足用户的需求。 使用VPC直连的高速访问通道,用户的业务请求不需要经过推理平台,而是直接经VPC对等连接发送到实例处理,访问速度更快。 由于请求不经过推理平台,所以会丢失以下功能: 认证鉴权 流量按配置分发 负载均衡 告警、监控和统计 图1 VPC直连的高速访问通道示意图
  • 背景说明 WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信,位于OSI模型的应用层。WebSocket协议在2011年由IETF标准化为RFC 6455,后由RFC 7936补充规范。Web IDL中的WebSocket API由W3C标准化。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以建立持久性的连接,并进行双向数据传输。
  • 方式一:使用Python语言通过AppKey+AppSecret认证鉴权方式发送预测请求 下载Python SDK并在开发工具中完成SDK配置。具体操作请参见在Python环境中集成API请求签名的SDK。 创建请求体,进行预测请求。 输入为文件格式 # coding=utf-8 import requests import os from apig_sdk import signer if __name__ == '__main__': # Config url, ak, sk and file path. # API接口公网地址,例如"https://8e******5fe.apig.******.huaweicloudapis.com/v1/infers/f2682******f42" url = "在线服务的调用地址" # 认证用的app_key和app_secret硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以app_key和app_secret保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_KEY和HUAWEICLOUD_APP_SECRET。 app_key = os.environ["HUAWEICLOUD_APP_KEY"] app_secret= os.environ["HUAWEICLOUD_APP_SECRET"] file_path = "预测文件的本地路径" # Create request, set method, url, headers and body. method = 'POST' headers = {"x-sdk-content-sha256": "UNSIGNED-PAYLOAD"} request = signer.HttpRequest(method, url, headers) # Create sign, set the AK/SK to sign and authenticate the request. sig = signer.Signer() sig.Key = app_key sig.Secret = app_secret sig.Sign(request) # Send request files = {'images': open(file_path, 'rb')} resp = requests.request(request.method, request.scheme + "://" + request.host + request.uri, headers=request.headers, files=files) # Print result print(resp.status_code) print(resp.text) “files”参数的请求体样式为“files={"请求参数":("文件路径",文件内容,“文件类型”)}”,参数填写可以参考表1。 表1 files参数说明 参数 是否必填 说明 请求参数 是 在线服务输入参数名称。 文件路径 否 上传文件的路径。 文件内容 是 上传文件的内容。 文件类型 否 上传文件类型。当前支持以下类型: txt类型:text/plain jpg/jpeg类型:image/jpeg png类型:image/png 输入为文本格式(json类型) 读取本地预测文件并进行base64编码的请求体示例如下: # coding=utf-8 import base64 import json import os import requests from apig_sdk import signer if __name__ == '__main__': # Config url, ak, sk and file path. # API接口公网地址,例如"https://8e******5fe.apig.******.huaweicloudapis.com/v1/infers/f2682******f42" url = "在线服务的调用地址" # 认证用的app_key和app_secret硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以app_key和app_secret保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_KEY和HUAWEICLOUD_APP_SECRET。 app_key = os.environ["HUAWEICLOUD_APP_KEY"] app_secret= os.environ["HUAWEICLOUD_APP_SECRET"] file_path = "预测文件的本地路径" with open(file_path, "rb") as file: base64_data = base64.b64encode(file.read()).decode("utf-8") # Create request, set method, url, headers and body. method = 'POST' headers = { 'Content-Type': 'application/json' } body = { 'image': base64_data } request = signer.HttpRequest(method, url, headers, json.dumps(body)) # Create sign, set the AppKey&AppSecret to sign and authenticate the request. sig = signer.Signer() sig.Key = app_key sig.Secret = app_secret sig.Sign(request) # Send request resp = requests.request(request.method, request.scheme + "://" + request.host + request.uri, headers=request.headers, data=request.body) # Print result print(resp.status_code) print(resp.text) “body”中的参数名由在线服务的输入参数决定,需要和“类型”为“string”的输入参数“名称”保持一致。此处以“image”为例。“body”中的base64_data值为string类型。
  • 方式二:使用Java语言通过AppKey+AppSecret认证鉴权方式发送预测请求 下载Java SDK并在开发工具中完成SDK配置。具体操作请参见在Java环境中集成API请求签名的SDK。 创建Java类,进行预测请求。 由于在APIG的Java SDK中,“request.setBody()”只支持String类型,所以只支持输入为文本格式的预测请求。 此处以json格式为例介绍读取本地预测文件并进行base64编码的请求体: // Package name of the demo. package com.apig.sdk.demo; import com.cloud.apigateway.sdk.utils.Client; import com.cloud.apigateway.sdk.utils.Request; import org.apache.http.HttpHeaders; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class MyAkSkTest { public static void main(String[] args) { # API接口公网地址,例如"https://8e******5fe.apig.******.huaweicloudapis.com/v1/infers/f2682******f42" String url = "在线服务的调用地址"; // 认证用的appKey和appSecret硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以appKey和appSecret保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_KEY和HUAWEICLOUD_APP_SECRET。 String appKey = System.getenv("HUAWEICLOUD_APP_KEY"); String appSecret = System.getenv("HUAWEICLOUD_APP_SECRET"); String body = "{}"; try { // Create request Request request = new Request(); // Set the AK/AppSecret to sign and authenticate the request. request.setKey(appKey); request.setSecret(appSecret); // Specify a request method, such as GET, PUT, POST, DELETE, HEAD, and PATCH. request.setMethod(HttpPost.METHOD_NAME); // Add header parameters request.addHeader(HttpHeaders.CONTENT_TYPE, "application/json"); // Set a request URL in the format of https://{Endpoint}/{URI}. request.setUrl(url); // Special characters, such as the double quotation mark ("), contained in the body must be escaped. request.setBody(body); // Sign the request. HttpRequestBase signedRequest = Client.sign(request); // Send request. CloseableHttpResponse response = HttpClients.createDefault().execute(signedRequest); // Print result System.out.println(response.getStatusLine().getStatusCode()); System.out.println(EntityUtils.toString(response.getEntity())); } catch (Exception e) { e.printStackTrace(); } } } “body”由具体文本格式决定,此处以json为例。
  • 方式三:使用Python语言通过AppCode认证鉴权方式发送预测请求 下载Python SDK并在开发工具中完成SDK配置。具体操作请参见在Python环境中集成API请求签名的SDK。 创建请求体,进行预测请求。 输入为文件格式 # coding=utf-8 import requests import os if __name__ == '__main__': # Config url, app code and file path. # API接口公网地址,例如"https://8e******5fe.apig.******.huaweicloudapis.com/v1/infers/f2682******f42" url = "在线服务的调用地址" # 认证用的app_code硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以app_code保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_CODE。 app_code = os.environ["HUAWEICLOUD_APP_CODE"] file_path = "预测文件的本地路径" # Send request. headers = { 'X-Apig-AppCode': app_code } files = { 'images': open(file_path, 'rb') } resp = requests.post(url, headers=headers, files=files) # Print result print(resp.status_code) print(resp.text) “files”中的参数名由在线服务的输入参数决定,需要和“类型”为“file”的输入参数“名称”保持一致。此处以“images”为例。 输入为文本格式(json类型) 读取本地预测文件并进行base64编码的请求体示例如下: # coding=utf-8 import base64 import requests import os if __name__ == '__main__': # Config url, app code and request body. # API接口公网地址,例如"https://8e******5fe.apig.******.huaweicloudapis.com/v1/infers/f2682******f42" url = "在线服务的调用地址" # 认证用的app_code硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以app_code保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_CODE。 app_code = os.environ["HUAWEICLOUD_APP_CODE"] file_path = "预测文件的本地路径" with open(file_path, "rb") as file: base64_data = base64.b64encode(file.read()).decode("utf-8") # Send request headers = { 'Content-Type': 'application/json', 'X-Apig-AppCode': app_code } body = { 'image': base64_data } resp = requests.post(url, headers=headers, json=body) # Print result print(resp.status_code) print(resp.text) “body”中的参数名由在线服务的输入参数决定,需要和“类型”为“string”的输入参数“名称”保持一致。此处以“image”为例。“body”中的base64_data值为string类型。
  • APP认证鉴权 当支持APP认证功能的在线服务运行成功处于“运行中”状态,就可以对服务进行调用 。在调用之前您需要进行APP认证鉴权。 当使用APP认证,且开启了简易认证模式,API请求既可以选择使用Appkey和AppSecret做签名和校验,也可以选择使用AppCode进行简易认证(ModelArts默认启用简易认证)。推荐使用AppKey/AppSecret认证,其安全性比AppCode认证要高。 AppKey/AppSecret认证:通过AppKey与AppSecret对请求进行加密签名,可标识发送方并防止请求被修改。使用AppKey/AppSecret认证时,您需要使用专门的签名SDK对请求进行签名。 AppKey:APP访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。 AppSecret:APP私有访问密钥,即与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。 AppKey进行简易认证时,即在调用API的时候,在HTTP请求头部消息增加一个参数“apikey”(参数值为“AppKey”),实现快速认证。 AppCode认证:通过AppCode认证通用请求。 AppCode认证就是在调用API的时候,在HTTP请求头部消息增加一个参数“X-Apig-AppCode”(参数值为“AppCode”),而不需要对请求内容签名,API网关也仅校验AppCode,不校验请求签名,从而实现快速响应。 您可以在服务详情页的“调用指南”页签(如图5)获取API接口公网地址(对应下文示例中的在线服务的调用地址url)和AppKey/AppSecret(对应下文示例中的app_key、app_secret)和AppCode(对应下文示例中的app_code)。请注意使用图中第二行用于APP认证方式的API接口公网地址。 以下情况下需要对API接口公网地址进行拼接修改: 当模型配置文件中apis定义了路径,调用地址后需拼接自定义路径。如:“{在线服务的调用地址}/predictions/poetry”。 如果是部署SD WebUI推理服务,调用地址后需添加"/"。如:“https://8e******5fe.apig.******.huaweicloudapis.com/v1/infers/f2682******f42/”。 图5 获取APP认证鉴权相关信息
  • 准备工作 使用专属资源池部署在线服务,服务状态为“运行中”。 需使用新版专属资源池部署服务,详情请参见ModelArts Standard资源池功能介绍。 只有专属资源池部署的服务才支持VPC直连的高速访问通道。 VPC直连的高速访问通道,目前只支持访问在线服务。 因流量限控,获取在线服务的IP和端口号次数有限制,每个主账号租户调用次数不超过2000次/分钟,每个子账号租户不超过20次/分钟。 目前仅支持 自定义镜像 导入模型,部署的服务支持高速访问通道。
  • 约束限制 服务升级关系着业务实现,不当的升级操作会导致升级期间业务中断的情况,请谨慎操作。 ModelArts支持部分场景下在线服务进行无损滚动升级。按要求进行升级前准备,做好验证,即可实现业务不中断的无损升级。 表1 支持无损滚动升级的场景 创建模型的元模型来源 服务使用的是公共资源池 服务使用的是专属资源池 从训练中选择元模型 不支持 不支持 从容器镜像中选择元模型 不支持 支持,创建模型的自定义镜像需要满足创建模型的自定义镜像规范。 从OBS中选择元模型 不支持 不支持
  • 方式二:通过服务详情页面修改服务信息 登录ModelArts管理控制台,在左侧菜单栏中选择“模型部署”,进入目标服务类型管理页面。 单击目标服务名称,进入服务详情页面。 您可以通过单击页面右上角“修改”,修改服务基本信息,然后根据提示提交修改任务。 当修改了服务的某些参数配置时,系统会自动重启服务使修改生效。在提交修改服务任务时,如果涉及重启,会有弹窗提醒。 在线服务参数说明请参见部署模型为在线服务。修改在线服务还需要配置“最大无效实例数”设置并行升级的最大节点数,升级阶段节点无效。
  • 方式一:通过服务管理页面修改服务信息 登录ModelArts管理控制台,在左侧菜单栏中选择“模型部署”,进入目标服务类型管理页面。 在服务列表中,单击目标服务操作列的“修改”,修改服务基本信息,然后根据提示提交修改任务。 当修改了服务的某些参数配置时,系统会自动重启服务使修改生效。在提交修改服务任务时,如果涉及重启,会有弹窗提醒。 在线服务参数说明请参见部署模型为在线服务。修改在线服务还需要配置“最大无效实例数”设置并行升级的最大节点数,升级阶段节点无效。
  • 在线服务预测时,如何提高预测速度? 部署在线服务时,您可以选择性能更好的“计算节点规格”提高预测速度。例如使用GPU资源代替CPU资源。 部署在线服务时,您可以增加“计算节点个数”。 如果节点个数设置为1,表示后台的计算模式是单机模式;如果节点个数设置大于1,表示后台的计算模式为分布式的。您可以根据实际需求进行选择。 推理速度与模型复杂度强相关,您可以尝试优化模型提高预测速度。 ModelArts中提供了模型版本管理的功能,方便溯源和模型反复调优。 图1 部署在线服务 父主题: 在线服务
  • 操作步骤 登录RES管理控制台,在左侧导航栏选择进入“在线服务”页面。 在页面上方单击“创建”进入“创建在线服务”,在页面填写相关参数。 填写基本信息并选择服务类型。您可以根据实际情况填写“名称”、“场景”和“描述”信息。其中“场景”信息可选择您在全局配置页面创建的场景。 图1 基本信息 根据业务需求选择服务类型。包括“推荐引擎”、“排序”和“文本标签”。 单击“添加在线流程”,并进行命名,您最多可以部署5个在线流程。根据选择的服务类型配置在线流程,包括融合、过滤、排序和模型及配置等关键信息。具体参数信息参见表1。服务类型选择推荐引擎。 图2 创建在线服务 表1 创建在线服务参数说明 参数名称 子参数 说明 融合 “推荐结果设置” “添加推荐候选集”(选择离线或近线任务所生成的推荐候选集进行排序) 任务别名和UUID:单击操作列表的“选择”添加离线或近线的任务名称和候选集ID。 优先级:优先级高的推荐结果将确保展示在优先级低的之前。 同优先级数据占比:优先级相同的推荐候选集,该占比展示推荐数量,同优先级下的数据占比之和需要等于100%。 “添加在线候选集”(根据设置的参数在线进行召回,必须添加全局特征信息文件才可设置参数) 任务别名和UUID:分别默认为“在线候选集召回”和“online-recall”,无需改动。 优先级、同优先级数据占比:同添加推荐候选集。 设置参数:单击操作列的“设置参数”进行召回策略参数的配置。根据业务需求选择召回类型为物品或者用户,配置在线召回特征。在线召回的特征属性来自于公共配置的全局特征信息文件。 可单击“添加推荐候选集、添加在线候选集”配置多个候选集,作为当前在线流程的排序候选集。 说明: 在线候选集的延迟较推荐候选集较高,如无特殊需求,建议选择推荐候选集。 容错 容错用于数据请求异常时的固定人工输出召回集。需要在离线作业创建召回策略进行人工策略的计算。单击“选择”获取人工导入策略的任务别名和UUID。 离线过滤 过滤 过滤数据来源于过滤规则产生的候选集,单击“选择”获取过滤的任务别名和UUID。 在线过滤 【去重】物品属性 属性名从画像算子生成,如“product_color”,则对产品颜色相同的物品进行去重。 【去重】忽略长度 截断物品ID末尾指定长度后的字符串进行去重,如指定长度为2,则SKU_A1234和SKU_A1244只会保留其中一个。 属性过滤规则 指定定制化用户属性以及物品属性过滤规则,属性过滤规则用于过滤最终用户的推荐结果。例如,对于一线城市的用户过滤敏感信息物品,使之不进入候选集。单击增加属性过滤规则。 用户属性:指定在用户属性中需要过滤的字段,包含属性名和属性值。来源于画像数据,即特征工程中初始用户画像-物品画像-标准宽表生成算子作业输出的数据,用户属性来自于公共配置的全局特征信息文件。如过滤籍贯是广东且性别为男性的用户。 物品属性:指定在物品属性中需要过滤的字段,包含属性名和属性值。来源于画像数据,即特征工程中初始用户画像-物品画像-标准宽表生成算子作业输出的数据,物品属性的名称来自于公共配置的全局特征信息文件。如过滤产品颜色为红色且产品品牌为华为的物品。 排序方式 “点击率预估” 特征工程:排序数据来源于排序算子作业产生的候选集。单击“选择”获取排序策略的任务别名和UUID。 模型文件路径:排序策略生成的模型存储路径。 “属性权重” 属性权重:输入属性,权重默认1.0 。也可单击“增加属性权重”。 公共配置 “全局特征信息文件” 为json格式文件。指定在去重过滤即属性过滤中物品属性和用户属性的特征信息文件,如物品属性需要“feature_name”、“feature_type”、“feature_value_type”字段来表示特征名,特征类型以及特征值类型。需预先存储在OBS中。 “画像” 画像为特征工程中初始用户画像-物品画像-标准宽表生成算子的结果。且此画像会用于去重过滤、属性过滤以及排序的计算中。单击“选择”获取特征工程作业产生的UUID。 模型及配置 - 设置模型名称、模型版本、计算节点规格、计算节点个数和分流(%)。 模型名称和模型版本选择调用API接口的模型名称和模型版本。“计算节点规格”默认2核|8GiB,“计算节点个数”默认为2,“分流”之和必须是100%。 完成该项配置后,单击“下一步”进入规格确认页面,核对无误后,单击“完成”。当您通过在线服务列表查看在线服务的状态由“初始化”、“部署中”变更为“运行中”时即完成在线服务的部署。在线服务一般需要运行一段时间,根据您的数据量和资源不同,运行时间将耗时几分钟到几十分钟不等,请您耐心等待。
  • 访问在线服务简介 在线服务的状态处于“运行中”,则表示在线服务已部署成功,部署成功的在线服务,将为用户提供一个可调用的API,此API为标准Restful API。在集成至生产环境之前,需要对此API进行调测。 在线服务的API默认为HTTPS访问,同时还支持WebSocket访问。在线服务部署时如果选择了“升级为WebSocket”,服务部署完成后,API接口公网地址将是一个WebSocket协议地址。请参见Websocket访问在线服务。 当前ModelArts支持访问在线服务的认证方式有以下方式(均以HTTPS请求为例): Token认证 AK/SK认证 APP认证 ModelArts支持通过以下几种方式调用API访问在线服务: 访问在线服务(公网访问通道) 访问在线服务(VPC高速访问通道) 调用API访问在线服务时,对预测请求体大小和预测时间有限制: 请求体的大小不超过12MB,超过后请求会被拦截。 因APIG(API网关)限制,平台每次请求预测的时间不超过40秒。 父主题: 访问在线服务
  • 了解服务的输入参数 针对您部署上线的服务,您可以在服务详情页面的“调用指南”中,了解本服务的输入参数,即上文提到的输入请求类型。 图1 查看服务的调用指南 调用指南中的输入参数取决于您选择的AI应用来源: 如果您的元模型来源于自动学习或预置算法,其输入输出参数由ModelArts官方定义,请直接参考“调用指南”中的说明,并在预测页签中输入对应的JSON文本或文件进行服务测试。 如果您的元模型是自定义的,即推理代码和配置文件是自行编写的(配置文件编写说明),“调用指南”只是将您编写的配置文件进行了可视化展示。调用指南的输入参数与配置文件对应关系如下所示。 图2 配置文件与调用指南的对应关系 如果您的元模型是采用模型模板导入,不同的模板指定了其对应的输入输出模式,请参见模型模板简介的相关说明。