Linux安装vLLM模型推理框架问题总汇

简介

vLLM 是一个专为大规模语言模型(Large Language Models, LLM)推理优化的服务框架和推理引擎。它可以高效地管理和部署预先训练好的大型语言模型,尤其是那些具有极高参数数量和复杂度的模型,如GPT系列及其他基于Transformer架构的模型。

vLLM的主要特点包括:

  1. 高吞吐量服务:通过采用诸如PagedAttention这样的技术,vLLM能够有效地管理内存并提高注意力机制中Key和Value的处理效率,从而提升模型推理的速度和并发处理能力。

  2. 内存优化:vLLM通过动态内存管理、KV缓存技术和分页算法降低模型在推理过程中所需的内存,使得大规模模型能在有限的硬件资源下稳定运行。

  3. 批处理:支持对传入请求进行连续批处理,提高了计算资源的利用率和整体响应速度。

  4. CUDA优化:针对CUDA图形处理器进行了内核级别的优化,使得模型能够在GPU上高效执行。

  5. 量化支持:提供多种量化技术,如GPTQ、AWQ、SqueezeLLM和FP8 KV缓存等,以减小模型在内存和带宽上的开销。

  6. 易用部署:通过简化API和命令行接口,vLLM允许用户便捷地部署和管理模型服务,同时也支持与OpenAI GPT-3 API类似的RESTful API。

  7. 模型并行:支持模型在多个GPU上进行并行运算,利用pipeline parallelism、tensor parallelism等技术进一步提升推理性能。

通过vLLM,开发者和企业能够更容易地将大型预训练模型应用到实际场景中,如智能问答、文本生成、聊天机器人等,同时保证高性能和低延迟的服务体验。

安装

1.安装显卡驱动

首先确保自己的服务器,是不是nvidia显卡,有没有安装nvidia驱动。下面以Ubuntu系统为例
在Ubuntu系统中查询显卡信息,可以使用以下命令:

  1. 使用lshw命令查看详细硬件信息,包括显卡部分:

    sudo lshw -C display
    
  2. 使用lspci命令快速查看PCI设备列表中有关显卡的部分:

    lspci | grep -i vga -A 12
    

    或简化版(只显示显卡基本信息):

    lspci -k | grep -A 2 -i "VGA"
    
  3. 如果系统中有NVIDIA显卡并且已安装了NVIDIA驱动,可以使用nvidia-smi命令获取更详尽的NVIDIA显卡信息,包括显存使用情况、驱动版本、GPU温度等:

    nvidia-smi
    
  4. 对于AMD显卡,若已安装ATI/AMD显卡驱动,可以尝试使用aticonfig(但这在现代AMD显卡驱动中已不常用)。

  5. 若想查看当前已安装的显卡驱动情况,可以通过Ubuntu的“附加驱动”工具进行查看:

    sudo ubuntu-drivers devices
    

    或者通过GUI方式:

    • 打开Ubuntu系统桌面,点击左上角的搜索按钮,搜索“驱动”或“Software & Updates”(软件与更新)。
    • 进入“附加驱动”标签页,系统会扫描并列出可用于系统中硬件设备的驱动程序,其中包括显卡驱动。

通过上述命令或图形界面操作,您可以获取到Ubuntu系统中显卡的基本信息和驱动状态。

2.安装vLLM框架

安装命令:

pip install -U vllm
  • 在 pip install 命令中,-U 或 --upgrade 选项用于升级指定的包到最新版本。如果该包尚未安装,此命令将首先安装它。

pip未安装

如果提示 pip: command not found 则用下面命令:

sudo python3 -m pip install -U vllm

或者执行命令:

apt install python3-pip
pip install -U vllm

网络问题

由于vllm的下载源是国外的网络可能不稳定,安装时候如果报错如下:

 ERROR: Could not find a version that satisfies the requirement numpy (from vllm) (from versions: none) ERROR: No matching distribution found for numpy (from vllm) 

则执行一下命令,设定超时时间下载:

pip install --default-timeout=100 --upgrade vllm
  • –default设定超时100s,更新下载vllm

torch和triton版本兼容问题

