Skip to content

sophgo/LLM-TPU

Repository files navigation

SOPHGO

LLM-TPU

在算能 SOPHGO TPU 上一键部署主流大语言模型与多模态模型

Deploy LLMs & VLMs on SOPHGO BM1684X / BM1688 / CV186X with a single command

Python Platform Chip License Contributors Issues Stars

快速开始 · 模型支持 · 编译流程 · 进阶应用 · FAQ · 官网


📰 最新动态

日期 更新内容
🔥 2026.04.15 Qwen3.5 已支持 BM1684X / BM1688,提供 Python 与 C++ Demo,支持图片与视频 → 查看
2025.10.15 Qwen3-VL 已支持 BM1684X / BM1688,Python / C++ Demo,支持图片与视频 → 查看
2025.05.22 InternVL3 已支持 BM1684X / BM1688,支持图片与视频 → 查看
2025.04.30 Qwen2.5-VL 已支持 BM1684X / BM1688,Python / C++ Demo → 查看
2025.04.29 推理模型 Qwen3 已支持 BM1684X / BM1688 → 查看
2025.03.07 QwQ-32BDeepSeek-R1-Distill-Qwen-32B 多芯 Demo 已适配 → 查看
2025.02.05 适配 DeepSeek-R1-Distill-Qwen 系列 (1.5B / 7B / 14B) → 查看

📖 项目介绍

LLM-TPUSOPHGO 官方维护的开源项目,致力于在算能 BM1684X / BM1688 / CV186X 系列 TPU 芯片上部署主流的 生成式 AI 模型(LLM / VLM)。

   ┌──────────────┐    tpu-mlir    ┌──────────────┐    tpu-runtime   ┌──────────────────┐
   │  HuggingFace │ ─────────────► │   bmodel     │ ───────────────► │  PCIE / SoC 部署  │
   │   原始权重    │   llm_convert  │  (量化模型)  │    Python / C++  │  BM1684X / 1688  │
   └──────────────┘                └──────────────┘                  └──────────────────┘
  • 🚀 一键编译llm_convert.py 直接将 HuggingFace 权重导出为 bmodel
  • 🧩 模型丰富:覆盖 Qwen / Llama / DeepSeek / InternVL / MiniCPM / Phi / ChatGLM 等数十种模型
  • 🎯 多模态:支持文本、图像、视频、音频等多模态推理
  • 高效推理:支持 AWQ/GPTQ等 量化模型、动态编译、KV Cache、多芯并行
  • 🛠️ 双语言 Demo:常用模型会提供 Python 与 C++ 参考实现
  • 📦 开箱即用:可直接下载预编译 bmodel,无需自行编译

编译模型需要配置 TPU-MLIR 环境(Docker 或源码均可),亦可直接使用各 Demo 中预编译的 bmodel。完整模型列表见 models/


🚀 快速开始

只需两步即可在 TPU 设备上跑通一个 LLM:

git clone https://github.com/sophgo/LLM-TPU.git
cd LLM-TPU
./run.sh --model qwen2.5vl

一键运行的 Demo 模型

模型 命令
Qwen3-4B ./run.sh --model qwen3
Qwen2.5-VL-3B ./run.sh --model qwen2.5vl
InternVL3-2B ./run.sh --model internvl3

📘 详细步骤请参考 Quick Start


🧠 模型支持

多模态模型 (VLM / Audio / Vision)

模型 支持芯片 一键编译 备注
Qwen3.5 BM1684X / 1688 Python + C++,图片 / 视频
Qwen3-VL BM1684X / 1688 Python + C++,图片 / 视频
Qwen2.5-VL BM1684X / 1688 Python + C++
Qwen2-VL BM1684X / 1688
InternVL3 BM1684X / 1688 支持视频
Gemma3 BM1684X / 1688
Qwen-VL / InternVL2 / MiniCPM-V-2.6 / Llama3.2-Vision BM1684X / 1688 已部署

LLM 模型

系列 代表模型 一键编译
Qwen Qwen1.5 / Qwen2 / Qwen2.5 / Qwen3 / QwQ-32B
DeepSeek DeepSeek-R1-Distill-Qwen (1.5B / 7B / 14B / 32B)
Llama Llama2 / Llama3
MiniCPM MiniCPM4
Phi Phi-3 / Phi-4
ChatGLM ChatGLM3 / ChatGLM4
其他 Baichuan2 · CodeFuse · Falcon · Gemma / Gemma2 · Mistral · WizardCoder · Yi · Yi34B · LWM-Text-Chat · Megrez · MiniCPM3 · DeepSeek-V2

