本文為您介紹如何通過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)。