ONNX 模型库
返回模型

说明文档

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               # 其他模型权重

⚠️ 重要说明

  1. 需要所有文件:将所有文件保持在同一目录中。model.onnx 文件引用了外部数据文件。

  2. 内存要求:确保至少有 4GB 可用 RAM。

  3. 高通 NPU 设置:要在高通硬件上获得最佳性能:

# 使用 QNN 执行提供程序(如果可用)
providers = ['QNNExecutionProvider', 'CPUExecutionProvider']
session = ort.InferenceSession(\"model.onnx\", providers=providers)

🚀 在高通设备上部署

Windows on ARM

  1. 将所有文件复制到您的设备
  2. 安装 ONNX Runtime:pip install onnxruntime
  3. 运行测试脚本进行验证

Android(使用 QNN SDK)

  1. 使用支持 QNN 的 ONNX Runtime Mobile
  2. 将所有文件打包到您的应用包中
  3. 使用 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