简介¶
在本次实验中,我们将围绕 llama.cpp 本地与分布式推理系统 展开。实验目标不是追求最高性能,而是让同学们在普通个人电脑和小组多机环境中,理解大模型推理背后的操作系统与分布式系统问题,包括线程、内存、I/O、量化、GPU offload、RPC 通信、任务调度和分布式存储等。
本次实验分为两部分:
- llama.cpp 主线任务:所有小组必做,包含单机部署、性能测量、参数优化、输出质量评估和 RPC 分布式推理。
- Ray / Ceph 选择性必做任务:所有小组必须从 Ray 和 Ceph 中选择一个完成,作为 llama.cpp 主线任务的延伸。
Ray 和 Ceph 分别对应 AI 推理系统中的两个延伸问题:
- Ray:多个推理请求如何调度到多台机器上执行。
- Ceph:模型文件、输入数据和推理日志如何在多机环境中存储与共享。
本次实验不要求高端 GPU。推荐使用 1B / 3B 级别的 GGUF 量化模型,7B 模型可作为挑战。性能提升不是硬性要求,实验报告应重点说明实验现象和系统原因。
实验要求与评分¶
本次实验基础满分为 100 分,其中:
- llama.cpp 主线任务:80 分
- Ray / Ceph 选择性必做任务:20 分
此外设置选做加分项:
- llama.cpp 选做加分:最高 10 分
- Ray / Ceph 选做加分:最高 10 分
最终成绩如超过课程设置的实验满分,将按课程要求进行截断。
llama.cpp 主线任务(必做,80 分)¶
详细背景、安装方式、常用参数和性能评估工具见 llama.cpp。
-
拟定一份 LLM 部署相关的性能指标列表(不少于 5 个指标,如输出速度、首 Token 返回延迟、加载时间、内存占用等),并说明所选指标的合理性。(8 分)
-
选取一款合适的 GGUF 量化模型,完成单机版部署并成功推理。报告中需记录硬件环境、操作系统、模型名称、量化格式、部署方式和运行命令。(12 分)
-
设计测试任务,并根据测试任务从指标列表中选择至少 3 个指标进行实际测量。可以使用
llama-bench、llama-cli、llama-server或自行编写脚本进行测试。(15 分) -
基于已有部署参数进行分析、测试和优化。优化以 llama.cpp 的配置参数修改为主,例如
--threads、--batch-size、--ctx-size、--n-gpu-layers、--no-mmap等。没有 GPU 的小组不要求完成 GPU offload。(15 分) -
设计 5 个 prompt,对模型输出质量进行评估。prompt 应至少覆盖中文问答、摘要、代码解释、推理题和课程相关问题中的 3 类。报告中需说明不同配置对输出质量的影响。(10 分)
-
完成基于 RPC 的多机分布式推理。每组至少使用 2 台机器,其中一台作为主机,至少一台作为从机运行
rpc-server。需完成一次成功推理并记录部署命令、网络环境和运行结果。(10 分) -
对比单机推理和 RPC 分布式推理的性能表现,分析 RPC 带来的收益或开销。性能不要求提升,但需要有数据支撑,并说明可能原因,如网络延迟、带宽、同步等待、计算划分和设备性能差异等。(10 分)
llama.cpp 选做加分(最高 10 分)¶
以下方向任选其一即可,每一项都是10分:
- 比较同一模型的不同量化格式,如 Q4、Q5、Q8,并分析性能和质量差异。
- 尝试多台从机的 RPC 推理,并比较 1 台从机和多台从机的表现。
- 比较不同网络环境下的 RPC 推理效果,如有线局域网、无线局域网、热点等。
- 使用
llama-server搭建简单的推理服务,并测试轻量并发请求。 - 对 llama.cpp 中某个关键机制进行源码阅读和解释,如 GGUF 加载、KV cache、batch、tokenizer、RPC backend 等。
Ray / Ceph 选择性必做任务(必做二选一,20 分)¶
所有小组必须从以下两个方向中选择一个完成:
Ray 和 Ceph 的任务均应围绕 llama.cpp 主线展开,不要求高端 GPU,不要求生产级集群规模。推荐使用组员个人电脑组成小型局域网环境,也可以在合理说明的前提下使用 Docker 或虚拟机辅助部署。
Ray / Ceph 选做加分(最高 10 分)¶
在完成所选方向的基础上,可以继续扩展。以下加分项按完成质量计分,最高 10 分。
-
Ray 加分项:每项需提交实现说明、运行命令、测试数据和结果分析。
- 负载均衡调度(5分):实现至少两种调度策略,例如轮询和按历史平均延迟分配;使用同一组不少于 30 个 prompt 进行测试,并比较各 worker 的请求数、平均延迟和总吞吐。
- 失败重试(5分):在推理过程中手动停止一个 llama.cpp server,Ray 程序需要检测失败并将请求转发到其他节点;报告中需给出失败注入方式、重试日志和最终成功率。
- 异构节点分析(5分):至少使用两台硬件配置不同或模型配置不同的节点,例如不同 CPU、不同线程数、不同量化格式;比较固定分配和按节点能力分配的效果。
- 并发压力测试(5分):设置至少 3 档并发度,例如 1、2、4 或 2、4、8;记录平均延迟、P95 延迟、吞吐量和失败请求数。
-
Ceph 加分项:每项需提交配置说明、运行命令、测试数据和结果分析。
- 副本数对比(5分):在至少两种副本数配置下测试同一批文件的上传和下载,例如 size=1 与 size=2/3;比较读写吞吐、耗时和空间开销。
- 故障恢复观察(5分):手动停止一个 OSD 或节点,记录
ceph status变化、数据是否可读、恢复后集群状态;报告中需说明故障注入步骤和恢复现象。 - 存储路径对比(5分):比较本地文件系统、CephFS 或对象存储中至少两种路径的模型文件读取或 prompt 读取耗时;测试文件大小需明确,至少重复 3 次取平均。
- 多节点共享日志(5分):至少两个 llama.cpp 节点同时读取 Ceph 中的 prompt,并将结果写回统一日志目录或对象前缀;报告中需说明命名规则、冲突处理和结果汇总方式。
提交要求与 DDL¶
本次实验以大作业分组为单位完成,每组提交:
- 一份部署说明文档;
- 一份性能测试与系统分析文档;
- 必要的实验脚本、命令记录、配置文件和结果截图;
- Ray 或 Ceph 选择性必做任务的说明文档。
Lab4 相关文件放在大作业仓库根目录的 Lab4 文件夹中即可。文档文件命名不限制,但应保证助教可以复现实验过程。
本次实验截止时间为 6 月 8 日 23:59。
如何提问?
以下是一些要点:
- 提问前,请先 STFW 和 RTFM,ChatGPT 也是一个可考虑的选择;
- 尽量使你的问题是可复现的、明确的,并在此基础上裁剪定位到会导致出问题的核心代码;
- 详细描述问题,并提供相关指令及相关问题的报错截图,如果涉及系统问题请提供系统版本。
优先在Issue 区 及课程群内讨论实验的相关问题以便解决共性问题。