在部署多个环境时,可以使用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.outputs[0].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

Logo

聚焦RDK与具身智能,汇集机器人开发教程、开源案例和技术交流

更多推荐