大模型部署记录

在部署多个环境时,可以使用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版本

原作者:self-llm/models/Qwen2.5/03-Qwen2.5-7B-Instruct vLLM 部署调用.md at master · datawhalechina/self-llm · GitHub