在部署多个环境时,可以使用conda隔离cuda,但是nvcc还是原本的版本,nvcc一般适应于vllm二次开发,一般不用,下载命令可以使用pip,conda老是报找不到的错误,参考命令:
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu121
然后进入python,执行:
import torch
print(torch.version.cuda) # 输出12.1,说明PyTorch内部CUDA是12.1 print(torch.cuda.is_available()) # True即可正常使用显卡
还有部署模型时如果不用MTP哪些新技术或者显卡太老了(2080),最好就下老版本的VLLM,新版本对老显卡支持不好,一运行就报错,
然后下载其他的依赖:
python -m pip install --upgrade pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install modelscope==1.18.0
pip install openai==1.46.0
pip install tqdm==4.66.2
pip install transformers==4.44.2
pip install vllm==0.6.1.post2
这里原教程让下2.3.0版本的pytorch,但是0.6.1版本的vllm依赖的pytorch要>=2.4.0,这里原作者应该是写错了
下好依赖后执行:
python -c "
import torch, torchvision, torchaudio, vllm, transformers, modelscope, openai, tqdm
print('torch(PyTorch):', torch.version)
print('torch CUDA runtime:', torch.version.cuda)
print('torchvision:', torchvision.version)
print('torchaudio:', torchaudio.version)
print('vllm:', vllm.version)
print('transformers:', transformers.version)
print('modelscope:', modelscope.version)
print('openai:', openai.version)
print('tqdm:', tqdm.version)
"
正常应该打印:
torch(PyTorch): 2.4.0+cu121
torch CUDA runtime: 12.1
torchvision: 0.19.0+cu121
torchaudio: 2.4.0+cu121
vllm: 0.6.1.post2
transformers: 4.44.2
modelscope: 1.18.0
openai: 1.46.0
tqdm: 4.66.2
主要就是看pytorch和cuda的版本
然后执行模型下载命令,用modelscope即可:
先使用python进入python解释器,或者新建一个文件也行:
model_download.py
from modelscope import snapshot_download
model_dir = snapshot_download('qwen/Qwen2.5-7B-Instruct', cache_dir='/root/autodl-tmp', revision='master')
下好之后,再写一份运行文件即可:
vllm_model.py
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
import os
import json
自动下载模型时,指定使用modelscope; 否则,会从HuggingFace下载
os.environ'VLLM_USE_MODELSCOPE'='True'
def get_completion(prompts, model, tokenizer=None, max_tokens=512, temperature=0.8, top_p=0.95, max_model_len=2048):
stop_token_ids = 151329, 151336, 151338
创建采样参数。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
if name == "main":
初始化 vLLM 推理引擎
model='/root/autodl-tmp/qwen/Qwen2___5-7B-Instruct' # 指定模型路径
model="qwen/Qwen2.5-7B-Instruct" # 指定模型名称,自动下载模型
tokenizer = None
加载分词器后传入vLLM 模型,但不是必要的。
tokenizer = AutoTokenizer.from_pretrained(model, use_fast=False)
text = ["你好,帮我介绍一下什么是大语言模型。",
"可以给我将一个有趣的童话故事吗?"]
#prompt = "你好,帮我介绍一下什么是大语言模型"
messages = [
{"role": "system", "content": "你是一个有用的助手。"},
{"role": "user", "content": prompt}
]
作为聊天模板的消息,不是必要的。
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
outputs = get_completion(text, model, tokenizer=tokenizer, max_tokens=512, temperature=1, top_p=1, max_model_len=2048)
输出是一个包含 prompt、生成文本和其他信息的 RequestOutput 对象列表。
打印输出。
for output in outputs:
prompt = output.prompt
generated_text = output.outputs0.text
print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
但是这个不是OpenAI的兼容格式,想要把本地的API暴露为OpenAI的格式还要改
到这里就差不多了,但是这个0.6.1post2版本的Vllm对SSE支持不是很好,在测试时出现了很多问题,最终改为了0.8.x版本