# 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

License: MIT Python PyTorch Ascend NPU

--- ## 总览 **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) 文件。