跳转至

简介

在本次实验中,我们将围绕 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-benchllama-clillama-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 区 及课程群内讨论实验的相关问题以便解决共性问题。