RK3588

cropped-2.8.1.png
51miz-P1371254-FUV9P8GX-3840x1711

Die lokale Inferenz großer Sprachmodelle (LLMs) ist ein wachsender Trend in der KI-Entwicklung, da sie Datenschutz, Latenzreduktion und Kosteneffizienz bietet. Der RK3588, ein leistungsstarker System-on-Chip (SoC) von Rockchip, ist dank seiner 6 TOPS NPU (Neural Processing Unit) ideal für solche Aufgaben geeignet.

Warum RK3588 für lokale Inferenz?

Der RK3588 ist ein vielseitiger SoC, der in Geräten wie Single-Board-Computern (SBCs) und IoT-Geräten weit verbreitet ist. Zu seinen Hauptvorteilen gehören:

  • Leistungsstarke NPU: Mit 6 TOPS ermöglicht die NPU des RK3588 eine effiziente Ausführung von KI-Modellen, insbesondere bei quantisierten Modellen.
  • Energieeffizienz: Ideal für Edge-Computing-Szenarien, da der Stromverbrauch niedrig ist.
  • Kosteneffizienz: Im Vergleich zu High-End-GPUs oder Cloud-Lösungen ist der RK3588 eine erschwingliche Option für KI am Edge.
  • Flexibilität: Unterstützt verschiedene Frameworks wie RKLLM, ONNX und TensorFlow Lite.

Diese Eigenschaften machen den RK3588 zu einer hervorragenden Wahl für die lokale Inferenz großer Modelle, insbesondere für Anwendungen wie Chatbots, Textgenerierung oder Sprachübersetzung.

Voraussetzungen für die lokale Inferenz auf RK3588

Bevor wir in den Code eintauchen, sollten folgende Voraussetzungen erfüllt sein:

  1. Hardware:
    • Ein RK3588-basierter Entwicklungsboard (z. B. Radxa Rock 5B oder Orange Pi 5).
    • Mindestens 8 GB RAM (16 GB oder 32 GB für größere Modelle wie Qwen2.5-14B empfohlen).
    • Ausreichend Speicherplatz (mindestens 16 GB für Modell- und Laufzeitdateien).
  2. Software:
    • Ein x86-Linux-Rechner für die Modellkonvertierung mit dem RKLLM-Toolkit.
    • RK3588-Board mit installiertem Linux-Betriebssystem (z. B. Ubuntu 20.04 oder Debian).
    • RKLLM-Laufzeitbibliothek (librkllmrt.so) und NPU-Treiber (Version ≥0.9.6).
    • Ein Hugging Face-Modell, z. B. Qwen2.5-1.5B-Instruct, lokal heruntergeladen.
  3. Optional:
    • Ein Quantisierungsdataset (data_quant.json) zur Verbesserung der Modellgenauigkeit bei Quantisierung.

Schritt-für-Schritt-Anleitung zur lokalen Inferenz

Schritt 1: Modellkonvertierung mit RKLLM

Das RKLLM-Toolkit von Rockchip ermöglicht die Konvertierung von Hugging Face-Modellen in ein optimiertes Format für die RK3588-NPU. Der folgende Python-Code zeigt, wie ein Modell (z. B. Qwen2.5-1.5B-Instruct) konvertiert wird:

 

# Python-Skript zur Konvertierung eines Hugging Face LLM auf RK3588 NPU mit RKLLM

from rkllm.api import RKLLM
import os

# Konfiguration
model_path = ‘./Qwen2.5-1.5B-Instruct’ # Pfad zum Hugging Face-Modell
dataset_path = ‘./data_quant.json’ # Quantisierungsdataset (optional)
export_path = ‘./Qwen2.5-1.5B-Instruct.rkllm’ # Ausgabe-RKLLM-Modellpfad
target_platform = ‘rk3588’ # Zielplattform
quantized_dtype = ‘w8a8’ # Quantisierungstyp (w8a8 oder w4a16)
optimization_level = 1 # Optimierungsstufe (0-3)

# RKLLM initialisieren
llm = RKLLM()

# Hugging Face-Modell laden
ret = llm.load_huggingface(model=model_path, device=’cpu’)
if ret != 0:
print(‘Modell laden fehlgeschlagen!’)
exit(ret)

# Modell für RK3588 erstellen und quantisieren
ret = llm.build(
do_quantization=True,
optimization_level=optimization_level,
quantized_dtype=quantized_dtype,
target_platform=target_platform,
dataset=dataset_path
)
if ret != 0:
print(‘Modell erstellen fehlgeschlagen!’)
exit(ret)

# In RKLLM-Format exportieren
ret = llm.export_rkllm(export_path)
if ret != 0:
print(‘Modell exportieren fehlgeschlagen!’)
exit(ret)

print(f’Modell erfolgreich nach {export_path} exportiert’)

 

python

Erklärung:

  • Modellpfad: Geben Sie den Pfad zum lokal heruntergeladenen Hugging Face-Modell an.
  • Quantisierung: Die w8a8-Quantisierung (8-Bit-Gewichte und Aktivierungen) bietet eine gute Balance zwischen Genauigkeit und Geschwindigkeit.
  • Dataset: Ein optionales Quantisierungsdataset (data_quant.json) verbessert die Genauigkeit. Beispielformat:
    json
    [{"input": "Human: Hallo!\nAssistant: ", "target": "Hallo! Ich bin ein KI-Assistent!"}]
     

Führen Sie das Skript auf einem x86-Linux-Rechner aus, um die .rkllm-Datei zu generieren.