ERROR: torch 2.1.2 has requirement triton==2.1.0; platform_system == "Linux" and platform_machine == "x86_64", but you'll have triton 2.2.0 which is incompatible.
  • 异常指出当前环境中安装的torch版本2.1.2要求triton版本为2.1.0,然而即将安装的是2.2.0版本,两者之间存在兼容性问题。为了解决此问题,要么需要降级triton至2.1.0版本,要么升级torch至支持triton 2.2.0的版本。因为当前vllm版本依赖于 torch 2.1.2,升级torch 会导致vllm安装失败,所以只能降级triton至2.1.0版本。

当你在安装或升级PyTorch的过程中遇到这样的错误信息,表明当前环境中安装的triton版本与PyTorch 2.1.2要求的triton版本不兼容。为了解决这个问题,你需要确保安装与PyTorch 2.1.2兼容的triton版本(即2.1.0)。

以下是解决步骤:

  1. 卸载现有不兼容的triton版本

    pip uninstall triton
    
  2. 安装PyTorch 2.1.2所需的triton 2.1.0版本
    由于triton的安装方式可能因项目和发布时间而异,你可能需要去triton项目的GitHub仓库或其他官方发布的渠道找到2.1.0版本的具体安装命令。若triton可通过pip安装,命令可能是类似于:

   pip install triton==2.1.0

如何安装过慢,使用国内的下载源

pip install triton==2.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

在实际操作前,请查阅triton和PyTorch的官方文档,以获取最新和正确的安装指引。由于triton并非PyTorch的标准依赖项,具体的安装过程可能会有所不同,取决于项目的需求和当时的发布情况。如果triton与特定版本的PyTorch有强绑定关系,也可能需要从PyTorch官方或者其他可靠的第三方源获取triton的特定版本。

最后重新执行安装vllm的命令:

pip install -U vllm

3.检查vllm是否安装成功

执行命令:

pip show vllm

输出一下内容,证明安装成功:

Name: vllm
Version: 0.3.3
Summary: A high-throughput and memory-efficient inference and serving engine for LLMs
Home-page: https://github.com/vllm-project/vllm
Author: vLLM Team
Author-email: None
License: Apache 2.0
Location: /usr/local/lib/python3.8/dist-packages
Requires: torch, sentencepiece, xformers, prometheus-client, triton, uvicorn, ninja, ray, psutil, transformers, pynvml, numpy, outlines, fastapi, cupy-cuda12x, pydantic
Required-by: 

运行大模型api服务

执行以下命令:

python3 -m vllm.entrypoints.openai.api_server --served-model-name Qwen1.5-7B-Chat --model Qwen/Qwen1.5-7B-Chat
  • 默认会根据–model的值,从本地路径找模型,没有找到就会从’https://huggingface.co 网站上下载模型,国内因为网络原因不能下载。

通过git下载模型

从https://www.modelscope.cn/models下载模型。
在这里插入图片描述
执行git下载命令:

cd /
mkdir models
git clone https://www.modelscope.cn/qwen/Qwen1.5-7B.git

执行以下命令:

python3 -m vllm.entrypoints.openai.api_server  --model /models/Qwen1.5-7B-Chat --trust-remote-code --port=8081 --served-model-name qwen/Qwen-7B-Chat 
  • Qwen1.5-7B模型会下载在/models文件中
  • --served-model-name 指定模型服务名,不设置模型服务名即--model的名一样

vllm直接支持modelscope模型

可以通过设置环境变量使得vllm从www.modelscope.cn下载模型,到本地modelscope模型库里。

启动普通server
VLLM_USE_MODELSCOPE=True python3 -m vllm.entrypoints.api_server  --model="qwen/Qwen-7B-Chat" --revision="v1.1.8" --trust-remote-code --port=8081
启动openai兼容接口
VLLM_USE_MODELSCOPE=True python3 -m vllm.entrypoints.openai.api_server  --model="qwen/Qwen-7B-Chat" --revision="v1.1.8" --trust-remote-code  --port=8081

如果模型在modelscope cache目录已经存在,则会直接使用cache中的模型,否则会从www.modelscope.cn下载模型

常见报错

如果报以下错误:

