6,213
社区成员
发帖
与我相关
我的任务
分享在 AI Edge Box 中使用 QCS 系列 SoC 时,典型的开发流程包含哪些步骤?
搭建 ExecuTorch 与 Qualcomm 硬件的开发环境
# 以 LLM(Llama-3.2 1B)为例
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.2-1B",
torch_dtype=torch.float16 # 端侧推荐 FP16/INT8,减少 QCS 内存占用
).eval()
torch.save(model, "llama_1b.pt") # 保存 PyTorch 模型
获取并导出适配 Edge 场景的 PyTorch 模型
获取模型:从 Hugging Face/Diffusers 加载目标模型(如用于边缘推理的 LLM、Diffusion 模型),示例:
# 以 LLM(Llama-3.2 1B)为例
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.2-1B",
torch_dtype=torch.float16 # 端侧推荐 FP16/INT8,减少 QCS 内存占用
).eval()
torch.save(model, "llama_1b.pt") # 保存 PyTorch 模型
精度统一:若模型为 FP32,需转换为 FP16/INT8(文档 2 提示 “端侧部署建议统一精度”)。
将 PyTorch 模型转换为 QCS NPU 可执行格式
1.导出 ExecuTorch 计算图(PTE/ET 文件):
import torch
from executorch.exir import to_edge
from executorch.export import export
# 加载 PyTorch 模型
model = torch.load("llama_1b.pt").eval()
# 构造示例输入(匹配模型输入规格,如 LLM 的 token 序列)
example_input = (torch.randint(0, 1000, (1, 32)),)
# 导出 ExecuTorch IR(PTE 格式,适用于 NPU 优化)
pte = export(model, example_input, export_params=True)
with open("llama_1b_fp16.pte", "wb") as f:
f.write(pte)
2.NPU 特化优化:通过 partition 工具实现图分区(将可加速算子分配给 NPU)、节点融合:
from executorch.backends.hexagon import HexagonBackendConfig
from executorch.optimize import partition
config = HexagonBackendConfig(
enable_conv_fusion=True, # 算子融合
enable_layernorm_fusion=True
)
# 生成 NPU 优化后的 PTE 文件
optimized_pte = partition("llama_1b_fp16.pte", config)
with open("llama_1b_qcs.pte", "wb") as f:
f.write(optimized_pte)
使用 etconvert 工具将优化后的 PTE/ET 文件转换为 QCS 平台专用格式
调用 ExecuTorch Runtime 与 Hexagon Backend 执行推理
# run_inference.py
import torch
from executorch.runtime import Runtime
from executorch.backends.hexagon.backend import HexagonBackend
# 1. 加载 NPU 模型
runtime = Runtime("/data/local/tmp/llama_1b_qcs.et")
# 2. 绑定 Hexagon NPU 后端
HexagonBackend().configure(runtime)
model = runtime.load()
# 3. 构造输入(如 LLM 的 token 序列)
input_tokens = torch.randint(0, 1000, (1, 32))
# 4. 执行推理
output = model.run({"input": input_tokens})["output"]
# 5. 输出结果(如 LLM 生成的 token 序列)
print("Inference Output Shape:", output.shape)