本文為您介紹如何通過EAS一鍵部署基于開源模型通義千問的WebUI應用,以及使用WebUI和API進行模型推理。
背景信息
通義千問-7B(Qwen-7B)是阿里云研發的通義千問大模型系列的70億參數規模的模型。Qwen-7B是基于Transformer的大語言模型, 在超大規模的預訓練數據上進行訓練得到。預訓練數據類型多樣,覆蓋廣泛,包括大量網絡文本、專業書籍、代碼等。同時,在Qwen-7B的基礎上,我們使用對齊機制開發了基于大語言模型的AI助手Qwen-7B-Chat。
前提條件
已開通PAI(EAS)后付費,并創建默認工作空間。具體操作,請參見開通PAI并創建默認工作空間。
部署通義千問模型
將通義千問模型部署為AI-Web應用服務,具體操作步驟如下。
登錄PAI控制臺,在頁面上方選擇目標地域,并在右側選擇目標工作空間,然后單擊進入EAS。
單擊部署服務,然后在自定義模型部署區域,單擊自定義部署。
在自定義部署頁面,配置以下關鍵參數。
參數
描述
服務名稱
自定義服務名稱。本案例使用的示例值為:qwen_demo。
部署方式
選擇鏡像部署,并選中開啟Web應用。
鏡像配置
選擇
。運行命令
python app.py
端口號
8000
環境變量
單擊添加,配置以下環境變量:
MODEL_ID輸入:qwen/Qwen-7B-Chat
TASK輸入:chat
REVISION輸入:v1.0.5
相關配置可參考modelscope上的模型介紹。
資源類型
選擇公共資源。
部署資源
資源規格選擇
說明本文模型推理服務需要選擇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)。