只需幾步!用 vLLM 快速上手 DeepSeek 大模型部署
大語言模型的落地應用離不開高效推理框架的支持,vLLM以其卓越的性能在眾多框架中脫穎而出。本文將帶你深入探索如何使用vLLM框架部署DeepSeek-R1-Distill-Qwen大語言模型,無論是深度學習新手還是有經驗的開發者,都能從中獲取實用的知識和技能。
一、vLLM框架特性解析
1、高效內存管理:vLLM 的 PagedAttention 算法,通過動態分頁管理顯存,內存利用率提升 24倍,顯著降低硬件門檻。
2、吞吐量提升:支持 連續批處理 和 異步推理,在 A100 GPU 上吞吐量可達 HuggingFace Transformers 的 24倍,大幅提升推理效率。
3、無縫生態集成:與 HuggingFace 模型庫完美兼容,支持 50+主流大模型,并兼容 OpenAI API,便于開發者無縫遷移。
4、分布式推理支持:采用 張量并行 技術,4*A100 環境下推理速度提升 3.8倍,滿足高并發、低延遲需求。
二、環境配置指南
1、基礎環境要求
為了高效部署DeepSeek-R1-Distill-Qwen,推薦使用 Ubuntu 22.04 LTS 操作系統、Python 3.12 環境、CUDA 12.1 與 PyTorch 2.3.0,并配備至少 24GB 顯存的 NVIDIA GPU,以確保模型推理的高性能和穩定性。
2、安裝相關依賴
# 配置清華鏡像源加速下載
python -m pip install --upgrade pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 安裝核心依賴包
pip install modelscope==1.22.3
pip install openai==1.61.0
pip install vllm==0.7.1
首先,將pip升級到最新版本,確保能使用最新的功能和特性。然后,將pip源配置為清華大學的鏡像源,這樣在下載依賴包時能顯著提高下載速度,減少等待時間。
3、模型文件下載
from modelscope.hub.snapshot_download import snapshot_download
# 下載預訓練模型并指定緩存路徑
model_dir = snapshot_download('deepseek-ai/DeepSeek-R1-Distill-Qwen-7B', cache_dir='/root/autodl-tmp', revision='master')
這段代碼用modelscope庫的snapshot_download函數下載模型。deepseek-ai/DeepSeek-R1-Distill-Qwen-7B是模型在平臺上的名字,cache_dir是你要把模型存到哪里,你可以自己改,revision='master'表示下最新版本。
三、模型推理實踐
1、導入相關依賴包
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
import os
import json
# 自動下載模型時,指定使用modelscope; 否則,會從HuggingFace下載
os.environ['VLLM_USE_MODELSCOPE']='True'
2、定義LLM處理函數
def get_completion(prompts, model, tokenizer=None, max_tokens=8192, temperature=0.6, top_p=0.95, max_model_len=2048):
stop_token_ids = [151329, 151336, 151338]
# 創建采樣參數。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
3、指定模型地址&定義消息
# 初始化 vLLM 推理引擎
model='/root/autodl-tmp/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B' # 指定模型路徑
# model="deepseek-ai/DeepSeek-R1-Distill-Qwen-7B" # 指定模型名稱,自動下載模型
tokenizer = None
# 加載分詞器后傳入vLLM 模型,但不是必要的。
# tokenizer = AutoTokenizer.from_pretrained(model, use_fast=False)
text = ["請幫我推薦一種深圳到北京的出行方式<think>\n", ]
4、獲取輸出結果
# 思考需要輸出更多的 Token 數,max_tokens 設為 8K,根據 DeepSeek 官方的建議,temperature應在 0.5-0.7,推薦 0.6
outputs = get_completion(text, model, tokenizer=tokenizer, max_tokens=8192, temperature=0.6, top_p=0.95, max_model_len=2048)
# 輸出是一個包含 prompt、生成文本和其他信息的 RequestOutput 對象列表。
# 打印輸出。
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
if r"</think>" in generated_text:
think_content, answer_content = generated_text.split(r"</think>")
else:
think_content = ""
answer_content = generated_text
print(f"Prompt: {prompt!r}, Think: {think_content!r}, Answer: {answer_content!r}")
執行如下:
模型返回結果如下:
```
Prompt: '請幫我推薦一種深圳到北京的出行方式<think>\n', Think: '好的,我現在要幫用戶推薦從深圳到北京的出行方式
。。。。。。
希望這些信息能幫助您選擇合適的出行方式!如果需要更詳細的行程規劃或預訂建議,可以告訴我您的偏好,我會盡力幫助您。'
```
四、OpenAI API服務部署測試
DeepSeek-R1-Distill-Qwen 是一款高性能的蒸餾語言模型,它兼容 OpenAI API 協議,能夠通過 vLLM 框架快速創建一個本地的 OpenAI API 服務器。啟動的服務器默認監聽 http://localhost:8000,支持以下功能:
- Completions API:用于基本的文本生成任務,如生成文章、故事或郵件。
- Chat Completions API:用于對話任務,如構建聊天機器人。
1、發布OpenAI API服務
部署服務器時,可以指定以下參數:
--host 和--port:指定服務器地址和端口。
--model:指定模型路徑。
--chat-template:指定聊天模板。
--served-model-name:指定服務模型的名稱。
--max-model-len:指定模型的最大上下文長度。
以下是啟動命令:
python -m vllm.entrypoints.openai.api_server \
--model /root/autodl-tmp/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
--served-model-name DeepSeek-R1-Distill-Qwen-7B \
--max-model-len=2048
服務啟動如下:
此命令將啟動一個本地服務器,監聽 http://localhost:8000。
2、Completions API調用
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="sk-xxx")
response = client.completions.create(
model="DeepSeek-R1-Distill-Qwen-7B",
prompt="簡單介紹一下deepseek?<think>\n",
max_tokens=1024
)
print(response.choices[0].text)
在這段代碼中,使用`openai`庫創建`OpenAI`客戶端對象,指定`base_url`為本地啟動的vLLM服務地址`http://localhost:8000/v1`,`api_key`為任意值(因為在本地測試,這里主要用于滿足接口格式要求)。
模型響應輸出如下:
```
好的,我現在要介紹一下DeepSeek。首先,我得快速瀏覽一下用戶提供的內容,了解DeepSeek的基本信息。DeepSeek是一家專注實現AGI的中國的人工智能公司,由深度求索人工智能研究院成立,致力于AGI研究和落地。我知道AGI指的是通用人工智能,即在智力上超越人類的人工智能系統,具有自主學習、推理、解決問題等能力。所以DeepSeek的項目目標就是實現這一點。接下來,他們的研究領域包括認知科學、計算機科學、量子計算、腦機接口和元學習,這些都是AGI研究的重要方向。然后看了一下他們的方向,包括認知建模與理解、自由意志與決策、量子計算與算力提升、腦機交互與意識提升、元學習與自適應學習。。。。。。DeepSeek的成立標志著中國AI生態中的又一重要參與者,其目標不僅是技術突破,更是推動社會的整體發展。
```
3、Chat Completions API調用
chat_response = client.chat.completions.create(
model="DeepSeek-R1-Distill-Qwen-7B",
messages=[{"role": "user", "content": "我買了10個蘋果,給了你3個,自己吃了1個,還剩幾個?"}]
)
print(chat_response.choices[0].message.content)
此代碼用于調用Chat Completions API,通過`client.chat.completions.create`方法,傳入模型名稱和包含用戶消息的列表,獲取聊天模式下的推理結果,并打印模型生成的回答內容。在實際應用中,可以根據用戶需求,優化提示詞和消息列表,以獲得更準確、更有用的回答。
模型響應輸出如下:
```
你買了總共10個蘋果。
給了對方3個, yourself剩下10減去3等于7個蘋果。
接著,自己又吃了1個蘋果,剩下7減去1等于6個蘋果。
所以,最終剩下6個蘋果。
</think>
解答:
1. 總蘋果數:你最初有10個蘋果。
2. 給對方3個:
\( 10 - 3 = 7 \)
你剩下7個蘋果。
3. 自己吃了1個:
\( 7 - 1 = 6 \)
最終剩下6個蘋果。
答案:\boxed{6}
```
4、命令行調用OpenAI API接口
命令行調用示例如下:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-R1-Distill-Qwen-7B",
"prompt": "我買了10個蘋果,給了你3個,自己吃了1個,還剩幾個?<think>\n",
"max_tokens": 1024,
"temperature": 0
}'
執行結果如下:
五、最佳實踐建議
1. 顯存優化
對于配備24G顯存的3090顯卡,建議設置`max_model_len=2048`。因為模型長度與顯存占用密切相關,合理設置`max_model_len`,可以避免因模型長度過大導致顯存不足的問題,確保模型能夠穩定運行。如果需要處理更長的文本,可以考慮增加顯存或者優化模型結構。
2. 溫度參數
在不同的任務場景下,合理調整溫度參數(temperature)至關重要。對于創造性任務,如文本創作、故事生成等,建議將temperature設置為0.7 - 0.9,這樣可以使生成的文本更加多樣化和富有創意;對于邏輯推理任務,如數學計算、知識問答等,建議將temperature設置為0.3 - 0.5,以確保生成的文本更加準確和邏輯嚴謹。
總結
通過本文的詳細介紹,你已經掌握了使用vLLM框架部署DeepSeek-R1-Distill-Qwen大語言模型的全流程。從vLLM框架的特性解析,到環境配置、模型部署、API接口測試,再到最佳實踐建議,每一步都為你在大語言模型部署的道路上提供了堅實的指引。希望你在實際應用中,能夠靈活運用這些知識,充分發揮vLLM和DeepSeek-R1-Distill-Qwen模型的優勢,實現更多創新的應用。
本文轉載自??小兵的AI視界??,作者: AGI小兵 ????
