简介
vLLM 是一个专为大规模语言模型(Large Language Models, LLM)推理优化的服务框架和推理引擎。它可以高效地管理和部署预先训练好的大型语言模型,尤其是那些具有极高参数数量和复杂度的模型,如GPT系列及其他基于Transformer架构的模型。
vLLM的主要特点包括:
-
高吞吐量服务:通过采用诸如PagedAttention这样的技术,vLLM能够有效地管理内存并提高注意力机制中Key和Value的处理效率,从而提升模型推理的速度和并发处理能力。
-
内存优化:vLLM通过动态内存管理、KV缓存技术和分页算法降低模型在推理过程中所需的内存,使得大规模模型能在有限的硬件资源下稳定运行。
-
批处理:支持对传入请求进行连续批处理,提高了计算资源的利用率和整体响应速度。
-
CUDA优化:针对CUDA图形处理器进行了内核级别的优化,使得模型能够在GPU上高效执行。
-
量化支持:提供多种量化技术,如GPTQ、AWQ、SqueezeLLM和FP8 KV缓存等,以减小模型在内存和带宽上的开销。
-
易用部署:通过简化API和命令行接口,vLLM允许用户便捷地部署和管理模型服务,同时也支持与OpenAI GPT-3 API类似的RESTful API。
-
模型并行:支持模型在多个GPU上进行并行运算,利用pipeline parallelism、tensor parallelism等技术进一步提升推理性能。
通过vLLM,开发者和企业能够更容易地将大型预训练模型应用到实际场景中,如智能问答、文本生成、聊天机器人等,同时保证高性能和低延迟的服务体验。
安装
1.安装显卡驱动
首先确保自己的服务器,是不是nvidia显卡,有没有安装nvidia驱动。下面以Ubuntu系统为例
在Ubuntu系统中查询显卡信息,可以使用以下命令:
-
使用
lshw
命令查看详细硬件信息,包括显卡部分:sudo lshw -C display
-
使用
lspci
命令快速查看PCI设备列表中有关显卡的部分:lspci | grep -i vga -A 12
或简化版(只显示显卡基本信息):
lspci -k | grep -A 2 -i "VGA"
-
如果系统中有NVIDIA显卡并且已安装了NVIDIA驱动,可以使用
nvidia-smi
命令获取更详尽的NVIDIA显卡信息,包括显存使用情况、驱动版本、GPU温度等:nvidia-smi
-
对于AMD显卡,若已安装ATI/AMD显卡驱动,可以尝试使用
aticonfig
(但这在现代AMD显卡驱动中已不常用)。 -
若想查看当前已安装的显卡驱动情况,可以通过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)。
以下是解决步骤:
-
卸载现有不兼容的triton版本:
pip uninstall triton
-
安装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_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
exec(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_args
engine = 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_engine
return 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_tokenizer
self.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_tokenizer
tokenizer = AutoTokenizer.from_pretrained(
File "/usr/local/lib/python3.8/dist-packages/transformers/models/auto/tokenization_auto.py", line 806, in from_pretrained
tokenizer_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_module
final_module = get_cached_module_file(
File "/usr/local/lib/python3.8/dist-packages/transformers/dynamic_module_utils.py", line 314, in get_cached_module_file
modules_needed = check_imports(resolved_module_file)
File "/usr/local/lib/python3.8/dist-packages/transformers/dynamic_module_utils.py", line 180, in check_imports
raise 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_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
exec(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 OpenAIServingChat
File "/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_processor
File "/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, RegexLogitsProcessor
File "/usr/local/lib/python3.8/dist-packages/vllm/model_executor/guided_logits_processors.py", line 23, in <module>
from outlines.fsm.fsm import RegexFSM
File "/usr/local/lib/python3.8/dist-packages/outlines/__init__.py", line 2, in <module>
import outlines.generate
File "/usr/local/lib/python3.8/dist-packages/outlines/generate/__init__.py", line 2, in <module>
from .cfg import cfg
File "/usr/local/lib/python3.8/dist-packages/outlines/generate/cfg.py", line 5, in <module>
from outlines.models import OpenAI
File "/usr/local/lib/python3.8/dist-packages/outlines/models/__init__.py", line 11, in <module>
from .llamacpp import LlamaCpp, llamacpp
File "/usr/local/lib/python3.8/dist-packages/outlines/models/llamacpp.py", line 5, in <module>
from outlines.integrations.llamacpp import ( # noqa: F401
File "/usr/local/lib/python3.8/dist-packages/outlines/integrations/llamacpp.py", line 37, in <module>
from outlines.fsm.json_schema import build_regex_from_schema
File "/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_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
exec(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_args
engine_configs = engine_args.create_engine_configs()
File "/usr/local/lib/python3.8/dist-packages/vllm/engine/arg_utils.py", line 286, in create_engine_configs
device_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.
从您提供的错误信息可以看出存在两个主要问题:
-
CUDA驱动版本过旧:
错误信息中提到"NVIDIA driver on your system is too old",并且给出了更新驱动的链接。这意味着当前的CUDA驱动版本无法与您正在尝试运行的PyTorch版本兼容。解决方法是按照提示更新NVIDIA GPU驱动程序。访问NVIDIA官网下载适用于您系统的最新驱动,并按照安装指南进行更新。 -
No supported device detected:
错误消息最后显示"No supported device detected",表示VLLM引擎未能检测到任何可用的计算设备。这可能是因为更新驱动程序后未重启系统,或者是驱动程序与硬件不匹配,或者GPU不支持所需的功能。
解决步骤如下:
- 更新NVIDIA驱动:
在Ubuntu系统中更新NVIDIA显卡驱动,可以按照以下步骤进行操作:
-
打开终端:
Ctrl + Alt + T
-
更新系统包列表:
sudo apt update
-
安装NVIDIA驱动(如果Ubuntu仓库中有可用的更新版本):
sudo apt upgrade nvidia-driver-*
-
安装最新版驱动
apt install nvidia-utils-550
-
重启系统以加载新驱动:
sudo reboot
-
确认GPU支持:
确保您的GPU硬件能够支持所需的CUDA版本以及VLLM框架要求的特性。 -
检查CUDA版本与PyTorch兼容性:
确保安装的PyTorch版本与更新后的CUDA驱动兼容。如有必要,按照PyTorch官网提供的指南安装与当前CUDA版本适配的PyTorch版本。 -
重新运行应用:
sudo reboot