一个基于 Candle 框架的 Rust 模型推理库,提供高效、易用的多模态模型推理能力。
- 🚀 高性能推理 - 基于 Candle 框架,提供高效的张量计算和模型推理
- 🎯 多模型支持 - 集成视觉、语言和语音多模态模型
- 🔧 易于使用 - 简洁的 API 设计,快速上手
- 🛡️ 内存安全 - 得益于 Rust 的所有权系统,确保内存安全
- 📦 轻量级 - 最小化依赖,编译产物小巧
- ⚡ GPU 加速 - 可选 CUDA 支持
- 🧠 注意力优化 - 可选 Flash Attention 支持,优化长序列处理
- Qwen2.5VL - 阿里通义千问 2.5 多模态大语言模型
- MiniCPM4 - 面壁智能 MiniCPM 系列语言模型
- 模型:MiniCPM4-0.5B 开源协议:Apache license 2.0
- VoxCPM - 面壁智能语音生成模型
- 模型:VoxCPM-0.5B 开源协议:Apache license 2.0
- Qwen3VL - 阿里通义千问 3 多模态大语言模型
- 模型:Qwen3-VL-2B-Instruct 开源协议:Apache license 2.0
- 模型:Qwen3-VL-4B-Instruct 开源协议:Apache license 2.0
- 模型:Qwen3-VL-8B-Instruct 开源协议:Apache license 2.0
- 模型:Qwen3-VL-32B-Instruct 开源协议:Apache license 2.0
- DeepSeek-OCR - 深度求索光学文字识别模型
- 模型:DeepSeek-OCR 开源协议:MIT
- Hunyuan-OCR - 腾讯混元光学文字识别模型
- PaddleOCR-VL - 百度飞桨光学文字识别模型
- 模型:PaddleOCR-VL 开源协议:Apache license 2.0
- VoxCPM1.5 - 面壁智能语音生成模型1.5版本
- 模型:VoxCPM1.5 开源协议:Apache license 2.0
- RMBG2.0 - RMBGv2.0由BRIA AI开发,供非商业用途使用。
- GLM-ASR-Nano-2512 - 智谱AI语音识别模型
- 模型:GLM-ASR-Nano-2512 开源协议:MIT
我们持续扩展支持的模型列表,欢迎贡献!
⭐ 如果这个项目对你有帮助,请给我们一个 Star!
- 启用ffmpeg的feature时:
- ubuntu/WSL
sudo apt-get update sudo apt-get install -y clang pkg-config ffmpeg libavutil-dev libavcodec-dev libavformat-dev libavfilter-dev libavdevice-dev libswresample-dev libswscale-dev
项目提供了几个可选的功能特性,您可以根据需要启用它们:
- flash-attn: 启用 Flash Attention 支持以提升模型推理性能:
cargo build -r --features flash-attn- cuda: 为 candle 核心组件启用 CUDA 支持,实现 GPU 加速计算:
cargo build -r --features cuda- ffmpeg: 启用 FFmpeg 支持,提供多媒体处理功能:
cargo build -r --features ffmpeg- 组合使用功能特性
# 同时启用 CUDA 和 Flash Attention 以获得最佳性能
cargo build -r --features "cuda,flash-attn"
# 启用所有功能特性
cargo build -r --features "cuda,flash-attn,ffmpeg"git clone https://github.com/jhqxxx/aha.git
cd ahacargo run -F cuda -r -- [参数]- 端口设置
-p, --port <PORT>
- 设置HTTP服务监听的端口号
- 默认值:10100
- 示例:--port 8080 或 -p 8080
- 模型选择(必选)
-m, --model <MODEL>
- 指定要加载的模型类型
- 可选值:
- minicpm4-0.5b:OpenBMB/MiniCPM4-0.5B 模型
- qwen2.5vl-3b:Qwen/Qwen2.5-VL-3B-Instruct 模型
- qwen2.5vl-7b:Qwen/Qwen2.5-VL-7B-Instruct 模型
- qwen3vl-2b:Qwen/Qwen3-VL-2B-Instruct 模型
- qwen3vl-4b:Qwen/Qwen3-VL-4B-Instruct 模型
- qwen3vl-8b:Qwen/Qwen3-VL-8B-Instruct 模型
- qwen3vl-32b:Qwen/Qwen3-VL-32B-Instruct 模型
- deepseek-ocr: deepseek-ai/DeepSeek-OCR 模型
- hunyuan-ocr: Tencent-Hunyuan/HunyuanOCR 模型
- paddleocr-vl: PaddlePaddle/PaddleOCR-VL 模型
- RMBG2.0: AI-ModelScope/RMBG-2.0 模型
- voxcpm: OpenBMB/VoxCPM-0.5B 模型
- voxcpm1.5: OpenBMB/VoxCPM1.5 模型
- glm-asr-nano-2512: ZhipuAI/GLM-ASR-Nano-2512 模型
- 示例:--model deepseek-ocr 或 -m qwen3vl-2b
- 权重路径
--weight-path <WEIGHT_PATH>
- 指定本地模型权重文件路径
- 如果指定此参数,则跳过模型下载步骤
- 示例:--weight-path /path/to/model/dir
- 保存路径
--save-dir <SAVE_DIR>
- 指定模型下载保存的目录
- 默认保存在用户主目录下的 .aha 文件夹中
- 示例:--save-dir /custom/model/path
- 下载重试次数
--download-retries <DOWNLOAD_RETRIES>
- 设置模型下载失败时的最大重试次数
- 默认值:3次
- 示例:--download-retries 5
- 参数前需要使用双横线 -- 分隔 cargo 命令和应用程序参数
- 模型参数 (--model 或 -m) 是必需的
- 如果未指定 --weight-path,程序会自动下载指定模型
- 下载的模型默认保存在 ~/.aha/ 目录下(除非指定了 --save-dir)
项目提供基于 OpenAI API 兼容的 RESTful 接口,支持多种模型推理任务。
- 对话接口
- 端点:
POST /chat/completions - 功能: 多模态对话和文本生成
- 支持模型: Qwen2.5VL,Qwen3VL,DeepSeekOCR, GLM-ASR-Nano-2512 等
- 请求格式: OpenAI Chat Completion 格式
- 响应格式: OpenAI Chat Completion 格式
- 流式支持: 支持
- 图像处理接口
- 端点:
POST /images/remove_background - 功能: 图像背景移除
- 支持模型: RMBG-2.0
- 请求格式: OpenAI Chat Completion 格式
- 响应格式: OpenAI Chat Completion 格式
- 流式支持: 不支持
- 语音生成接口
- 端点:
POST /audio/speech - 功能: 语音合成和生成
- 支持模型: VoxCPM,VoxCPM1.5
- 请求格式: OpenAI Chat Completion 格式
- 响应格式: OpenAI Chat Completion 格式
- 流式支持: 不支持
- cargo add aha
- 或者在Cargo.toml中添加
[dependencies]
aha = { git = "https://github.com/jhqxxx/aha.git" }
# 启用 CUDA 支持(可选)
aha = { git = "https://github.com/jhqxxx/aha.git", features = ["cuda"] }
# 启用Flash Attention 支持(可选)
aha = { git = "https://github.com/jhqxxx/aha.git", features = ["cuda", "flash-attn"] }use aha::models::voxcpm::generate::VoxCPMGenerate;
use aha::utils::audio_utils::save_wav;
use anyhow::Result;
fn main() -> Result<()> {
let model_path = "xxx/openbmb/VoxCPM-0.5B/";
let mut voxcpm_generate = VoxCPMGenerate::init(model_path, None, None)?;
let generate = voxcpm_generate.generate(
"太阳当空照,花儿对我笑,小鸟说早早早".to_string(),
None,
None,
2,
100,
10,
2.0,
false,
6.0,
)?;
let _ = save_wav(&generate, "voxcpm.wav")?;
Ok(())
}git clone https://github.com/jhqxxx/aha.git
cd aha
# 修改测试用例中模型路径
# 运行 PaddleOCR-Vl 示例
cargo test -F cuda paddleocr_vl_generate -r -- --nocapture
# 运行 Hunyuan-OCR 示例
cargo test -F cuda hunyuan_ocr_generate -r -- --nocapture
# 运行 DeepSeek-OCR 示例
cargo test -F cuda deepseek_ocr_generate -r -- --nocapture
# 运行 Qwen3VL 示例
cargo test -F cuda qwen3vl_generate -r -- --nocapture
# 运行 MiniCPM4 示例
cargo test -F cuda minicpm_generate -r -- --nocapture
# 运行 VoxCPM 示例
cargo test -F cuda voxcpm_generate -r -- --nocapture.
├── Cargo.toml
├── README.md
├── src
│ ├── chat_template
│ ├── models
│ │ ├── common
│ │ ├── deepseek_ocr
│ │ ├── hunyuan_ocr
│ │ ├── minicpm4
│ │ ├── paddleocr_vl
│ │ ├── qwen2_5vl
│ │ ├── qwen3vl
│ │ ├── voxcpm
│ │ └── mod.rs
│ ├── position_embed
│ ├── tokenizer
│ ├── utils
│ ├── api.rs
│ └── lib.rs
└── tests
├── test_hunyuan_ocr.rs
├── test_deepseek_ocr.rs
├── test_minicpm4.rs
├── test_paddleocr_vl.rs
├── test_qwen2_5vl.rs
└── test_voxcpm.rs
- 在src/models/创建新模型文件
- 在src/models/mod.rs中导出
- 在tests/中添加测试和示例
本项目采用 Apache License, Version 2.0 许可证 - 查看 LICENSE 文件了解详情。
- Candle - 优秀的 Rust 机器学习框架
- 所有模型的原作者和贡献者
- 查看 Issues 是否已有解决方案
- 提交新的 Issue,包含详细描述和复现步骤
- 支持GLM-ASR-Nano-2512 模型
- 支持RMGB2.0 模型
- 支持VoxCPM1.5 模型
- 添加PaddleOCR-VL 模型
- 添加 Hunyuan-OCR 模型
- 添加 DeepSeek-OCR 模型
- 添加 Qwen3VL 模型
- 初始版本发布
- 支持 Qwen2.5VL, MiniCPM4, VoxCPM 模型