全部產品
Search
文件中心

Platform For AI:5分鐘操作EAS一鍵部署通義千問模型

更新時間:Nov 30, 2024

本文為您介紹如何通過EAS一鍵部署基於開源模型通義千問的WebUI應用,以及使用WebUI和API進行模型推理。

背景資訊

通義千問-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頁面,進行模型推理驗證。

使用線上調試進行模型推理

  1. 單擊目標服務的操作列下的線上調試,開啟線上調試頁面。

  2. 在請求的body輸入框中輸入相應的請求json,點擊發送請求,在右側調試資訊窗格中查看調試結果。

    說明

    本文模型調試資訊格式為list,input欄位是輸入內容;history欄位是歷史對話,每個item是長度為2的list,第一個元素是問題,第二個元素是當時的回答。

    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)