dream-quant / GGUF_Q8_0_README.md
eric8810's picture
update README for llama.cpp diffusion runing examples
bd713c3

Dream-Coder GGUF Q8_0 量化指南

本指南专门为 Dream-Coder v0-Instruct-7B 模型的 GGUF Q8_0 量化而设计。

快速开始

1. 环境准备

# 1. 克隆并编译 llama.cpp
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j$(nproc)

# 2. 安装 Python 依赖
pip install transformers>=4.46.2 torch safetensors numpy

2. 执行量化

方法一: 使用提供的脚本

# 设置 llama.cpp 路径
export LLAMA_CPP_PATH=/path/to/llama.cpp

# 运行量化脚本
./quantize_example.sh

方法二: 手动执行

python quantize_dream_q8_0.py \
    --model_path /path/to/Dream-Coder-v0-Instruct-7B \
    --llama_cpp_path /path/to/llama.cpp \
    --output_dir ./gguf_output \
    --keep_f16

3. 参数说明

  • --model_path: Dream-Coder 模型路径 (默认: 当前目录)
  • --llama_cpp_path: llama.cpp 项目路径 (必需)
  • --output_dir: 输出目录 (默认: ./gguf_output)
  • --keep_f16: 保留 F16 中间文件

架构适配说明

Dream-Coder 特殊配置处理

本量化脚本专门处理了 Dream-Coder 的以下特殊配置:

  1. 架构映射: DreamModel → LlamaForCausalLM (兼容性)

  2. 特殊 Token ID:

    • mask_token_id: 151666 (diffusion 关键 token)
    • bos_token_id: 151665
    • eos_token_id: 151643
    • pad_token_id: 151643
  3. 模型参数:

    • 词汇表大小: 152,064
    • 隐藏维度: 3,584
    • 注意力头: 28 (4 个 key-value heads)
    • 层数: 28
    • 上下文长度: 32,768
  4. Diffusion 特性:

    • 保持 mask_token_id 元数据
    • RoPE theta: 1,000,000.0
    • 激活函数: SiLU

输出说明

文件结构

gguf_output/
├── dream-coder-7b-f16.gguf      # F16 中间文件 (可选保留)
└── dream-coder-7b-q8_0.gguf     # 最终 Q8_0 量化文件

性能预期

指标 原始 (BF16) Q8_0
内存占用 ~14GB ~6.7GB
推理速度 1.0x 1.2-1.5x
精度损失 0% <0.1%

使用方法

llama.cpp 命令行

由于 Dream-Coder 是基于 diffusion 的模型,需要使用专用的 llama-diffusion-cli 工具:

# 基本使用
./llama.cpp/build/bin/llama-diffusion-cli \
    -m gguf_output/dream-coder-7b-q8_0.gguf \
    -p "def quicksort(arr):" \
    -n 512 \
    -c 2048 \
    --diffusion-steps 128

# 高级参数
./llama.cpp/build/bin/llama-diffusion-cli \
    -m gguf_output/dream-coder-7b-q8_0.gguf \
    -p "Write a binary search function" \
    -n 256 \
    -c 2048 \
    --temp 0.1 \
    --top-p 0.95 \
    --repeat-penalty 1.1 \
    --diffusion-steps 128 \
    --diffusion-algorithm 4 \
    --diffusion-alg-temp 0.0 \
    -t 8

# 可视化生成过程
./llama.cpp/build/bin/llama-diffusion-cli \
    -m gguf_output/dream-coder-7b-q8_0.gguf \
    -p "def fibonacci(n):" \
    -n 256 \
    --diffusion-steps 64 \
    --diffusion-visual

Diffusion 参数说明

  • --diffusion-steps N: Diffusion 去噪步数 (默认: 128)
  • --diffusion-algorithm N: 算法选择:
    • 0 = ORIGIN (原始算法)
    • 1 = ENTROPY_BASED (基于熵)
    • 2 = MARGIN_BASED (基于边际)
    • 3 = RANDOM (随机)
    • 4 = LOW_CONFIDENCE (低置信度,默认)
  • --diffusion-alg-temp F: 算法温度 (默认: 0.0)
  • --diffusion-visual: 启用可视化模式,显示生成进度
  • --diffusion-eps F: 时间步epsilon值

Python (llama-cpp-python)

pip install llama-cpp-python
from llama_cpp import Llama

# 加载模型
llm = Llama(
    model_path="gguf_output/dream-coder-7b-q8_0.gguf",
    n_ctx=2048,
    n_threads=8,
    n_gpu_layers=0  # CPU 推理, 设置 >0 启用 GPU 加速
)

# 生成代码
output = llm(
    "def fibonacci(n):",
    max_tokens=512,
    temperature=0.1,
    top_p=0.95,
    repeat_penalty=1.1
)

print(output['choices'][0]['text'])

带 GPU 加速

如果编译了 CUDA 支持:

# 编译 CUDA 版本
cd llama.cpp
make clean
make LLAMA_CUBLAS=1 -j$(nproc)

# 使用 GPU 加速 (部分层)
./build/bin/llama-diffusion-cli \
    -m gguf_output/dream-coder-7b-q8_0.gguf \
    -p "def quicksort(arr):" \
    -n 512 \
    --diffusion-steps 128 \
    -ngl 20  # GPU 层数

故障排除

常见问题

  1. 转换失败:

    • 确保 llama.cpp 已正确编译
    • 检查 Python 依赖版本
    • 验证模型文件完整性
  2. 量化失败:

    • 检查磁盘空间 (需要 ~20GB 临时空间)
    • 确保有足够内存 (推荐 32GB+)
  3. 推理错误:

    • 验证 GGUF 文件完整性
    • 检查上下文长度设置
    • 尝试降低 n_gpu_layers

验证模型

# 文件完整性检查
ls -lh gguf_output/dream-coder-7b-q8_0.gguf

# 简单推理测试  
echo "def hello():" | ./llama.cpp/build/bin/llama-diffusion-cli -m gguf_output/dream-coder-7b-q8_0.gguf -n 20 --diffusion-steps 64

性能优化

CPU 优化

  • 使用 -t 参数设置线程数
  • 启用 AVX2/AVX512 编译选项
  • 调整 batch size (-b 参数)

GPU 优化

  • 使用 CUDA/OpenCL 编译
  • 调整 GPU 层数 (-ngl)
  • 监控 GPU 内存使用

内存优化

  • 使用 --mmap 启用内存映射
  • 调整 --mlock 参数
  • 设置合适的上下文长度

注意事项

  1. Diffusion 特性: Dream-Coder 使用 diffusion 生成,与传统 autoregressive 模型不同
  2. 专用工具: 必须使用 llama-diffusion-cli 而非普通的 main 工具
  3. 特殊 Token: 保持 mask_token_id (151666) 的正确处理
  4. 上下文长度: 支持最大 32K tokens,但推荐 2K-4K 以获得最佳性能
  5. 生成参数: 推荐使用较低的 temperature (0.1-0.3) 和合适的 top_p (0.9-0.95)
  6. Diffusion 步数: 推荐 64-128 步,更多步数可能提升质量但增加推理时间

技术支持

如遇问题,请检查:

  1. llama.cpp 版本和编译状态
  2. Python 依赖版本兼容性
  3. 模型文件完整性
  4. 系统资源 (内存/磁盘)

更多信息参考: