# omni-eplb
**Repository Path**: omniai/omni-eplb
## Basic Information
- **Project Name**: omni-eplb
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 11
- **Created**: 2025-12-03
- **Last Updated**: 2026-07-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Omni-EPLB
总览 |
准备 |
快速开始 |
使用方法 |
文档 |
许可证
中文 |
English
---
## 总览
**Omni-EPLB** (Expert Placement Load Balancing) 是一个专为混合专家模型 (MoE) 设计的高级专家部署优化 SDK,适用于 NPU 加速环境。它通过专家重排列、层间冗余部署以及近实时动态调度等技术手段,实现高效的专家负载均衡,显著提升 MoE 模型的推理效率。
### 核心特性
| 特性 | 描述 |
|------|------|
| **专家重排列** | 动态重新配置专家部署位置,优化资源利用率 |
| **层间不均匀专家部署** | 支持跨层非均匀分布专家,提升部署效率 |
| **近实时部署更新** | 以极小的性能开销实时更新专家放置策略 |
| **实时激活采集** | 近实时捕获专家激活数据,为优化提供数据支撑 |
| **高可用性** | 支持动态冗余专家部署,显著降低 RTO |
### 优化目标
1. **最小化最大激活负载** - 平衡所有 NPU 上的专家激活,防止性能瓶颈
2. **降低通信开销** - 基于 NPU 集群拓扑优化放置,减少跨设备通信成本
---
## 准备
### 硬件要求
| 硬件类型 | 支持型号 |
|---------|---------|
| Atlas A2 | Inference 系列 |
| Atlas A3 | Inference 系列 |
---
## 快速开始
### 安装
使用提供的构建脚本进行安装:
```bash
cd omni-eplb
./build/build.sh
```
构建脚本会执行以下步骤:
1. 检查依赖项 (cmake, make, python3, pytest, unzip)
2. 从 `~/.bashrc` 加载 CANN 和 torch-npu 环境
3. 通过 pip 安装 `omni_placement` 包
### 运行测试
执行测试套件:
```bash
./tests/run_test.sh
```
测试脚本包含:
- C++ 单元测试(如果检测到 NPU 硬件则包含 NPU 测试)
- Python 单元测试(含覆盖率报告)
- 自动 NPU 检测和条件测试执行
---
## 使用方法
### 在 vLLM 中启用 EPLB
> 这是快速预览的简要文档,实际使用请参考 [Guideline.md](Guideline.md) 获取更多详情。
Omni-EPLB 通过 **omni-npu 插件系统** 与 vLLM 集成。在运行 vLLM 前设置以下环境变量即可启用 EPLB:
```bash
VLLM_PLUGINS="omni-npu,omni_npu_patches" \
OMNI_NPU_VLLM_PATCHES="EPLBState" \
vllm serve --enable_eplb True
```
**环境变量说明:**
| 变量 | 描述 |
|------|------|
| `VLLM_PLUGINS` | 加载 omni-npu 和 patches 插件 |
| `OMNI_NPU_VLLM_PATCHES` | 应用 EPLB 状态补丁,用于专家部署优化 |
| `--enable_eplb True` | 在 vLLM 中启用 EPLB 功能 |
### 静态专家均衡
适用于离线优化场景:
#### Step 1: 采集专家激活数据
编辑配置文件 [config.yaml](config.yaml):
```yaml
enable_dump: true
dump_dir: "/{your_directory}/dump_data"
```
运行推理服务并发送请求,dump 数据将生成在 `dump_dir` 目录。
#### Step 2: 生成静态部署文件
使用流水线工具生成优化后的 pattern:
```bash
./pattern_generation_pipeline.sh \
--input_txt_folders "/{your_directory}/dump_data" \
--num_ranks_target_pattern {dies number} \
--collecting_modes {prefill or decode}
```
**注意**:
- 对于 `decode` 实例,请直接使用 d_0 实例中的 `dump_dir` 作为目标 dump_dir。
- 对于 `prefill` 实例,请将所有实例的 `dump_dir` 收集到单个节点作为目标 dump_dir,使用 `--input_txt_folders "/{your_directory}/dump_data/p_*"` 作为输入参数。
**参数说明:**
| 参数 | 描述 |
|------|------|
| `--input_txt_folders` | dump 数据存放目录 |
| `--num_ranks_target_pattern` | 目标 pattern 的 die 数量 |
| `--collecting_modes` | 数据模式:`decode` 或 `prefill` |
输出文件位于 `./placement_pattern/`:
- `*_rearrange_*.npy` - 重排模式(推荐 32 die 及以下使用)
- `*_redundant_*.npy` - 冗余模式(推荐 32 die 以上使用)
流水线会自动生成可视化和分析结果:
- `./placement_pattern_view/` - 部署模式分布图
- `./placement_pattern_analysis/` - 负载热力图、对比图表及 CSV 分析报告
#### Step 3: 应用部署文件
更新配置文件:
```yaml
enable_dump: false
pattern_path: "/path/to/placement_pattern_*_rearrange_*.npy"
```
重启推理服务即可生效。
### 动态专家重排
适用于在线实时优化:
```yaml
enable_dynamic: true
max_redundant_per_expert: 1
max_redundant_per_rank: 0
```
### 动态专家冗余
适用于高可用场景:
```yaml
enable_dynamic: true
max_redundant_per_expert: 10 # 每个专家最大冗余次数
max_redundant_per_rank: 1 # 每个 die 可部署的冗余专家数
```
---
## 文档
| 文档 | 描述 |
|------|------|
| [Guideline.md](Guideline.md) | 完整部署、启用和配置指南 |
| [omni_pattern_tool/Readme.md](utils/omni_pattern_tool/Readme.md) | Pattern 生成流水线详细说明 |
| [cpp/Readme.md](omni_placement/cpp/Readme.md) | C++ 模块说明 |
---
## 目录结构
```
omni-eplb/
├── omni_placement/ # 核心代码
│ ├── cpp/ # C++ 实现
│ └── python/ # Python 实现
├── utils/
│ └── omni_pattern_tool/ # Pattern 生成工具
├── patterns/
│ └── base_patterns/ # 基础 pattern 文件
├── build/
│ └── build.sh # 构建脚本
├── tests/
│ └── run_test.sh # 测试脚本
├── config.yaml # 配置示例
├── Guideline.md # 详细指南
└── README.md # 本文档
```
---
## 贡献
欢迎任何形式的贡献!请参考 [Guideline.md](Guideline.md) 了解开发环境搭建和测试规范。
---
## 许可证
本项目采用 MIT 许可证,详见 [LICENSE](LICENSE) 文件。