完整目录索引

仓库 models/ 下当前包含以下模型实现:

LLMBaichuan2 · ChatGLM2 · ChatGLM3 · CodeFuse · DeepSeek-V2 · GLM4 · Llama2 · Llama3 · LWM · Megrez · MiniCPM3 · MiniCPM4 · Mistral · Phi-3 · Qwen · Qwen1_5 · Qwen2 · Qwen2_5 · Qwen3 · RWKV6 · RWKV7 · WizardCoder · Yi · Yi34B

多模态 (Vision / Video / Audio)DriveMM · Gemma3 · GLM4V · InternVL2 · InternVL3 · Janus-Pro · Llama3_2-Vision · MiniCPM-V-2_6 · MiniCPMV4 · Molmo · NVILA · Qwen2_5_Omni · Qwen2_5_VL · Qwen2_Audio · Qwen2_VL · Qwen3_5 · Qwen3_ASR · Qwen3_VL · VILA1_5

完整源码与转换细节请见各子目录。


🧩 LLM 编译流程

Qwen2.5-VL 为例:

1. 下载权重

优先选择 AWQGPTQ 量化版本,精度更优。

git lfs install
git clone git@hf.co:Qwen/Qwen2.5-VL-3B-Instruct-AWQ

2. 配置 TPU-MLIR

参考 TPU-MLIR

3. 一键编译为 bmodel

llm_convert.py \
    -m /workspace/Qwen2.5-VL-3B-Instruct-AWQ \
    -s 2048 --max_input_length 1024 \
    -c bm1684x \
    --max_pixels 672,896 \
    -o qwen2.5vl_3b

llm_convert.py 主要参数

参数 简写 必选 说明
--model_path -m 权重路径
--seq_length -s 最大序列长度
--max_input_length 单次最大输入长度,默认等于 seq_length
--quantize -q 量化类型:w4bf16 / w4f16 / bf16 / f16
--chip -c 目标平台:bm1684x / bm1688 / cv186x
--q_group_size -g 量化组大小,默认 64
--max_pixels VLM 专用,最大像素,如 672,896602112
--do_sample 输出包含采样模型,默认关闭
--out_dir -o 输出目录

💡 量化类型选择:如果是已经量化的模型,不需要指定quantize;未量化模型需要指定。

更多高级参数见 进阶应用

执行完成后,输出目录会生成对应的 bmodelconfig 配置目录,可直接加载推理。


⚙️ 进阶应用

能力说明启用方式样例
动态编译 根据真实输入长度推理,减少短输入延时;多模态变尺寸图像也建议启用 --dynamic Qwen3 · Qwen2.5-VL · MiniCPM4 · InternVL3 · Qwen3-VL
Prefill with KV Cache 历史上下文以 KV Cache 形式保留,显著降低多轮对话延时 --use_block_with_kv
--max_input_length
--max_prefill_kv_length
Qwen3-VL · Qwen2.5-VL · Qwen3 · InternVL3
多芯并行 跨多颗 TPU 并行推理,支持更大模型与更高吞吐 --num_device N Qwen2.5 / 2-8 芯
随机采样 使用 generation.json 配置进行采样(默认 greedy) --do_sample Qwen3 · InternVL3 · MiniCPM4
多任务复用 同一模型加载多次支持多任务,单芯片权重仅加载一次 Qwen2.5-VL multiuser
Prefill 共享复用 长 prompt 仅 prefill 一次,后续对话共享其 KV Cache --share_prompt
--max_prefill_kv_length
Qwen2.5 · Qwen3
模型加密 支持第三方库加密 bmodel,推理时调用解密接口 Qwen · Qwen1.5

🎯 精度优化建议

  1. 优先使用 AWQ / GPTQ 量化模型 转 bmodel,精度损失最小。
  2. 若仅有浮点权重,建议先用 AutoAWQAutoGPTQ 进行 W4A16 量化,再编译为 bmodel。

❓ 常见问题

请参考 LLM-TPU FAQ


🔗 资料链接


🤝 贡献与反馈

欢迎通过 Issues 提交问题或建议,亦欢迎 Pull Request 共建生态。 若您对算能芯片或商业合作感兴趣,可通过 SOPHGO 官网 与我们联系。

📄 License

本项目基于 Apache 2.0 协议开源。第三方组件协议详见 third-party-licenses/

⭐ 如果本项目对你有帮助,欢迎 Star 支持!⭐