Schritt 2: Inferenz auf dem RK3588-Board

Nach der Konvertierung wird die .rkllm-Datei auf das RK3588-Board übertragen, und die Inferenz erfolgt mit der RKLLM-Laufzeitbibliothek. Der folgende C-Code zeigt, wie die Inferenz implementiert wird:

 

// C-Inferenzcode für RK3588
#include <rkllm_api.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
const char* model_path = “./Qwen2.5-1.5B-Instruct.rkllm”;
RKLLMHandle llm_handle;
int ret;

// RKLLM initialisieren
ret = rkllm_init(&llm_handle, model_path);
if (ret != 0) {
printf(“RKLLM-Initialisierung fehlgeschlagen! Ret = %d\n”, ret);
return -1;
}

// Inferenzparameter festlegen
RKLLMParams params = {0};
params.max_context = 2048;
params.max_new_tokens = 512;

// Inferenz ausführen
const char* input_text = “Hallo, wie kann ich Ihnen heute helfen?”;
char* output_text = NULL;
ret = rkllm_run(llm_handle, input_text, &params, &output_text);
if (ret != 0) {
printf(“Inferenz fehlgeschlagen! Ret = %d\n”, ret);
rkllm_release(llm_handle);
return -1;
}

// Ausgabe anzeigen
printf(“Ausgabe: %s\n”, output_text);

// Aufräumen
free(output_text);
rkllm_release(llm_handle);
return 0;
}

 

Kompilierung und Ausführung:

  1. Übertragen Sie die .rkllm-Datei und den obigen C-Code auf das RK3588-Board.
  2. Stellen Sie sicher, dass die RKLLM-Laufzeitbibliothek (librkllmrt.so) installiert ist.
  3. Kompilieren Sie den Code:
    bash
    gcc -o llm_demo llm_inference.c -I./include -L./lib -lrkllmrt
     
  4. Setzen Sie Umgebungsvariablen:
    bash
    ulimit -Sn 50000
    export LD_LIBRARY_PATH=./lib
     
  5. Führen Sie das Programm aus:
    bash
    ./llm_demo ./Qwen2.5-1.5B-Instruct.rkllm
     

Schritt 3: Optimierung der Leistung

Um die beste Leistung auf dem RK3588 zu erzielen, beachten Sie folgende Tipps:

  • Quantisierung: Verwenden Sie w8a8 für die meisten Modelle, da es die beste Balance zwischen Speicherbedarf und Genauigkeit bietet. Für höhere Geschwindigkeit kann w4a16 getestet werden, jedoch auf Kosten der Genauigkeit.
  • Parameteranpassung:
    • Reduzieren Sie max_context (z. B. auf 1024), um den Speicherverbrauch zu senken.
    • Begrenzen Sie max_new_tokens, um die Inferenzzeit zu verkürzen.
  • Modellwahl: Modelle wie Qwen2.5-1.5B-Instruct sind ideal für die begrenzten Ressourcen des RK3588. Größere Modelle (z. B. Qwen2.5-14B) erfordern mindestens 32 GB RAM und optimierte Quantisierung.
  • NPU-Auslastung: Stellen Sie sicher, dass die NPU vollständig genutzt wird, indem Sie parallele Prozesse vermeiden, die die NPU-Ressourcen teilen.

Häufige Probleme und Lösungen

  1. Problem: Modellkonvertierung schlägt fehl.
    • Lösung: Überprüfen Sie, ob das Hugging Face-Modell korrekt heruntergeladen wurde und das RKLLM-Toolkit auf die neueste Version aktualisiert ist.
  2. Problem: Inferenz ist langsam oder liefert ungenaue Ergebnisse.
    • Lösung: Testen Sie eine stärkere Quantisierung (w4a16) oder fügen Sie ein Quantisierungsdataset hinzu, um die Genauigkeit zu verbessern.
  3. Problem: Speicherfehler auf dem RK3588.
    • Lösung: Reduzieren Sie max_context oder verwenden Sie ein kleineres Modell. Stellen Sie sicher, dass genügend RAM verfügbar ist.

Best Practices für Entwickler

  • Modellkompatibilität: Nicht alle Modelle sind direkt mit RKLLM kompatibel. Modelle wie Qwen2.5 oder LLaMA-Varianten funktionieren gut, während komplexere Architekturen (z. B. Stable Diffusion) zusätzliche Optimierungen erfordern.
  • Testing: Führen Sie umfassende Tests mit verschiedenen Eingaben durch, um die Stabilität und Genauigkeit des Modells zu gewährleisten.
  • Dokumentation: Halten Sie die Parameter und Optimierungsstufen fest, um spätere Anpassungen zu erleichtern.
  • Updates: Überwachen Sie regelmäßig Updates der RKLLM-Laufzeit und NPU-Treiber, um von Leistungsverbesserungen zu profitieren.

 

Die lokale Inferenz großer Modelle auf dem RK3588 ist eine leistungsstarke Lösung für KI-Anwendungen am Edge. Mit dem RKLLM-Toolkit und optimiertem Code können Entwickler Modelle wie Qwen2.5-1.5B-Instruct effizient bereitstellen und anpassen. Durch die richtige Quantisierung und Parameteroptimierung lässt sich die Leistung maximieren, selbst bei begrenzten Ressourcen. Dieser Artikel bietet eine vollständige Anleitung, die sowohl Anfängern als auch erfahrenen Entwicklern hilft, KI-Projekte auf dem RK3588 erfolgreich umzusetzen.

Verwandte Beiträge

滚动至顶部