vllm 部署及启动模型 Deepseek R1、Embedding、Reranker、Qwen3 并在 dify 中集成使用

vllm 启动模型

# nvidia 驱动安装
sudo apt install gcc g++ make
wget https://cn.download.nvidia.com/tesla/550.163.01/NVIDIA-Linux-x86_64-550.163.01.run
sudo sh NVIDIA-Linux-x86_64-550.163.01.run


# nvidia-container-toolkit 安装
wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run
sudo sh cuda_12.4.1_550.54.15_linux.run
apt-get install -y nvidia-container-toolkit
apt-get install -y nvidia-fabricmanager

# python环境
bash https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
conda -V
conda create -n vllm python=3.12 -y
conda activate vllm

# 模型下载
pip install modelscope
modelscope download --model deepseek-ai/DeepSeek-R1 --local_dir /mnt/nvme01/models/deepseek671
modelscope download --model BAAI/bge-m3 --local_dir /mnt/nvme01/models/bge-m3
modelscope download --model BAAI/bge-reranker-base --local_dir /mnt/nvme01/models/bge-reranker-base

# 安装依赖
# 然后到PyTorch 官网(https://pytorch.org/get-started/locally/)查看相符的安装命令,执行
pip install torch==2.1.2 torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple --extra-index-url https://download.pytorch.org/whl/cu118
# 安装成功后,验证PyTorch 是否正确调用 GPU
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
# 返回类似True NVIDIA GeForce RTX 4090就代表安装成功了

#安装显卡状态查看工具nvitop
pip install nvitop
nvitop

# vllm 安装
#安装vllm, pip install "vllm[triton]" 命令中的[triton]代表我们要安装VLLM的可选组件triton。它是OpenAI 开源的深度学习算子编译框架,vLLM 使用它来实现高性能的「Token 并行生成机制」,使VLLM在运行时性能会得到显著提升,推荐安装
pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple
# 验证是否安装成功
python -c "import vllm; print(vllm.__version__)" #如果打印出VLLM相关的东西,则代表安装成功了

# vllm 启动模型
# 模型参数详解
python -m vllm.entrypoints.openai.api_server  #启动 vLLM 的 OpenAI API 服务接口,符合 OpenAI API 格式的调用方式
--model /home/xx/model/deepseek # 模型路径,可以使用本地路径,或 huggingface等远程路径。必填
--model-name mydeepseek # 最定义模型名称。用户或客户端需要指定模型名,所以你必须提前定义清楚它叫什么。非必填(默认为模型自己的名称)
--tokenizer /home/xx/model/deepseek # 指定分词器的位置或名称,模型文件结构规范的情况下可以不填。它的作用是防止模型文件夹结构不规范导致报错。日常不需要使用
--dtype float16 # 张量精度。支持auto(默认值。vLLM 会根据模型配置自动判断 dtype)、float32(单精度浮点数,最精确但显存占用大)、float16(半精度浮点数,推理快,占用小,当前主流推荐)等等参数。非必填(默认auto)
--port 8088 # 指定模型启动时占用的端口。最好必填
--host 0.0.0.0    # 指定模型启动时的地址,设为 0.0.0.0 允许所有 IP 访问。最好必填
--max-model-len 4068 # 最大输入 + 输出 token 长度。需模型支持。非必填。默认为模型的默认值
--gpu-memory-utilization 0.8 # 使用 GPU 显存的比例。0为最小,1为最大。(1.0=100%,0.1=%10)。调小可以保留一部分显存给系统或其他程序,防止OOM(Out Of Memory显存溢出)。非必填(默认0.9)
--tensor-parallel-size 2 # 用于多 GPU 并行推理。1 表示单卡运行(比如我的机器有2张显卡,就可以设置为2)。非必填(默认为1)
--swap-space 4    # 为内存不足时预留的 swap 空间(“交换空间”Swap Space)(单位 GB),在显存爆掉时能缓解崩溃。非必填(默认为4)
--disable-log-requests False # 是否禁用日志输出请求内容(保护隐私时可加)。非必填(默认为False)
--max-num-batched-tokens 4068 # 每一批请求最多允许的 token 总数。这个数越大,吞吐量高但延迟可能变大;越小,响应快但效率低。非必填(默认为自动)
--max-num-seqs 6 # 最大同时处理的请求数量,用于多并发的情况。非必填(默认为自动)
--seed 42 # 控制生成内容的一致性,设置固定值可复现生成(同样输入,生成的输出可能会不一样。但是如果设置了比如--seed 42,则会出现回答与之前完全一致的情况出现)。非必填(默认为随机)
--trust-remote-code False # 如果你从 HuggingFace 加载模型并需要运行自定义模型代码(如 LLaVA),必须加此参数。非必填(默认为False)