Traceback (most recent call last):File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_mainreturn _run_code(code, main_globals, None,File "/usr/lib/python3.8/runpy.py", line 87, in _run_codeexec(code, run_globals)File "/usr/local/lib/python3.8/dist-packages/vllm/entrypoints/api_server.py", line 96, in <module>engine = AsyncLLMEngine.from_engine_args(engine_args)File "/usr/local/lib/python3.8/dist-packages/vllm/engine/async_llm_engine.py", line 628, in from_engine_argsengine = cls(parallel_config.worker_use_ray,File "/usr/local/lib/python3.8/dist-packages/vllm/engine/async_llm_engine.py", line 321, in __init__self.engine = self._init_engine(*args, **kwargs)File "/usr/local/lib/python3.8/dist-packages/vllm/engine/async_llm_engine.py", line 369, in _init_enginereturn engine_class(*args, **kwargs)File "/usr/local/lib/python3.8/dist-packages/vllm/engine/llm_engine.py", line 117, in __init__self._init_tokenizer()File "/usr/local/lib/python3.8/dist-packages/vllm/engine/llm_engine.py", line 192, in _init_tokenizerself.tokenizer: TokenizerGroup = TokenizerGroup(File "/usr/local/lib/python3.8/dist-packages/vllm/transformers_utils/tokenizer.py", line 100, in __init__self.tokenizer = get_tokenizer(self.tokenizer_id, **tokenizer_config)File "/usr/local/lib/python3.8/dist-packages/vllm/transformers_utils/tokenizer.py", line 30, in get_tokenizertokenizer = AutoTokenizer.from_pretrained(File "/usr/local/lib/python3.8/dist-packages/transformers/models/auto/tokenization_auto.py", line 806, in from_pretrainedtokenizer_class = get_class_from_dynamic_module(class_ref, pretrained_model_name_or_path, **kwargs)File "/usr/local/lib/python3.8/dist-packages/transformers/dynamic_module_utils.py", line 488, in get_class_from_dynamic_modulefinal_module = get_cached_module_file(File "/usr/local/lib/python3.8/dist-packages/transformers/dynamic_module_utils.py", line 314, in get_cached_module_filemodules_needed = check_imports(resolved_module_file)File "/usr/local/lib/python3.8/dist-packages/transformers/dynamic_module_utils.py", line 180, in check_importsraise ImportError(
ImportError: This modeling file requires the following packages that were not found in your environment: tiktoken. Run `pip install tiktoken`

执行命令,安装 tiktoken库

pip install tiktoken

安装成功后,再执行 启动模型命令即可。

如果报以下错误:

Traceback (most recent call last):File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_mainreturn _run_code(code, main_globals, None,File "/usr/lib/python3.8/runpy.py", line 87, in _run_codeexec(code, run_globals)File "/usr/local/lib/python3.8/dist-packages/vllm/entrypoints/openai/api_server.py", line 22, in <module>from vllm.entrypoints.openai.serving_chat import OpenAIServingChatFile "/usr/local/lib/python3.8/dist-packages/vllm/entrypoints/openai/serving_chat.py", line 15, in <module>from vllm.model_executor.guided_decoding import get_guided_decoding_logits_processorFile "/usr/local/lib/python3.8/dist-packages/vllm/model_executor/guided_decoding.py", line 12, in <module>from vllm.model_executor.guided_logits_processors import JSONLogitsProcessor, RegexLogitsProcessorFile "/usr/local/lib/python3.8/dist-packages/vllm/model_executor/guided_logits_processors.py", line 23, in <module>from outlines.fsm.fsm import RegexFSMFile "/usr/local/lib/python3.8/dist-packages/outlines/__init__.py", line 2, in <module>import outlines.generateFile "/usr/local/lib/python3.8/dist-packages/outlines/generate/__init__.py", line 2, in <module>from .cfg import cfgFile "/usr/local/lib/python3.8/dist-packages/outlines/generate/cfg.py", line 5, in <module>from outlines.models import OpenAIFile "/usr/local/lib/python3.8/dist-packages/outlines/models/__init__.py", line 11, in <module>from .llamacpp import LlamaCpp, llamacppFile "/usr/local/lib/python3.8/dist-packages/outlines/models/llamacpp.py", line 5, in <module>from outlines.integrations.llamacpp import (  # noqa: F401File "/usr/local/lib/python3.8/dist-packages/outlines/integrations/llamacpp.py", line 37, in <module>from outlines.fsm.json_schema import build_regex_from_schemaFile "/usr/local/lib/python3.8/dist-packages/outlines/fsm/json_schema.py", line 6, in <module>from jsonschema.protocols import Validator
ModuleNotFoundError: No module named 'jsonschema.protocols'

从错误信息来看,虽然vllm及相关的依赖已经安装,但在运行过程中出现了新的错误:“ModuleNotFoundError: No module named ‘jsonschema.protocols’”。这意味着在执行程序时,Python无法找到jsonschema库中的protocols模块。

要解决这个问题,请确保jsonschema库及其所有必需的组件都已正确安装且是最新的版本。您可以按照以下步骤操作:

pip install --upgrade jsonschema

如果报以下错误:

INFO 03-15 05:20:25 api_server.py:228] args: Namespace(allow_credentials=False, allowed_headers=['*'], allowed_methods=['*'], allowed_origins=['*'], api_key=None, block_size=16, chat_template=None, code_revision=None, device='auto', disable_custom_all_reduce=False, disable_log_requests=False, disable_log_stats=False, download_dir=None, dtype='auto', enable_lora=False, enforce_eager=False, engine_use_ray=False, gpu_memory_utilization=0.9, host=None, kv_cache_dtype='auto', load_format='auto', lora_dtype='auto', lora_extra_vocab_size=256, lora_modules=None, max_context_len_to_capture=8192, max_cpu_loras=None, max_log_len=None, max_lora_rank=16, max_loras=1, max_model_len=None, max_num_batched_tokens=None, max_num_seqs=256, max_paddings=256, max_parallel_loading_workers=None, middleware=[], model='Qwen/Qwen1.5-7B-Chat', pipeline_parallel_size=1, port=8000, quantization=None, response_role='assistant', revision=None, root_path=None, seed=0, served_model_name='Qwen1.5-7B-Chat', ssl_certfile=None, ssl_keyfile=None, swap_space=4, tensor_parallel_size=1, tokenizer=None, tokenizer_mode='auto', tokenizer_revision=None, trust_remote_code=False, worker_use_ray=False)
/usr/local/lib/python3.8/dist-packages/torch/cuda/__init__.py:138: UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 11040). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.)return torch._C._cuda_getDeviceCount() > 0
Traceback (most recent call last):File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_mainreturn _run_code(code, main_globals, None,File "/usr/lib/python3.8/runpy.py", line 87, in _run_codeexec(code, run_globals)File "/usr/local/lib/python3.8/dist-packages/vllm/entrypoints/openai/api_server.py", line 236, in <module>engine = AsyncLLMEngine.from_engine_args(engine_args)File "/usr/local/lib/python3.8/dist-packages/vllm/engine/async_llm_engine.py", line 622, in from_engine_argsengine_configs = engine_args.create_engine_configs()File "/usr/local/lib/python3.8/dist-packages/vllm/engine/arg_utils.py", line 286, in create_engine_configsdevice_config = DeviceConfig(self.device)File "/usr/local/lib/python3.8/dist-packages/vllm/config.py", line 496, in __init__raise RuntimeError("No supported device detected.")
RuntimeError: No supported device detected.

从您提供的错误信息可以看出存在两个主要问题:

  1. CUDA驱动版本过旧
    错误信息中提到"NVIDIA driver on your system is too old",并且给出了更新驱动的链接。这意味着当前的CUDA驱动版本无法与您正在尝试运行的PyTorch版本兼容。解决方法是按照提示更新NVIDIA GPU驱动程序。访问NVIDIA官网下载适用于您系统的最新驱动,并按照安装指南进行更新。

  2. No supported device detected
    错误消息最后显示"No supported device detected",表示VLLM引擎未能检测到任何可用的计算设备。这可能是因为更新驱动程序后未重启系统,或者是驱动程序与硬件不匹配,或者GPU不支持所需的功能。

解决步骤如下:

  • 更新NVIDIA驱动
    在Ubuntu系统中更新NVIDIA显卡驱动,可以按照以下步骤进行操作:
  1. 打开终端:

    Ctrl + Alt + T
    
  2. 更新系统包列表:

    sudo apt update
    
  3. 安装NVIDIA驱动(如果Ubuntu仓库中有可用的更新版本):

    sudo apt upgrade nvidia-driver-*
    
  4. 安装最新版驱动

    apt install nvidia-utils-550
    
  5. 重启系统以加载新驱动:

    sudo reboot
    
  • 确认GPU支持
    确保您的GPU硬件能够支持所需的CUDA版本以及VLLM框架要求的特性。

  • 检查CUDA版本与PyTorch兼容性
    确保安装的PyTorch版本与更新后的CUDA驱动兼容。如有必要,按照PyTorch官网提供的指南安装与当前CUDA版本适配的PyTorch版本。

  • 重新运行应用

    sudo reboot
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/543898.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初学者必看的python中类型转换

Python中常见的类型转换 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字符串 repr(x ) 将对象 x 转换为表达式字符串 eval(str ) 用来计算在字符串中…

线性回归 quickstart

构建一元一次方程 100个&#xff08;X, y &#xff09;&#xff0c;大概是’y3x4’ import numpy as npnp.random.seed(42) # to make this code example reproducible m 100 # number of instances X 2 * np.random.rand(m, 1) # column vector y 4 3 * X np.random…

【Python使用】python高级进阶知识md总结第4篇:静态Web服务器-命令行启动动态绑定端口号,html 的介绍【附代码文档】

python高级进阶全知识知识笔记总结完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;操作系统&#xff0c;虚拟机软件&#xff0c;Ubuntu操作系统&#xff0c;Linux内核及发行版&#xff0c;查看目录命令&#xff0c;切换目录命令&#xff0c;绝对路径和相对…

【鸿蒙 HarmonyOS 4.0】Web组件

一、介绍 页面加载是Web组件的基本功能。根据页面加载数据来源可以分为三种常用场景&#xff0c;包括加载网络页面、加载本地页面、加载HTML格式的富文本数据。 二、加载网页 2.1、加载在线网页 Web组件的使用非常简单&#xff0c;只需要在Page目录下的ArkTS文件中创建一个…

程序人生——Java泛型和反射的使用建议

目录 引出泛型和反射建议93&#xff1a;Java的泛型是类型擦除的建议94&#xff1a;不能初始化泛型参数和数组建议95&#xff1a;强制声明泛型的实际类型 建议96&#xff1a;不同的场景使用不同的泛型通配符建议97&#xff1a;警惕泛型是不能协变和逆变的 建议98&#xff1a;建议…

【嵌入式实践】【芝麻】【硬件篇-3】从0到1给电动车添加指纹锁:光耦+继电器电路设计及讲解

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹&#xff0c;电动车进入P档等待时计时&#xff0c;计时超过5min则自动锁车&#xff0c;计时过程中按刹车可中断P档状态&#xff0c;同时中断锁车计时。改项目我称之为“芝…

【Poi-tl Documentation】自定义行删除标签

前置说明&#xff1a; <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version> </dependency>模板样式&#xff1a; 删除行表格测试.docx 实现思路&#xff1a;通过定制占位…

Linux操作系统裸机开发-环境搭建

一、配置SSH服务 1、下载安装ssh服务输入以下命令 sudo apt-get install nfs-kernel-server portmap2、建立一个供SSH服务使用的文件夹如以下命令 mkdir linux 3、完成前两步之后需要将其文件路径放到/etc/exports文件里输入以下命令&#xff1a; sudo vi /etc/esports 4.打…

基于springboot+vue实现疫情防控物资调配系统项目【项目源码】计算机毕业设计

基于springbootvue实现疫情防控物资调配系统演示 B/S结构的介绍 在确定了项目的主题和研究背景之后&#xff0c;就要确定本系统的架构了。主流的架构有两种&#xff0c;一种是B/S架构&#xff0c;一种是C/S架构。C/S的全称是Client/Server&#xff0c;Client是客户端的意思&am…

javaEE——线程的等待和结束

文章目录 Thread 类及常见方法启动一个线程中断一个线程变量型中断调用 interrupt() 方法来通知观察标志位是否被清除 等待一个线程获取当前线程引用休眠当前线程 线程的状态观察线程的所有状态观察 1: 关注 NEW 、 RUNNABLE 、 TERMINATED 状态的切换 多线程带来的风险为什么会…

[善用佳软]推荐掌握小工具:Json解析的命令行工具jq

前言&#xff1a; 我们在各种生产环境或者开发测试环境中&#xff0c;一定遇到有很多信息都是使用JSON串或者文本文件作为输入的。在没有JQ命令行工具之前&#xff0c;我们要从中获取真正的输入&#xff0c;大都把它复制到文本里头&#xff0c;然后使用文本编辑器进行加工整理…

TinyEMU之Linux Kernel编译

TinyEMU之Linux Kernel编译 1 准备工作2 安装RISC-V交叉编译器3 编译Linux Kernel4 镜像格式转换 本文属于《 TinyEMU模拟器基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 准备工作 我们需要&#xff0c;下载以下内容。 编译好的RISC-V交叉编译器&#xff1a;riscv64-…