本文为您介绍如何通过EAS一键部署基于开源模型通义千问的WebUI应用,以及使用WebUI和API进行模型推理。
背景信息
通义千问-7B(Qwen-7B)是阿里云研发的通义千问大模型系列的70亿参数规模的模型。Qwen-7B是基于Transformer的大语言模型, 在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍、代码等。同时,在Qwen-7B的基础上,我们使用对齐机制开发了基于大语言模型的AI助手Qwen-7B-Chat。
前提条件
已开通PAI(EAS)后付费,并创建默认工作空间。具体操作,请参见开通PAI并创建默认工作空间。
部署通义千问模型
将通义千问模型部署为AI-Web应用服务,具体操作步骤如下。
进入模型在线服务页面。
登录PAI控制台。
在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。
在工作空间页面的左侧导航栏选择模型部署>模型在线服务(EAS),进入模型在线服务(EAS)页面。
在模型在线服务(EAS)页面,单击部署服务,在自定义模型部署区域,单击自定义部署。
在部署服务页面,配置以下关键参数。
参数
描述
服务名称
自定义服务名称。本案例使用的示例值为:qwen_demo。
部署方式
选择镜像部署AI-Web应用。
镜像选择
选择
。环境变量
MODEL_ID输入:qwen/Qwen-7B-Chat
TASK输入:chat
REVISION输入:v1.0.5
相关配置可参考modelscope上的模型介绍。
运行命令
服务运行命令:
python app.py
输入端口号:
8000
资源组种类
选择公共资源组。
资源配置方法
选择常规资源配置。
资源配置选择
选择
说明本文模型推理服务需要选择GPU类型,且内存至少20G,从性价比角度推荐使用ml.gu7i.c16m60.1-gu30。
额外系统盘
输入系统盘大小(GB):100。
单击部署,进入模型在线服务(EAS),等待服务状态变更为运行中,表示模型部署完成。
说明一般在5分钟能够完成部署,具体与资源紧缺程度、服务负载以及配置有关。
进行模型推理
模型部署完成后,可以使用多种方式进行模型推理。
使用WebUI进行模型推理
单击目标服务的
,打开WebUI页面。
在WebUI页面,进行模型推理验证。
使用在线调试进行模型推理
单击目标服务的操作列下的在线调试,打开在线调试页面。
在请求的body输入框中输入相应的请求json,点击发送请求,在右侧调试信息窗格中查看调试结果。
说明本文模型调试信息格式为list,
input
字段是输入内容;history
字段是历史对话,每个item是长度为2的list,第一个元素是问题,第二个元素是当时的回答。开始可以输入没有
history
的请求:{"input": "浙江的省会在哪里?"}
服务会返回结果,并给出
history
字段,示例如下。Status Code: 200 Content-Type: application/json Date: Mon, 14 Aug 2023 12:01:45 GMT Server: envoy Vary: Accept-Encoding X-Envoy-Upstream-Service-Time: 511 Body: {"response":"浙江的省会是杭州。","history":[["浙江的省会在哪里?","浙江的省会是杭州。"]]}
可以将history直接带入下次请求中,实现连续对话。
{"input": "江苏呢?", "history": [["浙江的省会在哪里?", "浙江的省会是杭州。"]]}
服务返回结果示例:
Status Code: 200 Content-Type: application/json Date: Mon, 14 Aug 2023 12:01:23 GMT Server: envoy Vary: Accept-Encoding X-Envoy-Upstream-Service-Time: 522 Body: {"response":"江苏的省会是南京。","history":[["浙江的省会在哪里?","浙江的省会是杭州。"],["江苏呢?","江苏的省会是南京。"]]}
使用API进行模型推理
您可以选择直接使用API进行调用。
在服务详情页签,单击基本信息区块中查看调用信息,得到调用的公网地址和Token。
在终端中,根据上面信息进行调用。
curl -d '{"input": "江苏呢?", "history": [["浙江的省会在哪里?", "浙江的省会是杭州。"]]}' -H "Authorization: xxx" http://xxxx.com
得到返回结果,示例如下:
{"response":"江苏的省会是南京。","history":[["浙江的省会在哪里?","浙江的省会是杭州。"],["江苏呢?","江苏的省会是南京。"]]}
实际使用中,可以根据需求向服务发送HTTP请求,也可以参考PAI提供的SDK进行调试。Python代码调用示例:
import requests
import json
data = {"input": "你是谁?"}
response = requests.post(url='http://qwen-demo.16623xxxxx.cn-hangzhou.pai-eas.aliyuncs.com/',
headers={"Authorization": "yourtoken"},
data=json.dumps(data))
print(response.text)
data = {"input": "你能做什么?", "history": json.loads(response.text)["history"]}
response = requests.post(url='http://qwen-demo.16623xxxxx.cn-hangzhou.pai-eas.aliyuncs.com/',
headers={"Authorization": "yourtoken"},
data=json.dumps(data))
print(response.text)
使用流式方式进行模型推理
在服务详情页签,单击基本信息区块中查看调用信息,得到调用的公网地址和Token。
在终端中,根据上面信息执行以下Python代码发送流式请求。
#encoding=utf-8 from websockets.sync.client import connect import os import platform def clear_screen(): if platform.system() == "Windows": os.system("cls") else: os.system("clear") def print_history(history): print("欢迎使用 Qwen-7B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序") for pair in history: print(f"\nUser: {pair[0]}\nQwen-7B: {pair[1]}") def main(): history, response = [], '' clear_screen() print_history(history) with connect("<service_url>", additional_headers={"Authorization": "<token>"}) as websocket: while True: query = input("\nUser: ") if query.strip() == "stop": break websocket.send(query) while True: msg = websocket.recv() if msg == '<EOS>': break clear_screen() print_history(history) print(f"\nUser: {query}") print("\nQwen-7B: ", end="") print(msg) response = msg history.append((query, response)) if __name__ == "__main__": main()
其中:
<service_url>:需要替换为步骤1中获取的服务访问地址,并将访问地址中前端的http替换为ws。
<token>:需要替换为步骤1中获取的服务Token。
相关文档
更多关于EAS产品的内容介绍,请参见模型在线服务(EAS)。