benchmark提交
mini-llmd 是一个基于 llm-d 架构思想的 PD (Prefill-Decode) 分离推理系统原型。本项目采用原生 Python 多进程实现,不依赖 Kubernetes、Redis、Ray 等重型组件,支持单卡和双卡环境。
核心设计理念:由于硬件资源不足,所以目前暂时用原生进程模拟容器实例,每个进程边界清晰,模块职责单一,能够验证PD分离的功能有效性,同时为后续迁移到容器化和 Kubernetes 部署预留完整接口。
Client / Benchmark | v Router (端口 8010) | +--> Prefill Worker (端口 8101, Mock) | +--> Decode Worker (端口 8012) | v vLLM 服务 (端口 8000)
Client / Benchmark | v NixlProxy (端口 8010) | +--> Prefill Instance (GPU 0, 端口 8100) | - vLLM + NixlConnector (kv_producer) | - 处理 prompt, 生成 KV cache | - 通过 UCX TCP 传输 KV cache | +--> Decode Instance (GPU 1, 端口 8200) - vLLM + NixlConnector (kv_consumer) - 接收 KV cache, 生成 tokens
Dockerfile
docker-compose.yml
Dockerfile.openeuler
docker-compose.openeuler.yml
详见 openEuler 部署指南。
cd mini-llmd pip install -r requirements.txt
如果你已经有 vLLM 服务在运行:
# 1. 发现模型服务 bash scripts/discover_model_endpoint.sh # 2. 验证模型服务 python3 scripts/check_model_endpoint.py --base-url http://127.0.0.1:8000 # 3. 启动系统 bash scripts/start_native.sh
如果有两张 GPU:
# 一键启动双卡 PD 分离系统 bash scripts/start_native_pd_2gpu.sh # 检查系统状态 bash scripts/check_gpu_status.sh # 停止系统 bash scripts/stop_native_pd_2gpu.sh
# 1. 配置环境变量 cp .env.docker .env vi .env # 设置 MODEL_PATH # 2. 启动所有服务 docker-compose up -d # 3. 查看服务状态 docker-compose ps # 4. 测试推理 curl -X POST http://127.0.0.1:8010/v1/completions \ -H "Content-Type: application/json" \ -d '{"prompt": "你好", "max_tokens": 50}' # 5. 扩缩容 docker-compose up -d --scale decode-worker=3 # 6. 停止系统 docker-compose down
详见 Docker 部署指南。
如果需要本地加载模型:
# configs/model.yaml engine_type: "local" model: name: "Qwen2.5-7B-Instruct-AWQ" path: "/root/autodl-tmp/models/Qwen2.5-7B-Instruct-AWQ"
bash scripts/start_native.sh
# 文本补全 curl -X POST http://127.0.0.1:8010/v1/completions \ -H "Content-Type: application/json" \ -d '{"prompt": "你好,请介绍一下 PD 分离推理系统", "max_tokens": 128}' # Chat 接口 curl -X POST http://127.0.0.1:8010/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "messages": [{"role": "user", "content": "什么是 KVCache?"}], "max_tokens": 128 }' # 健康检查 curl http://127.0.0.1:8010/health # Decode 健康检查 curl http://127.0.0.1:8010/health/decode # 查看指标 curl http://127.0.0.1:8010/metrics
# Mock 模式 python3 -m benchmark.run_benchmark --mode mock --num-requests 10 # 真实 Decode 模式 python3 -m benchmark.run_benchmark --mode real_decode --base-url http://127.0.0.1:8010 # 双卡 PD 分离模式 python3 -m benchmark.run_benchmark --mode pd_2gpu --base-url http://127.0.0.1:8010
# 停止 Decode 容器 python3 -m benchmark.fault_injection kill_container --container whh-vllm-server # 重启 Decode 容器 python3 -m benchmark.fault_injection restart_container --container whh-vllm-server # 多轮故障注入 python3 -m benchmark.fault_injection multi_round --rounds 5
mini-llmd/ ├── README.md # 本文件 ├── requirements.txt # Python 依赖 ├── Dockerfile # Docker 镜像构建 ├── docker-compose.yml # Docker Compose 编排 ├── .dockerignore # Docker 构建排除 ├── .env.docker # Docker 环境变量模板 ├── configs/ # 配置文件 │ ├── model.yaml # 模型配置 │ ├── pd_2gpu.yaml # 双卡 PD 配置 │ ├── slo.yaml # SLO 配置 │ └── runtime.yaml # 运行时配置 ├── router/ # Router 模块 │ ├── api_server.py # FastAPI HTTP 入口 │ ├── scheduler.py # LLM-aware 调度器 │ ├── request_journal.py # 请求生命周期记录 │ └── retry_policy.py # 指数退避重试 ├── workers/ # Worker 模块 │ ├── prefill_worker.py # Prefill Worker │ ├── decode_worker.py # Decode Worker │ ├── vllm_engine.py # 本地 vLLM 引擎 │ ├── http_engine.py # 远程 HTTP 引擎 │ ├── engine_factory.py # 引擎工厂 │ └── backends/ # Backend 抽象层 │ ├── base.py # 抽象基类 │ ├── mock_backend.py # Mock Backend │ └── vllm_http_backend.py # vLLM HTTP Backend ├── runtime/ # 运行时管理 │ ├── process_manager.py # 进程管理 │ ├── watchdog.py # 健康检查 + 自动重启 │ ├── healthcheck.py # HTTP 健康检查 │ └── resource_cleaner.py # 资源清理 ├── monitor/ # 监控模块 │ ├── metrics.py # 指标收集 │ ├── logger.py # 统一日志 │ └── exporter.py # 指标导出 ├── benchmark/ # 基准测试 │ ├── run_benchmark.py # 基准测试运行器 │ ├── workloads.py # 负载生成 │ ├── fault_injection.py # 故障注入 │ ├── report.py # 报告生成 │ └── plot_report.py # 图表生成 ├── scripts/ # 运维脚本 │ ├── start_native.sh # 启动所有进程 │ ├── stop_native.sh # 停止所有进程 │ ├── start_native_pd_2gpu.sh # 双卡 PD 启动 │ ├── stop_native_pd_2gpu.sh # 双卡 PD 停止 │ ├── discover_model_endpoint.sh # 发现模型服务 │ ├── check_model_endpoint.py # 验证模型服务 │ ├── check_gpu_status.sh # GPU 状态检查 │ ├── kill_decode_container_safe.sh # 安全停止容器 │ └── restart_decode_container_safe.sh # 安全重启容器 ├── docs/ # 文档 │ ├── real_decode_qwen3_4b.md # 真实 Decode 指南 │ ├── pd_2gpu_design.md # 双卡 PD 设计 │ ├── fault_recovery.md # 故障恢复文档 │ ├── migration_to_k8s.md # Kubernetes 迁移方案 │ └── benchmark_real_qwen3_4b.md # Benchmark 指南 ├── logs/ # 日志目录 ├── runtime_state/ # 运行时状态 └── outputs/ # Benchmark 输出
MINI_LLMD_VLLM_BASE_URL
MINI_LLMD_MODEL_NAME
MINI_LLMD_DECODE_BACKEND
MINI_LLMD_ROUTER_HOST
MINI_LLMD_ROUTER_PORT
MINI_LLMD_PREFILL_HOST
MINI_LLMD_PREFILL_PORT
MINI_LLMD_DECODE_HOST
MINI_LLMD_DECODE_PORT
详见 configs/ 目录下的 YAML 文件。
configs/
# NixlConnector 结果 cat outputs/benchmark/nixl_test/summary.json # 完整对比报告 cat outputs/benchmark/nixl_comparison_report.md # 对比图表 ls outputs/benchmark/nixl_test/*.png
# 单服务模式 python3 -m benchmark.run_benchmark --mode real_decode --base-url http://127.0.0.1:8010 # NixlConnector PD 模式 python3 -m benchmark.run_benchmark --mode pd_2gpu --base-url http://127.0.0.1:8010
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
mini-llmd: 原生多进程版 PD 分离推理系统原型
项目简介
mini-llmd 是一个基于 llm-d 架构思想的 PD (Prefill-Decode) 分离推理系统原型。本项目采用原生 Python 多进程实现,不依赖 Kubernetes、Redis、Ray 等重型组件,支持单卡和双卡环境。
核心设计理念:由于硬件资源不足,所以目前暂时用原生进程模拟容器实例,每个进程边界清晰,模块职责单一,能够验证PD分离的功能有效性,同时为后续迁移到容器化和 Kubernetes 部署预留完整接口。
主要特性
与赛题要求的对应关系
运行模式
系统架构
单卡模式
双卡 PD 分离模式(NixlConnector)
端口分配
快速开始
环境要求
操作系统支持
Dockerfiledocker-compose.ymlDockerfile.openeulerdocker-compose.openeuler.yml详见 openEuler 部署指南。
安装依赖
方案一:连接已有的 vLLM 服务(推荐)
如果你已经有 vLLM 服务在运行:
方案二:双卡 PD 分离
如果有两张 GPU:
方案三:Docker Compose 部署(推荐生产环境)
详见 Docker 部署指南。
方案四:单卡本地推理
如果需要本地加载模型:
发送请求
运行 Benchmark
故障注入
目录结构
配置说明
环境变量
MINI_LLMD_VLLM_BASE_URLMINI_LLMD_MODEL_NAMEMINI_LLMD_DECODE_BACKENDMINI_LLMD_ROUTER_HOSTMINI_LLMD_ROUTER_PORTMINI_LLMD_PREFILL_HOSTMINI_LLMD_PREFILL_PORTMINI_LLMD_DECODE_HOSTMINI_LLMD_DECODE_PORT配置文件
详见
configs/目录下的 YAML 文件。文档
端到端 SLO 优化效果(NixlConnector PD 分离)
性能对比
核心提升
原始数据查看
运行 Benchmark
后续优化
致谢