# vllm 启动 deepseek
nohup python -m vllm.entrypoints.openai.api_server \
--model /mnt/nvme01/models/deepseek671  \
--served-model-name deepseek14 \
--dtype float16 \
--port 8000 \
--host 0.0.0.0 \
--max-model-len 4068 \
--gpu-memory-utilization 0.8 \
--tensor-parallel-size 8 \
--swap-space 8 \
--max-num-batched-tokens 4068 \
--max-num-seqs 6 &

nohup python -m vllm.entrypoints.openai.api_server \
  --model="/mnt/nvme01/models/DeepSeek-R1-Distill-Qwen-32B" \
  --tensor-parallel-size 4 \
  --gpu-memory-utilization 0.88 \
  --dtype half \
  --served-model-name "DeepSeek-R1-Distill-Qwen-32B" \
  --host 0.0.0.0 \
  --port 8000 --max-model-len 20480 \
  --chat-template /root/soft/deepseek_r1.jinja &

# vllm启动Embedding模型bge-m3
CUDA_VISIBLE_DEVICES=0 nohup python -m vllm.entrypoints.openai.api_server \
  --model="/mnt/nvme01/models/bge-m3" \
  --tensor-parallel-size 1 \
  --gpu-memory-utilization 0.1 \
  --dtype half \
  --served-model-name "bge-m3" \
  --host 0.0.0.0 \
  --port 8001 --max-model-len 4096 &

# vllm启动Reranker模型bge-reranker-base
CUDA_VISIBLE_DEVICES=1 nohup python -m vllm.entrypoints.openai.api_server \
  --model="/mnt/nvme01/models/bge-reranker-base" \
  --tensor-parallel-size 1 \
  --gpu-memory-utilization 0.1 \
  --dtype half \
  --served-model-name "bge-reranker-base" \
  --host 0.0.0.0 \
  --port 8002 &

# vllm启动Qwen3
#下载模型
modelscope download --model Qwen/Qwen3-235B-A22B --local_dir /mnt/nvme02/models/Qwen3-235B-A22B
#启动模型
nohup python -m vllm.entrypoints.openai.api_server \
  --model /mnt/nvme02/models/Qwen3-235B-A22B \
  --served-model-name qwen3 \
  --tensor_parallel_size 8 \
  --host 0.0.0.0 \
  --port 8004 \
  --gpu-memory-utilization 0.8 \
  --max-num-seqs 16 \
  --enable-expert-parallel \
  --max-model-len 4096 \
  --enable-reasoning \
  --reasoning-parser deepseek_r1 &


dify 添加 vllm 启动的模型

image.png

image.png

vllm 同时跑多个模型资源调度可能会出现问题,看到网上有帖子说vgpu的方式可解决,待研究~


links
https://blog.csdn.net/qq_23435961/article/details/147981790

