首页 > 其他分享 >大模型推理指南:使用 vLLM 实现高效推理

大模型推理指南:使用 vLLM 实现高效推理

时间:2024-11-21 14:18:05浏览次数:1  
标签:指南 -- root 模型 GPU model vLLM 推理

inference-by-vllm.png

本文主要分享如何使用 vLLM 实现大模型推理服务。

1. 概述

大模型推理有多种方式比如

  • 最基础的 HuggingFace Transformers
  • TGI
  • vLLM
  • Triton + TensorRT-LLM
  • ...

其中,热度最高的应该就是 vLLM,性能好的同时使用也非常简单,本文就分享一下如何使用 vLLM 来启动大模型推理服务。

根据 vLLM 官方博客 vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention 所说:

进行了 NVIDIA A10 GPU 上推理 LLaMA-7 B 和 在 NVIDIA A100 GPU(40 GB)上推理 LLaMA-13 B 两个实验,在吞吐量上 vLLM 比最基础的 HuggingFace Transformers 高 24 倍,比 TGI 高 3.5 倍

vllm-performance.png

2.安装 vLLM

首先要准备一个 GPU 环境,可以参考这篇文章:GPU 环境搭建指南:如何在裸机、Docker、K8s 等环境中使用 GPU

需要保证宿主机上可以正常执行 nvidia-smi 命令,就像这样:

root@test:~# nvidia-smi
Thu Jul 18 10:52:01 2024
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.147.05   Driver Version: 525.147.05   CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA A40          Off  | 00000000:00:07.0 Off |                    0 |
|  0%   45C    P0    88W / 300W |  40920MiB / 46068MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  NVIDIA A40          Off  | 00000000:00:08.0 Off |                    0 |
|  0%   47C    P0    92W / 300W |  40916MiB / 46068MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A   1847616      C   tritonserver                      480MiB |
|    0   N/A  N/A   2553571      C   python3                         40426MiB |
|    1   N/A  N/A   1847616      C   tritonserver                      476MiB |
|    1   N/A  N/A   2109313      C   python3                         40426MiB |
+-----------------------------------------------------------------------------+

安装 conda

为了避免干扰,这里使用 conda 单独创建一个 Python 虚拟环境安装 vLLM。

使用下面的命令可以快速安装最新的 miniconda,也可以去官方下载压缩包,解压并配置到 PATH 变量。

mkdir -p ~/miniconda3

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh

bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3

rm -rf ~/miniconda3/miniconda.sh

然后初始化

# 根据使用的不同 shell 选择一个命令执行
~/miniconda3/bin/conda init bash
~/miniconda3/bin/conda init zsh

激活

source ~/.bashrc

创建虚拟环境安装 vLLM

创建虚拟环境并激活

conda create -n vllm_py310 python=3.10

conda activate vllm_py310

# 配置 pip 源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
pip config set install.trusted-host pypi.tuna.tsinghua.edu.cn

# 在虚拟环境中安装 vllm 0.4.2 版本
pip install vllm==0.4.2

3. 准备模型

一般模型都会发布到 HuggingFace,不过国内网络情况,推荐到 ModelScope 下载。

主流的模型 vLLM 都是支持的,具体列表可以查看官方文档:vllm-supported-models

这里使用 Qwen1.5-1.8B-Chat 进行测试。

使用 git lfs 方式下载:

# 安装并初始化 git-lfs
apt install git-lfs -y
git lfs install

# 下载模型
git lfs clone https://www.modelscope.cn/qwen/Qwen1.5-1.8B-Chat.git

完整内容如下:

root@j99cloudvm:~/lixd/models# ls -lhS Qwen1.5-1.8B-Chat/
total 3.5G
-rw-r--r-- 1 root root 3.5G Jul 18 11:20 model.safetensors
-rw-r--r-- 1 root root 6.8M Jul 18 11:08 tokenizer.json
-rw-r--r-- 1 root root 2.7M Jul 18 11:08 vocab.json
-rw-r--r-- 1 root root 1.6M Jul 18 11:08 merges.txt
-rw-r--r-- 1 root root 7.2K Jul 18 11:08 LICENSE
-rw-r--r-- 1 root root 4.2K Jul 18 11:08 README.md
-rw-r--r-- 1 root root 1.3K Jul 18 11:08 tokenizer_config.json
-rw-r--r-- 1 root root  662 Jul 18 11:08 config.json
-rw-r--r-- 1 root root  206 Jul 18 11:08 generation_config.json
-rw-r--r-- 1 root root   51 Jul 18 11:08 configuration.json

