Ich habe hier mit der Neuimplementierung der Bibliothek begonnen: FastTensors
Markieren Sie es bitte, wenn Sie eine GGML-kompatible Implementierung in reinem Go sehen möchten.
Bitte schauen Sie sich mein verwandtes Projekt Booster an
Wir träumen von einer Welt, in der andere ML-Hacker in ihren Homelabs WIRKLICH GROSSE GPT- Modelle basteln, ohne dass GPU-Cluster eine Menge Geld verschlingen.
Der Code des Projekts basiert auf dem legendären ggml.cpp- Framework von Georgi Gerganov, geschrieben in C++ mit der gleichen Einstellung zu Leistung und Eleganz.
Wir hoffen, dass die Verwendung von Golang anstelle einer so mächtigen , aber zu einfachen Sprache eine viel größere Akzeptanz ermöglicht.
Besorgen Sie sich zunächst die Original-LLaMA-Modelle und konvertieren Sie sie selbst, oder laden Sie einfach fertige Modelle herunter:
LLaMA-7B: llama-7b-fp32.bin
LLaMA-13B: llama-13b-fp32.bin
Beide Modelle speichern FP32-Gewichte, sodass Sie für LLaMA-7B mindestens 32 GB RAM (nicht VRAM oder GPU-RAM) benötigen. Verdoppelung auf 64 GB für LLaMA-13B.
Als nächstes erstellen Sie die App-Binärdatei aus Quellen (siehe Anweisungen unten) oder laden Sie einfach eine bereits erstellte herunter:
Windows: llama-go-v1.4.0.exe
MacOS: llama-go-v1.4.0-macos
Linux: llama-go-v1.4.0-linux
Nachdem Sie also sowohl die ausführbare Datei als auch das Modell haben, probieren Sie es selbst aus:
llama-go-v1.4.0-macos
--model ~ /models/llama-7b-fp32.bin
--prompt " Why Golang is so popular? "
--prompt Text prompt from user to feed the model input
--model Path and file name of converted .bin LLaMA model [ llama-7b-fp32.bin, etc ]
--server Start in Server Mode acting as REST API endpoint
--host Host to allow requests from in Server Mode [ localhost by default ]
--port Port listen to in Server Mode [ 8080 by default ]
--pods Maximum pods or units of parallel execution allowed in Server Mode [ 1 by default ]
--threads Adjust to the number of CPU cores you want to use [ all cores by default ]
--context Context size in tokens [ 1024 by default ]
--predict Number of tokens to predict [ 512 by default ]
--temp Model temperature hyper parameter [ 0.5 by default ]
--silent Hide welcome logo and other output [ shown by default ]
--chat Chat with user in interactive mode instead of compute over static prompt
--profile Profe CPU performance while running and store results to cpu.pprof file
--avx Enable x64 AVX2 optimizations for Intel and AMD machines
--neon Enable ARM NEON optimizations for Apple Macs and ARM server
LLaMA.go bettet einen eigenständigen HTTP-Server ein, der die REST-API verfügbar macht. Um es zu aktivieren, führen Sie die App mit speziellen Flags aus:
llama-go-v1.4.0-macos
--model ~ /models/llama-7b-fp32.bin
--server
--host 127.0.0.1
--port 8080
--pods 4
--threads 4
Abhängig von der Modellgröße, wie vielen CPU-Kernen dort verfügbar sind, wie viele Anfragen Sie parallel bearbeiten möchten, wie schnell Sie Antworten erhalten möchten, wählen Sie Pods und Threads -Parameter mit Bedacht aus.
Pods sind eine Reihe von Inferenzinstanzen, die möglicherweise parallel ausgeführt werden.
Der Threads- Parameter legt fest, wie viele Kerne innerhalb eines Pods für die Tensorberechnung verwendet werden.
Wenn Sie also beispielsweise einen Computer mit 16 Hardware-Kernen haben, der 32 Hyper-Threads parallel ausführen kann, könnte das Ergebnis so aussehen:
--server --pods 4 --threads 8
Wenn kein freier Pod für die Bearbeitung eingehender Anfragen vorhanden ist, wird er in die Warteschlange gestellt und gestartet, sobald ein Pod seine Aufgabe erledigt hat.
Senden Sie eine POST-Anfrage (mit Postman) an Ihre Serveradresse mit JSON, die eine eindeutige UUID v4 enthält, und geben Sie Folgendes ein:
{
"id" : " 5fb8ebd0-e0c9-4759-8f7d-35590f6c9fc3 " ,
"prompt" : " Why Golang is so popular? "
}
Senden Sie eine GET-Anfrage (mit Postman oder Browser) an eine URL wie http://host:port/jobs/status/:id
GET http://localhost:8080/jobs/status/5fb8ebd0-e0c9-4759-8f7d-35590f6c9fcb
Senden Sie eine GET-Anfrage (mit Postman oder Browser) an eine URL wie http://host:port/jobs/:id
GET http://localhost:8080/jobs/5fb8ebd0-e0c9-4759-8f7d-35590f6c9fcb
Installieren Sie zunächst Golang und Git (bei Windows müssen Sie Installationsprogramme herunterladen).
brew install git
brew install golang
Klonen Sie dann das Repo und geben Sie den Projektordner ein:
git clone https://github.com/gotzmann/llama.go.git
cd llama.go
Einige Go Magic, um externe Abhängigkeiten zu installieren:
go mod tidy
go mod vendor
Jetzt sind wir bereit, die Binärdatei aus dem Quellcode zu erstellen:
go build -o llama-go-v1.exe -ldflags " -s -w " main.go
1) Wo kann ich originale LLaMA-Modelle beziehen?
Kontaktieren Sie Meta direkt oder schauen Sie sich einfach nach Torrent-Alternativen um.
2) Wie konvertiere ich Original-LLaMA-Dateien in ein unterstütztes Format?
Legen Sie die ursprünglichen PyTorch FP16-Dateien im Modellverzeichnis ab und konvertieren Sie sie dann mit dem folgenden Befehl:
python3 ./scripts/convert.py ~ /models/LLaMA/7B/ 0