QWen2-72B-Instruct模型安裝部署過程

Knife4j發表於2024-08-07

最近在給我們的客戶私有化部署我們的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 支援非同步處理和連續批處理請求,顯著提高了模型推理的吞吐量,加速了文字生成和處理速度。
  • 易用性vLLMHuggingFace 模型無縫整合,支援多種流行的大型語言模型,簡化了模型部署和推理的過程。相容 OpenAIAPI 伺服器。
  • 分散式推理:框架支援在多 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.9vllm透過此引數預分配了部分視訊記憶體,避免模型在呼叫的時候頻繁的申請視訊記憶體

關於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

相關文章