kurz
In diesem Abschnitt erfahren Sie, wie Sie mit Modelfile importierte Modelle anpassen können, unterteilt in die folgenden Abschnitte.
- Von GGUF importieren
- Import aus Pytorch oder Safetensors
- Direkt aus dem Modell importiert
- Benutzerdefinierte Eingabeaufforderung
I. Einfuhr aus GGUF
GGUF (GPT-Generated Unified Format) ist ein Dateiformat für die Speicherung fein abgestimmter Sprachmodelle. Dieses Format wurde entwickelt, um den Benutzern die gemeinsame Nutzung und den Import von Modellen zwischen verschiedenen Plattformen und Umgebungen zu erleichtern. Es unterstützt mehrere Quantisierungsformate, wodurch die Größe der Modelldateien effektiv reduziert werden kann.
Ihr Vorgänger war GGML (GPT-Generated Model Language), eine Tensor-Bibliothek, die speziell für das maschinelle Lernen entwickelt wurde, um ein Einzeldateiformat zu haben und leicht auf verschiedenen CPU- und GPU-Architekturen zu argumentieren, die aber in der Folge aufgrund mangelnder Flexibilität bei der Entwicklung, Kompatibilität und Schwierigkeiten bei der Wartung auf Probleme stieß.
Ollama Der Import von Modellen aus GGUF-Dateien wird durch die folgenden Schritte unterstützt:
- Herunterladen von
.gguf
Papiere
Link zum Herunterladen: https://huggingface.co/RichardErkhov/Qwen_-_Qwen2-0.5B-gguf/resolve/main/Qwen2-0.5B.Q3_K_M.gguf?download=true
Zu Demonstrationszwecken haben wir das Modell Qwen2-0.5B gewählt. Laden Sie es herunter und kopieren Sie es in das Stammverzeichnis des ersten Teils. Sie können sich an der folgenden Verzeichnisstruktur orientieren:
├── 1. direkter Import von gguf/
│ ├── main.ipynb
│ ├── Modelfile
│ └── Qwen-0.5B.Q3_K_M.gguf
├── 2.safetensors import/
│ ├── llama-3-8b-bnb-4bit/
│ ├── main.ipynb
│ ├── Modelfile
│ ├── 3. model direct import/ │ ├── llama-3-8b-bnb-4bit
│ ├── llama.cpp/ │ ├── main.ipynb │ ├── 3.
│ ├── Qwen-0.5b/ │ ├── main.cpp/ │ ├── Qwen-0.5b/
│ ├── main.ipynb
│ ├── Modelfile
│ └── Qwen_instruct_0.5b.gguf
└── 4. benutzerdefinierte Eingabeaufforderung Practices/ │ ├── main.ipynb │ ├── main.ipynb
├── main.ipynb └── Modelfile └── 4.
└── Modeldatei
Tipp
Der Code für Kapitel 3 und die zugehörige Dokumentation befinden sich im Notebook. Wenn Sie nicht sicher sind, wo die Modelldateien installiert sind, können Sie in der Notizbuch/C3
- Erstellen Sie eine neue Modeldatei
FROM . /Qwen2-0.5B.Q3_K_M.gguf
- Modelle in Ollama erstellen
Hinweis
Führen Sie die folgenden Terminal-Befehle immer aus dem Verzeichnis aus, in dem sich die Datei Modelfile befindet!
ollama create mymodel -f Modeldatei
- Ausführen des Modells im Terminal (es ist getestet, dass es nicht im Notebook läuft, es ist besser, es im Terminal auszuführen)
ollama run mymodel
II. aus Pytorch oder Safetensors importieren
Safetensors ist ein Dateiformat für die Speicherung von Deep-Learning-Modellgewichten, das auf Sicherheit, Effizienz und Benutzerfreundlichkeit ausgerichtet ist. Dieser Teil der Funktionalität muss noch von Community-Mitgliedern entwickelt werden, und die Dokumentationsressourcen sind derzeit begrenzt.
Wenn es sich bei dem zu importierenden Modell um eine der folgenden Architekturen handelt, kann es über Modelfile direkt in Ollama importiert werden. Natürlich können Sie die safetensors-Datei auch in eine gguf-Datei konvertieren und dann weiterverarbeiten, den Konvertierungsprozess finden Sie in Teil III.
Ausführlichere Informationen über Sicherheitssensoren und GGUF können unter diesem Link https://www.linkedin.com/pulse/llama-3-safetensors-vs-gguf-talles-carvalho-jjcqf abgerufen werden.
- LlamaForCausalLM
- MistralForCausalLM
- GemmaForCausalLM
Da dieser Abschnitt noch von der Gemeinschaft optimiert wird, dienen der hier angegebene Beispielcode und der Prozess nur als Referenz und es wird nicht garantiert, dass er erfolgreich funktioniert. Einzelheiten entnehmen Sie bitte der offiziellen Dokumentation.
- Lama-3-Modell herunterladen
!pip install huggingface_hub
# Modell herunterladen
from huggingface_hub importieren snapshot_download
model_id = "unsloth/llama-3-8b-bnb-4bit"
snapshot_download(
repo_id=model_id,
local_dir="llama-3-8b-bnb-4bit",
local_dir_use_symlinks=False,
revision="main",
# Wie man erhält, siehe Abschnitt 3
use_auth_token="")
- Erstellen Sie im Stammverzeichnis eine Modeldatei mit folgendem Inhalt:
VON . /llama-3-8b-bnb-4bit
- Modelle in Ollama erstellen
ollama create mymodel2 -f Modeldatei
- Betriebsmodell
ollama run mymodel2
III. direkter Import von Modellen
Normalerweise sind wir auf eine Menge von Modell-Dateien in HuggingFace ausgesetzt, zum Glück, hf bietet eine sehr bequeme API zum Herunterladen und Verarbeiten dieser Modelle, wie die oben genannten direkten Download wird durch die Netzwerk-Umgebung begrenzt ist, ist die Geschwindigkeit sehr langsam, diesen kleinen Abschnitt werden wir das Skript und hf verwenden, um abzuschließen.
lama.cpp GGUF ist ein Open-Source-Projekt, das CLI- und Server-Funktionen bereitstellt.
Für Architekturen, die nicht direkt von Ollama konvertiert werden können, können wir llama.cpp verwenden, um sie zu quantisieren und in das GGUF-Format zu konvertieren, und sie dann auf dem ersten Weg importieren. Unser gesamter Konvertierungsprozess ist in die folgenden Schritte unterteilt:
- Laden Sie das Modell von huggingface herunter;
- Verwenden Sie llama.cpp, um die Konvertierung durchzuführen;
- Verwenden Sie llama.cpp für die Modellquantifizierung;
- Führen Sie das Modell aus und laden Sie es hoch.
3.1 Herunterladen des Modells von HuggingFace
[](https://github.com/datawhalechina/handy-ollama/blob/main/docs/C3/1.1 TP3T20 .md#31--huggingface--model)Der intuitivste Weg zum Herunterladen ist ein Git-Clone oder ein Link, aber da llm jedes Teil nach GB zählt, kann man eine OOM-Fehler (Out of memory)
Wir können ein einfaches download.py in Python schreiben.
Zunächst sollte man zu hf gehen, um die persönlichen Daten des Nutzers zu erhalten ACCESS_TOKEN
um die persönliche Einstellungsseite von huggingface zu öffnen.
Zu diesem Zeitpunkt haben wir eine ACCESS_TOKEN
Als nächstes verwenden wir die huggingface_hub
(in Form eines Nominalausdrucks) snapshot_download
Um das Modell herunterzuladen, wählen wir hier oder Qwen-0.5b.
!pip install huggingface_hub
from huggingface_hub importieren snapshot_download
model_id = "Qwen/Qwen1.5-0.5B" # hugginFace's Modellname
snapshot_download(
repo_id=model_id, local_dir="Qwen/Qwen1.5-0.5B")
local_dir="Qwen-0.5b",
local_dir_use_symlinks=False,
revision="main",
use_auth_token="")
Wir cd auf den dritten Teil des Verzeichnisses auszuführen, kann der Download eine lange Zeit dauern, geduldig sein.
3.2 Konvertierung mit llama.cpp
llama.cpp wurde vom Hauptautor von GGML auf der Grundlage der frühesten c/c++-Version von llama entwickelt, mit dem Ziel, verschiedene LLMs mit Hilfe der CPU zu berechnen. Dank der kontinuierlichen Bemühungen der Gemeinschaft unterstützt llama.cpp jetzt die meisten der gängigen Modelle, sogar multimodale Modelle.
Zunächst klonen wir die Bibliothek llama.cpp lokal, in dasselbe Verzeichnis wie das heruntergeladene Modell:
git clone https://github.com/ggerganov/llama.cpp.git
Da der Prozess der Konvertierung von Modellen mit llama.cpp auf der Python-Entwicklung basiert, müssen Sie die entsprechenden Bibliotheken installieren, und es wird empfohlen, conda oder venv zu verwenden, um eine neue Umgebung zu erstellen.
cd llama.cpp
pip install -r anforderungen.txt
python convert_hf_to_gguf.py -h
Wenn die folgende Anzeige erscheint, ist das Konvertierungsprogramm bereit.
Als nächstes konvertieren wir das Modell, das wir gerade von HuggingFace heruntergeladen haben, mit dem folgenden Skript in das GGUF-Format:
python convert_hf_to_gguf.py ... /Qwen-0.5b --outfile Qwen_instruct_0.5b.gguf --outtype f16
Wie Sie sehen können, gibt es eine zusätzliche Datei Qwen_instruct_0.5b.gguf im Verzeichnis llama.cpp, und dieser Vorgang dauert nur wenige Sekunden.
Um Overhead bei der Argumentation zu sparen, quantifizieren wir das Modell und beginnen dann mit der Quantifizierung der praktischen Übungen.
3.3 Modellquantifizierung mit llama.cpp
Der Hauptzweck der Modellquantisierung besteht darin, die Größe und die Rechenkosten des Modells zu verringern und das Modell so genau wie möglich zu halten, damit das Modell auf ressourcenbeschränkten Geräten wie CPUs oder mobilen Geräten ausgeführt werden kann.
In ähnlicher Weise erstellen wir zuerst die Modeldatei und verwenden dann die ollama erstellen
um unser Modell aus der gguf-Datei zu erstellen, unterscheidet sich jedoch geringfügig vom ersten Schritt, bei dem die Quantisierungslogik einfach durch die Ausführung des Befehls ollama erstellen
ist, einfach einen Parameter hinzuzufügen.
Verschieben Sie zunächst die Datei Qwen_instruct_0.5b.gguf, die Sie im vorherigen Schritt erhalten haben, in das Stammverzeichnis des dritten Teils und erstellen Sie dann eine Modeldatei mit folgendem Inhalt.
FROM . /Qwen_instruct_0.5b.gguf
Das Terminal führt die Erstellungs- und Quantifizierungsskripte aus.
# Teil 3 im Stammverzeichnis
ollama create -q Q4_K_M mymodel3 -f . /ModellDatei
Damit ist unser Modell quantifiziert und erstellt, und wir können es nun ausführen.
3.4 Ausführen und Hochladen des Modells
Die Schritte zur Ausführung eines Modells mit gguf werden in Teil I ausführlich beschrieben und sollen hier nicht wiederholt werden.
Wenn die lokal gespeicherte Modelldatei zu viel Speicherplatz benötigt, können wir das gguf-Modell in unser eigenes Repo in Huggingface hochladen, die gleiche Idee wie in Schritt 1, wir können eine Upload-Logik schreiben.
Tipp
Um den Upload abzuschließen, muss Ihre HF_ACCESS_TOKEN-Berechtigung schreibend sein und Ihre model_id muss geändert werden. your_hf_name bezieht sich auf Ihren huggingface-Accountnamen.
von huggingface_hub importieren HfApi
importieren os
api = HfApi()
HF_ACCESS_TOKEN = ""
#TODO Hier müssen Sie Ihre model_id setzen.
# zum Beispiel model_id = "little1d/QWEN-0.5b"
model_id = "ihr_hf_name/QWEN-0.5b"
api.create_repo(
model_id,
exist_ok=True,
repo_type="model", #-Upload-Format für model
use_auth_token=HF_ACCESS_TOKEN,
)
# Upload des Modells in den Hub
# upload model name enthält die Bailong-Anleitung-7B im gleichen Ordner
for file in os.listdir(): if file.endswith()
if file.endswith(".gguf"): model_name = file.lower(".gguf").
modell_name = file.lower()
api.upload_file(
path_in_repo=model_name,
path_or_fileobj=f"{os.getcwd()}/{file}",
repo_type="model", #-Upload als Modell formatiert
use_auth_token=HF_ACCESS_TOKE)
Sobald sie hochgeladen ist, können Sie sie in Ihrem hf-Repository sehen!
IV. anpassbare Eingabeaufforderung
Ollama unterstützt benutzerdefinierte Prompts, die es dem Modell ermöglichen, Text zu generieren, der den Bedürfnissen des Benutzers besser entspricht.
Die Schritte zur Anpassung der Eingabeaufforderung sind wie folgt:
- Erstellen Sie eine Modeldatei im Stammverzeichnis
VON llama3.1
# setzt die Temperatur auf 1 [höher ist kreativer, niedriger ist kohärenter].
PARAMETER Temperatur 1
# setzt die Größe des Kontextfensters auf 4096, dies steuert, wie viele Token der LLM als Kontext verwenden kann, um die nächste Token
PARAMETER num_ctx 4096
# setzt eine benutzerdefinierte Systemnachricht, um das Verhalten des Chat-Assistenten festzulegen
SYSTEM Du bist Mario aus Super Mario Bros. und agierst als Assistent.
- Modelle erstellen
ollama create mymodel -f . /ModellDatei
Das Erstellen eines Modells kann etwas länger dauern als das Ziehen eines Modells, haben Sie also bitte etwas Geduld.
Wiederholen Sie es. Ollama-Liste
Wenn Sie das vorhandene Modell betrachten, können Sie sehen, dass mymodel korrekt erstellt wurde.
- Betriebsmodell
ollama run mymodel
Wie du sehen kannst, hat sich unser kleines Alpaka 🦙 in Mario verwandelt! Die Anpassung des Prompt war erfolgreich! 😘😘😘😘😘😘
Referenzlink
- https://www.linkedin.com/pulse/llama-3-safetensors-vs-gguf-talles-carvalho-jjcqf
- https://www.sysgeek.cn/ollama-on-windows
- https://ollama.com/blog/openai-compatibility