最近在給我們的客戶私有化部署我們的TorchV系統,客戶給的資源足夠充裕,藉此機會記錄下部署千問72B模型的過程,分享給大家!
一、基礎資訊
-
作業系統:Ubuntu 22.04.3 LTS
-
GPU: A800(80GB) * 8
-
記憶體:1TB
二、軟體資訊
Python: 3.10
Pytorch:2.3.0
Transformers:4.43.0
vLLM:0.5.0
cuda: 12.2
模型: QWen2-72B-Instruct
三、安裝步驟
1、安裝Conda
Conda 是一個開源的包管理系統和環境管理系統,旨在簡化軟體包的安裝、配置和使用
對於Python環境的部署,能夠非常方便的切換環境。
可以透過conda官網連結下載安裝:https://www.anaconda.com/download#downloads
# 下載
wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
# 安裝
bash Anaconda3-2023.09-0-Linux-x86_64.sh
# 配置環境變數
echo 'export PATH="/path/to/anaconda3/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
安裝完成後,透過命令驗證安裝是否成功
conda --version
安裝完成之後,可以配置映象源,方便快速下載依賴包
# 配置源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda的相關命令
# 指定虛擬環境名稱為llm,python版本是3.9
conda create --name llm python=3.9
# 啟用conda新環境
conda activate llm
# 檢視當前環境列表
conda env list
2、下載QWen2-72B-Instruct模型
Huggingface:https://huggingface.co/Qwen/Qwen2-72B-Instruct
ModelScope:https://modelscope.cn/models/qwen/Qwen2-72B-Instruct
兩個地址都可以下載,下載完成後,將模型檔案存放在伺服器上。
⚠️ 注意伺服器的磁碟空間。
3、安裝Pytorch等環境依賴資訊
⚠️ 在安裝Pytorch時,需要保證和cuda驅動版本保持一致,不然會出現各種莫名其妙的問題
版本選擇參考:https://pytorch.org/get-started/locally/
透過conda建立一個新的環境,然後切換後安裝依賴包
4、 安裝vLLM
vLLM
框架是一個高效的大語言模型推理和部署服務系統,具備以下特性:
- 高效的記憶體管理:透過
PagedAttention
演算法,vLLM
實現了對KV
快取的高效管理,減少了記憶體浪費,最佳化了模型的執行效率。 - 高吞吐量:
vLLM
支援非同步處理和連續批處理請求,顯著提高了模型推理的吞吐量,加速了文字生成和處理速度。 - 易用性:
vLLM
與HuggingFace
模型無縫整合,支援多種流行的大型語言模型,簡化了模型部署和推理的過程。相容OpenAI
的API
伺服器。 - 分散式推理:框架支援在多
GPU
環境中進行分散式推理,透過模型並行策略和高效的資料通訊,提升了處理大型模型的能力。 - 開源共享:
vLLM
由於其開源的屬性,擁有活躍的社群支援,這也便於開發者貢獻和改進,共同推動技術發展。
GitHub:https://github.com/vllm-project/vllm
文件:https://docs.vllm.ai/en/latest/
在透過conda
建立了初始環境後,可以直接透過pip
進行安裝
pip install vllm
更多的安裝方式,可以參考官網文件:https://docs.vllm.ai/en/stable/getting_started/installation.html
5、模型驗證
可以透過一個python指令碼來驗證當前的模型是否可用
指令碼如下:
# test.py
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
import os
import json
def get_completion(prompts, model, tokenizer=None, max_tokens=512, temperature=0.8, top_p=0.95, max_model_len=2048):
stop_token_ids = []
# 建立取樣引數。temperature 控制生成文字的多樣性,top_p 控制核心取樣的機率
sampling_params = SamplingParams(temperature=temperature, top_p=top_p, max_tokens=max_tokens, stop_token_ids=stop_token_ids)
# 初始化 vLLM 推理引擎
llm = LLM(model=model, tokenizer=tokenizer, max_model_len=max_model_len,trust_remote_code=True)
outputs = llm.generate(prompts, sampling_params)
return outputs
if __name__ == "__main__":
# 初始化 vLLM 推理引擎
model='/mnt/soft/models/qwen/Qwen2-72B-Instruct' # 指定模型路徑
# model="qwen/Qwen2-7B-Instruct" # 指定模型名稱,自動下載模型
tokenizer = None
# 載入分詞器後傳入vLLM 模型,但不是必要的。
# tokenizer = AutoTokenizer.from_pretrained(model, use_fast=False)
text = ["你好,幫我介紹一下什麼時大語言模型。",
"可以給我將一個有趣的童話故事嗎?"]
outputs = get_completion(text, model, tokenizer=tokenizer, max_tokens=512, temperature=1, top_p=1, max_model_len=2048)
# 輸出是一個包含 prompt、生成文字和其他資訊的 RequestOutput 物件列表。
# 列印輸出。
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
在終端執行python指令碼,可以看到控制檯是否正常輸出
python test.py
6、啟動服務 & 包裝OpenAI格式的介面
驗證模型可用後,那麼就可以透過vLLM提供的模組,將整個模型服務包裝成OpenAI格式的HTTP服務,提供給上層應用使用。
需要注意的引數配置:
--model
引數指定模型名稱&路徑。--served-model-name
指定服務模型的名稱。--max-model-len
指定模型的最大長度,如果不指定,那麼會從模型配置檔案中自動載入,QWen2-72B模型支援最大128K--tensor-parallel-size
指定多個GPU服務執行,QWen2-72B的模型,單卡GPU無法支撐。--gpu-memory-utilization
用於模型執行器的GPU記憶體分數,範圍從0到1。例如,值為0.5意味著GPU記憶體利用率為50%。如果未指定,將使用預設值0.9。vllm透過此引數預分配了部分視訊記憶體,避免模型在呼叫的時候頻繁的申請視訊記憶體。
關於vllm的更多引數,可以參考官方文件:https://docs.vllm.ai/en/stable/models/engine_args.html
這裡可以使用tmux
命令來進行服務的執行。
tmux
(Terminal Multiplexer)是一個強大的終端複用器,可以讓使用者在一個終端視窗中同時使用多個會話。使用tmux
可以提高工作效率,便於管理長期執行的任務和多工操作
python3 -m vllm.entrypoints.openai.api_server --model /mnt/torchv/models/Qwen2-72B-Instruct --served-model-name QWen2-72B-Instruct --tensor-parallel-size 8 --gpu-memory-utilization 0.7
出現埠等資訊則代表當前的模型服務啟動成功!!!
首先建立一個新會話
tmux new -t llm
進入會話
tmux attach -t llm
啟動命令:
python -m xxx
退出當前會話
如果沒反應就多試幾次
英文輸入下 ctrl + b 然後輸入d
透過curl命令驗證大模型OpenAI介面服務是否可用,指令碼如下:
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "QWen2-72B-Instruct",
"messages": [
{
"role": "user",
"content": "給我講一個童話故事"
}
],
"stream": true,
"temperature": 0.9,
"top_p": 0.7,
"top_k": 20,
"max_tokens": 512
}'
四、總結
目前的開源生態已經非常成熟了,vLLM這樣的工具能夠輕鬆實現對大模型的快速部署,工作效率上大大提升
五、References
官網資源等資訊
資源 | 地址 |
---|---|
QWen | GitHub:https://github.com/QwenLM/Qwen Huggingface:https://huggingface.co/Qwen ModelScope:https://modelscope.cn/organization/qwen?tab=model docs:https://qwen.readthedocs.io/zh-cn/latest/getting_started/quickstart.html# |
Pytorch | https://pytorch.org/get-started/locally/ |
Conda | https://www.anaconda.com |
vLLM | https://docs.vllm.ai/en/latest/getting_started/installation.html |
權重檔案下載不完全
在本次部署過程中,碰到了下載模型權重檔案不完整的情況,導致透過vLLM
部署不起來,可以透過Linux的命令sha256sum
工具來對模型權重檔案進行檢查,對比網站上的模型權重檔案的sha256是否一致,如果不一致,需要重新下載安裝
命令如下:
sha256sum your_local_file