模型量化系统
模块概述
版本: 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/create1.3 核心组件
| 组件 | 文件 | 行数 | 说明 |
|---|---|---|---|
| QuantizationManager | quantization-manager.js | 614 | 量化任务协调器 |
| GGUFQuantizer | gguf-quantizer.js | 201 | llama.cpp 量化包装 |
| GPTQQuantizer | gptq-quantizer.js | 214 | AutoGPTQ 量化包装 |
| QuantizationIPC | quantization-ipc.js | 204 | 8个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_K | 2 | 最小体积, 最低质量 |
| Q3_K_S | 3 | 极小, 低质量 |
| Q3_K_M | 3 | 小, 中等质量 |
| Q3_K_L | 3 | 小, 较高质量 |
| Q4_0 | 4 | 旧版4-bit量化 |
| Q4_K_S | 4 | 小, 良好质量 (推荐最低) |
| Q4_K_M | 4 | 中等, 体积质量平衡 (推荐) |
| Q5_0 | 5 | 旧版5-bit量化 |
| Q5_K_S | 5 | 小, 很好质量 |
| Q5_K_M | 5 | 中等, 优秀质量 |
| Q6_K | 6 | 大, 接近无损 |
| Q8_0 | 8 | 极大, 几乎无损 |
| F16 | 16 | 半精度浮点, 无量化损失 |
| F32 | 32 | 全精度浮点, 最大体积 |
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
| 字段 | 类型 | 说明 |
|---|---|---|
| id | TEXT PK | UUID |
| input_path | TEXT | 源模型路径 |
| output_path | TEXT | 输出路径 |
| quant_type | TEXT | 类型 (gguf/gptq) |
| quant_level | TEXT | 量化级别 (如 Q4_K_M) |
| status | TEXT | 状态 (pending/running/completed/failed/cancelled) |
| progress | REAL | 进度 0-100 |
| file_size_bytes | INTEGER | 输出文件大小 |
| error_message | TEXT | 错误信息 |
| config | TEXT(JSON) | 配置选项 |
| started_at | INTEGER | 开始时间 |
| completed_at | INTEGER | 完成时间 |
| created_at | INTEGER | 创建时间 |
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 | 导入到Ollama | modelPath, 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
