# Lvllm
**Repository Path**: yzlljc/Lvllm
## Basic Information
- **Project Name**: Lvllm
- **Description**: 新版lvllmlvllmlvllmlvllm
- **Primary Language**: Python
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-21
- **Last Updated**: 2026-06-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# LvLLM GPU、NUMA 双并行 [[English]](./README.md)
LvLLM是vllm的特别扩展,充分利用CPU和GPU计算资源,高效的GPU并行+NUMA并行架构,适用于MOE模型混合推理。
## 系统特性
- **GPU + NUMA 双并行**: 支持CPU-GPU混合解码、CPU-GPU混合预填充、GPU预填充三种计算方式
- **显存 + 内存负载均衡**: 模型总体占用=显存+内存,容纳模型1+1=2, 100%显存利用率 注1
- **GPU 预填充优化**: GPU预填充与CPU-GPU混合解码并行,接近100%显卡利用率
- **NUMA 线程优化**: 跨节点通信占比低至3%,三级缓存命中50%以上,解码阶段可推动GPU负载达到33%至50%
## 与vLLM的关系
Lvllm使用最新的vLLM源码,重新设计实现了MOE模型混合推理模块,保持了对vLLM的100%完全兼容注1。
注1:x86带有AVX2以上指令集的CPU和Nvidia GPU sm80以上架构
## 使用说明 [[English]](./README.md)
- [版本变更](#版本变更)
- [支持的模型](#支持的模型)
- [支持的量化格式](#支持的量化格式)
- [运行命令参考](#运行命令参考)
- [配置参数](#配置参数)
- [安装步骤](#安装步骤)
- [优化](#优化)
## 版本变更
```bash
2026-06-05: lvllm-v2.2.0 - 升级lk_moe模块, 支持nvfp4, mxfp4量化类型,增加LVLLM_GPU_RESIDENT_MOE_EXPERTS, 取消LVLLM_MOE_USE_WEIGHT、LVLLM_MOE_QUANT_ON_GPU
2026-04-06: lvllm-v2.1.0 - 增强使用LK_POWER_SAVING=1节能效果,支持FP8+BF16+AWQ4bit的混合MOE层推理
2026-03-22: lvllm-v2.0.0 - FP8 MoE模型使用INT4专家量化时支持逐层加载,减少峰值内存占用,LVLLM_ENABLE_MOE_LAYERWISEISE_LOAD=1
2026-03-19: lvllm-v1.9.10 - 修复已知问题,支持新的moe模型类型[没有gate_proj], 例如:NVIDIA-Nemotron-3-Super-120B-A12B-BF16
2026-03-11: lvllm-v1.9.2 - FP8、AWQ4bit模型开启GPU Prefill加速不再占用额外内存, FP8模型取消TO_DTYPE运行时类型转换、KEEP暂不支持开启GPU Prefill
2026-03-05: lvllm-v1.9.0 - 优化GPU预填充和常规预填充,确保输出质量
2026-03-01: lvllm-v1.8.10 - 修复已知问题,增加新模型支持
2026-02-02:lvllm-v1.7.0 - 支持EP并行,8卡运行minimax-m2.1模型需要设置--enable_expert_parallel
2026-01-26: lvllm-v1.6.1 - fp8 模型支持 FP8 + INT4 推理,支持GPU Prefill加速(内存占用很高!)
2026-01-25: lvllm-v1.6.0 - fp8 模型支持 GPU Prefill加速(内存占用很高!)
2026-01-24: lvllm-v1.5.8 - AWQ 4-bit 对称量化模型支持 GPU Prefill加速
2026-01-21: lvllm-v1.5.7 - 修复MiniMax-M2.1模型数值计算稳定问题
2026-01-08: lvllm-v1.5.1 - 针对长上下文场景,支持预填充与解码分离,GPU预填充与CPU-GPU混合解码并行
2026-01-04: v1.4.0 优化decode提升速度
2025-12-28:优化推理速度:bfloat16、awq4bit;优化多GPU的NUMA数据访问;为多GPU启用NUMA节点以实现最佳性能; 取消GGUF模型支持
2025-12-16 v1.2.0 同步上游vllm代码至最新,lk_moe优化降低内存占用
2025-12-14 v1.1.2 增加AWQ-4bit对称量化模型推理支持
2025-12-9: 增加LVLLM_MOE_USE_WEIGHT环境变量,支持MOE模块使用两种模式推理fp8模型:
2025-11-1: 支持张量并行、流水线多卡推理 https://b23.tv/xzHieMs
2025-10-30: 支持Qwen3系列模型GGUF混合推理(不包含Qwen3-Coder-30B-A3B-Instruct GGUF) [查看config.yaml里面的新参数]
2025-10-19: FP8支持GPU+NUMA 混合推理MOE模型!! [显存FP8精度,内存FP16精度] 已验证GLM-4.5-Air-FP8
2025-10-14: 开启cuda graph , decode 速度翻倍!! 输出质量提高!!
2025-09-30 已验证:Qwen3-Next-80B-A3B-Instruct、Qwen3-Coder-30B-A3B-Instruct
```
## 支持的模型
vLLM已验证的大部分原版MOE模型
| 模型名称 | 状态 |
|---------|------|
| gemma-4-26B-A4B-it | ✅ 已测试通过 |
| NVIDIA-Nemotron-3-Super-120B-A12B-BF16 | ✅ 已测试通过 |
| Qwen3.6-35B-A3B | ✅ 已测试通过 |
| Qwen3.5-35B-A3B | ✅ 已测试通过 |
| Qwen3.5-122B-A10B | ✅ 已测试通过 |
| Qwen3.5-397B-A17B | ✅ 已测试通过 |
| Qwen3-Coder-Next | ✅ 已测试通过 |
| Qwen3-Next-80B-A3B-Instruct | ✅ 已测试通过 |
| Qwen3-Coder-30B-A3B-Instruct | ✅ 已测试通过 |
| Qwen3-VL-30B-A3B-Instruct | ✅ 已测试通过 |
| MiniMax-M2.7 | ✅ 已测试通过 |
| MiniMax-M2.5 | ✅ 已测试通过 |
| MiniMax-M2.1 | ✅ 已测试通过 |
| GLM-4.7 | ✅ 已测试通过 |
| GLM-4.7-Flash | ✅ 已测试通过 |
| GLM-4.6V | ✅ 已测试通过 |
| Kimi k2.6 | ✅ 已测试通过 |
| Kimi k2.5 | ✅ 已测试通过 |
未列出的Qwen3系列、GLM系列、MiniMax系列的原版MOE模型理论上支持,待实际测试。
## 支持的量化格式
| 模型文件 | 运行时格式 |
|---------|------------|
| bfloat16 | bfloat16/float16|
| float16 | bfloat16/float16|
| fp8模型 | fp8 |
| nvfp4模型 | nvfp4 |
| mxfp4模型 注1| mxfp4 |
| awq 4bit对称量化模型 注1| w4a16 |
注1:https://hf-mirror.com/cyankiwi 提供AWQ 4bit对称量化模型
注2:deepseek v4 需使用专用版本:
https://github.com/guqiong96/Lvllmds4/releases/tag/lvllmds4-v2.2.1
## 运行命令参考
```bash
LVLLM_MOE_NUMA_ENABLED=1 \
LK_THREAD_BINDING=CPU_CORE \
LK_THREADS=44 \
OMP_NUM_THREADS=44 \
LVLLM_GPU_PREFILL_MIN_BATCH_SIZE=2048 \
LVLLM_GPU_PREFETCH_WINDOW=1 \
LVLLM_GPU_RESIDENT_MOE_LAYERS=0-1,33-34 \
LVLLM_GPU_RESIDENT_MOE_EXPERTS=64 \
LVLLM_ENABLE_NUMA_INTERLEAVE=1 \
LVLLM_ENABLE_MOE_LAYERWISE_LOAD=1 \
vllm serve \
--model /home/guqiong/Models/Qwen3.6-35B-A3B \
--host 0.0.0.0 \
--port 8070 \
--tensor-parallel-size 2 \
--max-model-len auto \
--gpu-memory-utilization 0.95 \
--trust-remote-code \
--tokenizer-mode auto \
--served-model-name Qwen3.6-35B-A3B \
--compilation_config.cudagraph_mode FULL_DECODE_ONLY \
--enable-prefix-caching \
--enable-chunked-prefill \
--max-num-batched-tokens 32000 \
--max-num-seqs 2 \
--compilation_config.mode VLLM_COMPILE \
--enable-auto-tool-choice \
--tool-call-parser qwen3_coder \
--reasoning-parser qwen3
```
## 配置参数
| 环境变量 | 类型 | 默认值 | 说明 | 备注 |
|--------|------|--------|------|------|
| `LVLLM_MOE_NUMA_ENABLED` | 核心参数 | `0` | 是否启用混合推理: `1`-启用,`0`-禁用 | 设置为`0`禁用混合推理,行为与vLLM相同 |
| `LK_THREAD_BINDING` | 性能参数 | `CPU_CORE` | 线程绑定策略: `CPU_CORE`-按CPU核心绑定,`NUMA_NODE`-按NUMA节点绑定 | 默认按CPU核心绑定, 遇到性能问题时可尝试按NUMA节点绑定 |
| `LK_THREADS` | 性能参数 | 自动计算 | 线程数量: 物理核心数-4 | 多GPU多进程时,物理核心数-4除以进程数量 |
| `OMP_NUM_THREADS` | 性能参数 | 系统逻辑核心数量 | OpenMP线程数: 设置为`LK_THREADS`相同 | |
| `LVLLM_GPU_RESIDENT_MOE_LAYERS` | GPU预填充参数 | 无 | 常驻GPU的MOE专家层`0`: 第0层,`0-1`: 第0层到第1层,`0,9`: 第0层和第9层 | 留足KV Cache显存后,分配多层可增加性能,并减少对应的内存占用 |
| `LVLLM_GPU_PREFETCH_WINDOW` | GPU预填充参数 | 无 | 预取窗口大小`1`: 预取1层MOE专家 | 一般预取1到2层即可 |
| `LVLLM_GPU_PREFILL_MIN_BATCH_SIZE` | GPU预填充参数 | 无 | 使用GPU预填充的最小输入长度`4096`:输入长度达到该值后,启动GPU预填充 | 设置值不宜过小,设置为0则关闭GPU预填充功能 |
| `LK_POWER_SAVING` | cpu节能 | 0 | `1`:启用cpu节能模式,`0`:禁用cpu节能模式 | 建议值:`0` |
| `LVLLM_ENABLE_NUMA_INTERLEAVE` | 性能参数 | 0 | `0`:快速加载模型,`1`:慢速加载模型可避免OOM | 建议值:加载模型文件时,内存充裕使用`0`,内存紧张使用`1` |
| `LVLLM_GPU_RESIDENT_MOE_EXPERTS` | GPU预填充参数 | 无 | 常驻GPU的MOE专家数量`64`: 每层64个专家|
| 参数 | 示例值 | 说明 |
|-----------|-------|-------------|
| `tensor-parallel-size` | `2` | 张量并行大小,小于等于GPU数量 |
| `compilation_config.cudagraph_mode` | `FULL_DECODE_ONLY` | 启用CUDA图模式,建议值 |
| `enable_prefix_caching` | `true` | 启用前缀缓存,建议值 |
| `enable-chunked-prefill` | `true` | 启用分块预填充,建议值 |
| `max_num_batched_tokens` | `18000` | 最大批量填充令牌数,关闭GPU预填充时建议值:1024,开启GPU预填充时建议值:32000 |
| `compilation_config.mode` | `VLLM_COMPILE` | 优化模型,建议值 |
## 安装步骤
### 1. 安装CUDA 13.2.1
```bash
# 卸载旧版本CUDA和NVIDIA驱动
sudo /usr/local/cuda/bin/cuda-uninstaller
sudo nvidia-uninstall
# 下载并安装CUDA 13.2.1
wget https://developer.download.nvidia.com/compute/cuda/13.2.1/local_installers/cuda_13.2.1_595.58.03_linux.run
sudo sh cuda_13.2.1_595.58.03_linux.run
```
### 2. 创建Python环境
```bash
conda create -n Lvllm python==3.12.11
conda activate Lvllm
# 升级libstdcxx-ng(避免glibcxx版本问题)
conda install -c conda-forge libstdcxx-ng
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH
# 安装NUMA库
sudo apt-get install libnuma-dev # Ubuntu
sudo dnf install numactl-devel # Rocky Linux
```
### 3. 安装Lvllm
```bash
pip install https://github.com/guqiong96/Lvllm/releases/download/lvllm-v2.2.1/lvllm-2.2.1-cp312-cp312-manylinux_2_34_x86_64.whl
```
## 从源码编译安装Lvllm
```bash
git clone https://github.com/guqiong96/Lvllm.git
cd Lvllm
pip install setuptools_scm setuptools_rust
pip install torchaudio triton torchvision torch==2.11.0
VLLM_VERSION_OVERRIDE="2.2.1" CMAKE_BUILD_TYPE=Release CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release" pip install -e . --no-build-isolation -vvv
```
## 优化
### MoE常驻显存, 线性增加decode和prefill速度
```bash
# 0-5层MoE层常驻显存
# 格式 0,1,8-9 表示 0,1,8-9层MoE层常驻显存
# 少数模型起始层号不为0,例如Step-3.5-Flash模型起始为3
LVLLM_GPU_RESIDENT_MOE_LAYERS=0-5
```
### 开启GPU预填充
```bash
LVLLM_GPU_PREFETCH_WINDOW=1
# 输入长度达到4096启动GPU prefill
LVLLM_GPU_PREFILL_MIN_BATCH_SIZE=4096
# 配合设置最大批处理大小
--max-num-batched-tokens 32000
```
### 关闭GPU预填充
```bash
# 关闭GPU预填充
LVLLM_GPU_PREFILL_MIN_BATCH_SIZE=0
# 配合设置最大批处理大小
--max-num-batched-tokens 4096
```
### 线程绑定到CPU核心
```bash
# 绑定到CPU核心(包括超线程逻辑核心), 最佳性能
LK_THREAD_BINDING=CPU_CORE
# 绑定到NUMA节点, 次优选择,解决部署在虚拟化平台的极端性能问题,以及多实例运行
LK_THREAD_BINDING=NUMA_NODE
```
### BIOS NUMA 设置
```bash
AMD EPYC:设置NPS4获得最佳性能
Intel XEON:设置SNC4获得最佳性能
# 部分虚拟化平台或Intel平台不要设置5、10节点,设置2节点避免性能问题
通常:2,4,8个节点,最多支持32节点,节点越多越好,节点数为GPU倍数获得最佳性能
```
### 线程数设置
```bash
# 线程数 <= (核心数 - x)/ 张量并行数(TP size) x 留给其它任务的线程,至少4线程
# 96核心,2个GPU, 每个GPU 44线程, 88线程, 剩余8线程留给其它任务
LK_THREADS=44
# 总的线程数超过物理核心数量可能会引发性能问题
# 虽然系统会自动条件线程数,但建议手动设置进行测试
```
### 输出性能
```bash
# 支持2080ti及以上GPU
--compilation_config.mode VLLM_COMPILE
# 开启CUDAGraph
--compilation_config.cudagraph_mode FULL_DECODE_ONLY
```
### 显存设置
```bash
# 最大批处理大小占用显存量很大,根据情况调整
--max-num-batched-tokens 32000
```
### CPU节能
```bash
# 开启后推理时降低空闲时功耗
LK_POWER_SAVING=1
```