From f951a43a603dc14f2765e6cccc5d858045d69c30 Mon Sep 17 00:00:00 2001 From: jhqxxx Date: Fri, 10 Oct 2025 23:25:25 +0800 Subject: [PATCH] add readme --- Cargo.lock | 2 +- Cargo.toml | 4 +- README.md | 99 +++++++++++++++++++++ assets/img/ocr_test.png | Bin 63470 -> 0 bytes src/models/{base_modules => common}/mod.rs | 0 src/models/minicpm4/model.rs | 6 +- src/models/mod.rs | 2 +- src/models/voxcpm/minicpm4.rs | 6 +- tests/test_voxcpm.rs | 8 +- 9 files changed, 111 insertions(+), 16 deletions(-) create mode 100644 README.md delete mode 100644 assets/img/ocr_test.png rename src/models/{base_modules => common}/mod.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 5f23147..cd6ca1b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,7 +19,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aha" -version = "0.0.0" +version = "0.1.0" dependencies = [ "anyhow", "base64 0.22.1", diff --git a/Cargo.toml b/Cargo.toml index 990f0c1..f42c43f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,10 +1,10 @@ [package] name = "aha" -version = "0.0.0" +version = "0.1.0" edition = "2024" repository = "https://github.com/jhqxxx/aha" license = "Apache-2.0" -description = "aha" +description = "aha model inference library, now supports Qwen2.5VL, MiniCPM4, and VoxCPM" [dependencies] candle-core = { git = "https://github.com/huggingface/candle.git", version = "0.9.1"} diff --git a/README.md b/README.md new file mode 100644 index 0000000..e1487ba --- /dev/null +++ b/README.md @@ -0,0 +1,99 @@ +# aha +一个基于 Candle 框架的 Rust 模型推理库,提供高效、易用的多模态模型推理能力。 + +## 特性 +* 🚀 高性能推理 - 基于 Candle 框架,提供高效的张量计算和模型推理 +* 🎯 多模型支持 - 集成视觉、语言和多模态模型 +* 🔧 易于使用 - 简洁的 API 设计,快速上手 +* 🛡️ 内存安全 - 得益于 Rust 的所有权系统,确保内存安全 +* 📦 轻量级 - 最小化依赖,编译产物小巧 +* ⚡ GPU 加速 - 可选 CUDA 支持 +* 🧠 注意力优化 - 可选 Flash Attention 支持,优化长序列处理 + +## 支持的模型 +### 当前已实现 +* Qwen2.5VL - 阿里通义千问 2.5 多模态大语言模型 +* MiniCPM4 - 面壁智能 MiniCPM 系列语言模型 +* VoxCPM - 面壁智能语音生成模型 + +## 计划支持 +我们持续扩展支持的模型列表,欢迎贡献! + +## 安装 +### 作为库使用 +* cargo add aha +* 或者在Cargo.toml中添加 +```toml +[dependencies] +aha = { git = "https://github.com/jhqxxx/aha.git" } + +# 启用 CUDA 支持(可选) +candle-inference = { git = "https://github.com/jhqxxx/aha.git", features = ["cuda"] } + +# 启用Flash Attention 支持(可选) +candle-inference = { git = "https://github.com/your-username/your-repo.git", features = ["cuda", "flash-attn"] } +``` + +### 从源码构建运行测试 +```bash +git clone https://github.com/jhqxxx/aha.git +cd aha +# 修改测试用例中模型路径 +# 运行 Qwen2.5VL 示例 +cargo test -F cuda,flash-attn qwen2_5vl_generate -- --nocapture + +# 运行 MiniCPM4 示例 +cargo test -F cuda,flash-attn minicpm_generate -- --nocapture + +# 运行 VoxCPM 示例 +cargo test -F cuda,flash-attn voxcpm_generate -- --nocapture +``` + +## 开发 +### 项目结构 +```text +. +├── Cargo.toml +├── README.md +├── src +│ ├── chat_template +│ ├── models +│ │ ├── common +│ │ ├── minicpm4 +│ │ ├── qwen2_5vl +│ │ ├── voxcpm +│ │ └── mod.rs +│ ├── position_embed +│ ├── tokenizer +│ ├── utils +│ └── lib.rs +└── tests + ├── test_minicpm4.rs + ├── test_qwen2_5vl.rs + └── test_voxcpm.rs +``` + +### 添加新模型 +* 在src/models/创建新模型文件 +* 在src/models/mod.rs中导出 +* 在tests/中添加测试和示例 + +## 许可证 +本项目采用 Apache License, Version 2.0 许可证 - 查看 [LICENSE](./LICENSE) 文件了解详情。 + +## 致谢 +* [Candle](https://github.com/huggingface/candle) - 优秀的 Rust 机器学习框架 +* 所有模型的原作者和贡献者 + +## 支持 +#### 如果你遇到问题: +1. 查看 Issues 是否已有解决方案 +2. 提交新的 Issue,包含详细描述和复现步骤 + +## 更新日志 +### v0.1.0 +* 初始版本发布 +* 支持 Qwen2.5VL, MiniCPM4, VoxCPM 模型 + + +⭐ 如果这个项目对你有帮助,请给我们一个 Star! \ No newline at end of file diff --git a/assets/img/ocr_test.png b/assets/img/ocr_test.png deleted file mode 100644 index b69f68e3310bdb44373e1b68dc9dbafb07eed734..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63470 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 SK|d1)0LV&yk*E?g3jTk4^G;|0 diff --git a/src/models/base_modules/mod.rs b/src/models/common/mod.rs similarity index 100% rename from src/models/base_modules/mod.rs rename to src/models/common/mod.rs diff --git a/src/models/minicpm4/model.rs b/src/models/minicpm4/model.rs index 8fe530a..eebfa14 100644 --- a/src/models/minicpm4/model.rs +++ b/src/models/minicpm4/model.rs @@ -1,6 +1,6 @@ use crate::{ models::{ - base_modules::{AttentionNobias, MLPNoBias}, + common::{AttentionNobias, MLPNoBias}, minicpm4::config::MiniCPM4Config, }, position_embed::rope::compute_default_rope_parameters, @@ -155,7 +155,7 @@ impl MiniCPMDecoderLayer { + xs.affine( self.scale_depth as f64 / (self.num_hidden_layers as f64).sqrt(), 0.0, - ))?; + )?)?; Ok(xs) } @@ -180,7 +180,7 @@ impl MiniCPMDecoderLayer { + xs.affine( self.scale_depth as f64 / (self.num_hidden_layers as f64).sqrt(), 0.0, - ))?; + )?)?; Ok(xs) } pub fn clear_kv_cache(&mut self) { diff --git a/src/models/mod.rs b/src/models/mod.rs index 1f16059..e6e58c2 100644 --- a/src/models/mod.rs +++ b/src/models/mod.rs @@ -1,4 +1,4 @@ -pub mod base_modules; +pub mod common; pub mod minicpm4; pub mod qwen2_5vl; pub mod voxcpm; diff --git a/src/models/voxcpm/minicpm4.rs b/src/models/voxcpm/minicpm4.rs index e0e0e36..666b10a 100644 --- a/src/models/voxcpm/minicpm4.rs +++ b/src/models/voxcpm/minicpm4.rs @@ -1,7 +1,7 @@ use crate::{ models::{ - base_modules::{AttentionNobias, MLPNoBias}, + common::{AttentionNobias, MLPNoBias}, voxcpm::config::VoxMiniCPM4Config, }, position_embed::rope::compute_default_rope_parameters, @@ -193,7 +193,7 @@ impl MiniCPMDecoderLayer { + xs.affine( self.scale_depth as f64 / (self.num_hidden_layers as f64).sqrt(), 0.0, - ))?; + )?)?; res_add } else { let res_add = (residual + xs)?; @@ -206,7 +206,7 @@ impl MiniCPMDecoderLayer { + xs.affine( self.scale_depth as f64 / (self.num_hidden_layers as f64).sqrt(), 0.0, - ))?; + )?)?; res_add } else { let res_add = (residual + xs)?; diff --git a/tests/test_voxcpm.rs b/tests/test_voxcpm.rs index 71d1c57..72bbea5 100644 --- a/tests/test_voxcpm.rs +++ b/tests/test_voxcpm.rs @@ -1,18 +1,14 @@ use anyhow::{Ok, Result}; -use std::{collections::HashMap, time::Instant}; +use std::{time::Instant}; use aha::{ - models::voxcpm::{ - audio_vae::AudioVAE, config::VoxCPMConfig, generate::VoxCPMGenerate, model::VoxCPMModel, + models::voxcpm::{ generate::VoxCPMGenerate, tokenizer::SingleChineseTokenizer, }, utils::{ audio_utils::save_wav, - utils::{find_type_files, get_device}, }, }; -use candle_core::pickle::read_all_with_key; -use candle_nn::VarBuilder; #[test] fn voxcpm_generate() -> Result<()> {