Modelle für Snapdragon NPU-Geräte erstellen

Diese Anleitungen zeigen die Generierung des Llama 3.2 3B Modells. Sie können dieselben Anleitungen verwenden, um das Phi-3.5 mini Instruct-Modell zu generieren.

Einrichtung und Voraussetzungen

  1. Registrieren Sie sich für den Zugriff auf das Qualcomm AI Hub

    Konfigurieren Sie nach der Registrierung Ihr Qualcomm AI Hub API-Token

    Befolgen Sie die hier gezeigten Anweisungen: [https://app.aihub.qualcomm.com/docs/hub/getting_started.html#getting-started]

  2. Installieren Sie das Qualcomm AI Engine Direct SDK

  3. Registrieren Sie sich, um Zugriff auf HuggingFace-Gewichte für Llama-3.2-3B zu erhalten

    Dieser Schritt ist nur für Modelle erforderlich, die die Unterzeichnung einer Lizenzvereinbarung erfordern.

  4. Richten Sie eine Linux-Umgebung ein

    Es gibt Schritte in diesem Prozess, die nur unter Linux ausgeführt werden können. Eine WSL-Umgebung reicht aus.

    Installieren Sie libc++=dev in der Linux-Umgebung.

    sudo apt get libc++-dev
    

Qualcomm-Kontext-Binärdateien generieren

  1. Modell vom Qualcomm AI Hub installieren

    python -m pip install -U qai_hub_models[llama-v3-2-3b-chat-quantized]
    
  2. QNN-Kontext-Binärdateien generieren

    Generieren Sie die QNN-Binärdateien. Dieser Schritt lädt das Modell und die Binärdateien zum und vom Qualcomm AI Hub herunter und hoch und kann je nach Upload-Geschwindigkeit mehrere Stunden dauern.

    python -m qai_hub_models.models.llama_v3_2_3b_chat_quantized.export --device "Snapdragon X Elite CRD" --skip-inferencing --skip-profiling --output-dir .
    

    Weitere Informationen zu diesem Schritt finden Sie unter: [https://github.com/quic/ai-hub-apps/tree/main/tutorials/llm_on_genie].

ONNX-Wrapper-Modelle generieren

  1. Laden Sie das folgende Skript aus dem onnxruntime-Repository herunter

    curl -LO https://raw.githubusercontent.com/microsoft/onnxruntime/refs/heads/main/onnxruntime/python/tools/qnn/gen_qnn_ctx_onnx_model.py
    
  2. Installieren Sie das onnx-Paket

    pip install onnx
    
  3. Extrahieren Sie die QNN-Grapheninformationen aus der QNN-Kontext-Binärdatei, einmal für jedes Modell (.bin-Datei)

    Hinweis: Dieses Skript läuft nur unter Linux mit installiertem libc++-dev (aus dem Einrichtungsabschnitt)

    for bin_file in *.bin; do $QNN_SDK_ROOT/bin/x86_64-linux-clang/qnn-context-binary-utility --context_binary="$bin_file" --json_file="${bin_file%.bin}.json"; done
    
  4. Generieren Sie die ONNX-Wrapper-Modelle

    Führen Sie den folgenden Befehl aus, um die ONNX-Wrapper-Modelle zu generieren

    Unter Linux mit Bash

    for bin_file in *.bin; do python gen_qnn_ctx_onnx_model.py -b "$bin_file" -q "${bin_file%.bin}.json" --quantized_IO --disable_embed_mode; done
    

    Unter Windows mit PowerShell

    Get-ChildItem -Filter "*.bin" | ForEach-Object {
      $binFile = $_.Name
      $jsonFile = "$($binFile -replace '\.bin$', '.json')"
      python gen_qnn_ctx_onnx_model.py -b $binFile -q $jsonFile --quantized_IO --disable_embed_mode
    }
    

Weitere Assets hinzufügen

Assets von [https://huggingface.co/onnx-community/Llama-3.2-3B-instruct-hexagon-npu-assets] herunterladen

Modell-Assets überprüfen

Nach Abschluss der obigen Anweisungen sollten Sie die folgenden Modell-Assets haben

  • genai_config.json
  • tokenizer.json
  • tokenizer_config.json
  • special_tokens_map.json
  • quantizer.onnx
  • dequantizer.onnx
  • position-processor.onnx
  • ein Satz von Transformer-Modell-Binärdateien
    • Qualcomm-Kontext-Binärdateien (*.bin)
    • Kontext-Binärdateien-Metadaten (*.json)
    • ONNX-Wrapper-Modelle (*.onnx)