【大模型开源项目】FastAPI结合vLLM,开发适配openai-api的接口,轻量级易扩展

部署运行你感兴趣的模型镜像

1 速览

项目地址:LyLM 轻量级、易扩展,你的开发起点

1.1 主要用途

这是一个结合FastAPI和vLLM的开源项目,不少开发者在使用vLLM部署时,一般使用简单的命令行,但是自由度不够,如果你想要以工程项目的方式部署呢?这时候你需要考虑使用vllm包来做封装、然后再写一套FastAPI的逻辑,再对齐openai-api才能跑通。

那么这个项目的目的就是,提供一个轻量级、易扩展的模板项目作为你的起点,而你只需要确保你有最基本的开发环境就行(vllm、fastapi等基本的包)。

1.2 如何开始?

  1. 点击 LyLM 复制github链接,clone到本地

    git clone git@github.com:JustinChen719/LyLM.git
    
  2. 确保你有conda环境,以我的为参考,我的基础环境是:
    python 3.12、torch 2.6、cuda 12.4、vllm 0.8.3、fastapi 最新版本

  3. 准备配置文件

    common 配置项待定

    models 请按照模型名称分类,并且每一个模型下配置一个数组,表示实际的实例:

    • devices:配置实例的 GPU 设备号,以及权重,权重越大使用概率越大,必须是大于零的整数或者浮点数
    • engine_args:配置引擎参数,参考 https://github.com/vllm-project/vllm/blob/main/vllm/engine/arg_utils.py

    如下所示,首先需要确保的是每一个模型实例的engine_args参数的model参数,这是模型权重的位置,不要填错,你可以从huggingface上下载,然后填权重文件位置。

    另外,目前版本仅支持单机多卡配置。

{
  "common": {
  },
  "models": {
    "Qwen/Qwen2.5-7B-Instruct": [
      {
        "devices": {
          "gpu_ids": [0, 1],
          "weight": 1
        },
        "engine_args": {
          "model": "/root/***/Qwen2.5-7B-Instruct/",
          "max_model_len": 8192,
          "max_num_seqs": 256,
          "max_num_batched_tokens": 16384,
          "gpu_memory_utilization": 0.90,
          "tensor_parallel_size": 2
        }
      },
      {
        "devices": {
          "gpu_ids": [3, 4],
          "weight": 2
        },
        "engine_args": {
          "model": "/root/***/Qwen2.5-7B-Instruct/",
          "max_model_len": 8192,
          "max_num_seqs": 256,
          "max_num_batched_tokens": 16384,
          "gpu_memory_utilization": 0.90,
          "tensor_parallel_size": 2
        }
      }
    ],
    "Qwen/Qwen2.5-1.5B-Instruct": [
      {
        "devices": {
          "gpu_ids": [2],
          "weight": 1
        },
        "engine_args": {
          "model": "/root/***/Qwen2.5-1.5B-Instruct/",
          "max_model_len": 8192,
          "max_num_seqs": 256,
          "max_num_batched_tokens": 16384,
          "gpu_memory_utilization": 0.75
        }
      }
    ],
    "Qwen/Qwen2.5-3B-Instruct": [
      {
        "devices": {
          "gpu_ids": [5],
          "weight": 1
        },
        "engine_args": {
          "model": "/root/***/Qwen2.5-3B-Instruct/",
          "max_model_len": 8192,
          "max_num_seqs": 256,
          "max_num_batched_tokens": 16384,
          "gpu_memory_utilization": 0.80
        }
      }
    ]
  }
}

此外还需要有一个.env的配置文件
CONFIG_PATH:是必须配置的
TORCH_CUDA_ARCH_LIST:是为了使用FlashInfer,可以使用torch查询到该值(可以不填但不能错)
VLLM_CACHE_ROOT:改变vllm cache位置

CONFIG_PATH=/root/***/***/config.json

TORCH_CUDA_ARCH_LIST=8.6

VLLM_CACHE_ROOT=/root/***/.cache/
  1. main.py 为程序入口,配置解释器启动项目即可

2 功能点

2.1 单机负载均衡

大家可能知道vllm自带调度机制,但是如果单机8卡的情况,假如你使用双卡张量并行,这个时候你可以部署四个实例,那么LyLM可以提供负载均衡。

比如在上面的配置下,Qwen/Qwen2.5-7B-Instruct模型有两个实例,并且两个实例的权重优先级(devices中的weight参数)分别为1和2,那么最终请求会按照1:2的比例分配到两个实例上。

如下图所示,可以看到两个实例的实际接受请求数是大致1:2的比例。
在这里插入图片描述

2.2 配置简单、支持指定gpu

通过配置中,实例的devices参数的gpu_ids可以指定该实例可利用的gpu,还是以上述配置为例,项目启动后,资源占用情况如下:
在这里插入图片描述
可以看到Qwen/Qwen2.5-7B-Instruct分别占用0,1和3,4卡,并且显存利用率最大限制90%,以及Qwen/Qwen2.5-1.5B-Instruct和Qwen/Qwen2.5-3B-Instruct分别占用2号和5号卡,显存占用限制75%和80%,全部应验。(这里只能说是vLLM牛,对显存的拿捏十分精准)

3 性能测试

这里测试也是测了vLLM性能,和我的框架关系不大,只能说我没有拖后腿吧QVQ。

可以看出这里是vLLM自己的KVCache Manager、Scheduler以及Flash attn发力了

3.1 Qwen2.5-3B、单卡4090、并发推理实验

并发数总请求成功率平均端到端延迟(秒)平均响应长度(tokens)单请求生成速率(tokens/s)系统吞吐量(tokens/s)总耗时(秒)
256512100.00%4.94181.2736.691937.1347.91
128512100.00%4.53142.2731.418805.508.27
128256100.00%2.64137.2452.048274.234.25
64256100.00%2.45138.8956.658314.084.28
64128100.00%1.48134.0890.826476.602.65
32128100.00%1.54138.7990.336024.022.95
3264100.00%1.18141.67120.103174.142.86
1664100.00%1.10131.28119.413981.022.11
1632100.00%0.98138.59141.312373.311.87
832100.00%0.99137.12138.541884.902.33
816100.00%0.87131.12149.861042.882.01
416100.00%0.89131.00146.471290.631.62
48100.00%1.00151.38151.52829.031.46
28100.00%0.84132.25156.52903.151.17
24100.00%0.84133.75158.61520.661.03
14100.00%0.82133.00161.37422.561.26

3.2 Qwen2.5-7B、双卡4090张量并行、并发推理实验

并发数总请求成功率平均端到端延迟(秒)平均响应长度(tokens)单请求生成速率(tokens/s)系统吞吐量(tokens/s)总耗时(秒)
128512100.00%31.66443.4914.012784.7181.54
128256100.00%16.12411.5825.534515.3623.33
64256100.00%16.41425.4225.935119.4621.27
64128100.00%9.14424.6146.474409.2812.33
32128100.00%9.45427.0945.204444.1612.30
3264100.00%5.59412.9773.933180.018.31
1664100.00%6.00435.3472.553399.138.20
1632100.00%4.24420.1699.101979.906.79
832100.00%4.69469.97100.212229.326.75
816100.00%3.81462.69121.301406.465.26
416100.00%3.35413.31123.521033.586.40
48100.00%3.51467.88133.20822.804.55
28100.00%2.57355.88138.36770.253.70
24100.00%2.07307.50148.69420.902.92
14100.00%3.38497.50147.02515.033.86

999 还请给我的项目点个Star支持一下哦

创作不易,点个Star支持一下吧 https://github.com/JustinChen719/LyLM

您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值