<think>首先,用户的问题是关于如何使用vLLM部署Qwen-Embedding-0.6B模型的。根据系统指令,我需要使用中文回答,结构清晰,逐步解决问题。 回顾用户提供的引用: - 引用[1]:提到Qwen3-Reranker-0.6B模型无法通过vLLM直接部署,但提供了一个过渡版本。 - 引用[2]:讨论Qwen3-Embedding-0.6B模型在多语言语义检索中的应用。 - 引用[3]:介绍阿里开源的模型,包括Qwen3-EmbeddingQwen3-Reranker。 用户的问题是针对Qwen-Embedding-0.6B模型,而不是Reranker模型。引用[1]是关于Reranker模型部署问题,但用户问的是Embedding模型。 关键点:引用[1]说Qwen3-Reranker-0.6B无法用vLLM部署,但用户问的是Qwen-Embedding-0.6B。我需要检查Embedding模型是否能用vLLM部署vLLM(Vectorized Low-Latency Model Serving)是一个用于高效部署大语言模型的框架,专注于推理优化。它主要用于生成式模型,如LLMs,处理文本序列。 Qwen-Embedding-0.6B是一个嵌入模型,用于生成向量表示(embeddings),而不是生成文本。vLLM主要针对序列生成任务,可能不适合直接用于嵌入模型。 在引用[1]中,它提到Qwen3-Reranker-0.6B无法用vLLM部署,但提供了一个过渡版本。用户问的是Embedding模型,所以我需要确认Embedding模型部署情况。 在引用[3]中,它说阿里开源了Qwen3-EmbeddingQwen3-Reranker模型,但没有具体提到vLLM部署。 我应该基于一般知识:vLLM设计用于自回归语言模型,嵌入模型通常是前馈网络,输出固定长度的向量,而不是序列。因此,vLLM可能不支持直接部署嵌入模型。 用户说:"我想部署Qwen-Embedding-0.6B模型使用vLLM框架",所以我需要解释是否可行,以及如何做。 从引用[1],它说对于Reranker模型vLLM不支持,但提供了过渡版本。对于Embedding模型,情况可能类似。 我需要搜索或回忆相关信息。在真实场景中,我会查文档,但这里基于提供的信息。 引用[1]:"无法正常使用Vllm部署Qwen3-Reranker-0.6B模型",但用户问的是Embedding模型。可能Embedding模型也有类似问题。 实际上,Qwen-Embedding-0.6B是一个基于Transformer的模型,用于生成embeddings。vLLM支持文本嵌入模型吗? vLLM的文档表明它主要用于文本生成,但可能通过修改支持嵌入模型。然而,标准vLLM可能不直接支持。 在引用[1]中,它说对于Reranker,他们做了一个过渡版本。或许对于Embedding模型,也需要类似方法。 但用户指定了vLLM,所以我需要指导如何尝试部署。 步骤: 1. **确认模型兼容性**:首先,检查vLLM是否支持Qwen-Embedding-0.6B。基于引用,vLLM可能不支持直接部署,因为它是为生成模型设计的。 2. **提供替代方案**:如果vLLM不支持,建议其他方法,如使用Hugging Face Transformers或ONNX。 3. **如果可能,部署步骤**:如果可行,给出部署指南。 从知识库:Qwen模型是开源的,通常可以通过Hugging Face使用vLLM支持加载Hugging Face模型vLLM支持加载任何Hugging Face模型,但优化针对序列生成。对于嵌入模型,它可能工作,但效率不高。 在vLLM GitHub或文档中,有关于嵌入模型的支持吗?我不确定。 为了回答用户,我应该基于引用。 引用[1]是关于Reranker的,但类似:它说无法部署,但提供了一个版本。用户问的是Embedding,所以或许我需要说同样。 但用户说"Qwen-Embedding-0.6B",而引用中提到"Qwen3-Embedding-0.6B",应该是同一个。 在引用[2]和[3],是Qwen3-Embedding-0.6B。 所以,对于Qwen-Embedding-0.6B,部署vLLM可能有问题。 参考引用[1]:"无法正常使用Vllm部署... 于是做了这个版本供大家暂时使用。" 这是针对Reranker的。 对于Embedding模型,可能类似。 但用户没有提到问题,只是问如何部署。 我应该先解释情况。 结构化回答: - 介绍模型Qwen-Embedding-0.6B是用于生成文本嵌入的模型。 - 解释vLLMvLLM是一个高效的LLM服务框架,但主要针对文本生成。 - 部署可能性:由于嵌入模型不是自回归的,vLLM可能不是最佳选择,但可以尝试。 - 步骤:如果用户坚持,给出如何尝试部署的步骤。 从引用[1],对于Reranker,他们提供了一个过渡版本。或许对于Embedding,没有类似问题,或者有。 我需要假设。 在真实世界,Qwen-Embedding模型可以直接通过Hugging Face使用vLLM可能支持加载它。 但为了准确,基于引用,引用[1]说对于Reranker无法部署,但Embedding可能不同。 引用中没有直接说Embedding模型无法部署vLLM。 所以,我可以说:虽然vLLM主要针对生成模型,但可以尝试部署嵌入模型给出步骤。 步骤: 1. 安装vLLM。 2. 使用vLLM的命令行或API加载模型。 例如,使用 `vllm.entrypoints.openai.api_server` 或类似。 标准方式是使用vLLM的Python API。 例如: ```python from vllm import LLM llm = LLM(model="Qwen/Qwen-Embedding-0.6B") # 假设模型在Hugging Face ``` 但Qwen-Embedding-0.6B可能不被vLLM直接支持,因为输出不是文本序列。 在vLLM中,模型需要是AutoModelForCausalLM或类似,用于生成。 嵌入模型是AutoModel,输出embeddings。 所以,vLLM可能不支持。 在vLLM文档中,它支持文本嵌入吗?在vLLM中,有一个`TextEmbeddingModel`类或类似?我不认为vLLM原生支持嵌入模型vLLM专注于LLM推理,嵌入模型通常用其他方式服务。 例如,使用Sentence Transformers或直接Hugging Face。 所以,对于用户,我应该建议替代方案。 但用户指定了vLLM,所以我需要解释。 最终回答结构: - 澄清:vLLM主要针对文本生成模型Qwen-Embedding-0.6B是嵌入模型,可能不兼容。 - 如果坚持使用vLLM,提供尝试步骤。 - 建议更好的方法:使用Hugging Face Transformers直接服务模型。 - 参考引用:引用[1]提到对于Reranker模型部署问题,但Embedding可能类似。 在回答中,需要自然地添加引用标识。 例如,如果提到引用,加[^1]等。 系统指令说:"回答中引用的段落末尾自然地添加引用标识",所以当引用信息时添加。 另外,需要生成相关问题。 最后,使用中文。 回答大纲: 1. 解释模型和框架:简要介绍Qwen-Embedding-0.6B和vLLM。 2. 部署可行性:基于引用和知识,说明vLLM可能不适合嵌入模型,但可以尝试。 3. 部署步骤:如果可能,给出代码示例或命令。 4. 替代方案:推荐其他部署方法。 5. 相关问题:生成3个相关问题。 代码格式:如果有代码,用```python```块。 数学表达式:使用$...$或$$...$$,但这里可能不需要。 现在,内容: 从引用[3]:"Qwen3-EmbeddingQwen3-Reranker" 和引用[2]描述Embedding模型。 引用[1]说Reranker无法用vLLM部署,但提供了过渡版本。 对于Embedding模型,我假设类似问题,或者没有指定。 为了安全,我可以说:根据社区经验,部署Qwen系列模型vLLM时可能遇到兼容性问题,但可以尝试以下步骤。 部署步骤: - 确保vLLM安装:`pip install vllm` - 加载模型使用Python 但模型可能不被识别。 在Hugging Face上,Qwen-Embedding-0.6B的模型卡:https://huggingface.co/Qwen/Qwen-Embedding-0.6B 它应该可以通过AutoModel加载。 在vLLM,尝试: ```python from vllm import LLM llm = LLM(model="Qwen/Qwen-Embedding-0.6B") ``` 但可能出错,因为模型不是因果LM。 更好的方法:使用vLLM的 `AsyncLLMEngine` 或自定义。 但复杂。 建议使用Hugging Face Transformers直接: ```python from transformers import AutoModel, AutoTokenizer model = AutoModel.from_pretrained("Qwen/Qwen-Embedding-0.6B") tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-Embedding-0.6B") # 然后服务模型,例如用Flask ``` 或使用Text Embedding Inference (TEI)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学亮编程手记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值