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
-
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]
-
Installieren Sie das Qualcomm AI Engine Direct SDK
-
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.
-
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
-
Modell vom Qualcomm AI Hub installieren
python -m pip install -U qai_hub_models[llama-v3-2-3b-chat-quantized] -
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
-
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 -
Installieren Sie das
onnx-Paketpip install onnx -
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 -
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; doneUnter 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.jsontokenizer.jsontokenizer_config.jsonspecial_tokens_map.jsonquantizer.onnxdequantizer.onnxposition-processor.onnx- ein Satz von Transformer-Modell-Binärdateien
- Qualcomm-Kontext-Binärdateien (
*.bin) - Kontext-Binärdateien-Metadaten (
*.json) - ONNX-Wrapper-Modelle (
*.onnx)
- Qualcomm-Kontext-Binärdateien (