调用MaaS部署的模型服务
在ModelArts Studio大模型即服务平台部署成功的模型服务支持在其他业务环境中调用。
约束限制
只有“状态”是“运行中”的模型服务才支持被调用。
步骤1:选择认证方式
支持Token认证、AK/SK认证和APP认证,可以根据需要选择合适的认证方式。
- Token认证
Token的有效期为24小时,需要使用同一个Token鉴权时,可以缓存起来,避免频繁调用。
Token在计算机系统中代表令牌(临时)的意思,拥有Token就代表拥有某种权限。Token认证就是在调用API的时候将Token加到请求消息头,从而通过身份认证,获得操作API的权限。
Token可通过调用获取用户Token接口获取,调用本服务API需要project级别的Token,即调用获取用户Token接口时,请求body中“auth.scope”的取值需要选择“project”,请求示例如下所示。
{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "user_name", "password": "user_password", "domain": { "name": "domain_name" } } } }, "scope": { "project": { "name": "project_name" } } } }
获取Token后,再调用其他接口时,您需要在请求消息头中添加“X-Auth-Token”,其值即为Token。例如Token值为“ABCDEFJ....”,则调用接口时将“X-Auth-Token: ABCDEFJ....”加到请求消息头即可,如下所示。
GET https://modelarts.cn-north-1.myhuaweicloud.com/v1/{project_id}/services Content-Type: application/json X-Auth-Token: ABCDEFJ....
您还可以通过这个视频教程了解如何使用Token认证:https://bbs.huaweicloud.com/videos/101333 。
- AK/SK认证
AK/SK签名认证方式仅支持消息体大小12M以内,12M以上的请求请使用Token认证。
AK/SK认证就是使用AK/SK对请求进行签名,在请求时将签名信息添加到消息头,从而通过身份认证。
- AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。
- SK(Secret Access Key):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。
获取AK/SK的操作步骤:使用AK/SK认证时,您可以基于签名算法使用AK/SK对请求进行签名,也可以使用专门的签名SDK对请求进行签名。详细的签名方法和SDK使用方法请参见API签名指南。签名SDK只提供签名功能,与服务提供的SDK不同,使用时请注意。
您也可以通过这个视频教程了解AK/SK认证的使用:https://bbs.huaweicloud.com/videos/100697 。
- APP认证
当使用APP认证时,API请求既可以选择使用Appkey和AppSecret做签名和校验,也可以选择使用AppCode进行简易认证。推荐使用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,不校验请求签名,从而实现快速响应。
开启APP认证的操作步骤:
- 登录ModelArts管理控制台。
- 在左侧导航栏中,选择“ModelArts Studio”进入ModelArts Studio大模型即服务平台。
- 在ModelArts Studio左侧导航栏中,选择“模型部署”进入服务列表。
- 单击待调用的服务名称,进入服务详情页面,获取“服务ID”。
图5 获取服务ID
- 返回ModelArts管理控制台,在左侧导航栏中,选择“模型部署 > 在线服务”进入在线服务列表。
- 根据4获取的“服务ID”找到MaaS模型服务,服务名称为“MAAS_服务ID”,单击操作列的“修改”进入修改服务页面。
- 在修改服务页面,打开“支持APP认证”的开关,从APP授权配置的下拉列表中选择需要配置的APP应用,如果没有可选项,可以单击右侧“创建应用”,新建应用。
请勿修改其他参数,否则会导致服务部署或调用失败。
- 设置完成后单击“下一步”,确认修改信息后,单击“提交”。
- 模型服务开启APP认证后,在ModelArts的在线服务列表,单击MaaS模型服务名称进入服务详情页。
- 选择调用指南页签,获取APP认证所需的服务“API接口公网地址”、“AppKey”、“AppSecret”和“AppCode”。
图6 获取APP认证所需信息
启用APP认证后,调用MaaS模型服务的API只支持使用此处获取的“API接口公网地址”。
- AppKey/AppSecret认证:通过AppKey与AppSecret对请求进行加密签名,可标识发送方并防止请求被修改。使用AppKey/AppSecret认证时,您需要使用专门的签名SDK对请求进行签名。
步骤2:调用MaaS模型服务进行预测
执行如下Python脚本测试MaaS模型服务能否正常调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# coding=utf-8 import requests import json if __name__ == '__main__': url = "xxxxxxxxxx/v1/chat/completions" token = "用户Token" # Send request. headers = { 'Content-Type': 'application/json', 'X-Auth-Token': token } data = { "model": "调用时模型名称", "max_tokens": 20, "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "hello"} ] } resp = requests.post(url, headers=headers, data=json.dumps(data), verify=False) # Print result. print(resp.status_code) print(resp.text) |
模型服务的API与vLLM相同,表1仅介绍关键参数,详细参数解释请参见vLLM官网Sampling Parameters。
参数 |
是否必选 |
默认值 |
参数类型 |
描述 |
---|---|---|---|---|
model |
是 |
无 |
Str |
调用时的模型名称。 在ModelArts Studio大模型即服务平台的“模型部署”页面,选择调用的模型服务,单击名称进入服务详情页,获取“调用模型名称”。 |
messages |
是 |
- |
Array |
请求输入的问题。 |
max_tokens |
否 |
16 |
Int |
每个输出序列要生成的最大Tokens数量。 |
top_k |
否 |
-1 |
Int |
控制要考虑的前几个Tokens的数量的整数。设置为“-1”表示考虑所有Tokens。 适当降低该值可以减少采样时间。 |
top_p |
否 |
1.0 |
Float |
控制要考虑的前几个Tokens的累积概率的浮点数。 取值范围:0~1 设置为“1”表示考虑所有Tokens。 |
temperature |
否 |
1.0 |
Float |
控制采样的随机性的浮点数。较低的值使模型更加确定性,较高的值使模型更加随机。“0”表示贪婪采样。 |
stop |
否 |
None |
None/Str/List |
用于停止生成的字符串列表。返回的输出将不包含停止字符串。 例如,设置为["你","好"]时,在生成文本过程中,遇到“你”或者“好”将停止文本生成。 |
stream |
否 |
False |
Bool |
是否开启流式推理。默认为“False”,表示不开启流式推理。 |
n |
否 |
1 |
Int |
返回多条正常结果。
说明:
n建议取值不超过10,n值过大会导致性能劣化,显存不足时,推理请求会失败。 |
use_beam_search |
否 |
False |
Bool |
是否使用beam_search替换采样。 使用该参数时,如下参数必须按要求设置。
|
presence_penalty |
否 |
0.0 |
Float |
presence_penalty表示会根据当前生成的文本中新出现的词语进行奖惩。取值范围[-2.0,2.0]。 |
frequency_penalty |
否 |
0.0 |
Float |
frequency_penalty会根据当前生成的文本中各个词语的出现频率进行奖惩。取值范围[-2.0,2.0]。 |
length_penalty |
否 |
1.0 |
Float |
length_penalty表示在beam search过程中,对于较长的序列,模型会给予较大的惩罚。 使用该参数时,必须添加如下三个参数,且必须按要求设置。
|
ignore_eos |
否 |
False |
Bool |
ignore_eos表示是否忽略EOS并且继续生成Token。 |
返回示例如下所示。
{ "id": "cmpl-29f7a172056541449eb1f9d31cfac162", "object": "chat.completion", "created": 1723190150, "model": "Qwen2-7B", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "你好!很高兴能为你提供帮助。有什么问题我可以回答或帮你解决吗?" }, "logprobs": null, "finish_reason": "stop", "stop_reason": null } ], "usage": { "prompt_tokens": 20, "total_tokens": 38, "completion_tokens": 18 } }
参数 |
参数类型 |
描述 |
---|---|---|
id |
Str |
请求ID。 |
object |
Str |
请求任务。 |
created |
Int |
请求生成的时间戳。 |
model |
Str |
调用的模型名。 |
choices |
Array |
模型生成内容。 |
usage |
Object |
请求输入长度、输出长度和总长度。 |
错误码 |
错误内容 |
说明 |
---|---|---|
400 |
Bad Request |
请求包含语法错误。 |
403 |
Forbidden |
服务器拒绝执行。 |
404 |
Not Found |
服务器找不到请求的网页。 |
500 |
Internal Server Error |
服务内部错误。 |