chore(代码变更): 1. 清理无用代码 2. 更新依赖库 3. 优化项目结构 4. 修复小型bug 5. 增加注释以提高可读性
This commit is contained in:
@@ -5,5 +5,5 @@ edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
minicpm-inference = { path = "../../crates/minicpm-inference" }
|
||||
burn = { version = "0.21", default-features = false, features = ["std", "wgpu"] }
|
||||
burn = { version = "0.21", default-features = false, features = ["std", "wgpu", "fusion", "autotune"] }
|
||||
anyhow = "1.0"
|
||||
@@ -1,10 +1,3 @@
|
||||
// Wgpu 后端推理示例 —— GPU 加速推理
|
||||
//
|
||||
// 依赖 WebGPU API,支持 CUDA/Metal/Vulkan 等平台。
|
||||
// 注意:与 Tauri 应用可能存在兼容性冲突,建议使用 Flex 后端。
|
||||
//
|
||||
// 运行方式:cargo run --release -p wgpu-backend [--full|--half|--q8]
|
||||
|
||||
use burn::backend::{wgpu::WgpuDevice, Wgpu};
|
||||
use minicpm_inference::{GenerationConfig, MiniCPM};
|
||||
use std::io::Write;
|
||||
@@ -12,49 +5,25 @@ use std::time::Instant;
|
||||
|
||||
fn main() -> anyhow::Result<()> {
|
||||
let args: Vec<String> = std::env::args().collect();
|
||||
let mode = args.get(1).map(|s| s.as_str()).unwrap_or("--full");
|
||||
let think = args.iter().any(|s| s == "--think");
|
||||
|
||||
let (model_dir, config_path, tokenizer_path, is_q8) = match mode {
|
||||
"--half" => (
|
||||
"model_half",
|
||||
"MiniCPM5-1B/config.json",
|
||||
"MiniCPM5-1B/tokenizer.json",
|
||||
false,
|
||||
),
|
||||
"--q8" => (
|
||||
"model_q8",
|
||||
"MiniCPM5-1B/config.json",
|
||||
"MiniCPM5-1B/tokenizer.json",
|
||||
true,
|
||||
),
|
||||
_ => (
|
||||
"model",
|
||||
"MiniCPM5-1B/config.json",
|
||||
"MiniCPM5-1B/tokenizer.json",
|
||||
false,
|
||||
),
|
||||
};
|
||||
|
||||
println!("正在加载模型(后端:Wgpu,模式:{mode})...");
|
||||
println!("Wgpu 后端特性:GPU 加速(CUDA/Metal/Vulkan)");
|
||||
let start = Instant::now();
|
||||
|
||||
let device = WgpuDevice::default();
|
||||
let model: MiniCPM<Wgpu> = if is_q8 {
|
||||
MiniCPM::<Wgpu>::load_q8(model_dir, config_path, tokenizer_path, &device)?
|
||||
println!("========================================");
|
||||
println!("后端: Wgpu (GPU 加速)");
|
||||
println!("模型目录: model");
|
||||
if think {
|
||||
println!("思考模式: 开启");
|
||||
} else {
|
||||
let model_path = format!("{model_dir}/model");
|
||||
MiniCPM::<Wgpu>::load(&model_path, config_path, tokenizer_path, &device)?
|
||||
};
|
||||
println!("思考模式: 关闭");
|
||||
}
|
||||
println!("========================================");
|
||||
|
||||
let start = Instant::now();
|
||||
let device = WgpuDevice::default();
|
||||
|
||||
let model = MiniCPM::<Wgpu>::load("model/model", "MiniCPM5-1B/config.json", "MiniCPM5-1B/tokenizer.json", &device)?;
|
||||
println!("模型加载完成,耗时: {:.2?}", start.elapsed());
|
||||
|
||||
let prompt = "需要处理生成一个河南的旅游计划,要求如下:
|
||||
1. 旅游计划为三天两夜的行程安排。
|
||||
2. 每天的行程安排包括景点、餐饮和住宿建议。
|
||||
3. 景点安排要考虑交通便利性和时间合理性。
|
||||
请生成详细的旅游计划,包含每天的行程安排、景点介绍、餐饮推荐和住宿建议。
|
||||
";
|
||||
let prompt = "需要处理生成一个河南的旅游计划,要求如下:\n1. 旅游计划为三天两夜的行程安排。\n2. 每天的行程安排包括景点、餐饮和住宿建议。\n3. 景点安排要考虑交通便利性和时间合理性。\n请生成详细的旅游计划,包含每天的行程安排、景点介绍、餐饮推荐和住宿建议。\n";
|
||||
println!("\n用户: {prompt}");
|
||||
print!("Assistant: ");
|
||||
std::io::stdout().flush()?;
|
||||
@@ -66,7 +35,7 @@ fn main() -> anyhow::Result<()> {
|
||||
};
|
||||
|
||||
let start = Instant::now();
|
||||
let stream = model.generate_stream(prompt, false, &config)?;
|
||||
let stream = model.generate_stream(prompt, think, &config)?;
|
||||
|
||||
for text in stream {
|
||||
print!("{text}");
|
||||
@@ -74,9 +43,8 @@ fn main() -> anyhow::Result<()> {
|
||||
}
|
||||
|
||||
let elapsed = start.elapsed();
|
||||
|
||||
println!();
|
||||
println!("\n生成耗时: {:.2?}", elapsed);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user