调用MaaS部署的模型服务
在ModelArts Studio大模型即服务平台部署成功的模型服务支持在其他业务环境中调用。
约束限制
只有“状态”是“运行中”的模型服务才支持被调用。
步骤1:获取API Key
在调用MaaS部署的模型服务时,需要填写API Key用于接口的鉴权认证。
- 登录ModelArts管理控制台。
- 在左侧导航栏中,选择“ModelArts Studio”进入ModelArts Studio大模型即服务平台。
- 在ModelArts Studio左侧导航栏中,选择“鉴权管理”。
- 在“鉴权管理”页面,单击“创建API Key”,填写描述信息后,单击“确认”会返回“您的密钥”,请复制保存密钥,单击“关闭”后将无法再次查看密钥。
- 最多支持创建5个密钥,密钥只会在新建后显示一次,请妥善保存。
- 当密钥丢失将无法找回,请新建API Key获取新的访问密钥。
步骤2:调用MaaS模型服务进行预测
- 在ModelArts Studio左侧导航栏中,选择“模型部署”进入服务列表。
- 选择“我的服务”页签。
- 选择要调用的服务,单击操作列的“更多 > 调用”弹出调用页面。
- 选择是否启用内容审核,默认启用。
- 复制调用示例,修改参数后用于业务环境调用模型服务API。
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" # Send request. headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer yourApiKey' # 把yourApiKey替换成已获取的API Key。例如,获取的API Key是“1234abcd...”时,此处填写“Bearer 1234abcd...”。 } data = { "model": "Qwen2-7B", # 调用时的模型名称 "max_tokens": 20, "stream_options":{"include_usage":true}, "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。使用昇腾云909镜像的模型,开启流式输出时,需要新增stream_options参数,值为{"include_usage":true},才会打印token数。
表1 请求参数说明 参数
是否必选
默认值
参数类型
描述
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
返回多条正常结果。
- 不使用beam_search场景下,n取值建议为1≤n≤10。如果n>1时,必须确保不使用greedy_sample采样,也就是top_k > 1,temperature > 0。
- 使用beam_search场景下,n取值建议为1<n≤10。如果n=1,会导致推理请求失败。
说明:n建议取值不超过10,n值过大会导致性能劣化,显存不足时,推理请求会失败。
use_beam_search
否
False
Bool
是否使用beam_search替换采样。
使用该参数时,如下参数必须按要求设置。
- n:大于1
- top_p:1.0
- top_k:-1
- temperature:0.0
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过程中,对于较长的序列,模型会给予较大的惩罚。
使用该参数时,必须添加如下三个参数,且必须按要求设置。
- top_k:-1
- use_beam_search:true
- best_of:大于1
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 } }
表2 返回参数说明 参数
参数类型
描述
id
Str
请求ID。
object
Str
请求任务。
created
Int
请求生成的时间戳。
model
Str
调用的模型名。
choices
Array
模型生成内容。
usage
Object
请求输入长度、输出长度和总长度。
当调用失败时,可以根据错误码调整脚本或运行环境。表3 常见错误码 错误码
错误内容
说明
400
Bad Request
请求包含语法错误。
403
Forbidden
服务器拒绝执行。
404
Not Found
服务器找不到请求的网页。
500
Internal Server Error
服务内部错误。