这个目录包含了一个大模型的相关文件。以下是每个文件的作用简要说明:

  • model.safetensors:这是大模型的主要文件,包含了模型的权重。
  • tokenizer.json:这个文件包含了分词器(Tokenizer)的配置和词汇表。分词器用于将输入文本转换为模型可以处理的格式,通常是数字 ID。
  • tokenizer_config.json:这个文件包含了分词器的配置选项,如分词器的类型、参数设置等。
  • config.json:这个文件包含了模型的配置参数,定义了模型的结构和训练过程中的一些设置。它通常包括层数、隐藏单元数、激活函数等参数。
  • generation_config.json:这个文件包含了用于生成文本的配置参数,如生成长度、采样策略等。
  • configuration.json:这个文件通常是模型的额外配置文件,可能包含与模型结构或训练过程相关的配置信息。
  • vocab.json:这个文件包含了分词器的词汇表,通常是一个从词汇到 ID 的映射表。分词器使用这个文件来将文本中的单词转换为模型可以处理的 ID。

一般只需要注意权重文件和 tokenizer 即可。

4. 开始推理

启动推理服务

vLLM 支持提供 OpenAI 格式的 API,启动命令如下:

modelpath=/models/Qwen1.5-1.8B-Chat

# 单卡
python3 -m vllm.entrypoints.openai.api_server \
        --model $modelpath \
        --served-model-name qwen \
        --trust-remote-code

输出如下

INFO 07-18 06:42:31 llm_engine.py:100] Initializing an LLM engine (v0.4.2) with config: model='/models/Qwen1.5-1.8B-Chat', speculative_config=None, tokenizer='/models/Qwen1.5-1.8B-Chat', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.float16, max_seq_len=32768, download_dir=None, load_format=LoadFormat.AUTO, tensor_parallel_size=1, disable_custom_all_reduce=False, quantization=None, enforce_eager=False, kv_cache_dtype=auto, quantization_param_path=None, device_config=cuda, decoding_config=DecodingConfig(guided_decoding_backend='outlines'), seed=0, served_model_name=qwen)
INFO:     Started server process [614]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

vLLM 默认监听 8000 端口。

对于多卡则是增加参数 tensor-parallel-size ,将该参数设置为 GPU 数量即可,vLLM 会启动 ray cluster 将模型切分到多个 GPU 上运行,对于大模型很有用。

python3 -m vllm.entrypoints.openai.api_server \
        --model $modelpath \
        --served-model-name qwen \
        --tensor-parallel-size 8 \
        --trust-remote-code

发送测试请求

直接使用 OpenAI 格式请求

# model 就是前面启动服务时的 served-model-name 参数
curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "qwen",
        "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "你是谁?"}
        ]
    }'

输出如下:

