在趨動(dòng)云上使用xinference部署大模型 原創(chuàng)
前言
本文將介紹如何在趨動(dòng)云平臺(tái)上使用xinference部署對(duì)話模型、向量化模型以及多模態(tài)模型。
xinference簡(jiǎn)介
xinference官網(wǎng)
官網(wǎng)說(shuō)明:https://inference.readthedocs.io/zh-cn/latest/getting_started/installation.html
xinference可以部署的模型類別
- chat對(duì)話模型
- embedding向量化模型
- rerank模型
- vl-chat多模態(tài)模型
環(huán)境準(zhǔn)備
選擇鏡像
- 選擇鏡像環(huán)境
安裝xinference
xinference支持的引擎有:
- transformers
- vllm
- llama.cpp
- SGlong引擎 .....
本篇文章,我們嘗試使用transformers引擎,部署Qwen2-0.5B-Instruct對(duì)話模型。
# 安裝transformers引擎
pip install "xinference[transformers]"
# 安裝sentence-transformers
pip install sentence-transformers
部署chat對(duì)話模型
下載模型
切換至??/gemini/code?
?目錄下,下載模型:
git lfs install
git clone https://www.modelscope.cn/Qwen/Qwen2.5-0.5B-Instruct.git
注意事項(xiàng): 此處也可以在啟動(dòng)項(xiàng)目時(shí),選擇模型加載,在趨動(dòng)云的公共模型中選擇?
?Qwen2.5-0.5B-Instruct?
?模型。
啟動(dòng)xinference
1. 在命令行中啟動(dòng)??supervisor?
?? 進(jìn)程:??xinference-supervisor -H 0.0.0.0?
?運(yùn)行結(jié)果:
2. 新建一個(gè)terminal,啟動(dòng)??Worker?
?? 進(jìn)程:??xinference-worker -e http://127.0.0.1:9997 -H 0.0.0.0?
?運(yùn)行結(jié)果:
此處的?
?9997?
?應(yīng)該與supervisor啟動(dòng)時(shí)指定的端口一致。
端口映射
在趨動(dòng)云控制臺(tái)的右側(cè)"端口",添加端口映射如下:
啟動(dòng)對(duì)話模型
瀏覽器訪問(wèn)http://direct.virtaicloud.com:40336
?
?http://direct.virtaicloud.com:40336?
?是上一步端口映射后,趨動(dòng)云提供的外網(wǎng)訪問(wèn)地址。
在??language models?
??選擇??chat?
??模型,并搜索??qwen2.5?
?模型
使用pwd命令獲取趨動(dòng)云上已下載Qwen模型的的絕對(duì)路徑
配置模型必選參數(shù)
注意事項(xiàng): 因?yàn)槲覀兿螺d的模型為Qwen2.5-0.5B-Instruct,所以?
?Model size?
??為??0_5?
?,此處應(yīng)根據(jù)實(shí)際情況選擇。
配置模型路徑
注意事項(xiàng):
- Model path為上述第3步中獲取的模型在趨動(dòng)云上的絕對(duì)路徑。
- Model UID用于后續(xù)調(diào)用使用,此處我們配置為?
?Qwen2.5-0.5B-Instruct?
?。如果不配置的話,會(huì)使用默認(rèn)的Model UID,在后續(xù)調(diào)用時(shí)注意調(diào)用代碼中的傳參內(nèi)容。
點(diǎn)擊啟動(dòng),稍后片刻,頁(yè)面會(huì)顯示啟動(dòng)成功后的內(nèi)容。
調(diào)用驗(yàn)證
from openai importOpenAI
openai_api_key ="EMPTY"
openai_api_base ="http://direct.virtaicloud.com:40336/v1"
client =OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
chat_response = client.chat.completions.create(
model="Qwen2.5-0.5B-Instruct",
messages=[
{"role":"system","content":"你是一個(gè)很有用的助手。"},
{"role":"user","content":"中華人民共和國(guó)的首都是哪里?"},
]
)
print("Chat response:", chat_response)
運(yùn)行結(jié)果:
注意事項(xiàng):
- 示例中,?
?openai_api_base?
?需要配置映射端口后的地址,讀者需要根據(jù)實(shí)際情況修改。- 示例中,?
?model="Qwen2.5-0.5B-Instruct"?
??要與在??xinference?
??中配置??Model UID?
?的內(nèi)容一致。
部署chat對(duì)話模型(微調(diào)訓(xùn)練過(guò)的)
下載模型
此處,我們?cè)谮厔?dòng)云啟動(dòng)時(shí),選擇曾經(jīng)微調(diào)的一個(gè)醫(yī)療大模型??Qwen2-7B-final?
?并加載。
備注說(shuō)明: 該模型是之前我微調(diào)過(guò)的一個(gè)醫(yī)療大模型,具體微調(diào)過(guò)程請(qǐng)見(jiàn)【課程總結(jié)】day24(上):大模型三階段訓(xùn)練方法(LLaMa Factory)。
啟動(dòng)模型
- 在Launch頁(yè)面,選擇?
?chat?
??并搜索??qwen2?
??,選擇??qwen2-instruct?
?。
2. 配置模型必選參數(shù):
- 配置模型路徑:
注意事項(xiàng):
- 該模型是基于?
?Qwen2-7B-instruct?
??微調(diào)的,所以??Model size?
??選擇??7_0?
?。- 該模型在趨動(dòng)云上的絕對(duì)路徑為:?
?/gemini/pretrain/Qwen2-7B-final?
?。
- 點(diǎn)擊啟動(dòng),稍后片刻,頁(yè)面會(huì)顯示啟動(dòng)成功后的內(nèi)容。
調(diào)用驗(yàn)證
from openai importOpenAI
openai_api_key ="EMPTY"
openai_api_base ="http://direct.virtaicloud.com:40336/v1"
client =OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
chat_response = client.chat.completions.create(
model="qwen2-instruct",
messages=[
{"role":"system","content":"你是一個(gè)很有用的助手。"},
{"role":"user","content":"我最近失眠比較厲害,請(qǐng)問(wèn)應(yīng)該如何診治?"},
]
)
print("Chat response:", chat_response)
運(yùn)行結(jié)果:
注意事項(xiàng): 示例中, ?
?model="qwen2-instruct"?
??要與在??xinference?
??中配置??Model UID?
?的內(nèi)容一致。
部署embeddign模型
- 前置步驟與部署chat模型的操作一致,只是配置Model UID和Model Path時(shí) 略有不同。
部署vl-chat多模態(tài)模型
前置步驟與部署chat模型的操作一致,此處不再贅述。
下載模型
此處,我們?cè)谮厔?dòng)云啟動(dòng)時(shí),在模型廣場(chǎng)搜索??Qwen-VL-chat?
?并加載。
備注說(shuō)明: 該模型是在趨動(dòng)云模型廣場(chǎng)搜索的一個(gè)Qwen的多模態(tài)大模型。
啟動(dòng)模型
- 在Launch頁(yè)面,選擇?
?vl-chat?
??并搜索??qwen?
?。
2. 配置模型必選參數(shù):
3. 配置模型路徑:
注意事項(xiàng): 該模型在趨動(dòng)云上的絕對(duì)路徑為:?
?/gemini/pretrain2/Qwen-VL-Chat?
?。
- 點(diǎn)擊啟動(dòng),稍后片刻,頁(yè)面會(huì)顯示啟動(dòng)成功后的內(nèi)容。
調(diào)用驗(yàn)證
from openai importOpenAI
import base64
# 配置OpenAI客戶端
openai_api_key ="EMPTY"
openai_api_base ="http://direct.virtaicloud.com:40336/v1"# 請(qǐng)根據(jù)實(shí)際端口映射地址修改
client =OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
def encode_image_to_base64(image_path):
"""將圖片轉(zhuǎn)換為base64編碼"""
withopen(image_path,"rb")as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
def chat_with_image(image_path, prompt):
"""與多模態(tài)模型對(duì)話"""
# 將圖片轉(zhuǎn)換為base64
base64_image = encode_image_to_base64(image_path)
messages=[
{
"role":"user",
"content":[
{"type":"text","text":prompt},
{
"type":"image_url",
"image_url":{
"url":f"data:image/png;base64,{base64_image}"
}
}
]
}
]
# 調(diào)用模型
# try:
response = client.chat.completions.create(
model="qwen-vl-chat",# 使用部署的多模態(tài)模型名稱
messages=messages,
max_tokens=1024,
temperature=0.7,
response_format={"type":"text"}# 指定響應(yīng)格式為文本
)
return response.choices[0].message.content
# except Exception as e:
# return f"調(diào)用出錯(cuò): {str(e)}"
if __name__ =="__main__":
# 測(cè)試調(diào)用
image_path ="./腦部CT.png"# 替換為實(shí)際的圖片路徑
prompt ="這張圖片中有什么內(nèi)容?請(qǐng)?jiān)敿?xì)描述。"
result = chat_with_image(image_path, prompt)
print("模型回復(fù):", result)
圖片:
運(yùn)行結(jié)果:
常見(jiàn)問(wèn)題
問(wèn)題1:Qwen2-vl-chat模型部署后,調(diào)用時(shí)報(bào)錯(cuò):??ValueError: No chat template is set for this processor.?
??。 問(wèn)題原因:查看Xinference的日志,提示不支持??Qwen2-vl?
?模型。
本文轉(zhuǎn)載自公眾號(hào)一起AI技術(shù) 作者:熱情的Dongming
