只需几步!用 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 pippip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple# 安装核心依赖包pip install modelscope==1.22.3pip install openai==1.61.0pip 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, SamplingParamsfrom transformers import AutoTokenizerimport osimport 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 = [151329151336151338]    # 创建采样参数。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.6outputs = 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_textprint(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。

2Completions 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生态中的又一重要参与者,其目标不仅是技术突破,更是推动社会的整体发展。

“`

3Chat 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接口测试,再到最佳实践建议,每一步都为你在大语言模型部署的道路上提供了坚实的指引。希望你在实际应用中,能够灵活运用这些知识,充分发挥vLLMDeepSeek-R1-Distill-Qwen模型的优势,实现更多创新的应用。

阅读

1.手把手教你本地部署DeepSeek-R1大模型并发布API服务!

2.万字干货!DeepSeek教程:新手入门全攻略(建议收藏)

(文:小兵的AI视界)

欢迎分享

发表评论