Browse by type
适用于移动端和边缘设备的快速、轻量级多模态大语言模型推理引擎
[2025 年 8 月 28 日] 即将停止对 MLLM V1 的支持。在弃用前,V1 将集成以下功能:GPT-OSS。随后 MLLM 将迁移至 V2(可在 V2 分支查看)。V2 将带来全新的能力:
更加 Pythonic 的模型编写方式,支持即时执行(eager execution)
我们已对 Android 端实现进行了重构,采用了一种稳健的、完全在设备端运行的 Client-Server 架构。
|
|
不同于传统的 JNI 集成方式,我们引入了一个基于 Golang 构建的 In-App Server 层(mllm_server.aar)。该设计将 UI 与高负载的推理计算解耦。
MLLM 是 AI 推理技术栈的核心枢纽。它向上连接推测解码、剪枝、量化等优化算法,向下对接用于硬件执行的 AI 编译器 / 运行时层(如 CANN、CUDA、MLIR)。图中以红色标注的 MLLM 独特地打通了算法创新与硬件优化,使其成为连接软件生态与硬件加速的关键节点。

mllm 框架可以与主流社区框架的模型检查点无缝集成。通过 mllm-convertor,可直接导入 PyTorch 和 SafeTensors 模型,对其进行量化并转换为 mllm 格式,随后由 mllm Runtime 加载并执行。

| Model(v2) | CPU | Hexagon NPU
INT8 | |-----------------------------------------------------------------------------|------|-----------------------| | Qwen3-0.6B | ✔️ w4a8 | | | Qwen3-1.7B | ✔️ w4a8 | W4A16-SM8650 | | DeepSeek-OCR | ✔️ w4a8 | | | SmolLM3| ✔️ w4a8 | | | Qwen2-VL-2B-Instruct|✔️ w4a8 || | Qwen2-VL-7B-Instruct|✔️ w4a8|| | Qwen2.5-VL-3B-Instruct|✔️ w4a8|| | Qwen2.5-VL-7B-Instruct|✔️ w4a8||
| Model(v1) | CPU
FP32 | CPU
INT4 | Hexagon NPU
INT8 |
|-----------------------------------------------------------------------------|------|-----|----------------------------|
| LLaMA 2 7B | ✔️ | ✔️ | |
| LLaMA 3 1B | ✔️ | ✔️ | |
| LLaMA 3 3B | ✔️ | ✔️ | |
| Alpaca 7B | ✔️ | ✔️ | |
| TinyLLaMA 1.1B | ✔️ | ✔️ | |
| LLaVA 7B | ✔️ | ✔️ | |
| Gemma 2B | ✔️ | ✔️ | |
| Gemma 2 2B | ✔️ | ✔️ | |
| Qwen 1.5 0.5B | ✔️ | ✔️ | ✔️ |
| Qwen 1.5 1.8B | ✔️ | ✔️ | ✔️ |
| Qwen 2.5 1.5B | ✔️ | ✔️ | ✔️ |
| Qwen 3 0.6B | ✔️ | ✔️ | |
| Mistral 7B | ✔️ | ✔️ | |
| Yi 6B | ✔️ | ✔️ | |
| StableLM 2 1.6B | ✔️ | ✔️ | |
| OPT 1.3B | ✔️ | ✔️ | |
| Phi 3 mini 3.8B | ✔️ | ✔️ | |
| MiniCPM 2B | ✔️ | ✔️ | |
| MiniCPM 3 4B | ✔️ | ✔️ | |
| MiniCPM MoE 8x2B | ✔️ | ✔️ | |
| SmolLM 1.7B | ✔️ | ✔️ | |
| DCLM 1B | ✔️| ✔️| |
| OpenELM 1.1B | ✔️| ✔️| |
PhoneLM 1.5B | ✔️| ✔️| ✔️|
| Fuyu 8B | ✔️ | ✔️ |
| Vision Transformer | ✔️ | ✔️ |
| CLIP | ✔️ | ✔️ |
| ImageBind (3 modalities) | ✔️ | ✔️ |
| LLaVA 7B | ✔️ | ✔️ |
| Phi-3-Vision | ✔️ | ✔️ |
| Qwen2-VL 2B | ✔️ | ✔️ | ✔️ |
| Device | OS | CPU | GPU | NPU |
|---|---|---|---|---|
| PC-X86-w/oAVX512 | Ubuntu 22.04 | - | - | |
| Nvidia A40 | Ubuntu 22.04 | - | - | |
| Xiaomi14-8Elite | Android 15 | - | ||
| OnePlus13-8Elite | Android 15 | - | ||
| MacMini-M4 | MacOS 15.5 | - | - | |
| OrangePi AI Pro(310B) | Ubuntu 22.04 | - | - | |
| OrangePi AI Studio(310P) | Ubuntu 22.04 | - | - |
我们为 MLLM C++ SDK 开发了一个 C SDK 包装器,以实现与 Golang 的无缝集成。基于该包装器,我们用 Golang 构建了 mllm-cli 命令行工具,该工具即将发布。
以下示例展示了如何使用 mllm 框架的 C++ API 对多模态视觉-语言模型(VLM),具体为 Qwen2-VL,进行推理。流程包括加载模型配置、初始化分词器、加载预训练权重、处理图文输入,以及执行流式文本生成。
auto qwen2vl_cfg = Qwen2VLConfig(config_path);
auto qwen2vl_tokenizer = Qwen2VLTokenizer(tokenizer_path);
auto qwen2vl = Qwen2VLForCausalLM(qwen2vl_cfg);
qwen2vl.load(mllm::load(model_path));
auto inputs = qwen2vl_tokenizer.convertMessage({.prompt = prompt_text, .img_file_path = image_path});
for (auto& step : qwen2vl.chat(inputs)) {
std::wcout << qwen2vl_tokenizer.detokenize(step.cur_token_id) << std::flush;
}
更多示例可见 示例
MLLM 提供了高度 Python 风格的 API,以简化用户的模型实现。例如,下面是一个简洁的 VisionMLP 实现示例:
```c++ class VisionMlp final : public nn::Module { int32_t dim_; int32_t hidden_dim_;
nn::QuickGELU act_; nn::Linear fc_1_; nn::Linear fc_2_;
public: VisionMlp() = default;
inline VisionMlp(const std::string& name, const Qwen2VLConfig& cfg) : nn::Module(name) { dim_ = cfg.visual_embed_dim; hidden_dim_ = cfg.visual_embed_dim * cfg.visual_mlp_ratio;
fc_1_ = reg<nn::Linear>("fc1", dim_, hidden_dim_, true, cfg.linear_impl_type);
fc_2_ = reg<nn::Linear>("fc2", hidden_dim_, dim_, true, cfg.linear_impl_type);
act_ = reg<nn::QuickGELU>("act");
}
std::vector forward(const std::vector& inputs, const std::vector& args)