使用vLLM部署DeepSeek-R1-Distill-Qwen-7B模型:从环境配置到高效推理
vLLM部署DeepSeek-R1-Distill-Qwen-7B模型
- 前言
- vLLM
- 概述
- 核心特点
- 环境准备
- 安装vLLM
- 下载模型
- Hugging Face
- Models Sope
- 使用vLLM进行模型推理
- 启动API服务
- 使用API进行推理
- API接口
- 模型列表
- 文本生成(/v1/completions)
- 聊天生成(/v1/chat/completions)
- Python脚本请求接口
- OpenAI Completions API
- OpenAI Chat API
- vllm serve命令大全
前言
近日,基于DeepSeek-R1-Distill-Qwen-7B模型进行微调训练后,需要将其进行部署,以执行推理任务。
DeepSeek-R1-Distill-Qwen-7B是一个基于Qwen架构的蒸馏模型,参数量为70亿,适用于多种自然语言处理任务,如文本生成、问答系统等。然而,大模型的推理通常面临内存占用高、计算效率低的问题。
vLLM作为一个高效的大模型推理框架,通过其创新的PagedAttention机制,能够显著提升推理性能,是部署此类大模型的理想选择。
vLLM
概述
vLLM是一个高效、灵活且易于使用的大语言模型(LLM)
推理和服务
框架,专注于优化大规模语言模型的推理性能。
vLLM是一个专注于大语言模型推理的高性能框架,通过创新的PagedAttention 机制和深度优化,显著提升了推理效率和内存利用率。无论是工业级应用还是学术研究,vLLM 都提供了一个强大且灵活的工具,帮助用户更高效地部署和运行大语言模型。
核心特点
1.高效的内存管理:
通过PagedAttention机制,vLLM将注意力计算中的键值对(KV Cache)分页存储,类似于操作系统的虚拟内存管理。这种方式大大减少了内存碎片,提高了内存利用率。
支持动态批处理(Dynamic Batching),能够更高效地利用 GPU 资源。
2.高性能推理:
vLLM 针对大语言模型的推理进行了深度优化,支持高吞吐量和低延迟的推理任务。
在相同硬件条件下,vLLM 的推理速度通常比传统框架(如 Hugging Face Transformers)快数倍。
3.易用性:
提供简洁的 API,支持快速部署和集成。
兼容 Hugging Face 模型库,用户可以轻松加载和运行预训练的大语言模型(如 LLaMA、GPT 等)。
4.可扩展性:
支持多 GPU 推理,能够处理超大规模的模型。
适用于多种应用场景,如聊天机器人、文本生成、代码补全等。
5.开源:
vLLM 是一个开源项目,代码托管在 GitHub 上,社区活跃,持续更新。
环境准备
在开始之前,需要准备好运行环境。以下是本次运行的软硬件配置:
硬件详情
GPU:32GB显存(以FP16加载模型大约14G + 额外显存)
内存:100GB
存储:1024GB
软件详情
操作系统:Linux(如:Ubuntu 22.04)
Python:3.10
CUDA:12.4
PyTorch:2.5.1
vLLM:最新版本(0.7.2)
安装vLLM
首先,需要安装vLLM框架及其依赖。
1:创建虚拟环境
conda create -n vllm python=3.10
conda activate vllm
2:安装 PyTorch
查看当前服务器GPU的CUDA版本信息:
# nvidia-smi
Thu Feb 13 02:23:14 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15 Driver Version: 550.54.15 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
这里CUDA版本:12.4
,访问PyTorch官网下载CUDA版本安装对应的PyTorch,这里选择下载PyTorch最新版本2.5.1
conda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia
pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu124
验证安装:如果输出版本号,说明安装成功。
# python -c "import torch;print(torch.__version__)"
2.5.1+cu124
注意:根据你的CUDA版本安装对应的PyTorch
3:安装vLLM
pip install vllm
验证安装:如果输出版本号,说明安装成功。
# python -c "import vllm; print(vllm.__version__)"
0.7.2
注意:经测试,最新版vllm的安装会自动适配合适的PyTorch自动安装
下载模型
Hugging Face
vLLM支持直接从Hugging Face加载模型,可以使用以下代码下载并加载模型。
1.安装Hugging Face Transformers(安装vllm时会默认会自动安装)
pip install transformers
2.下载模型
from transformers import AutoModelForCausalLM, AutoTokenizer
# 指定下载路径
cache_dir = "/root/models"
# 加载模型和分词器,并指定缓存路径
model_name = "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B"
model = AutoModelForCausalLM.from_pretrained(model_name, cache_dir=cache_dir)
tokenizer = AutoTokenizer.from_pretrained(model_name, cache_dir=cache_dir)
Models Sope
如果使用Hugging Face下载模型存在网络问题,可以使用modelscope,使用以下代码下载并加载模型。
1.安装modelscope
pip install modelscope
2.下载模型
from modelscope import snapshot_download
model_dir = snapshot_download('deepseek-ai/DeepSeek-R1-Distill-Qwen-7B', cache_dir='/root/models', revision='master')
使用vLLM进行模型推理
当把模型下载到本地后,就可以使用vLLM进行模型推理任务了。
模型推理的实现大概可分为以下几个过程:
1.加载预训练的语言模型 (DeepSeek-R1-Distill-Qwen-7B)
2.定义一个输入提示语,并设置生成文本的参数 (温度、top_p、最大 token 数、停止 token)。
3.使用加载的模型生成文本,解析生成的文本
4.提取思考内容和回答内容 (如果存在 </think> 标签),打印原始输入提示语、思考内容和回答内容。
具体实现代码如下:
from vllm import LLM, SamplingParams # 导入 vllm 库,用于加载和运行大型语言模型
from transformers import AutoTokenizer # 导入 transformers 库,用于加载 tokenizer
if __name__ == "__main__":
model = '/root/work/models/DeepSeek-R1-Distill-Qwen-7B' # 指定模型名称或指定模型路径这里指定的是模型路径
tokenizer = None # 初始化 tokenizer 为 None
text = ["先有鸡还是先有蛋?<think>\n", ] # 定义输入文本列表这里只有一个提示语
# 批量推理
input_texts = [
"深度学习的优势是什么?",
"如何训练一个神经网络?",
]
llm = LLM(model=model, tokenizer=tokenizer, max_model_len=2048, dtype="half", gpu_memory_utilization=0.7, trust_remote_code=True)
# 创建 LLM 对象
# model: 模型路径或名称
# tokenizer: tokenizer 对象,如果为 None,vllm 会尝试自动加载
# max_model_len: 模型上下文长度的最大值
# dtype: 模型权重和激活的数据类型 "half" 表示使用 FP16 精度,可以减少内存占用,加快推理速度
# gpu_memory_utilization: vllm 引擎使用的 GPU 内存比例0.7 表示使用 70% 的 GPU 内存
# trust_remote_code: 是否信任远程代码对于某些模型,需要设置为 True
sampling_params = SamplingParams(temperature=0.6, top_p=0.95, max_tokens=8192)
# 创建 SamplingParams 对象,用于设置生成文本的参数
# temperature: 控制生成文本的随机性值越高,随机性越高
# top_p: nucleus sampling 的参数,用于控制生成文本的多样性
# max_tokens: 生成文本的最大 token 数量
outputs = llm.generate(text, sampling_params) # 使用 LLM 对象生成文本
#print(outputs) # 打印原始输出结果
for output in outputs: # 遍历每个输出
prompt = output.prompt # 获取原始输入提示语
generated_text = output.outputs[0].text # 获取生成的文本
if r"</think>" in generated_text: # 检查生成的文本中是否包含 "</think>" 标签
think_content, answer_content = generated_text.split(r"</think>") # 如果包含,则分割文本为思考内容和回答内容
else:
think_content = "" # 否则,思考内容为空
answer_content = generated_text # 回答内容为生成的全部文本
# 打印原始输入提示语的原始字符串表示形式
# !r用于打印字符串的原始表示形式,对于调试和查看特殊字符很有帮助
print(f"Prompt: {prompt!r}")
print(f"Think: {think_content!r}")
print(f"Answer: {answer_content!r}")
推理结果如下:
注意:建议每个prompt都需要以<think>\n
结尾
启动API服务
只需要简单的命令以及相关参数即可加载DeepSeek-R1-Distill-Qwen-7B模型,并启动类似OpenAI的API服务:
python -m vllm.entrypoints.openai.api_server
--model /models/DeepSeek-R1-Distill-Qwen-7B
--served-model-name DeepSeekR1
--host 0.0.0.0
--port 8000
--dtype float16
--gpu_memory_utilization 0.7
参数说明
--model DeepSeek-R1-Distill-Qwen-7B :指定要加载的模型
--served-model-name DeepSeekR1 :指定模型名称
--host 0.0.0.0 :指定服务绑定的 IP 地址(默认 0.0.0.0 表示监听所有网络接口)
--port 8000 :指定服务端口(默认 8000)
--gpu_memory_utilization 0.7 :设置GPU内存利用率,根据环境调整,重要!!!
--dtype float16 :数据类型(有的显卡等级不支持某数据类型会报错,如bfloat16。根据提示指定数据类型即可,如:half)
其他常见可选参数
--enforce-eager true:禁用CUDA优化提升兼容性
--api-key xxx :API访问密钥
--max-model-len 2048 :指定模型的最大上下文长度
--tensor-parallel-size 8:指定多 GPU 并行推理的 GPU 数量
使用API进行推理
API接口
启动服务后,可以通过HTTP请求调用API,以下是VLLM提供的API接口,前提是启动模型能支持相关功能!
INFO 02-18 01:54:55 launcher.py:29] Route: /openapi.json, Methods: GET, HEAD
INFO 02-18 01:54:55 launcher.py:29] Route: /docs, Methods: GET, HEAD
INFO 02-18 01:54:55 launcher.py:29] Route: /docs/oauth2-redirect, Methods: GET, HEAD
INFO 02-18 01:54:55 launcher.py:29] Route: /redoc, Methods: GET, HEAD
INFO 02-18 01:54:55 launcher.py:29] Route: /health, Methods: GET
INFO 02-18 01:54:55 launcher.py:29] Route: /ping, Methods: POST, GET
INFO 02-18 01:54:55 launcher.py:29] Route: /tokenize, Methods: POST
INFO 02-18 01:54:55 launcher.py:29] Route: /detokenize, Methods: POST
INFO 02-18 01:54:55 launcher.py:29] Route: /v1/models, Methods: GET
INFO 02-18 01:54:55 launcher.py:29] Route: /version, Methods: GET
INFO 02-18 01:54:55 launcher.py:29] Route: /v1/chat/completions, Methods: POST
INFO 02-18 01:54:55 launcher.py:29] Route: /v1/completions, Methods: POST
INFO 02-18 01:54:55 launcher.py:29] Route: /v1/embeddings, Methods: POST
INFO 02-18 01:54:55 launcher.py:29] Route: /pooling, Methods: POST
INFO 02-18 01:54:55 launcher.py:29] Route: /score, Methods: POST
INFO 02-18 01:54:55 launcher.py:29] Route: /v1/score, Methods: POST
INFO 02-18 01:54:55 launcher.py:29] Route: /rerank, Methods: POST
INFO 02-18 01:54:55 launcher.py:29] Route: /v1/rerank, Methods: POST
INFO 02-18 01:54:55 launcher.py:29] Route: /v2/rerank, Methods: POST
INFO 02-18 01:54:55 launcher.py:29] Route: /invocations, Methods: POST
模型列表
通过curl命令查看当前的模型列表,返回一个JSON格式的响应,包含可用的模型列表。
curl http://localhost:8000/v1/models
文本生成(/v1/completions)
用于生成单条文本
curl -X POST "http://localhost:8000/v1/completions" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeekR1",
"prompt": "什么是深度学习?",
"max_tokens": 200,
"temperature": 0.7
}'
聊天生成(/v1/chat/completions)
用于生成对话式文本
curl -X POST "http://localhost:8000/v1/chat/completions" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeekR1",
"messages": [
{"role": "system", "content": "你是一个助手。"},
{"role": "user", "content": "什么是深度学习?"}
],
"max_tokens": 200,
"temperature": 0.7
}'
Python脚本请求接口
vLLM可以作为一个实现了OpenAI API协议的服务器进行部署。这使得vLLM可以直接替代使用OpenAI API的应用程序。
OpenAI Completions API
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="Bearer xxxx",
)
completion = client.completions.create(
model="DeepSeekR1",
prompt="什么是深度学习?"
)
print(completion)
OpenAI Chat API
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="Bearer xxxx",
)
completion = client.chat.completions.create(
model="DeepSeekR1",
messages=[
{"role": "user", "content": "什么是深度学习?"}
]
)
print(completion)
vllm serve命令大全
该命令用于启动与OpenAI兼容的服务器,命令的具体使用说明如下:
# vllm serve -h
INFO 02-13 03:22:49 __init__.py:190] 自动检测到平台 cuda。
用法: vllm serve <model_tag> [选项]
位置参数:
model_tag 要服务的模型标签
选项:
--additional-config ADDITIONAL_CONFIG
指定平台其他配置,JSON 格式。不同平台可能支持不同的配置。请确保配置对您使用的平台有效。输入格式如 {"config_key":"config_value"}
--allow-credentials 允许凭据。
--allowed-headers ALLOWED_HEADERS
允许的标头。
--allowed-local-media-path ALLOWED_LOCAL_MEDIA_PATH
允许 API 请求从服务器文件系统指定的目录读取本地图像或视频。这是一个安全风险。只应在受信任的环境中启用。
--allowed-methods ALLOWED_METHODS
允许的方法。
--allowed-origins ALLOWED_ORIGINS
允许的来源。
--api-key API_KEY 如果提供,服务器将要求在标头中提供此密钥。
--block-size {8,16,32,64,128}
令牌块大小,用于连续的令牌块。这在 neuron 设备上会被忽略,并设置为 `--max-model-len`。在 CUDA 设备上,仅支持最大为 32 的块大小。在 HPU 设备上,块大小默认为 128。
--calculate-kv-scales
启用 kv-cache-dtype 为 fp8 时动态计算 k_scale 和 v_scale。如果 calculate-kv-scales 为 false,则 scale 将从模型检查点加载(如果可用)。否则,scale 将默认为 1.0。
--chat-template CHAT_TEMPLATE
聊天模板的文件路径,或指定模型的单行模板。
--chat-template-content-format {auto,string,openai}
在聊天模板中呈现消息内容的格式。
* "string" 将内容呈现为字符串。例如:"Hello World"
* "openai" 将内容呈现为字典列表,类似于 OpenAI 模式。例如:[{"type": "text", "text": "Hello world!"}]
--code-revision CODE_REVISION
用于 Hugging Face Hub 上的模型代码的特定修订版本。它可以是分支名称、标签名称或提交 ID。如果未指定,将使用默认版本。
--collect-detailed-traces COLLECT_DETAILED_TRACES
有效选项为 model,worker,all。仅当设置 `--otlp-traces-endpoint`时,设置此项才有意义。如果设置,它将收集指定模块的详细跟踪。这涉及使用可能代价高昂和/或阻塞的操作,因此可能会影响性能。
--compilation-config COMPILATION_CONFIG, -O COMPILATION_CONFIG
torch.compile 的模型配置。当它是一个数字 (0, 1, 2, 3) 时,它将被解释为优化级别。注意:0 级是没有任何优化的默认级别。1 级和 2 级仅用于内部测试。3 级是建议用于生产的级别。要指定完整的编译配置,请使用 JSON 字符串。按照传统编译器的惯例,使用 -O 而不加空格也受支持。-O3 等同于 -O 3。
--config CONFIG 从配置文件读取 CLI 选项。必须是 YAML 格式,包含以下选项:https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html#cli-reference
--config-format {auto,hf,mistral}
要加载的模型配置的格式。
* "auto" 将尝试以 hf 格式加载配置(如果可用),否则将尝试以 mistral 格式加载。
--cpu-offload-gb CPU_OFFLOAD_GB
每个 GPU 要卸载到 CPU 的空间(GiB)。默认为 0,表示不卸载。直观地,此参数可以看作是增加 GPU 内存大小的一种虚拟方式。例如,如果您有一个 24 GB 的 GPU,并将其设置为 10,那么实际上您可以将其视为一个 34 GB 的 GPU。然后,您可以使用 BF16 权重加载一个 13B 模型,这至少需要 26GB 的 GPU 内存。请注意,这需要快速的 CPU-GPU 互连,因为模型的一部分在每次模型前向传递中都会从 CPU 内存即时加载到 GPU 内存。
--device {auto,cuda,neuron,cpu,openvino,tpu,xpu,hpu}
vLLM 执行的设备类型。
--disable-async-output-proc
禁用异步输出处理。这可能会导致性能下降。
--disable-custom-all-reduce
参见 ParallelConfig。
--disable-fastapi-docs
禁用 FastAPI 的 OpenAPI 模式、Swagger UI 和 ReDoc 端点。
--disable-frontend-multiprocessing
如果指定,将在与模型服务引擎相同的进程中运行 OpenAI 前端服务器。
--disable-log-requests
禁用日志请求。
--disable-log-stats 禁用日志统计。
--disable-logprobs-during-spec-decoding [DISABLE_LOGPROBS_DURING_SPEC_DECODING]
如果设置为 True,则在推测解码期间不会返回令牌对数概率。如果设置为 False,则根据 SamplingParams 中的设置返回对数概率。如果未指定,则默认为 True。禁用推测解码期间的对数概率可以通过跳过提案抽样、目标抽样以及确定接受的令牌后的对数概率计算来减少延迟。
--disable-mm-preprocessor-cache
如果为 true,则禁用多模态预处理器/映射器的缓存。(不建议)
--disable-sliding-window
禁用滑动窗口,限制为滑动窗口大小。
--distributed-executor-backend {ray,mp,uni,external_launcher}
用于分布式模型工作程序的后端,可以是“ray”或“mp”(多进程)。如果 pipeline_parallel_size 和 tensor_parallel_size 的乘积小于或等于可用 GPU 的数量,则将使用“mp”以保持在单个主机上进行处理。否则,如果安装了 Ray,这将默认为“ray”,否则将失败。请注意,tpu 仅支持 Ray 进行分布式推理。
--download-dir DOWNLOAD_DIR
下载并加载权重的目录,默认为 huggingface 的默认缓存目录。
--dtype {auto,half,float16,bfloat16,float,float32}
模型权重和激活的数据类型。
* "auto" 将对 FP32 和 FP16 模型使用 FP16 精度,对 BF16 模型使用 BF16 精度。
* "half" 用于 FP16。推荐用于 AWQ 量化。
* "float16" 与 "half" 相同。
* "bfloat16" 用于在精度和范围之间取得平衡。
* "float" 是 FP32 精度的简写。
* "float32" 用于 FP32 精度。
--enable-auto-tool-choice
为受支持的模型启用自动工具选择。使用 `--tool-call-parser` 指定要使用的解析器。
--enable-chunked-prefill [ENABLE_CHUNKED_PREFILL]
如果设置,则可以根据 max_num_batched_tokens 对预填充请求进行分块。
--enable-lora 如果为 True,则启用对 LoRA 适配器的处理。
--enable-lora-bias 如果为 True,则启用 LoRA 适配器的偏置。
--enable-prefix-caching, --no-enable-prefix-caching
启用自动前缀缓存。使用 `--no-enable-prefix-caching` 显式禁用。
--enable-prompt-adapter
如果为 True,则启用对 PromptAdapters 的处理。
--enable-prompt-tokens-details
如果设置为 True,则在 usage 中启用 prompt_tokens_details。
--enable-reasoning 是否启用模型的 reasoning_content。如果启用,模型将能够生成推理内容。
--enable-request-id-headers
如果指定,API 服务器将在响应中添加 X-Request-Id 标头。注意:这会降低高 QPS 的性能。
--enable-sleep-mode 启用引擎的睡眠模式。(仅支持 cuda 平台)
--enforce-eager 始终使用 eager-mode PyTorch。如果为 False,将混合使用 eager 模式和 CUDA 图以获得最大的性能和灵活性。
--fully-sharded-loras
默认情况下,只有一半的 LoRA 计算通过张量并行进行分片。启用此选项将使用完全分片的层。在高序列长度、最大 rank 或张量并行大小时,这可能更快。
--generation-config GENERATION_CONFIG
生成配置的文件夹路径。默认为None,不加载任何生成配置,将使用 vLLM 默认值。如果设置为“auto”,则将从模型路径加载生成配置。如果设置为文件夹路径,则将从指定的文件夹路径加载生成配置。如果 generation config 中指定了 `max_new_tokens`,则它将设置所有请求的输出令牌数的服务器范围限制。
--gpu-memory-utilization GPU_MEMORY_UTILIZATION
用于模型执行器的 GPU 内存比例,范围为 0 到 1。例如,值为 0.5 表示 50% 的 GPU 内存利用率。如果未指定,则使用默认值 0.9。这是每个实例的限制,仅适用于当前的 vLLM 实例。无论您是否在同一 GPU 上运行另一个 vLLM 实例,都没有关系。例如,如果您在同一 GPU 上运行两个 vLLM 实例,则可以为每个实例将 GPU 内存利用率设置为 0.5。
--guided-decoding-backend {outlines,lm-format-enforcer,xgrammar}
默认情况下,哪个引擎将用于引导解码(JSON 模式/正则表达式等)。目前支持 https://github.com/outlines-dev/outlines, https://github.com/mlc-ai/xgrammar, 和 https://github.com/noamgat/lm-format-enforcer。可以通过 guided_decoding_backend 参数在每个请求中覆盖。
--hf-overrides HF_OVERRIDES
HuggingFace 配置的额外参数。这应该是一个 JSON 字符串,将被解析为字典。
--host HOST 主机名。
--ignore-patterns IGNORE_PATTERNS
加载模型时要忽略的模式。默认为 `original/**/*` 以避免重复加载 llama 的检查点。
--kv-cache-dtype {auto,fp8,fp8_e5m2,fp8_e4m3}
kv 缓存存储的数据类型。如果为“auto”,将使用模型数据类型。CUDA 11.8+ 支持 fp8 (=fp8_e4m3) 和 fp8_e5m2。ROCm (AMD GPU) 支持 fp8 (=fp8_e4m3)。
--kv-transfer-config KV_TRANSFER_CONFIG
分布式 KV 缓存传输的配置。应该是一个 JSON 字符串。
--limit-mm-per-prompt LIMIT_MM_PER_PROMPT
对于每个多模态插件,限制每个提示允许的输入实例数。需要一个逗号分隔的项目列表,例如:`image=16,video=2` 允许每个提示最多 16 个图像和 2 个视频。默认为每个模态 1。
--load-format {auto,pt,safetensors,npcache,dummy,tensorizer,sharded_state,gguf,bitsandbytes,mistral,runai_streamer}
要加载的模型权重的格式。
* “auto” 将尝试以 safetensors 格式加载权重,如果 safetensors 格式不可用,则回退到 pytorch bin 格式。
* “pt” 将以 pytorch bin 格式加载权重。
* “safetensors” 将以 safetensors 格式加载权重。
* “npcache” 将以 pytorch 格式加载权重并存储 numpy 缓存以加速加载。
* “dummy” 将使用随机值初始化权重,这主要用于分析。
* “tensorizer” 将使用 CoreWeave 的 tensorizer 加载权重。有关更多信息,请参阅“示例”部分中的 Tensorize vLLM Model 脚本。
* “runai_streamer” 将使用 Run:aiModel Streamer 加载 Safetensors 权重。
* “bitsandbytes” 将使用 bitsandbytes 量化加载权重。
--logits-processor-pattern LOGITS_PROCESSOR_PATTERN
可选的正则表达式模式,指定可以通过 `logits_processors` 额外完成参数传递的有效 logits 处理器限定名。默认为 None,它不允许任何处理器。
--long-lora-scaling-factors LONG_LORA_SCALING_FACTORS
指定多个缩放因子(可以与基本模型缩放因子不同 - 请参阅例如 Long LoRA),以允许多个使用这些缩放因子训练的 LoRA 适配器同时使用。如果未指定,则只允许使用基本模型缩放因子训练的适配器。
--lora-dtype {auto,float16,bfloat16}
LoRA 的数据类型。如果为 auto,将默认为基本模型数据类型。
--lora-extra-vocab-size LORA_EXTRA_VOCAB_SIZE
LoRA 适配器中可以存在的最大额外词汇量大小(添加到基本模型词汇表)。
--lora-modules LORA_MODULES [LORA_MODULES ...]
LoRA 模块配置,可以是“name=path”格式或 JSON 格式。
示例(旧格式):`'name=path'`
示例(新格式):`{"name": "name", "path": "lora_path", "base_model_name": "id"}`
--max-cpu-loras MAX_CPU_LORAS
存储在 CPU 内存中的最大 LoRA 数量。必须大于等于 max_loras。默认为 max_loras。
--max-log-len MAX_LOG_LEN
日志中打印的最大提示字符数或提示 ID 号码。默认值:无限制
--max-logprobs MAX_LOGPROBS
如果 SamplingParams 中指定了 logprobs,则返回的最大对数概率数。
--max-lora-rank MAX_LORA_RANK
最大 LoRA rank。
--max-loras MAX_LORAS
单个批次中的最大 LoRA 数量。
--max-model-len MAX_MODEL_LEN
模型上下文长度。如果未指定,将从模型配置中自动派生。
--max-num-batched-tokens MAX_NUM_BATCHED_TOKENS
每次迭代的最大批处理令牌数。
--max-num-seqs MAX_NUM_SEQS
每次迭代的最大序列数。
--max-parallel-loading-workers MAX_PARALLEL_LOADING_WORKERS
以多个批次顺序加载模型,以避免在使用张量并行和大模型时出现 RAM OOM。
--max-prompt-adapter-token MAX_PROMPT_ADAPTER_TOKEN
PromptAdapters 的最大令牌数。
--max-prompt-adapters MAX_PROMPT_ADAPTERS
批次中 PromptAdapters 的最大数量。
--max-seq-len-to-capture MAX_SEQ_LEN_TO_CAPTURE
CUDA 图覆盖的最大序列长度。当序列的上下文长度大于此值时,我们将回退到 eager 模式。此外,对于编码器-解码器模型,如果编码器输入的序列长度大于此值,我们将回退到 eager 模式。
--middleware MIDDLEWARE
要应用于应用程序的其他 ASGI 中间件。我们接受多个 --middleware 参数。该值应该是导入路径。如果提供了一个函数,vLLM 将使用 ``@app.middleware('http')` 将其添加到服务器。如果提供了一个类,vLLM 将使用 ``app.add_middleware()` 将其添加到服务器。
--mm-processor-kwargs MM_PROCESSOR_KWARGS
多模态输入映射/处理的覆盖,例如图像处理器。例如:`{"num_crops": 4}`。
--model MODEL 要使用的 huggingface 模型的名称或路径。
--model-impl {auto,vllm,transformers}
要使用的模型实现。
* “auto” 将尝试使用 vLLM 实现(如果存在),如果没有 vLLM 实现可用,则回退到 Transformers 实现。
* “vllm” 将使用 vLLM 模型实现。
* “transformers” 将使用 Transformers 模型实现。
--model-loader-extra-config MODEL_LOADER_EXTRA_CONFIG
模型加载器的额外配置。这将传递给与所选 load_format 对应的模型加载器。这应该是一个 JSON 字符串,将被解析为字典。
--multi-step-stream-outputs [MULTI_STEP_STREAM_OUTPUTS]
如果为 False,则多步将在所有步骤结束后流式传输输出。
--ngram-prompt-lookup-max NGRAM_PROMPT_LOOKUP_MAX
推测解码中 ngram 提示查找的最大窗口大小。
--ngram-prompt-lookup-min NGRAM_PROMPT_LOOKUP_MIN
推测解码中 ngram 提示查找的最小窗口大小。
--num-gpu-blocks-override NUM_GPU_BLOCKS_OVERRIDE
如果指定,则忽略 GPU 分析结果并使用此数量的 GPU 块。用于测试抢占。
--num-lookahead-slots NUM_LOOKAHEAD_SLOTS
推测解码所需的实验性调度配置。这将在未来被推测配置取代;它的存在是为了在此之前启用正确性测试。
--num-scheduler-steps NUM_SCHEDULER_STEPS
每个调度器调用的最大前向步数。
--num-speculative-tokens NUM_SPECULATIVE_TOKENS
在推测解码中,从草稿模型中抽样的推测令牌数。
--otlp-traces-endpoint OTLP_TRACES_ENDPOINT
OpenTelemetry 跟踪将发送到的目标 URL。
--override-generation-config OVERRIDE_GENERATION_CONFIG
以 JSON 格式覆盖或设置生成配置。例如:`{"temperature": 0.5}`。如果与 --generation-config=auto 一起使用,则覆盖参数将与模型中的默认配置合并。如果 generation-config 为 None,则仅使用覆盖参数。
--override-neuron-config OVERRIDE_NEURON_CONFIG
覆盖或设置 neuron 设备配置。例如:`{"cast_logits_dtype": "bloat16"}`。
--override-pooler-config OVERRIDE_POOLER_CONFIG
覆盖或设置池化模型的池化方法。例如:`{"pooling_type": "mean", "normalize": false}`。
--pipeline-parallel-size PIPELINE_PARALLEL_SIZE, -pp PIPELINE_PARALLEL_SIZE
流水线阶段数。
--port PORT 端口号。
--preemption-mode PREEMPTION_MODE
如果为“recompute”,则引擎通过重新计算执行抢占;如果为“swap”,则引擎通过块交换执行抢占。
--prompt-adapters PROMPT_ADAPTERS [PROMPT_ADAPTERS ...]
格式为 name=path 的提示适配器配置。可以指定多个适配器。
--qlora-adapter-name-or-path QLORA_ADAPTER_NAME_OR_PATH
QLoRA 适配器的名称或路径。
--quantization {aqlm,awq,deepspeedfp,tpu_int8,fp8,ptpc_fp8,fbgemm_fp8,modelopt,marlin,gguf,gptq_marlin_24,gptq_marlin,awq_marlin,gptq,compressed-tensors,bitsandbytes,qqq,hqq,experts_int8,neuron_quant,ipex,quark,moe_wna16,None}, -q {aqlm,awq,deepspeedfp,tpu_int8,fp8,ptpc_fp8,fbgemm_fp8,modelopt,marlin,gguf,gptq_marlin_24,gptq_marlin,awq_marlin,gptq,compressed-tensors,bitsandbytes,qqq,hqq,experts_int8,neuron_quant,ipex,quark,moe_wna16,None}
用于量化权重的方法。如果为 None,我们首先检查模型配置文件中的 `quantization_config` 属性。如果该属性为 None,我们假设模型权重未被量化,并使用 `dtype` 来确定权重的
数据类型。
--ray-workers-use-nsight
如果指定,则使用 nsight 来分析 Ray 工作程序。
--reasoning-parser {deepseek_r1}
根据您使用的模型选择推理解析器。这用于将推理内容解析为 OpenAI API 格式。`--enable-reasoning` 是必需的。
--response-role RESPONSE_ROLE
如果 `request.add_generation_prompt=true`,则返回的角色名称。
--return-tokens-as-token-ids
当指定 `--max-logprobs` 时,将单个令牌表示为“token_id:{token_id}”形式的字符串,以便可以识别不是 JSON 可编码的令牌。
--revision REVISION 要使用的特定模型版本。它可以是分支名称、标签名称或提交 ID。如果未指定,将使用默认版本。
--root-path ROOT_PATH 当应用程序位于基于路径的路由代理后面时,FastAPI root_path。
--rope-scaling ROPE_SCALING
JSON 格式的 RoPE 缩放配置。例如,`{"rope_type":"dynamic","factor":2.0}`
--rope-theta ROPE_THETA
RoPE theta。与 `rope_scaling` 一起使用。在某些情况下,更改 RoPE theta 可以提高缩放模型的性能。
--scheduler-delay-factor SCHEDULER_DELAY_FACTOR
在调度下一个提示之前应用延迟(延迟因子乘以先前提示延迟)。
--scheduling-policy {fcfs,priority}
要使用的调度策略。“fcfs”(先到先服务,即按到达顺序处理请求;默认)或“priority”(根据给定优先级(值越低表示越早处理)和到达时间决定任何平局)。
--seed SEED 操作的随机种子。
--served-model-name SERVED_MODEL_NAME [SERVED_MODEL_NAME ...]
API 中使用的模型名称。如果提供多个名称,服务器将响应任何提供的名称。响应的 model 字段中的模型名称将是此列表中的第一个名称。如果未指定,模型名称将与 `--model` 参数相同。请注意,此名称也将用于 prometheus 指标的 `model_name` 标签内容,如果提供多个名称,则指标标签将采用第一个名称。
--skip-tokenizer-init
跳过 tokenizer 和 detokenizer 的初始化。
--spec-decoding-acceptance-method {rejection_sampler,typical_acceptance_sampler}
指定在推测解码期间用于草稿令牌验证的接受方法。支持两种类型的接受例程:1) RejectionSampler,它不允许更改草稿令牌的接受率,2) TypicalAcceptanceSampler,它是可配置的,允许更高的接受率,但质量较低,反之亦然。
--speculative-disable-by-batch-size SPECULATIVE_DISABLE_BY_BATCH_SIZE
如果入队请求数大于此值,则禁用新传入请求的推测解码。
--speculative-disable-mqa-scorer
如果设置为 True,则 MQA scorer 将在推测中被禁用,并回退到批次扩展。
--speculative-draft-tensor-parallel-size SPECULATIVE_DRAFT_TENSOR_PARALLEL_SIZE, -spec-draft-tp SPECULATIVE_DRAFT_TENSOR_PARALLEL_SIZE
推测解码中草稿模型的张量并行副本数。
--speculative-max-model-len SPECULATIVE_MAX_MODEL_LEN
草稿模型支持的最大序列长度。超过此长度的序列将跳过推测。
--speculative-model SPECULATIVE_MODEL
推测解码中要使用的草稿模型的名称。
--speculative-model-quantization {aqlm,awq,deepspeedfp,tpu_int8,fp8,ptpc_fp8,fbgemm_fp8,modelopt,marlin,gguf,gptq_marlin_24,gptq_marlin,awq_marlin,gptq,compressed-tensors,bitsandbytes,qqq,hqq,experts_int8,neuron_quant,ipex,quark,moe_wna16,None}
用于量化推测模型权重的方法。如果为 None,我们首先检查模型配置文件中的 `quantization_config` 属性。如果该属性为 None,我们假设模型权重未被量化,并使用 `dtype` 来确定权重的数据类型。
--ssl-ca-certs SSL_CA_CERTS
CA 证书文件。
--ssl-cert-reqs SSL_CERT_REQS
是否需要客户端证书(请参阅 stdlib ssl 模块)。
--ssl-certfile SSL_CERTFILE
SSL 证书文件的文件路径。
--ssl-keyfile SSL_KEYFILE
SSL 密钥文件的文件路径。
--swap-space SWAP_SPACE
每个 GPU 的 CPU 交换空间大小 (GiB)。
--task {auto,generate,embedding,embed,classify,score,reward}
用于模型的任务。每个 vLLM 实例只支持一个任务,即使同一个模型可以用于多个任务。当模型只支持一个任务时,可以使用 `"auto"`来选择它;否则,您必须明确指定要使用的任务。
--tensor-parallel-size TENSOR_PARALLEL_SIZE, -tp TENSOR_PARALLEL_SIZE
张量并行副本数。
--tokenizer TOKENIZER 要使用的 huggingface tokenizer 的名称或路径。如果未指定,将使用模型名称或路径。
--tokenizer-mode {auto,slow,mistral,custom}
tokenizer 模式。
* “auto” 将使用快速 tokenizer(如果可用)。
* “slow” 将始终使用慢速 tokenizer。
* “mistral” 将始终使用 `mistral_common` tokenizer。
* “custom” 将使用 --tokenizer 选择预注册的 tokenizer。
--tokenizer-pool-extra-config TOKENIZER_POOL_EXTRA_CONFIG
tokenizer 池的额外配置。这应该是一个 JSON 字符串,将被解析为字典。如果 tokenizer_pool_size 为 0,则忽略。
--tokenizer-pool-size TOKENIZER_POOL_SIZE
用于异步 tokenization 的 tokenizer 池大小。如果为 0,将使用同步 tokenization。
--tokenizer-pool-type TOKENIZER_POOL_TYPE
用于异步 tokenization 的 tokenizer 池类型。如果 tokenizer_pool_size 为 0,则忽略。
--tokenizer-revision TOKENIZER_REVISION
要使用的 huggingface tokenizer 的修订版本。它可以是分支名称、标签名称或提交 ID。如果未指定,将使用默认版本。
--tool-call-parser {granite-20b-fc,granite,hermes,internlm,jamba,llama3_json,mistral,pythonic} 或在 --tool-parser-plugin 中注册的名称
根据您使用的模型选择工具调用解析器。这用于将模型生成的工具调用解析为 OpenAI API 格式。`--enable-auto-tool-choice` 是必需的。
--tool-parser-plugin TOOL_PARSER_PLUGIN
指定用于将模型生成的工具解析为 OpenAI API 格式的工具解析器插件,可以在 `--tool-call-parser` 中使用此插件中注册的名称。
--trust-remote-code 信任来自 huggingface 的远程代码。
--typical-acceptance-sampler-posterior-alpha TYPICAL_ACCEPTANCE_SAMPLER_POSTERIOR_ALPHA
TypicalAcceptanceSampler 中用于令牌接受的基于熵的阈值的缩放因子。通常默认为 --typical-acceptance-sampler-posterior-threshold 的平方根,即 0.3。
--typical-acceptance-sampler-posterior-threshold TYPICAL_ACCEPTANCE_SAMPLER_POSTERIOR_THRESHOLD
设置要接受的令牌的后验概率的下限阈值。此阈值由 TypicalAcceptanceSampler 用于在推测解码期间做出抽样决策。默认为 0.09。
--use-v2-block-manager
[已弃用] 块管理器 v1 已被删除,现在默认使用 SelfAttnBlockSpaceManager(即块管理器 v2)。将此标志设置为 True 或 False 对 vLLM 行为没有影响。
--uvicorn-log-level {debug,info,warning,error,critical,trace}
uvicorn 的日志级别。
--worker-cls WORKER_CLS
用于分布式执行的工作程序类。
-h, --help 显示此帮助消息并退出