Ray:多机批量推理任务调度¶
本方向是 llama.cpp 主线任务的延伸,关注的问题是:
当我们已经能够在多台机器上运行 llama.cpp 推理服务时,如何把大量推理请求分配到不同机器上执行?
Ray 在本实验中不再作为独立的分布式计算系统部署题,而是作为 大模型推理任务调度工具 使用。同学们需要使用 Ray 将一批 prompt 分发到多台机器上的 llama.cpp 服务,观察串行、本机并行和多机并行之间的差异。
背景介绍¶
Ray 是伯克利大学 RISELab 研发的分布式计算系统,常用于 AI 任务中的数据处理、超参数搜索、强化学习、批量推理和分布式训练。
在本实验中,我们主要使用 Ray 的两个基础抽象:
- Task:无状态任务,适合把很多独立 prompt 分发出去执行。
- Actor:有状态 worker,适合维护一个长期存在的推理客户端或服务状态。
Ray 的价值不在于让单个 prompt 更快生成,而在于提升一批推理任务的整体吞吐,并帮助我们理解任务调度、并发请求、负载差异和调度开销。
建议系统结构¶
推荐结构如下:
Ray head
|
-------------------------
| | |
Ray worker Ray worker Ray worker
| | |
llama.cpp llama.cpp llama.cpp
server server server
每台参与实验的机器可以运行一个 llama-server。Ray head 负责读取一批 prompt,并把请求分发给不同 worker。worker 调用对应机器上的 llama.cpp server,收集响应时间和输出结果。
如果小组机器数量有限,也可以在同一台机器上启动多个 Ray worker 或多个 server 进行模拟,但报告中需要说明限制。
必做要求(20 分)¶
选择 Ray 方向的小组需要完成以下任务:
-
完成 Ray 的单机或多机环境部署,并说明 head 节点和 worker 节点的配置。(3 分)
-
在至少 2 台机器上运行 llama.cpp 推理服务,或在资源受限时给出合理的单机多进程模拟方案。需记录模型、量化格式、server 启动命令和端口。(4 分)
-
设计一组批量推理任务,包含不少于 20 个 prompt。prompt 可以来自课程知识问答、代码解释、摘要任务或自定义问题。(3 分)
-
使用 Ray Task 或 Actor 将 prompt 分发给不同推理节点,并收集每个请求的开始时间、结束时间、总耗时和输出长度。(4 分)
-
比较至少两种执行方式,例如串行执行、单机并行、多机并行、固定分配和简单轮询分配等。报告中需给出总耗时、平均延迟、吞吐量等指标。(4 分)
-
分析实验现象,说明 Ray 调度开销、模型加载复用、节点性能差异、网络开销和请求粒度对结果的影响。(2 分)
选做加分(最高 10 分)¶
以下任务任选完成,按完成质量计分,最高 10 分。每项需提交实现说明、运行命令、测试数据和结果分析。
-
负载均衡调度(5 分):实现至少两种调度策略,例如轮询和按历史平均延迟分配;使用同一组不少于 30 个 prompt 进行测试,并比较各 worker 的请求数、平均延迟和总吞吐。
-
失败重试(5 分):在推理过程中手动停止一个 llama.cpp server,Ray 程序需要检测失败并将请求转发到其他节点;报告中需给出失败注入方式、重试日志和最终成功率。
-
异构节点分析(5 分):至少使用两台硬件配置不同或模型配置不同的节点,例如不同 CPU、不同线程数、不同量化格式;比较固定分配和按节点能力分配的效果。
-
并发压力测试(5 分):设置至少 3 档并发度,例如 1、2、4 或 2、4、8;记录平均延迟、P95 延迟、吞吐量和失败请求数。
报告建议¶
报告中建议包含:
- 集群拓扑图;
- 每台机器的硬件和系统环境;
- llama.cpp server 启动命令;
- Ray head / worker 启动命令;
- prompt 数据集说明;
- 调度策略说明;
- 性能测试表格;
- 对 Ray 调度开销和多机吞吐变化的分析。
本方向的重点不是“多机一定比单机快”,而是理解任务级并行:多个推理请求如何被调度、执行和汇总,以及系统瓶颈可能出现在哪里。