{"id":"cmpl-07f2f8c70bd44c10bba71d730e6e10a3","object":"chat.completion","created":1721284973,"model":"qwen","choices":[{"index":0,"message":{"role":"assistant","content":"我是来自阿里云的大规模语言模型,我叫通义千问。我是阿里云自主研发的超大规模语言模型,可以回答问题、创作文字,还能表达观点、撰写代码、撰写故事,还能表达观点、撰写代码、撰写故事。我被设计用来帮助用户解答问题、创作文字、表达观点、撰写代码、撰写故事,以及进行其他各种自然语言处理任务。如果您有任何问题或需要帮助,请随时告诉我,我会尽力提供支持。"},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":22,"total_tokens":121,"completion_tokens":99}}

查看 GPU 占用情况,基本跑满了

Thu Jul 18 06:45:32 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.161.08             Driver Version: 535.161.08   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  Tesla T4                       On  | 00000000:3B:00.0 Off |                    0 |
| N/A   59C    P0              69W /  70W |  12833MiB / 15360MiB |     84%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
|   1  Tesla T4                       On  | 00000000:86:00.0 Off |                    0 |
| N/A   51C    P0              30W /  70W |   4849MiB / 15360MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A   3376627      C   python3                                   12818MiB |
|    1   N/A  N/A   1150487      C   /usr/bin/python3                           4846MiB |
+---------------------------------------------------------------------------------------+

5. 小结

本文主要分享如何使用 vLLM 来部署大模型推理服务, 安装好环境后,vLLM 使用非常简单,一条命令即可启动。

modelpath=/models/Qwen1.5-1.8B-Chat

# 单卡
python3 -m vllm.entrypoints.openai.api_server \
        --model $modelpath \
        --served-model-name qwen \
        --trust-remote-code

【Kubernetes 系列】持续更新中,搜索公众号【探索云原生】订阅,阅读更多文章。


标签:指南,--,root,模型,GPU,model,vLLM,推理
From: https://www.cnblogs.com/KubeExplorer/p/18560657

相关文章

  • SpringBoot中小企业人事管理:快速开发指南
    第4章系统设计4.1系统体系结构中小企业人事管理系统的结构图4-1所示:图4-1系统结构登录系统结构图,如图4-2所示:图4-2登录结构图中小企业人事管理系统结构图,如图4-3所示。图4-3中小企业人事管理系统结构图4.2开发流程设计系统流程的分析是通过调查系统所涉及......
  • 边缘计算服务,kubeedge+kserver搭建,【AI模型推理】
    生产运行环境推荐k8s版本1.29、Istio1.21、knative1.13.1单节点k8s:最少6C6G,30g存储多节点k8s:每节点最少2c4g,20g存储注意:部署中所属文件都将分别放置于kubeedge和kserver文件夹之中1)安装istio方法1istioctlinstall-y方法2mkdir-pkservercd!$#镜像名替换脚本......
  • CEF127编译指南 Windows篇:安装depot_tools(四)
    1.引言在CEF(ChromiumEmbeddedFramework)的编译过程中,depot_tools是一个不可或缺的工具集。这套由Chromium项目开发的脚本和工具集,专门用于获取、管理和更新Chromium及其相关项目(包括CEF)的源代码。通过depot_tools,开发者能够高效地同步最新的CEF源码并进行项目构建。本文......
  • FastLLM高性能大模型推理库
    FastLLM是一个高效、易用的轻量级语言模型库。......
  • 麒鸣:提示词AI推理能力提升:从统辖到抽象演绎的突破之路-
    引言人工智能的推理能力是衡量其智能水平的重要指标。本文将深入探讨如何通过统辖、抽象、演绎和反应等关键环节来提升AI的推理能力,为开发者提供实用的思路和方法。理解AI推理的核心要素统辖能力统辖能力是AI系统对问题整体把握的基础。它包括:信息收集与整合上下文理解......
  • 《DNK210使用指南 -CanMV版 V1.0》第三十八章 image码识别实验
    第三十八章image码识别实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正......
  • 【MySQL】MySQL表的基本操作入门指南
    ......
  • KubeSphere 最佳实战:K8s 构建高可用、高性能 Redis 集群实战指南
    首发:运维有术本指南将逐步引导您完成以下关键任务:安装Redis:使用StatefulSet部署Redis。自动或手动配置Redis集群:使用命令行工具初始化Redis集群。Redis性能测试:使用Redis自带的Benchmark工具进行性能测试。Redis图形化管理:安装并配置RedisInsight。通过本......
  • 【避坑指南】安装xshell软件
    吾爱破解下载软件:https://www.52pojie.cn/thread-1900107-1-1.html点击(绿化.bat)即可,免安装。但此时会报错,缺少msvcp110.dll文件、缺少msvcr110.dll文件,然后把这两个dll下载安装到xshell.exe同目录下时,提示报错:提示应用程序无法正常启动0xc000007b。(应该是x64版本的不对)解决方......
  • 洛谷题单指南-二叉堆与树状数组-P2161 [SHOI2009] 会场预约
    原题链接:https://www.luogu.com.cn/problem/P2161题意解读:本题前面形式化描述已经足够清晰。解题思路:要判断线段之间是否有冲突(包含或者交叉),可以借助set,参考:https://www.cnblogs.com/jcwy/p/18447333只不过这里要统计冲突的数量,也就是允许相等的元素重复存在,可以借助multiset......