目录
目录README.md

赛题题目:面向大模型应用的RISC-V向量和矩阵扩展算子优化

项目简介

通过深度利用 RISC-V Vector (RVV) 扩展,我们重构并向量化了 ggml 的关键算子,用于 llama-7b-chat–hf 的 4-bit 量化模型。经 perf 驱动的瓶颈定位与验证,采用向量化流水线、运行时 VLEN 自适应与精度优先策略,在保证数值结果完全精确(比特/语义等价验证)的前提下,实现了推理吞吐量和延迟的显著提升。

主要优化的算子 ggml_vec_dot_q4_0_q8_0(Q4_0 与 Q8_0 量化向量点积)

原实现瓶颈:

Q4_0 为 4-bit 非字节对齐封装,原算法逐位/逐块串行解包,指令级并行度低;

在整数累加与浮点缩放间频繁来回切换,导致流水线停顿;

标量/简单循环限制了 ILP,无法隐藏内存与计算延迟。

优化方案:

并行化数据解包:利用 RVV 位操作(vand/vsrl/vslideup 等)在向量寄存器内并行完成 4-bit 解包与符号扩展,避免回落到标量域。

FP32 浮点向量累加器:引入宽带 float32 向量累加器(如 vfloat32m4_t),将中间结果直接提升/转换为 fp32 并在向量域累加,维持连续的浮点数据流。

高效流水线与循环展开:设计“拓宽乘法 -> 浮点转换 -> 融合乘加”的流水线(vwmul -> vfcvt -> vfmacc),并使用 4 路循环展开并发处理多个数据块以隐藏延迟。

向量规约:最终使用 vfredusum 等向量规约指令高效得到标量结果。

ggml_vec_dot_f16(FP16 浮点向量点积)

原实现瓶颈:

直接用 fp16 累加时,长向量累加极易发生精度丢失或数值溢出,影响最终正确性。

优化方案:

FP32 精度累加:强制将所有 fp16 乘积提升到 fp32 并在 fp32 向量累加器中进行累加,保证数值稳定性与精确复现。

向量化类型提升:批量将 fp16 提升为 fp32(向量化转换,必要时借助临时缓冲),在向量域完成计算。

并行融合乘加:用 vfmacc_vv 等指令在 fp32 上做并行乘加。

向量规约:用 vfredusum 完成高效求和得到最终结果。

工程化、验证与可移植性

perf-driven 优化:以真实 perf 分析定位热点,集中资源优化被高频调用的点积与 GEMM。

TileLang-RVV 自动生成后端:引入 TileLang DSL + RVV 后端(TileLang-RVV),能从高层描述自动生成高性能 RVV Intrinsics C 代码,大幅提升开发/迭代效率,生成代码在性能上接近手写优化并对尾部/非对齐情形稳定。

运行时硬件自适应:程序启动时查询 VLEN 并动态调整计算粒度与循环展开,保证在不同 RISC-V 规格上都能发挥接近理论性能。

与玄铁矩阵扩展 / csi-nn 兼容:对需要的 GEMM 路径集成了对玄铁矩阵扩展的 tile 化优化,并在 SG2044 等平台上用 csi-nn 做 fp32 GEMM 加速验证。

数值严苛验证:通过大规模随机测试集比对向量化内核与标量内核,按“比特级/语义等价”验证数值正确性,确保优化不改变结果。

意义与成果(简要)

在不牺牲数值精度的前提下,解决了 ggml 在 RISC-V 平台上因量化格式与标量实现导致的性能短板;

将串行解包与低精度累加的瓶颈转化为高吞吐量的向量化流水线;

提供了一套可复用、可自动生成且易维护的算子实现路径,推动 RISC-V 在端侧大模型推理领域的实际可用性与生态建设。

🚀 核心亮点

本项目展示了利用 RISC-V Vector Extension (RVV) 1.0 指令集对 llama.cpp 项目进行深度优化所取得的显著性能成果。通过在先进的 SG2044 64核 RISC-V 开发板上进行测试,我们验证了 RVV 在加速大语言模型(LLM)推理方面的巨大潜力,为 RISC-V 架构在 AI 推理领域的应用提供了强有力的性能基准和实践指南。

  • ⚡️ 极致的性能加速:在处理 Prompt 阶段,最高实现 2.74倍 的性能加速,延迟降低 **63.5%**,极大提升了模型的初次响应速度。
  • ** throughput 吞吐量巨大提升**:模型处理吞吐量最高提升 **176%**,在多线程场景下,RVV 优化与多核架构展现出卓越的协同效应,扩展效率远超基准版本。
  • 💡 卓越的资源效率:在实现更优性能(延迟降低43.8%)的同时,CPU 资源消耗**减少45.4%**。这意味着更低的功耗和部署成本,为边缘计算和多任务服务器环境开辟了新的可能性。
  • ✅ 100% 结果验证:所有性能优化均在计算层面完成,通过固定种子进行的应用实例测试证明,优化后模型的输出质量与基准版本完全一致,保证了推理结果的准确性和可靠性。

🔬 测试平台配置

  • 硬件设备: SG2044 EVB 开发板
  • 处理器: 64核 玄铁 C920 (64-bit RISC-V, 支持 RVV 1.0)
  • 内存: 128GB LPDDR5X
  • 存储: 1TB NVMe SSD
  • 操作系统: Ubuntu 24.04.1 LTS

🛠️ 如何开始

您可以按照以下步骤复现本次性能测试。

1. 获取源代码

克隆 llama.cpp 仓库并进入项目目录。

git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp

(注意:为保证结果一致性,本项目测试基于 commit 18f6a1ef1cdb2cb99de2b92cb56e1794ab6cd008

2. 编译源代码

创建一个构建目录,并使用 CMake 进行编译。关键在于开启 GGML_RVV 优化选项。

mkdir build && cd build

cmake .. -DGGML_RVV=ON \
         -DCMAKE_BUILD_TYPE=RelWithDebInfo \
         -DBUILD_SHARED_LIBS=OFF \
         -DGGML_BLAS_VENDOR=OpenBLAS
         
make -j64

3. 运行推理

使用编译好的 llama-cli 程序运行模型推理。请确保您已经下载了相应的 GGUF 模型文件(例如 llama-2-7b-chat.Q4_0.gguf)。

./bin/llama-cli -m /path/to/your/model.gguf

📊 性能基准测试结果

1. 延迟(Latency)测试

延迟越低,用户体验越好。RVV 优化在所有场景下均显著降低了处理时间。

单线程性能对比

模型 阶段 基准版本 (ms) RVV 优化版本 (ms) 延迟降低 加速比
Llama-2-7B-Chat Prompt 处理 79,270.60 29,840.76 62.4% 2.65x
Token 生成 68,141.97 31,510.56 53.8% 2.16x
Llama-3.2-3B-Instruct Prompt 处理 31,965.89 11,664.90 63.5% 2.74x
Token 生成 40,558.69 15,140.67 62.7% 2.68x

64线程性能对比

模型 阶段 基准版本 (ms) RVV 优化版本 (ms) 延迟降低 加速比
Llama-2-7B-Chat Prompt 处理 1,411.33 600.05 57.5% 2.35x
Token 生成 96,603.38 54,514.99 43.6% 1.77x
Llama-3.2-3B-Instruct Prompt 处理 570.84 225.14 60.6% 2.54x
Token 生成 58,460.19 29,479.17 49.6% 1.98x

2. 吞吐量(Throughput)测试

吞吐量越高,系统处理能力越强。RVV 优化大幅提升了单位时间内的 token 处理数量。

吞吐量提升幅度

模型 线程数 阶段 吞吐量提升
Llama-2-7B-Chat 单线程 Prompt 处理 +172.7%
Token 生成 +120.0%
64线程 Prompt 处理 +135.0%
Token 生成 +77.1%
Llama-3.2-3B-Instruct 单线程 Prompt 处理 +176.0%
Token 生成 +170.0%
64线程 Prompt 处理 +153.6%
Token 生成 +98.3%

3. CPU 占用率与资源效率分析

这是本次优化的一个关键成果:用更少的资源,实现更强的性能

研究发现,RVV 优化版本的 44 线程配置 是性能与资源的“黄金平衡点”。与基准版本的 64 线程配置相比:

  • 总延迟降低了 43.8% (9,354ms vs 16,648ms)
  • CPU 资源消耗降低了 45.4%

这一结果证明,RVV 优化不仅提升了速度,更能显著提高硬件的计算效率,直接转化为数据中心和边缘设备的功耗节省成本降低

结论

RVV 向量扩展是释放 RISC-V 架构在 AI 推理领域潜力的关键技术。本项目通过在 llama.cpp 上的成功实践,清晰地展示了 RVV 优化能够为大语言模型推理带来数量级的性能提升和能效改善。这为在 RISC-V 平台上部署高性能、低成本的 AI 应用奠定了坚实的基础。

赛题说明:

DeepSeek等模型的兴起推动了端侧大模型的发展,而RISC-V架构凭借其开放性和可扩展性,在端侧推理终端中逐步占据一席之地。优化RISC-V端侧大模型推理技术,不仅能提升推理性能,还能推动RISC-V操作系统AI生态的完善,加速RISC-V智能操作系统的发展。 本赛题旨在通过优化大模型应用中的核心算子,在 RISC-V 架构上实现高效的推理性能,充分利用RISC-V向量和矩阵扩展指令集,以及多核计算体系架构,进一步提升大模型推理的计算速度和吞吐量。 推理框架方面,参赛者可以选择llama.cpp开源框架。操作系统环境为开源操作系统,要求参赛者基于此系统进行开发,提供全方位的优化方案。

赛题要求:

  • 基于RISC-V架构的向量和矩阵扩展指令,针对llama.cpp推理框架进行大模型核心算子优化。
  • 利用多核并行计算技术,从算子层面加速推理性能,提高多核架构的资源利用率。
  • 基于开源操作系统上进行开发和测试,确保兼容性和稳定性。
  • 提供优化前后性能对比数据,展示优化效果。
  • 代码需遵循开源协议,提交至大赛指定代码仓库,并附带详细的文档说明,包括实现原理、优化思路和使用指南。

评分标准:

功能完整性(40%):

  • 提供针对性的优化方案,使用RISC-V向量以及矩阵两种扩展(30分);
  • 优化算子包括GEMM、激活函数、数学运算。算子在推理框架中能够正确执行,并输出正确的结果(20分);
  • 如优化其余算子,并保证其正确性,可额外加分(20分);
  • 利用RISC-V多核特性加速算子计算,优化技术包括多核协同计算、流水线并行等(30分)。

性能优化(30%):

  • 推理时间减少超过50%(40分);
  • 计算资源CPU占用降低超过10%(30分);
  • 吞吐量提升超过20%(30分)。

代码规范性(20%):

  • 代码结构清晰,模块化设计,便于维护和扩展,且必须完全开源(60分);
  • 注释完整性,特别是复杂逻辑部分(40分)。

文档质量(10%):

  • 文档详细清晰,包含安装方式及使用方法(50分);
  • 文档标明其创新性(50分)。

赛题联系人:

李可 li_ke@hl-it.cn

参考资料:

参赛资源支持:

关于
63.0 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号