前置条件说明
硬件:CV186AH 核心板(8GB 内存版本,核心是内存容量)、x86 架构 Linux 主机(用于模型量化 / 转换)、核心板供电稳定(建议 5V/3A)。
软件:核心板已烧录算能官方 Ubuntu 20.04 固件(带 TPU 驱动);主机需安装 Docker(简化编译器环境配置)。

第一步:环境搭建(主机 + 核心板)
1.1 主机端(模型转换 / 量化):部署 TPU-MLIR 编译器
TPU-MLIR 是算能官方的模型编译工具,专门适配 CV186AH 的 TPU,优先用 Docker 镜像避免环境冲突:
# 1. 拉取算能TPU-MLIR镜像(国内源)
docker pull sophgo/tpuc_dev:latest
# 2. 启动容器并挂载本地目录(用于存放模型)
mkdir -p ~/cv186ah_llm # 本地模型目录
docker run -it --privileged -v ~/cv186ah_llm:/workspace sophgo/tpuc_dev:latest
# 3. 容器内验证编译器(出现版本信息即成功)
mlir_optimizer --version
1.2 核心板端:安装推理依赖库
通过 SSH 连接 CV186AH 核心板,安装 TPU 推理所需的基础库:
# 1. 更新源并安装依赖
sudo apt update && sudo apt install -y python3-pip libgomp1
# 2. 安装算能官方推理库(适配CV186AH)
pip3 install bmruntime==1.9.0 # 核心推理库
pip3 install transformers==4.36.2 sentencepiece # 模型文本处理
第二步:模型选择与下载(主机端)
优先选择≤2B 参数的轻量模型,Qwen1.5-1.8B 是中文优化版,适配性最佳:
# 进入容器的/workspace目录(已挂载本地~/cv186ah_llm)
cd /workspace
# 1. 下载Qwen1.5-1.8B原始模型(Hugging Face)
git lfs install
git clone https://hf-mirror.com/Qwen/Qwen1.5-1.8B-Chat # 国内镜像加速
# 2. 验证模型文件(确保下载完整,关键文件:config.json、pytorch_model.bin)
ls Qwen1.5-1.8B-Chat/
第三步:模型量化(主机端,核心步骤)
CV186AH 内存有限,必须通过INT4 量化压缩模型(1.8B 模型 INT4 量化后仅约 1GB):
# 1. 准备量化配置文件(创建quant_config.json)
cat > quant_config.json << EOF
{
"quant_type": "INT4", // 量化精度,INT4比INT8更省内存
"batch_size": 1, // 边缘侧单批次推理
"chip": "cv186x" // 指定芯片为CV186AH
}
EOF
# 2. 用TPU-MLIR量化模型(转换为MLIR中间格式+量化)
python3 -m tpumlir_llm.quantize \
--model_path ./Qwen1.5-1.8B-Chat \
--quant_config ./quant_config.json \
--output_path ./qwen1.5-1.8b-int4 # 量化后模型输出目录
量化过程约 5-10 分钟,需确保主机有足够内存(≥16GB);
若报错 “缺少依赖”,在容器内执行:pip3 install -r tpumlir_llm/requirements.txt。
第四步:模型转换为 bmodel(TPU 可执行格式)
bmodel 是算能 TPU 的专属执行格式,需针对 CV186AH 的架构优化:
# 1. 量化模型转bmodel
python3 -m tpumlir_llm.export \
--quant_model ./qwen1.5-1.8b-int4 \
--chip cv186x \
--output ./qwen1.5-1.8b-int4.bmodel
# 2. 验证bmodel文件(大小约1GB,存在即成功)
ls -lh ./qwen1.5-1.8b-int4.bmodel
第五步:核心板部署与推理
5.1 拷贝 bmodel 到核心板
# 主机端:通过scp拷贝(替换为核心板IP)
scp ./qwen1.5-1.8b-int4.bmodel root@192.168.1.100:/root/
5.2 核心板编写推理代码
创建llm_infer.py,实现基础的文本对话推理:
import bmruntime as bmr
import torch
from transformers import AutoTokenizer
# 1. 初始化TPU设备(CV186AH只有1个TPU核心)
dev = bmr.Device(0)
# 2. 加载bmodel模型
model = bmr.Model(dev, "/root/qwen1.5-1.8b-int4.bmodel")
# 3. 加载tokenizer(文本编码/解码)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen1.5-1.8B-Chat", trust_remote_code=True)
# 4. 推理函数
def llm_infer(prompt):
# 编码输入文本
inputs = tokenizer(prompt, return_tensors="pt")
input_ids = inputs["input_ids"].numpy()
# TPU推理(核心步骤)
outputs = model.run({"input_ids": input_ids})
# 解码输出文本
output_ids = outputs["output_ids"][0]
response = tokenizer.decode(output_ids, skip_special_tokens=True)
return response
# 5. 测试对话
if __name__ == "__main__":
prompt = "你好,请介绍一下CV186AH核心板"
print(f"提问:{prompt}")
print(f"回答:{llm_infer(prompt)}")
5.3 运行推理测试
# 核心板端执行
python3 llm_infer.py
首次运行会下载 tokenizer 文件(约 100MB),耐心等待;
正常输出示例:
提问:你好,请介绍一下CV186AH核心板
回答:CV186AH核心板是基于算能CV186AH芯片设计的边缘计算核心板,内置ARM Cortex-A53处理器和专用TPU,AI算力可达7.2 TOPS(INT8),支持8GB LPDDR4内存,适合边缘侧部署轻量级大模型、计算机视觉等AI应用...
第六步:性能优化与常见问题排查
6.1 优化技巧(提升推理速度)
关闭核心板无关进程:sudo systemctl stop bluetooth cron,释放内存 / CPU;
调整推理 batch size 为 1(边缘侧最优);
使用高速 eMMC 存储(避免模型加载慢)。
6.2 常见问题解决
问题现象 | 原因 | 解决方案 |
推理时内存溢出(OOM) | 模型量化精度过高 / 内存不足 | 改用 INT4 量化,关闭其他程序 |
TPU 设备初始化失败 | 驱动未加载 | 重新烧录算能官方固件,执行bm-smi验证 TPU |
推理速度<5 tokens / 秒 | CPU 占用过高 | 绑定进程到 A53 核心:taskset -c 0-3 python3 llm_infer.py |
总结
CV186AH 部署大模型的核心是INT4 量化 + TPU-MLIR 转换,必须先在 x86 主机完成模型量化和 bmodel 转换,再到核心板推理;
优先选择≤2B 参数的轻量模型(如 Qwen1.5-1.8B),7B 模型需严格测试内存,且推理速度会降至 10 tokens / 秒左右;
关键依赖是算能bmruntime库和 TPU 驱动,环境搭建时需确保核心板固件适配 CV186AH 的 TPU。
需求留言: