Ziel dieses Repo ist es, eine einfache Implementierung der GPT -Modelle bereitzustellen, die für Produktionsanwendungen verwendet werden können. Der Code unterstützt derzeit die folgenden Anwendungsfälle:
Fühlen Sie sich frei, dieses Repo zu geben und verwenden Sie es als Vorlage für die Entwicklung Ihrer eigenen GPT -Anwendungen.
Wir möchten eventuell die RL-basierte Feinabstimmung von ChatGPT enthalten. Im Allgemeinen ändert dies nicht das zugrunde liegende Wissensmodell, sondern macht die Interaktion mit dem Modell menschlicher.
Das Einrichten des Codes ist ziemlich minimal und kann in lokalen oder Cloud -VM -Umgebungen leicht reproduziert werden.*
conda create -n python38 python=3.8
conda activate python38
conda install --file requirements.txt
* In Zukunft werden wir versuchen, eine Docker -Version dieses Setups bereitzustellen.
Wir bieten Beispielcode, der den Tiny-Shakespeare-Datensatz zum Training und der Feinabstimmung herunterladen und vorverarbeitet. Verwenden Sie diesen Code als Vorlage, um Datenvorverarbeitung für Ihre eigenen Daten zu erstellen.
python src/data_io/fetch_shakespeare.py
Training eines sehr kleinen GPT-Modells von Grund auf den Tiny-Shakespeare-Datensatz, der im vorherigen Schritt erstellt wurde. Das resultierende Modell ist nicht sehr verallgemeinerbar, da es ziemlich klein und auf einem sehr kleinen Datensatz trainiert wird, aber Shakespeare-ähnliche Zitate erzeugen kann.
Ändern Sie die Konfigurationsdatei und um ein Modell auf Ihren eigenen Daten von Grund auf neu zu trainieren. An diesem Punkt können Sie nach Ihrer Datengröße und -ressourcen technisch auf sehr große Modellgrößen skalieren.*
python src/training/train_main.py --config_file config/train_shakespeare_small.yml
* Für diesen Schritt benötigen Sie wahrscheinlich einen oder mehrere GPUs.
Feinabstimmung des Open Source GPT2-Modells auf Ihren eigenen Daten. Es ist möglich, ein Open-Source-GPT-ähnliches Modell (GPT2-Medium, GPT2-XL usw.) zu verwenden. Dies ist die häufigere Option, da weniger Daten und Ressourcen erforderlich sind (es ist möglich, dies auch auf einer CPU auszuführen) und ist viel schneller als das Training von Grund auf.
python src/training/train_main.py --config_file config/finetune_shakespeare.yml
Probieren Sie eine Reihe von Ausgängen aus einem trainierten Modell bei einer Eingangsaufforderung. Dies kann für die Stapelinferenz verwendet werden.
python src/inference/sample_main.py --config_file config/sample_shakespeare.yml
Ein Lightweigth -Server, der ein geschultes Modell in einer REST -API bedient.
uvicorn src.inference.service_main:app --reload --reload-include config/sample_gpt2.yml
Sobald der Server ausgeführt wird, können Sie den Endpunkt mit einer Eingabeaufforderung abfragen (als Postanforderung). Weitere Informationen zu den Abfragespezifikationen finden Sie im folgenden Testskript.
Sobald Ihr Server ausgeführt wird, können Sie den Endpunkt mit dem folgenden Skript testen.
python src/inference/test_query.py
Dieses Repo wurde eingesetzt, der eine Produktionsanwendung im Auge beherrscht und die Einheiten- und Integrationstests umfasst.
* Tessing ist kein umfangreicher Geldautomaten, aber wir werden versuchen, in Zukunft die Berichterstattung zu erhöhen.
Unit -Tests wurden zur Abdeckung der Hauptfunktionalität berücksichtigt. Mit dem folgenden Befehl können Sie die vollständige Testsuite ausführen:
pytest test/unit/
Zusätzlich zu Unit-Tests haben wir einige Integrationstests für das Training, die Feinabstimmung und die Probenahme-Workflows einbezogen.
pytest test/integration/
* Integrationstests benötigen derzeit die Arbeit von Daten (siehe oben).
Es ist im Allgemeinen ratsam, bei der Arbeit mit dem Repo Pre-Commit-Haken zu ermöglichen. Derzeit führt einige grundlegende Formatierungskontrollen aus und führt die Unit -Testsuite (jedoch nicht die Integrationstests) aus.
conda install -c conda-forge pre-commit
pre-commit install
Die GPT -Implementierung in diesem Repo ist vom Nanogpt -Repo von Andrej Karpathy inspiriert. Unser Ziel war es, sie erneut zu implementieren, neu zu strukturieren und mit Modulen zu erweitern, die es einfach machen, verschiedene Arten von Produktionsanwendungen darüber zu erstellen.