5分钟操作EAS一键部署通义千问模型

本文为您介绍如何通过EAS一键部署基于开源模型通义千问的WebUI应用,以及使用WebUIAPI进行模型推理。

背景信息

通义千问-7B(Qwen-7B)是阿里云研发的通义千问大模型系列的70亿参数规模的模型。Qwen-7B是基于Transformer的大语言模型, 在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍、代码等。同时,在Qwen-7B的基础上,我们使用对齐机制开发了基于大语言模型的AI助手Qwen-7B-Chat。

前提条件

已开通PAI(EAS)后付费,并创建默认工作空间。具体操作,请参见开通PAI并创建默认工作空间

部署通义千问模型

将通义千问模型部署为AI-Web应用服务,具体操作步骤如下。

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS

  2. 单击部署服务,然后在自定义模型部署区域,单击自定义部署

  3. 自定义部署页面,配置以下关键参数。

    参数

    描述

    服务名称

    自定义服务名称。本案例使用的示例值为:qwen_demo

    部署方式

    选择镜像部署,并选中开启Web应用

    镜像配置

    选择官方镜像 > modelscope-inference > modelscope-inference:1.8.1

    运行命令

    python app.py

    端口号

    8000

    环境变量

    单击添加,配置以下环境变量:

    • MODEL_ID输入:qwen/Qwen-7B-Chat

    • TASK输入:chat

    • REVISION输入:v1.0.5

    相关配置可参考modelscope上的模型介绍。

    资源类型

    选择公共资源

    部署资源

    资源规格选择GPU > ml.gu7i.c16m60.1-gu30

    说明

    本文模型推理服务需要选择GPU类型,且内存至少20G,从性价比角度推荐使用ml.gu7i.c16m60.1-gu30

    额外系统盘

    输入系统盘大小(GB):100

  4. 单击部署,进入模型在线服务(EAS),等待服务状态变更为运行中,表示模型部署完成。

    说明

    一般在5分钟能够完成部署,具体与资源紧缺程度、服务负载以及配置有关。

进行模型推理

模型部署完成后,可以使用多种方式进行模型推理。

使用WebUI进行模型推理

  1. 单击目标服务的服务方式 > 查看Web应用,打开WebUI页面。

  2. WebUI页面,进行模型推理验证。

    image.png

使用在线调试进行模型推理

  1. 单击目标服务的操作列下的在线调试,打开在线调试页面。

  2. 在请求的body输入框中输入相应的请求json,点击发送请求,在右侧调试信息窗格中查看调试结果。

    说明

    本文模型调试信息格式为list,input字段是输入内容;history字段是历史对话,每个item是长度为2list,第一个元素是问题,第二个元素是当时的回答。

    1. 开始可以输入没有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":[["浙江的省会在哪里?","浙江的省会是杭州。"]]}
    2. 可以将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进行调用。

  1. 在服务概览页面,单击基本信息区块中查看调用信息,得到调用的公网地址和Token

    image.png

  2. 在终端中,根据上面信息进行调用。

    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)

使用流式方式进行模型推理

  1. 在服务概览页面,单击基本信息区块中查看调用信息,得到调用的公网地址和Token

    image.png

  2. 在终端中,根据上面信息执行以下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)