2026-07-08 15:27:48 +08:00
|
|
|
|
# MiniCPM5-1B-rust (v0.2.0)
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
MiniCPM5-1B 模型的 Rust 推理实现,基于 [Burn](https://github.com/tracel-ai/burn) 框架。
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
## 特性
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
- 🔥 **Wgpu GPU 加速**:支持 CUDA / Metal / Vulkan / DX12 等多种 GPU 后端
|
|
|
|
|
|
- 🚀 **算子融合**:启用 fusion + autotune 优化,自动选择最优 kernel
|
|
|
|
|
|
- 📝 **流式输出**:实时生成文本,支持逐字输出
|
|
|
|
|
|
- 🧠 **思考模式**:支持开启模型的推理思考过程
|
|
|
|
|
|
- 📦 **纯 Rust**:无 C/C++ 依赖,跨平台编译简单
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
## 项目结构
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
```
|
|
|
|
|
|
MiniCPM5-1B-rust/
|
|
|
|
|
|
├── crates/
|
|
|
|
|
|
│ ├── minicpm-core/ # 核心模型实现(Transformer、Attention、FFN)
|
|
|
|
|
|
│ ├── minicpm-inference/ # 推理引擎(生成、采样、tokenizer)
|
|
|
|
|
|
│ └── minicpm-convert/ # 模型转换库
|
|
|
|
|
|
└── examples/
|
|
|
|
|
|
├── convert/ # 模型转换示例(safetensors → Burn 格式)
|
|
|
|
|
|
└── wgpu-backend/ # Wgpu GPU 推理示例
|
|
|
|
|
|
```
|
2026-07-01 14:33:28 +08:00
|
|
|
|
|
|
|
|
|
|
## 快速开始
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
### 1. 准备模型
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
将 MiniCPM5-1B safetensors 模型放到 `MiniCPM5-1B/` 目录:
|
2026-07-01 14:33:28 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
```
|
|
|
|
|
|
MiniCPM5-1B/
|
|
|
|
|
|
├── model-00000-of-00001.safetensors
|
|
|
|
|
|
├── config.json
|
|
|
|
|
|
└── tokenizer.json
|
|
|
|
|
|
```
|
2026-07-01 14:33:28 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
### 2. 转换模型
|
2026-07-01 14:33:28 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
cargo run --release -p convert
|
2026-07-01 10:56:43 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
转换完成后会生成 `model/` 目录(全精度 f32,Burn mpk 格式)。
|
2026-07-01 14:33:28 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
### 3. 运行推理
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
# 普通模式
|
|
|
|
|
|
cargo run --release -p wgpu-backend
|
2026-07-01 14:33:28 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
# 开启思考模式
|
|
|
|
|
|
cargo run --release -p wgpu-backend -- --think
|
|
|
|
|
|
```
|
2026-07-01 14:33:28 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
## 使用说明
|
2026-07-01 14:33:28 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
### wgpu-backend 命令行参数
|
2026-07-01 14:33:28 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
| 参数 | 说明 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| `--think` | 开启思考模式,模型会在回答前进行推理思考 |
|
2026-07-01 14:33:28 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
### GenerationConfig
|
2026-07-01 14:33:28 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
```rust
|
|
|
|
|
|
GenerationConfig {
|
|
|
|
|
|
max_new_tokens: Some(1200), // 最大生成 token 数
|
|
|
|
|
|
temperature: 0.7, // 温度,越高越随机
|
|
|
|
|
|
top_p: 0.95, // nucleus sampling 参数
|
2026-07-01 14:33:28 +08:00
|
|
|
|
}
|
2026-07-01 10:56:43 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
### 作为库使用
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-01 14:33:28 +08:00
|
|
|
|
```rust
|
2026-07-08 15:13:57 +08:00
|
|
|
|
use burn::backend::{wgpu::WgpuDevice, Wgpu};
|
|
|
|
|
|
use minicpm_inference::{GenerationConfig, MiniCPM};
|
|
|
|
|
|
|
|
|
|
|
|
let device = WgpuDevice::default();
|
|
|
|
|
|
let model = MiniCPM::<Wgpu>::load(
|
|
|
|
|
|
"model/model",
|
|
|
|
|
|
"config.json",
|
|
|
|
|
|
"tokenizer.json",
|
|
|
|
|
|
&device,
|
|
|
|
|
|
)?;
|
|
|
|
|
|
|
|
|
|
|
|
let config = GenerationConfig {
|
|
|
|
|
|
max_new_tokens: Some(500),
|
|
|
|
|
|
temperature: 0.7,
|
|
|
|
|
|
top_p: 0.95,
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 流式生成
|
|
|
|
|
|
let stream = model.generate_stream("你好", false, &config)?;
|
|
|
|
|
|
for text in stream {
|
|
|
|
|
|
print!("{}", text);
|
2026-07-01 14:33:28 +08:00
|
|
|
|
}
|
2026-07-01 10:56:43 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
## 发布构建
|
2026-07-01 14:33:28 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
# Release 构建(启用 LTO + 最高优化级别)
|
|
|
|
|
|
cargo build --release
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
# 发布到 gitea registry
|
|
|
|
|
|
cargo publish -p minicpm-core --registry gitea
|
|
|
|
|
|
cargo publish -p minicpm-inference --registry gitea
|
|
|
|
|
|
cargo publish -p minicpm-convert --registry gitea
|
2026-07-01 14:33:28 +08:00
|
|
|
|
```
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
Release profile 配置:
|
|
|
|
|
|
- `opt-level = 3`:最高优化级别
|
|
|
|
|
|
- `lto = true`:链接时优化
|
|
|
|
|
|
- `codegen-units = 1`:单代码生成单元,最大化优化
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
## 依赖
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
- Rust 1.75+
|
|
|
|
|
|
- 支持 Wgpu 的 GPU(CUDA / Metal / Vulkan / DX12)
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-08 15:13:57 +08:00
|
|
|
|
## License
|
2026-07-01 10:56:43 +08:00
|
|
|
|
|
2026-07-01 14:33:28 +08:00
|
|
|
|
MIT
|