本文以最新的医学领域最强模型Baichuan-M2-32B为例,记录使用vLLM部署大模型并创建API服务。
创建uv环境
1 2 3
| uv init # 添加modelscope包 uv add modelscope
|
下载模型
安装环境
uv安装pytorch
uv pip install 会在当前 uv 管理的虚拟环境中调用 pip 去安装 Python 包
1
| uv pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu124
|
安装vllm以部署大模型
启动vLLM服务
1 2 3 4 5 6 7 8 9 10 11 12
| cd /mnt/nfs_share/tlj/llms/ source .venv/bin/activate
VLLM_USE_MODELSCOPE=true vllm serve /mnt/nfs_share/tlj/llms/models/baichuan-inc/Baichuan-M2-32B \ --served-model-name "Baichuan-M2-32B" \ --host 0.0.0.0 \ --port 9000 \ --api-key "123456" \ --tensor-parallel-size 2 \ --gpu-memory-utilization 0.9 \ --max-model-len 20000 \ --reasoning-parser qwen3
|
解释:
- 加载本地模型
- 服务开放在 0.0.0.0:9000
- 访问需 API 密钥 123456
- 使用 2 张 GPU 并行
- 显存最多占 90%
- 最大上下文长度 20000
- 推理解析器用 qwen3。影响工具调用,如果不指定也能跑
调用接口
启动vllm服务后,即可通过python代码调用大模型
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| from openai import OpenAI
LLM_API_URL = "http://192.168.205.185:9000/v1" LLM_MODEL_NAME = "Baichuan-M2-32B" # 与模型启动参数--served-model-name一致 MAX_TOKENS = 10000 API_KEY = "123456"
client = OpenAI( api_key=API_KEY, # 替换为你的实际 API Key base_url=LLM_API_URL )
from system_prompt_simple import system_prompt system_prompt = system_prompt
def get_output(user_prompt): completion = client.chat.completions.create( model=LLM_MODEL_NAME, messages=[ {'role': 'system', 'content': system_prompt}, {'role': 'user', 'content': user_prompt} ], temperature=0.05, # 控制输出的随机性,值越高越随机,值越低越确定(建议范围:0~2) top_p=0.7, # 核采样方法的比例阈值,与 temperature 类似,通常和 temperature 二选一使用 n=1, # 生成多少个候选答案(默认为1) max_tokens=MAX_TOKENS, # 最大生成 token 数量,None 表示无限制(根据模型最大长度限制) stop=None, # 遇到指定字符串时停止生成,例如 ['\n', '。'],None 表示不指定 stream=False, # 是否启用流式输出(逐字返回结果),默认 False presence_penalty=0.0, # 对已经出现的内容进行惩罚,防止重复(-2.0 ~ 2.0) frequency_penalty=0.0, # 对高频词汇进行惩罚,鼓励多样性(-2.0 ~ 2.0) # no_thinking=True ) content = completion.choices[0].message.content return content
|