返回模型
说明文档
Phi-3.5 Mini Instruct - 量化 ONNX 模型(整合版)
🚀 模型概述
这是微软的 Phi-3.5-mini-instruct 模型,已量化为 INT8 并针对高通骁龙 NPU 部署进行了优化。此版本将所有文件整合到单个目录中,便于部署。
📊 模型规格
- 基础模型:microsoft/Phi-3.5-mini-instruct
- 大小:7292.4 MB(从原始 7.3GB 量化)
- 压缩率:体积减少 50%
- 格式:ONNX INT8 量化(含外部数据)
- 文件数:共 203 个文件
- 目标平台:高通骁龙 NPU
🔧 快速开始
安装
pip install onnxruntime transformers numpy
基本用法
import onnxruntime as ort
from transformers import AutoTokenizer
import numpy as np
# 加载分词器
tokenizer = AutoTokenizer.from_pretrained(\".\", trust_remote_code=True)
# 加载 ONNX 模型
session = ort.InferenceSession(\"model.onnx\")
# 准备输入
text = \"Hello, what is artificial intelligence?\"
inputs = tokenizer(text, return_tensors=\"np\", max_length=64, truncation=True, padding=\"max_length\")
# 运行推理
outputs = session.run(None, {\"input_ids\": inputs[\"input_ids\"]})
logits = outputs[0]
print(f\"Input: {text}\")
print(f\"Output shape: {logits.shape}\")
文本生成示例
def generate_response(prompt, max_new_tokens=50):
# 分词
inputs = tokenizer(prompt, return_tensors=\"np\", max_length=64, truncation=True)
input_ids = inputs[\"input_ids\"]
generated_tokens = []
for _ in range(max_new_tokens):
# 获取模型预测
outputs = session.run(None, {\"input_ids\": input_ids})
logits = outputs[0]
# 获取下一个 token(贪婪解码)
next_token_id = np.argmax(logits[0, -1, :])
generated_tokens.append(next_token_id)
# 遇到 EOS 则停止
if next_token_id == tokenizer.eos_token_id:
break
# 将新 token 添加到输入中,用于下一次迭代
input_ids = np.concatenate([input_ids, [[next_token_id]]], axis=1)
# 解码响应
response = tokenizer.decode(generated_tokens, skip_special_tokens=True)
return response
# 示例
response = generate_response(\"What is machine learning?\")
print(f\"Response: {response}\")
🧪 测试脚本
#!/usr/bin/env python3
import onnxruntime as ort
from transformers import AutoTokenizer
import numpy as np
def test_model():
print(\"🔄 加载模型中...\")
tokenizer = AutoTokenizer.from_pretrained(\".\", trust_remote_code=True)
session = ort.InferenceSession(\"model.onnx\")
test_cases = [
\"Hello, how are you?\",
\"What is the capital of France?\",
\"Explain artificial intelligence in simple terms.\"
]
for i, text in enumerate(test_cases, 1):
print(f\"\n{i}. 输入: {text}\")
inputs = tokenizer(text, return_tensors=\"np\", max_length=64,
truncation=True, padding=\"max_length\")
outputs = session.run(None, {\"input_ids\": inputs[\"input_ids\"]})
print(f\" ✅ 输出形状: {outputs[0].shape}\")
print(\"\n🎉 所有测试通过!\")
if __name__ == \"__main__\":
test_model()
⚡ 性能预期
- 推理速度:在骁龙 NPU 上比 CPU 快 2-3 倍
- 内存占用:需要约 4GB RAM
- 每秒生成 Token 数:在骁龙 8cx Gen 2 上为 8-15
- 延迟:短序列小于 100ms
📁 文件结构
model.onnx # 主 ONNX 模型文件
tokenizer.json # 分词器词表
tokenizer_config.json # 分词器配置
config.json # 模型配置
onnx__MatMul_* # 外部权重数据文件(129 个文件)
*.weight # 其他模型权重
⚠️ 重要说明
-
需要所有文件:将所有文件保持在同一目录中。model.onnx 文件引用了外部数据文件。
-
内存要求:确保至少有 4GB 可用 RAM。
-
高通 NPU 设置:要在高通硬件上获得最佳性能:
# 使用 QNN 执行提供程序(如果可用)
providers = ['QNNExecutionProvider', 'CPUExecutionProvider']
session = ort.InferenceSession(\"model.onnx\", providers=providers)
🚀 在高通设备上部署
Windows on ARM
- 将所有文件复制到您的设备
- 安装 ONNX Runtime:
pip install onnxruntime - 运行测试脚本进行验证
Android(使用 QNN SDK)
- 使用支持 QNN 的 ONNX Runtime Mobile
- 将所有文件打包到您的应用包中
- 使用 QNN 执行提供程序初始化
🐛 故障排除
模型加载失败:
- 确保所有文件都在同一目录中
- 检查是否有足够的 RAM(4GB+)
推理速度慢:
- 尝试启用图优化:
sess_options = ort.SessionOptions()
sess_options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL
session = ort.InferenceSession(\"model.onnx\", sess_options)
内存不足:
- 减少序列长度:
max_length=32 - 处理更小的批次
📄 许可证
此模型继承 microsoft/Phi-3.5-mini-instruct 的许可证。
为高通骁龙 NPU 部署量化和优化
marcusmi4n/phi-3.5-mini-instruct-quantized-qnn-single-file
作者 marcusmi4n
↓ 2
♥ 0
创建时间: 2025-09-09 20:04:39+00:00
更新时间: 2025-09-09 20:05:16+00:00
在 Hugging Face 上查看文件 (207)
.gitattributes
README.md
_model_model_Constant_2_attr__value
_model_model_Constant_attr__value
added_tokens.json
config.json
model.model.embed_tokens.weight
model.model.layers.0.input_layernorm.weight
model.model.layers.0.post_attention_layernorm.weight
model.model.layers.1.input_layernorm.weight
model.model.layers.1.post_attention_layernorm.weight
model.model.layers.10.input_layernorm.weight
model.model.layers.10.post_attention_layernorm.weight
model.model.layers.11.input_layernorm.weight
model.model.layers.11.post_attention_layernorm.weight
model.model.layers.12.input_layernorm.weight
model.model.layers.12.post_attention_layernorm.weight
model.model.layers.13.input_layernorm.weight
model.model.layers.13.post_attention_layernorm.weight
model.model.layers.14.input_layernorm.weight
model.model.layers.14.post_attention_layernorm.weight
model.model.layers.15.input_layernorm.weight
model.model.layers.15.post_attention_layernorm.weight
model.model.layers.16.input_layernorm.weight
model.model.layers.16.post_attention_layernorm.weight
model.model.layers.17.input_layernorm.weight
model.model.layers.17.post_attention_layernorm.weight
model.model.layers.18.input_layernorm.weight
model.model.layers.18.post_attention_layernorm.weight
model.model.layers.19.input_layernorm.weight
model.model.layers.19.post_attention_layernorm.weight
model.model.layers.2.input_layernorm.weight
model.model.layers.2.post_attention_layernorm.weight
model.model.layers.20.input_layernorm.weight
model.model.layers.20.post_attention_layernorm.weight
model.model.layers.21.input_layernorm.weight
model.model.layers.21.post_attention_layernorm.weight
model.model.layers.22.input_layernorm.weight
model.model.layers.22.post_attention_layernorm.weight
model.model.layers.23.input_layernorm.weight
model.model.layers.23.post_attention_layernorm.weight
model.model.layers.24.input_layernorm.weight
model.model.layers.24.post_attention_layernorm.weight
model.model.layers.25.input_layernorm.weight
model.model.layers.25.post_attention_layernorm.weight
model.model.layers.26.input_layernorm.weight
model.model.layers.26.post_attention_layernorm.weight
model.model.layers.27.input_layernorm.weight
model.model.layers.27.post_attention_layernorm.weight
model.model.layers.28.input_layernorm.weight
model.model.layers.28.post_attention_layernorm.weight
model.model.layers.29.input_layernorm.weight
model.model.layers.29.post_attention_layernorm.weight
model.model.layers.3.input_layernorm.weight
model.model.layers.3.post_attention_layernorm.weight
model.model.layers.30.input_layernorm.weight
model.model.layers.30.post_attention_layernorm.weight
model.model.layers.31.input_layernorm.weight
model.model.layers.31.post_attention_layernorm.weight
model.model.layers.4.input_layernorm.weight
model.model.layers.4.post_attention_layernorm.weight
model.model.layers.5.input_layernorm.weight
model.model.layers.5.post_attention_layernorm.weight
model.model.layers.6.input_layernorm.weight
model.model.layers.6.post_attention_layernorm.weight
model.model.layers.7.input_layernorm.weight
model.model.layers.7.post_attention_layernorm.weight
model.model.layers.8.input_layernorm.weight
model.model.layers.8.post_attention_layernorm.weight
model.model.layers.9.input_layernorm.weight
model.model.layers.9.post_attention_layernorm.weight
model.model.norm.weight
model.onnx
ONNX
model_info.json
onnx__MatMul_6060
onnx__MatMul_6117
onnx__MatMul_6118
onnx__MatMul_6119
onnx__MatMul_6120
onnx__MatMul_6168
onnx__MatMul_6169
onnx__MatMul_6170
onnx__MatMul_6171
onnx__MatMul_6219
onnx__MatMul_6220
onnx__MatMul_6221
onnx__MatMul_6222
onnx__MatMul_6270
onnx__MatMul_6271
onnx__MatMul_6272
onnx__MatMul_6273
onnx__MatMul_6321
onnx__MatMul_6322
onnx__MatMul_6323
onnx__MatMul_6324
onnx__MatMul_6372
onnx__MatMul_6373
onnx__MatMul_6374
onnx__MatMul_6375
onnx__MatMul_6423
onnx__MatMul_6424
onnx__MatMul_6425
onnx__MatMul_6426
onnx__MatMul_6474
onnx__MatMul_6475
onnx__MatMul_6476
onnx__MatMul_6477
onnx__MatMul_6525
onnx__MatMul_6526
onnx__MatMul_6527
onnx__MatMul_6528
onnx__MatMul_6576
onnx__MatMul_6577
onnx__MatMul_6578
onnx__MatMul_6579
onnx__MatMul_6627
onnx__MatMul_6628
onnx__MatMul_6629
onnx__MatMul_6630
onnx__MatMul_6678
onnx__MatMul_6679
onnx__MatMul_6680
onnx__MatMul_6681
onnx__MatMul_6729
onnx__MatMul_6730
onnx__MatMul_6731
onnx__MatMul_6732
onnx__MatMul_6780
onnx__MatMul_6781
onnx__MatMul_6782
onnx__MatMul_6783
onnx__MatMul_6831
onnx__MatMul_6832
onnx__MatMul_6833
onnx__MatMul_6834
onnx__MatMul_6882
onnx__MatMul_6883
onnx__MatMul_6884
onnx__MatMul_6885
onnx__MatMul_6933
onnx__MatMul_6934
onnx__MatMul_6935
onnx__MatMul_6936
onnx__MatMul_6984
onnx__MatMul_6985
onnx__MatMul_6986
onnx__MatMul_6987
onnx__MatMul_7035
onnx__MatMul_7036
onnx__MatMul_7037
onnx__MatMul_7038
onnx__MatMul_7086
onnx__MatMul_7087
onnx__MatMul_7088
onnx__MatMul_7089
onnx__MatMul_7137
onnx__MatMul_7138
onnx__MatMul_7139
onnx__MatMul_7140
onnx__MatMul_7188
onnx__MatMul_7189
onnx__MatMul_7190
onnx__MatMul_7191
onnx__MatMul_7239
onnx__MatMul_7240
onnx__MatMul_7241
onnx__MatMul_7242
onnx__MatMul_7290
onnx__MatMul_7291
onnx__MatMul_7292
onnx__MatMul_7293
onnx__MatMul_7341
onnx__MatMul_7342
onnx__MatMul_7343
onnx__MatMul_7344
onnx__MatMul_7392
onnx__MatMul_7393
onnx__MatMul_7394
onnx__MatMul_7395
onnx__MatMul_7443
onnx__MatMul_7444
onnx__MatMul_7445
onnx__MatMul_7446
onnx__MatMul_7494
onnx__MatMul_7495
onnx__MatMul_7496
onnx__MatMul_7497
onnx__MatMul_7545
onnx__MatMul_7546
onnx__MatMul_7547
onnx__MatMul_7548
onnx__MatMul_7596
onnx__MatMul_7597
onnx__MatMul_7598
onnx__MatMul_7599
onnx__MatMul_7647
onnx__MatMul_7648
onnx__MatMul_7649
onnx__MatMul_7650
onnx__MatMul_7698
onnx__MatMul_7699
onnx__MatMul_7700
onnx__MatMul_7701
special_tokens_map.json
test_model.py
tokenizer.json
tokenizer_config.json