更新时间:2024-08-16 GMT+08:00
分享

调用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的操作步骤:
    1. 登录华为云,在页面右上方单击“控制台”,进入华为云管理控制台。
      图1 控制台入口
    2. 在控制台右上角的账户名下方,单击“我的凭证”,进入“我的证”页面。
      图2 我的凭证
    3. “我的证”页面,选择访问密钥>新增访问密钥,如图3所示。
      图3 单击新增访问密钥
    4. 填写该密钥的描述说明,单击“确定”。根据提示单击“立即下载”,下载密钥。
      图4 新增访问密钥

    5. 密钥文件会直接保存到浏览器默认的下载文件夹中。打开名称为“credentials.csv”的文件,即可查看访问密钥(Access Key Id和Secret Access Key)。
    使用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认证的操作步骤:

    1. 登录ModelArts管理控制台。
    2. 在左侧导航栏中,选择“ModelArts Studio”进入ModelArts Studio大模型即服务平台。
    3. 在ModelArts Studio左侧导航栏中,选择“模型部署”进入服务列表。
    4. 单击待调用的服务名称,进入服务详情页面,获取“服务ID”
      图5 获取服务ID
    5. 返回ModelArts管理控制台,在左侧导航栏中,选择“模型部署 > 在线服务”进入在线服务列表。
    6. 根据4获取的“服务ID”找到MaaS模型服务,服务名称为“MAAS_服务ID”,单击操作列的“修改”进入修改服务页面。
    7. 在修改服务页面,打开“支持APP认证”的开关,从APP授权配置的下拉列表中选择需要配置的APP应用,如果没有可选项,可以单击右侧“创建应用”,新建应用。

      请勿修改其他参数,否则会导致服务部署或调用失败。

    8. 设置完成后单击“下一步”,确认修改信息后,单击“提交”
    9. 模型服务开启APP认证后,在ModelArts的在线服务列表,单击MaaS模型服务名称进入服务详情页。
    10. 选择调用指南页签,获取APP认证所需的服务“API接口公网地址”“AppKey”“AppSecret”“AppCode”
      图6 获取APP认证所需信息

      启用APP认证后,调用MaaS模型服务的API只支持使用此处获取的“API接口公网地址”

步骤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

表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

服务内部错误。

相关文档