文章目录
一、说明
本文主要介绍vllm本地部署bge-m3模型API服务实战教程
本文是在Ubuntu24.04+CUDA12.8+Python3.12环境下复现成功的
二、配置环境
2.1 安装虚拟环境
我使用的是mininconda3,如果还不会使用虚拟环境,可以参考Miniconda管理python环境 - CSDN App
创建虚拟环境:
conda create -n bge python=3.12
2.2 安装vllm
安装之前,我们先进入刚才创建的虚拟环境:
conda activate bge
在下载vllm:
pip install vllm
2.3 对应版本的pytorch安装
查看CUDA版本:
nvcc --version
我的CUDA版本:
nvcc: NVIDIA ® Cuda compiler driver
Copyright © 2005-2025 NVIDIA Corporation
Built on Wed_Jan_15_19:20:09_PST_2025
Cuda compilation tools, release 12.8, V12.8.61
Build cuda_12.8.r12.8/compiler.35404655_0
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
2.4安装flash_attn
终端输入:
pip install flash-attn --no-build-isolation
flash_attn的安装非常慢,可能卡在下面的界面三小时左右,我就是三个小时加载出来的:
2.5 下载模型
魔搭社区bge-m3
在下载前,请先通过如下命令安装ModelScope
pip install modelscope
命令行下载:
下载完整模型库
modelscope download --model BAAI/bge-m3
下载单个文件到指定本地文件夹(以下载README.md到当前路径下“dir”目录为例)
modelscope download --model BAAI/bge-m3 README.md --local_dir ./dir
三、运行代码
3.1启动服务
/root/.cache/huggingface/hub/models–BAAI–bge-m3/snapshots/5617a9f61b028005a4858fdac845db406aefb181是我的模型下载地址
nohup vllm serve /root/.cache/huggingface/hub/models--BAAI--bge-m3/snapshots/5617a9f61b028005a4858fdac845db406aefb181 --served-model-name bge-m3 --task embed --port 6342 > bge-m3-log.txt &
下载地址搞不清楚的可以通过下面的代码查询:
from huggingface_hub import hf_hub_download, snapshot_download
from transformers import AutoModel
# 查询特定模型的缓存路径(即使未下载也会返回预期路径)
model_id = "BAAI/bge-m3"
repo_cache_path = snapshot_download(model_id, local_files_only=True, ignore_patterns=["*.bin"])
print(f"{model_id} 的缓存路径: {repo_cache_path}")
3.2 调用代码验证
import requests
import json
url = "http://localhost:6342/v1/embeddings"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer token-abc123"
}
data = {
"model": "bge-m3",
"input": ["你好,学不会就看"]
}
try:
response = requests.post(url, headers=headers, data=json.dumps(data))
response.raise_for_status() # 检查HTTP响应状态码,如果状态码不是200,则抛出异常
print(response.json()) # 打印响应的JSON内容
except requests.exceptions.RequestException as e:
print(f"请求出错: {e}")
except json.JSONDecodeError as e:
print(f"JSON解析出错: {e}, 响应内容: {response.text}")