TurboPilot ist ein selbstgehosteter Copilot-Klon, der die Bibliothek hinter llama.cpp nutzt, um das Salesforce-Codegen-Modell mit 6 Milliarden Parametern in 4 GB RAM auszuführen. Es basiert stark auf dem Fauxpilot-Projekt und ist davon inspiriert.
NB: Dies ist derzeit ein Proof of Concept und kein stabiles Tool. Die automatische Vervollständigung ist in dieser Version des Projekts recht langsam. Fühlen Sie sich frei, damit zu spielen, aber Ihre Laufleistung kann variieren.
Unterstützt jetzt StableCode 3B. Instruct verwenden Sie einfach die quantisierten GGML-Modelle von TheBloke und legen Sie -m stablecode
fest.
Neu: Überarbeitet + vereinfacht : Der Quellcode wurde verbessert, um das Erweitern und Hinzufügen neuer Modelle zu Turbopilot zu erleichtern. Das System unterstützt jetzt mehrere Modellvarianten
Neu: Wizardcoder-, Starcoder- und Santacoder-Unterstützung – Turbopilot unterstützt jetzt modernste lokale Code-Vervollständigungsmodelle, die mehr Programmiersprachen und „Fill-in-the-Middle“-Unterstützung bieten.
PRs zu diesem Projekt und dem entsprechenden GGML-Fork sind herzlich willkommen.
Machen Sie einen Fork, nehmen Sie Ihre Änderungen vor und öffnen Sie dann eine PR.
Der einfachste Weg, das Projekt auszuprobieren, besteht darin, sich die vorverarbeiteten Modelle zu schnappen und dann den Server in Docker auszuführen.
Sie haben 2 Möglichkeiten, das Modell zu erhalten
Sie können die vorkonvertierten, vorquantisierten Modelle von Huggingface herunterladen.
Für Benutzer mit wenig RAM (4–8 GiB) empfehle ich StableCode und für Benutzer mit hoher Leistung (16+ GiB RAM, separate GPU oder Apple-Silizium) empfehle ich WizardCoder.
Turbopilot unterstützt weiterhin die Codegen-Modelle der ersten Generation ab v0.0.5
und frühere Builds. Allerdings müssen alte Modelle neu quantisiert werden.
Einen vollständigen Katalog der Modelle finden Sie unter MODELS.md.
Befolgen Sie diese Anleitung, wenn Sie selbst mit der Quantisierung der Modelle experimentieren möchten.
Laden Sie die neueste Binärdatei herunter und extrahieren Sie sie in den Stammordner des Projekts. Wenn für Ihr Betriebssystem keine Binärdatei bereitgestellt wird oder Sie sie lieber selbst erstellen möchten, befolgen Sie die Buildanweisungen
Laufen:
./turbopilot -m starcoder -f ./models/santacoder-q4_0.bin
Die Anwendung sollte einen Server auf Port 18080
starten. Sie können dies mit der Option -p
ändern. Dies ist jedoch der Standardport, mit dem vscode-fauxpilot versucht, eine Verbindung herzustellen. Daher möchten Sie dies wahrscheinlich in Ruhe lassen, es sei denn, Sie wissen sicher, was Sie tun. Mache ich gerade.
Wenn Sie ein Multi-Core-System haben, können Sie mit der Option -t
steuern, wie viele CPUs verwendet werden – zum Beispiel auf meinem AMD Ryzen 5000, der über 6 Kerne/12 Threads verfügt, die ich verwende:
./codegen-serve -t 6 -m starcoder -f ./models/santacoder-q4_0.bin
Um die alten Codegen-Modelle auszuführen. Ändern Sie stattdessen einfach das Modelltyp-Flag -m
in codegen
.
HINWEIS: Turbopilot 0.1.0 und neuer quantifizieren Ihre Codegen-Modelle, alte Modelle von v0.0.5 und älter. Ich arbeite an der Bereitstellung aktualisierter quantisierter Codegen-Modelle
Sie können Turbopilot auch über das hier bereitgestellte vorgefertigte Docker-Image ausführen
Sie müssen die Modelle weiterhin separat herunterladen und dann Folgendes ausführen:
docker run --rm -it
-v ./models:/models
-e THREADS=6
-e MODEL_TYPE=starcoder
-e MODEL= " /models/santacoder-q4_0.bin "
-p 18080:18080
ghcr.io/ravenscroftj/turbopilot:latest
Ab Version 0.0.5 unterstützt Turbocode nun CUDA-Inferenz. Um den cuda-fähigen Container auszuführen, muss nvidia-docker aktiviert sein, die mit cuda markierten Versionen verwenden und --gpus=all
an Docker mit Zugriff auf Ihre GPU übergeben, etwa so:
docker run --gpus=all --rm -it
-v ./models:/models
-e THREADS=6
-e MODEL_TYPE=starcoder
-e MODEL= " /models/santacoder-q4_0.bin "
-e GPU_LAYERS=32
-p 18080:18080
ghcr.io/ravenscroftj/turbopilot:v0.2.0-cuda11-7
Wenn Sie über eine ausreichend große GPU verfügen, ermöglicht die Einstellung GPU_LAYERS
, dass Turbopilot die Berechnung vollständig auf Ihre GPU verlagert, anstatt Daten hin und her zu kopieren, was die Inferenz erheblich beschleunigt.
Tauschen Sie ghcr.io/ravenscroftj/turbopilot:v0.1.0-cuda11
gegen ghcr.io/ravenscroftj/turbopilot:v0.2.0-cuda12-0
oder ghcr.io/ravenscroftj/turbopilot:v0.2.0-cuda12-2
aus, wenn Sie es verwenden CUDA 12.0 bzw. 12.2.
Sie benötigen später CUDA 11 oder CUDA 12, um diesen Container auszuführen. Sie sollten /app/turbopilot
aufgelistet sehen können, wenn Sie nvidia-smi
ausführen.
Ab Version 0.0.5 ist eine CUDA-Version der ausführbaren Linux-Datei verfügbar – sie erfordert, dass libcublas 11 auf dem Computer installiert ist – ich werde möglicherweise irgendwann Ubuntu-Debs erstellen, aber im Moment ist die Ausführung in Docker möglicherweise bequemer, wenn Sie a verwenden möchten CUDA-GPU.
Sie können GPU-Offloading über die Option --ngl
verwenden.
Die Unterstützung für das offizielle VS Code Copilot-Plugin ist im Gange (siehe Ticket Nr. 11). Die API sollte nun weitgehend mit OpenAI kompatibel sein.
Um die API von VSCode zu nutzen, empfehle ich das Plugin vscode-fauxpilot. Nach der Installation müssen Sie einige Einstellungen in Ihrer Datei „settings.json“ ändern.
Preferences: Open User Settings (JSON)
{
... // other settings
"fauxpilot.enabled" : true ,
"fauxpilot.server" : " http://localhost:18080/v1/engines " ,
}
Jetzt können Sie Fauxpilot mit CTRL + SHIFT + P
aktivieren und Enable Fauxpilot
auswählen
Das Plugin sendet API-Aufrufe an den laufenden codegen-serve
-Prozess, wenn Sie einen Tastendruck ausführen. Anschließend wird auf den Abschluss jeder Anfrage gewartet, bevor weitere Anfragen gesendet werden.
Sie können Anfragen an http://localhost:18080/v1/engines/codegen/completions
stellen, die sich genau wie derselbe Copilot-Endpunkt verhalten.
Zum Beispiel:
curl --request POST
--url http://localhost:18080/v1/engines/codegen/completions
--header ' Content-Type: application/json '
--data ' {
"model": "codegen",
"prompt": "def main():",
"max_tokens": 100
} '
Sollte Ihnen so etwas bescheren:
{
"choices" : [
{
"logprobs" : null ,
"index" : 0 ,
"finish_reason" : " length " ,
"text" : " n """ Main entry point for this script. """n logging.getLogger().setLevel(logging.INFO) n logging.basicConfig(format=('%(levelname)s: %(message)s')) nn parser = argparse.ArgumentParser( n description=__doc__, n formatter_class=argparse.RawDescriptionHelpFormatter, n epilog=__doc__) n "
}
],
"created" : 1681113078 ,
"usage" : {
"total_tokens" : 105 ,
"prompt_tokens" : 3 ,
"completion_tokens" : 102
},
"object" : " text_completion " ,
"model" : " codegen " ,
"id" : " 01d7a11b-f87c-4261-8c03-8c78cbe4b067 "
}