Ankündigung von MultiLoRA mit ONNX Runtime: Revolutionierung der KI-Anpassung
Von
Dmitri Smirnov, Jambay Kinley, Natalie Kershaw, Parinita Rahi, Pranav Sharma, Devang Patel, Samuel Kemp20. November 2024
Eine neue Ära der KI-Anpassung
Heutige KI-Dienste müssen eine Vielzahl von Nutzern bedienen – jeder mit einzigartigen Anforderungen und Präferenzen. Die Anpassung großer Sprachmodelle für einzelne Kunden oder Sprecher war bisher eine ressourcenintensive und zeitaufwendige Aufgabe.
LoRA-Adapter haben sich als transformativ für die Anpassung großer KI-Modelle für spezifische Aufgaben erwiesen, ohne ressourcenintensive Feinabstimmung zu erfordern. MultiLoRA verändert das Spiel, indem es eine nahtlose Integration von leichten Adaptern ermöglicht, wodurch sich Modelle dynamisch an verschiedene Kontexte und Kunden anpassen können. Mit ONNX Runtime als Grundlage bietet MultiLoRA unübertroffene Leistung und sorgt für eine effiziente Speichernutzung.
Optimierte Integration mit Olive
MultiLoRA nutzt die bestehende Olive-Toolchain zur Generierung angepasster ONNX-Modelle.
Dies gewährleistet
- Eine einheitliche Pipeline zur Erstellung von LoRA-angepassten Modellen.
- Konsistente Handhabung von Versionierung und Metadaten über Modelle und Adapter hinweg.
Durch die Standardisierung auf Olive vereinfacht MultiLoRA Arbeitsabläufe und eliminiert Kompatibilitätsprobleme mit Drittanbietern.
ONNX Runtime-Anpassungen
Vereinfachte Adapteraktivierung und -ladung
Dynamische Aktivierungs-API: Eine einzige API,
SetActiveAdapters(string[] adapters), ermöglicht das Aktivieren oder Deaktivieren von Adaptern zur Laufzeit.- Leerer Eingabe: Setzt das Modell in seinen Basiszustand zurück und läuft ohne Adapter.
- Unterstützung mehrerer Adapter: Aktivieren Sie gleichzeitig mehrere Adapter, um komplexe Kundenanforderungen zu erfüllen.
Generative Schleifenunterstützung
- Aktive Adapter bleiben geladen, solange die
GeneratorParams-Instanz besteht, was eine effiziente Speichernutzung gewährleistet. - Referenzen werden automatisch freigegeben, wenn die Instanz zerstört wird, wodurch Ressourcenlecks vermieden werden.
- Aktive Adapter bleiben geladen, solange die
Adapterverwaltung ohne generative Schleifen
Für Modelle, die nicht an Benutzeranfragen oder generative Prozesse gebunden sind, wird eine neue Run() API eingeführt
Results = Run(RunOptions, input_names[], input_data[], output_names[]); - RunOptions-Klasse: Ermöglicht die nahtlose Ausführung von Basismodellen oder Adapter-erweiterten Varianten.
- Gemeinsames Laden von Adaptern: Adapter werden innerhalb der Modellinstanz gespeichert und ermöglichen eine effiziente Wiederverwendung über mehrere Sitzungen hinweg.
Erweiterung der Sprachbindungen
Die aktuelle MultiLoRA-Implementierung bietet Bindungen für Python, C, C++, C# und Java.
Speicherverwaltung
Unsere Implementierung speicherabbildet LoRA-Parameter von der Festplatte, was die Speicherverwaltung verbessert.
Wie MultiLoRA funktioniert
Generieren Sie die ONNX-Modelle und Adapter
Wenn Sie ein bestehendes Basismodell und einen Adapter im Hugging Face PEFT-Format haben, können Sie mit dem folgenden Befehl automatisch optimierte ONNX-Modelle erstellen, die auf der ONNX Runtime effizient ausgeführt werden können, indem Sie das MultiLoRA-Paradigma nutzen.
olive auto-opt -m <path to model> -a <example adapter> -o <output folder> --device cpu|gpu --provider <execution provider> Sie können dann zusätzliche Adapter hinzufügen, die auf Hugging Face (oder lokaler Festplatte) für dasselbe Basismodell vorhanden sind, indem Sie sie mit ... in das ONNX-Adapterformat konvertieren.
olive convert-adapters -a <adapter> -o <output> Alternativ können Sie Ihren eigenen Adapter trainieren mit
# Step 1: finetune (output a PyTorch model and PEFT adapter)
olive fine-tune --method qlora -m <model> -d <dataset> -o models/ft
# Step 2 : Optimize base model and adapter into ONNX format
olive auto-opt -m models/ft/model -a models/ft/adapter -o <output folder> --device cpu|gpu --provider <execution provider> Ausführen der ONNX-Modelle und Wechseln der Adapter
Adapter laden: Laden Sie Adapter dynamisch für das Basismodell
adapters = oga.Adapters(model) adapters.load("file", "name")Aktiven Adapter festlegen: Wechseln Sie Adapter auf Abruf basierend auf Kundenanfragen
generator.set_active_adapter(adapters, "name")
Vorschau
In Entwicklung
- Batching-Unterstützung: Verbesserung der ONNX Runtime-Kernel für Adapter-bewusstes Batching.
- Erweiterte Bindungen: Einführung von Sprachbindungen für breitere Akzeptanz.
- Speicherfunktionen: Zusätzliche Verbesserungen der Speicherverwaltung.
Ihr Feedback ist wichtig
Während sich MultiLoRA weiterentwickelt, laden wir Entwickler ein, die Funktion zu testen, Einblicke zu geben und ihre Roadmap zu gestalten. Durch gemeinsame Arbeit wollen wir eine flexible, leistungsstarke Grundlage für die KI-Anpassung schaffen.
Schlussfolgerung
MultiLoRA ist mehr als eine Verbesserung der ONNX Runtime – es ist ein Schritt nach vorn, um KI-Systeme modular, anpassungsfähig und zugänglich zu machen. Durch die Bewältigung technischer Herausforderungen wie Speicherverwaltung, Batching und Ineffizienzen im Datenformat legt MultiLoRA den Grundstein für eine neue Ära der KI-Bereitstellung.
Lassen Sie uns gemeinsam die Zukunft der adaptiven KI gestalten. Begleiten Sie uns bei der Erkundung von MultiLoRA mit ONNX Runtime!
Ressourcen
- ONNX Runtime Tutorial: Ausführen mit LoRA-Adaptern
- Python API-Dokumente: Python API
- Olive Beispiel: Finetunen und Bereitstellen