Files
markbaseengine/26B使用指南.md
MarkBase Admin ac75faa0cc
Some checks failed
CI / build-and-test (push) Has been cancelled
Initial commit: E4B-MarkBase model integration with passing tests
- E4B-MarkBase model (42 layers, 4.4GB) loaded successfully
- All Phase 1-6 tests passed (model loading, forward pass, vision/audio towers, token generation, performance)
- All stress tests passed (5/5 in 127.6s)
  - Concurrent inference
  - Memory stress (67.5 tok/s, 0 NaN)
  - Continuous generation
  - Batch processing
  - Long-running stability
- Swift Metal inference engine with multimodal support
2026-06-23 18:12:35 +08:00

382 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Gemma-4 26B 使用指南
## 当前状态
**已发现**: MLX Gemma-4 26B 模型
**位置**: `~/.cache/huggingface/hub/models--mlx-community--gemma-4-26b-a4b-mxfp4/`
**大小**: 14.8 GB
**状态**: 格式不兼容,需要转换
---
## 快速开始
### 方案 A: 使用转换脚本 (推荐)
**步骤 1: 运行转换脚本**
```bash
cd /Users/accusys/MarkBase12B
python3 convert_mlx_26b.py \
--input ~/.cache/huggingface/hub/models--mlx-community--gemma-4-26b-a4b-mxfp4 \
--output ~/models/gemma-4-26b-standard
```
**预期输出**:
```
=== MLX 26B → 标准 4-bit 转换 ===
步骤 1: 加载 MLX 权重
加载 model-00001-of-00003.safetensors...
加载 model-00002-of-00003.safetensors...
加载 model-00003-of-00003.safetensors...
✓ 总权重数: 1283
步骤 2: 重命名权重
已处理 100/1283 权重
...
✓ 重命名完成
步骤 3: 转换 scales 格式
转换 embed_tokens.scales: uint8 → BF16
...
✓ scales 转换完成
步骤 4: 保存为单个 safetensors
✓ 保存到: ~/models/gemma-4-26b-standard/model.safetensors
步骤 5: 创建 config.json
✓ config.json 创建完成
步骤 6: 复制 tokenizer 文件
✓ 复制 tokenizer.json
✓ 复制 tokenizer_config.json
✓ 复制 generation_config.json
=== 转换完成 ===
```
**步骤 2: 测试加载**
```bash
swift test --filter test26BModelLoading
```
**步骤 3: 启动服务器**
```bash
swift run G12BServer ~/models/gemma-4-26b-standard 8080 gemma-26b
```
---
## 详细步骤说明
### 依赖安装
**需要安装 Python 依赖**:
```bash
pip install safetensors torch
```
### 转换过程详解
**脚本功能**:
#### 1. 加载 MLX 权重
```python
# 加载 3 个 safetensors shards
weights = {}
for shard in ["model-00001-of-00003.safetensors", ...]:
shard_weights = load_file(shard)
weights.update(shard_weights)
```
#### 2. 重命名权重
```python
# 移除 language_model.model 前缀
# language_model.model.layers.0 → layers.0
new_key = key.replace("language_model.model.", "")
```
#### 3. 转换 scales
```python
# uint8 scales → BF16
if ".scales" in key and tensor.dtype == torch.uint8:
converted = tensor.float().bfloat16()
```
#### 4. 生成配置
```json
{
"model_type": "gemma4",
"hidden_size": 2816,
"num_hidden_layers": 42,
"vocab_size": 262144,
"quantization_config": {
"bits": 4,
"group_size": 64
}
}
```
---
## Memory 要求
### 26B Memory 估算
**权重大小**:
- 26B parameters × 0.5 bytes (4-bit) = 13 GB
- Embed tokens: ~1 GB
- Vision tower: ~0.5 GB
- **总计**: ~14.5 GB
**运行时 Memory**:
- Weights: 14.5 GB
- KV Cache (128 context): 0.5 GB
- Activations: 1-2 GB
- **总计**: ~17 GB
### Mac 要求
| Mac Model | Memory | 26B 支持 | 建议 |
|-----------|--------|----------|------|
| M1/M2 Base | 8-16GB | ✗ | 不推荐 |
| M1/M2 Pro | 16GB | ⚠ | 勉强 |
| M1/M2 Max | 24-32GB | ⚠ | 可能需要优化 |
| M3 Pro | 36GB | ✓ | 推荐 |
| M3 Max | 48GB | ✓ | 充足 |
| M4/M5 | 64-192GB | ✓ | 完全充足 |
### Memory 优化建议
**如果 Memory 不足**:
#### 1. 减小 Context Length
```swift
let model = try E4BModel(
modelDir: modelDir,
engine: engine,
maxContextLength: 128 // 512
)
```
#### 2. 使用 RDMA 分布式
```bash
# 42层分布到多个设备
# Device 1: Layers 0-20
# Device 2: Layers 21-41
```
#### 3. 关闭其他应用
```bash
# 释放更多 memory
```
---
## 性能预期
### 单设备性能
**预估**:
```
26B 参数量 × 2 (vs 12B)
性能 ≈ 12B 的 50%
12B: ~30 tok/s
26B: ~15 tok/s (预估)
```
### 分布式性能
**RDMA distributed**:
```
跨设备推理可以显著提升:
- 658 tok/s (12B baseline)
- 26B distributed: 400+ tok/s (预估)
```
---
## 测试指南
### 转换后测试
**测试 1: 加载验证**
```swift
func test26BModelLoading() throws {
let model = try E4BModel(modelDir: "~/models/gemma-4-26b-standard", ...)
XCTAssertGreaterThan(model.numHiddenLayers, 0)
XCTAssertEqual(model.hiddenSize, 2816)
}
```
**测试 2: 推理测试**
```swift
func test26BInference() throws {
let tokens = tokenizer.encode(text: "Hello")
let logits = try model.forward(tokenId: tokens[0], position: 0)
XCTAssertGreaterThan(logits.count, 0)
}
```
**测试 3: Memory 测试**
```swift
func test26BMemory() throws {
// memory 使
let memoryUsed = getMemoryUsage()
XCTAssertLessThan(memoryUsed, 20_000_000_000)
}
```
---
## 故障排除
### 转换失败
**问题**: 转换脚本报错
**解决方案**:
```bash
# 检查依赖
pip install safetensors torch
# 检查输入路径
ls ~/.cache/huggingface/hub/models--mlx-community--gemma-4-26b-a4b-mxfp4/
# 检查 Python 版本 (需要 3.9+)
python3 --version
```
### 加载失败
**问题**: Swift 加载报错
**常见错误**:
```
Error: unsupportedDtype
→ 检查 scales 是否正确转换为 BF16
Error: weights not found
→ 检查权重命名是否正确
Error: memory不足
→ 减小 maxContextLength 或使用 RDMA
```
### 推理失败
**问题**: 推理错误或挂起
**解决方案**:
```bash
# 检查 memory
# 检查 config.json 参数
# 使用简单输入测试
```
---
## 完整示例
### 从开始到运行
**完整流程**:
```bash
# 1. 下载依赖
pip install safetensors torch
# 2. 转换模型
cd /Users/accusys/MarkBase12B
python3 convert_mlx_26b.py \
--input ~/.cache/huggingface/hub/models--mlx-community--gemma-4-26b-a4b-mxfp4 \
--output ~/models/gemma-4-26b-standard
# 3. 验证转换
ls -lh ~/models/gemma-4-26b-standard/
jq '.' ~/models/gemma-4-26b-standard/config.json
# 4. 测试加载
swift test --filter test26BModelLoading
# 5. 启动服务器
swift run G12BServer ~/models/gemma-4-26b-standard 8080 gemma-26b
# 6. 测试推理
curl -X POST http://localhost:8080/v1/chat/completions \
-d '{"messages":[{"role":"user","content":"Hello"}]}'
```
---
## 与其他模型对比
### 26B vs 12B
| 特性 | 12B | 26B |
|------|-----|-----|
| 参数量 | 12B | 26B |
| Hidden size | 2560 | 2816 |
| Memory | 8GB | 17GB |
| 性能 | 30 tok/s | 15 tok/s |
| MoE | No | Yes |
| 文件大小 | 6GB | 14.8GB |
### 26B vs 31B
| 特性 | 26B | 31B |
|------|-----|-----|
| 参数量 | 26B | 31B |
| Memory | 17GB | 20GB |
| 性能 | 15 tok/s | 10 tok/s |
| 推荐 Mac | M3 Pro+ | M4+ |
---
## 下一步
### 立即行动
**推荐路径**:
1. ✓ 运行转换脚本
2. ✓ 测试加载
3. ✓ 启动服务器
4. ✓ 测试推理
### 后续优化
**可选优化**:
1. 实现 MoE 支持
2. RDMA distributed 推理
3. Performance tuning
4. Memory optimization
---
## 总结
**26B 模型可以使用,但需要转换格式**
**步骤**:
1. 运行 `convert_mlx_26b.py`
2. 测试加载
3. 启动服务器
**要求**:
- Memory: 17+ GB (M3 Pro/Max 或更高)
- Python: 3.9+ (用于转换)
- 依赖: safetensors, torch
**时间**:
- 转换: 10-30 分钟
- 加载: 1-2 分钟
- 推理: 与 12B 类似但稍慢
---
**使用指南生成**: June 19, 2026
**当前状态**: 可用(需转换)
**推荐方案**: 使用转换脚本