-
数据结构 100% 兼容
block_q4_0- 与 llama.cpp 完全一致block_q8_0- 与 llama.cpp 完全一致block_q8_1- 与 llama.cpp 完全一致- 内存布局:32元素/块,字节对齐一致
-
算法 100% 兼容
- 量化公式一致
- 补偿公式一致:
result = d_w × (d_a × sumi - 8 × s_a) - 反量化公式一致
| 方面 | 当前项目 | llama.cpp |
|---|---|---|
| 接口风格 | 直接指针 + 显式维度 | ggml_tensor* 抽象层 |
| 内存管理 | CudaBuffer 或用户管理 |
ggml_context 自动管理 |
| 调用方式 | 直接 kernel 调用 | 通过计算图 |
// 我们的接口(直接、简单)
void gemm_w4a8_naive(
const block_q8_1* A, // 直接指针
const block_q4_0* B, // 直接指针
float* C, // 直接指针
int M, int N, int K // 显式维度
);// llama.cpp 接口(抽象层)
struct ggml_tensor * ggml_mul_mat(
struct ggml_context * ctx,
struct ggml_tensor * a, // tensor 抽象
struct ggml_tensor * b // tensor 抽象
);已创建适配层头文件 include/llama_adapter.h,提供:
- 维度提取函数: 从
ggml_tensor提取 M, N, K - 数据指针提取: 从
ggml_tensor提取量化数据指针 - 类型验证: 验证 tensor 类型匹配
- 适配函数:
gemm_w4a8_from_ggml()等
// 使用适配层
#include "llama_adapter.h"
#include "ggml.h"
// llama.cpp tensors
struct ggml_tensor * activation; // Q8_1
struct ggml_tensor * weights; // Q4_0
struct ggml_tensor * output; // FP32
// 调用我们的实现(通过适配层)
gemm_w4a8_from_ggml(activation, weights, output, "naive");- 数据结构兼容性验证
- 算法兼容性验证
- 适配层接口设计
- 文档编写
- 适配层实现 (
src/llama_adapter.cu) - Step 5 对比测试
- 性能基准测试
- 集成测试
- 数据结构已对齐: 无需转换,直接兼容
- 算法已对齐: 公式完全一致
- 接口需要适配: 通过适配层桥接
- 测试验证: Step 5 将实现完整对比
docs/LLAMA_CPP_INTERFACE_ALIGNMENT.md- 详细对齐指南docs/INTERFACE_ALIGNMENT_STATUS.md- 状态报告include/llama_adapter.h- 适配层头文件
总结:
- ✅ 数据结构和算法已完全对齐
⚠️ 接口层面需要适配层(已设计,待实现)- 🎯 下一步:实现适配层和 Step 5 对比测试