Skip to content

模型量化系统

模块概述

版本: v1.0.0 状态: ✅ 已实现 IPC处理器: 8个 最后更新: 2026-03-05

本地 LLM 模型量化系统,支持 GGUF (llama.cpp) 和 GPTQ (AutoGPTQ) 两种量化格式。提供 14 级 GGUF 量化、实时进度跟踪、任务管理和 Ollama 模型导入集成。

核心特性

  • GGUF 量化: 基于 llama.cpp 的 14 级量化 (Q2_K → F32)
  • GPTQ 量化: 基于 AutoGPTQ 的 2/3/4/8-bit 量化
  • 实时进度: 子进程 stdout 解析的实时进度跟踪
  • 任务管理: 创建/取消/删除/列表管理量化任务
  • Ollama 集成: 量化模型直接导入 Ollama 运行

1. 架构设计

1.1 整体架构图

┌──────────────────────────────────────────────────────────────────┐
│                        前端 (Vue3)                                │
├──────────────────────────────────────────────────────────────────┤
│                      量化管理界面                                  │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────────┐   │
│  │ 开始任务  │ │ 进度监控  │ │ 模型列表  │ │ 导入Ollama        │   │
│  └──────────┘ └──────────┘ └──────────┘ └───────────────────┘   │
└──────────────────────────────────────────────────────────────────┘
                              ↕ IPC (8个通道)
┌──────────────────────────────────────────────────────────────────┐
│                        主进程 (Electron)                          │
├──────────────────────────────────────────────────────────────────┤
│                  quantization-ipc.js (204行)                      │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │       QuantizationManager (614行, extends EventEmitter)     │  │
│  │  ┌─────────────────┐  ┌─────────────────┐                 │  │
│  │  │ GGUFQuantizer   │  │ GPTQQuantizer   │                 │  │
│  │  │ llama-quantize  │  │ auto_gptq       │                 │  │
│  │  │ (子进程)         │  │ (Python子进程)   │                 │  │
│  │  │ 14级量化         │  │ 2/3/4/8-bit     │                 │  │
│  │  └─────────────────┘  └─────────────────┘                 │  │
│  │  ┌─────────────────────────────────────┐                   │  │
│  │  │ SQLite: quantization_jobs           │                   │  │
│  │  └─────────────────────────────────────┘                   │  │
│  └────────────────────────────────────────────────────────────┘  │
│                              ↕ HTTP POST                          │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │  Ollama API: POST /api/create                              │  │
│  │  导入 GGUF 模型到 Ollama                                    │  │
│  └────────────────────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────────────────────┘

1.2 任务生命周期

创建任务 → pending

启动子进程 → running (发送 job:started)
    ↓ stdout 解析进度
进度更新 → job:progress (0-100%)

完成/失败/取消 → completed|failed|cancelled
    ↓ (可选)
导入Ollama → POST /api/create

1.3 核心组件

组件文件行数说明
QuantizationManagerquantization-manager.js614量化任务协调器
GGUFQuantizergguf-quantizer.js201llama.cpp 量化包装
GPTQQuantizergptq-quantizer.js214AutoGPTQ 量化包装
QuantizationIPCquantization-ipc.js2048个IPC处理器

2. 核心模块

2.1 QuantizationManager

javascript
class QuantizationManager extends EventEmitter {
  async initialize(database)
  async startGGUF(inputPath, outputPath, level, options?)
  async startGPTQ(inputPath, outputPath, options?)
  getStatus(jobId)
  cancelJob(jobId)
  listModels(options?)
  deleteModel(jobId)
  async importToOllama(modelPath, modelName)
  getQuantLevels()
}

2.2 GGUF 量化级别 (14级)

级别位数说明
Q2_K2最小体积, 最低质量
Q3_K_S3极小, 低质量
Q3_K_M3小, 中等质量
Q3_K_L3小, 较高质量
Q4_04旧版4-bit量化
Q4_K_S4小, 良好质量 (推荐最低)
Q4_K_M4中等, 体积质量平衡 (推荐)
Q5_05旧版5-bit量化
Q5_K_S5小, 很好质量
Q5_K_M5中等, 优秀质量
Q6_K6大, 接近无损
Q8_08极大, 几乎无损
F1616半精度浮点, 无量化损失
F3232全精度浮点, 最大体积

2.3 GPTQ 配置

javascript
{
  bits: '4',           // 2, 3, 4, 或 8
  groupSize: '128',    // 分组大小
  descAct: false,      // 降序激活排序
  dataset: 'c4',       // 校准数据集
  numSamples: 128,     // 校准样本数
}

2.4 Ollama 集成

POST {OLLAMA_HOST}/api/create
Content-Type: application/json

{
  "name": "my-model",
  "modelfile": "FROM /path/to/model.gguf"
}

3. 数据模型

3.1 quantization_jobs

字段类型说明
idTEXT PKUUID
input_pathTEXT源模型路径
output_pathTEXT输出路径
quant_typeTEXT类型 (gguf/gptq)
quant_levelTEXT量化级别 (如 Q4_K_M)
statusTEXT状态 (pending/running/completed/failed/cancelled)
progressREAL进度 0-100
file_size_bytesINTEGER输出文件大小
error_messageTEXT错误信息
configTEXT(JSON)配置选项
started_atINTEGER开始时间
completed_atINTEGER完成时间
created_atINTEGER创建时间

4. IPC接口 (8个)

通道说明参数
quantization:start-gguf开始GGUF量化inputPath, outputPath, level, options?
quantization:start-gptq开始GPTQ量化inputPath, outputPath, options?
quantization:get-status获取任务状态jobId
quantization:cancel取消任务jobId
quantization:list-models列出量化模型status?, quantType?, limit?, offset?
quantization:delete-model删除模型jobId
quantization:import-ollama导入到OllamamodelPath, modelName
quantization:get-quant-levels获取量化级别-

5. 事件

事件负载说明
job:started任务开始
job:progress进度更新
job:completed完成
job:failed失败
job:cancelled取消
job:deleted删除

6. 文件结构

desktop-app-vue/src/main/quantization/
├── quantization-manager.js   # 量化任务协调器 (614行)
├── gguf-quantizer.js         # llama.cpp GGUF量化 (201行)
├── gptq-quantizer.js         # AutoGPTQ量化 (214行)
└── quantization-ipc.js       # 8个IPC处理器 (204行)

7. 相关文档


文档版本: 1.0 最后更新: 2026-03-05

基于 MIT 许可发布