
Dieses Repository enthält Code für Schulungen, Finetunen, Bewertung und Bereitstellung von LLMs für die Inferenz mit Komponisten und der MosaICML -Plattform. Diese Codebasis wurde als benutzerfreundlich, effizient und flexibel entwickelt und ermöglicht ein schnelles Experimentieren mit den neuesten Techniken.
Sie werden in diesem Repo finden:
llmfoundry/ - Quellcode für Modelle, Datensätze, Rückrufe, Dienstprogramme usw.scripts/ - Skripte zum Ausführen von LLM -Workloadsdata_prep/ - Textdaten aus Originalquellen in StreamingDataset -Format konvertierentrain/ - Zug- oder Finetune -Umarmungs- und MPT -Modelle von 125 m - 70B -Parameterntrain/benchmarking - Profil -Trainingsdurchsatz und MFUinference/ - Modelle in das Umarmungsface- oder ONNX -Format konvertieren und Antworten generiereninference/benchmarking - Profilinferenzlatenz und Durchsatzeval/ -Evaluieren von LLMs zu akademischen (oder benutzerdefinierten) In-Kontext-Lernaufgabenmcli/ - Starten Sie eine dieser Workloads mit MCLI und der Mosaicml -PlattformTUTORIAL.md - Ein tieferer Eintauchen in das Repo, Beispiel -Workflows und FAQsDBRX ist ein hochmodernes Open-Source-LLM, das von Databricks Mosaic Team trainiert wurde. Es verwendet die Mischung der Experten (MEE) -Scharchitektur und wurde mit optimierten Versionen von Composer, LLM Foundry und Megablocks ausgebildet. Das Modell verfügt über 132B Gesamtparameter und aktive Parameter von 36B. Wir haben zwei DBRX -Modelle veröffentlicht:
| Modell | Kontextlänge | Herunterladen |
|---|---|---|
| DBRX -Basis | 32768 | https://huggingface.co/databricks/dbrx-base |
| DBRX anweisen | 32768 | https://huggingface.co/databricks/dbrx-instruct |
Unsere Modellgewichte und Code sind sowohl für Forscher als auch für kommerzielle Einheiten lizenziert. Die Open -Source -Lizenz von Databricks befindet sich in der Lizenz und unsere Richtlinien für die akzeptable Nutzung finden Sie hier.
Weitere Informationen zu den DBRX -Modellen finden Sie unter https://github.com/databricks/dbrx.
Mosaic Pretrainierte Transformatoren (MPT) sind Modelle im GPT-Stil mit einigen speziellen Merkmalen-Flash-Aufmerksamkeit für Effizienz, Alibi für die Extrapolation der Kontextlänge und Stabilitätsverbesserungen zur Minderung von Verlustspitzen. Im Rahmen der Foundation-Serie von Mosaicml haben wir mehrere MPT-Modelle Open-Soures:
| Modell | Kontextlänge | Herunterladen | Kommerzieller Gebrauch? |
|---|---|---|---|
| MPT-30B | 8192 | https://huggingface.co/mosaicml/mpt-30b | Ja |
| MPT-30B-Struktur | 8192 | https://huggingface.co/mosaicml/mpt-30b-instruct | Ja |
| MPT-30B-CHAT | 8192 | https://huggingface.co/mosaicml/mpt-30b-chat | NEIN |
| MPT-7B-8K | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k | Ja |
| MPT-7B-8K-CHAT | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k-chat | NEIN |
| MPT-7B | 2048 | https://huggingface.co/mosaicml/mpt-7b | Ja |
| MPT-7B-Struktur | 2048 | https://huggingface.co/mosaicml/mpt-7b-instruct | Ja |
| MPT-7B-CHAT | 2048 | https://huggingface.co/mosaicml/mpt-7b-chat | NEIN |
| MPT-7B-StoryWriter | 65536 | https://huggingface.co/mosaicml/mpt-7b-Storywriter | Ja |
Um diese Modelle lokal auszuprobieren, befolgen Sie die Anweisungen in scripts/inference/README.md um HF -Modelle mithilfe unserer Skripte hf_generate.py oder hf_chat.py aufzurufen.
Wir wurden von all der erstaunlichen Arbeit überwältigt, die die Community in MPT gesteckt hat! Hier bieten wir ein paar Links zu einigen von ihnen:
replit-code-v1-3b ist ein 2,7B-Kausalsprachmodell, das sich auf den Codebettel konzentriert. Das Modell wurde auf einer Untergruppe des Stack Dedup V1.2 -Datensatzes in 20 Sprachen wie Java, Python und C ++ trainiertTutorial -Videos aus der Community:
Etwas fehlt? Mit einem PR beitragen!
Diese Codebasis wurde mit Pytorch 2.4 mit NVIDIA A100 und H100S getestet. Diese Codebasis funktioniert möglicherweise auch auf Systemen mit anderen Geräten wie NVIDIA -Karten von Verbrauchern und AMD -Karten, aber wir testen diese Systeme nicht aktiv. Wenn Sie Erfolg/Misserfolg mit LLM Foundry auf anderen Systemen haben, teilen Sie uns dies bitte in einem Github -Problem mit und wir werden die Support -Matrix aktualisieren!
| Gerät | Fackelversion | CUDA -Version | Status |
|---|---|---|---|
| A100-40 GB/80 GB | 2.5.1 | 12.4 | ✅ unterstützt |
| H100-80 GB | 2.5.1 | 12.4 | ✅ unterstützt |
Wir empfehlen dringend, unsere vorgefertigten Docker -Bilder zu verwenden. Sie finden sie hier: https://hub.docker.com/orgs/mosaicml/repositories.
Die mosaicml/pytorch -Bilder sind an bestimmte Pytorch- und CUDA -Versionen festgehalten und stabil und selten aktualisiert.
Die mosaicml/llm-foundry -Bilder werden in jedem Verpflichtung zum main mit neuen Tags erstellt. Sie können ein bestimmtes Commit Hash wie mosaicml/llm-foundry:2.5.1_cu124-9867a7b oder das neueste mit mosaicml/llm-foundry:2.5.1_cu124-latest .
Bitte beachten Sie: Die mosaicml/llm-foundry -Bilder werden nicht mit dem llm-foundry Paket vorinstalliert geliefert, nur die Abhängigkeiten. Sie müssen weiterhin pip install llm-foundry .
| Docker -Bild | Fackelversion | CUDA -Version | LLM Gießereiabhängigkeiten installiert? |
|---|---|---|---|
mosaicml/pytorch:2.5.1_cu124-python3.11-ubuntu22.04 | 2.5.1 | 12,4 (Infiniband) | NEIN |
mosaicml/llm-foundry:2.5.1_cu124-latest | 2.5.1 | 12,4 (Infiniband) | Ja |
mosaicml/llm-foundry:2.5.1_cu124_aws-latest | 2.5.1 | 12.4 (EFA) | Ja |
Dies setzt voraus, dass Sie bereits Pytorch, CMake und Verpackungen installiert haben. Wenn nicht, können Sie sie mit pip install cmake packaging torch installieren.
Klonen Sie, um das Repo zu klonen und Ihre Umgebung einzurichten. Die Anweisungen dazu unterscheiden sich geringfügig, je nachdem, ob Sie Docker verwenden.
Wir empfehlen dringend , mit LLM Foundry in einem Docker -Container zusammenzuarbeiten (siehe unserem empfohlenen Docker -Bild oben). Wenn Sie dies tun, befolgen Sie diese Schritte, um das Repo zu klonen und die Anforderungen zu installieren.
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
pip install -e " .[gpu] " # or `pip install -e .` if no NVIDIA GPU.Wenn Sie Docker nicht verwenden möchten, sollten Sie eine virtuelle Umgebung erstellen und verwenden.
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
# Creating and activate a virtual environment
python3 -m venv llmfoundry-venv
source llmfoundry-venv/bin/activate
pip install cmake packaging torch # setup.py requires these be installed
pip install -e " .[gpu] " # or `pip install -e .` if no NVIDIA GPU.NVIDIA H100 GPUs haben FP8 -Unterstützung; Wir haben die Aufmerksamkeit und den Transformator von Flash in unseren Docker -Bildern bereits installiert (siehe oben). Wenn Sie unsere Docker -Bilder nicht verwenden, können Sie diese Pakete installieren mit:
pip install flash-attn --no-build-isolation
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stableWeitere Informationen zum Aktivieren von TransformerenEngine -Ebenen und AMP_FP8 finden Sie hier.
Bei unseren Tests von AMD -GPUs umfasst das Env -Setup::
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
# Creating and activate a virtual environment
python3 -m venv llmfoundry-venv-amd
source llmfoundry-venv-amd/bin/activate
# installs
pip install cmake packaging torch
pip install -e . # This installs some things that are not needed but they don't hurt
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2Installieren Sie zuletzt die ROCM -fähige Flash -Aufmerksamkeit (Anweisungen hier).
Anmerkungen:
numpy==1.23.5 herabstufen, bevor alles ohne Probleme funktioniert. Die Unterstützung für LLM Foundry habana_alpha Intel Gaudi -Geräten ist experimentell.
Für Schulungs- und Inferenzleistungsergebnisse zu Intel Gaudi2 Beschleunigern finden Sie in unserem Blog: https://www.databricks.com/blog/llm---and-inference-intel-gaudi2-ai-Acelerators
HINWEIS Achten Sie darauf, die obigen Installationsschritte durchzuführen, bevor Sie den QuickStart ausprobieren!
Hier ist ein End-to-End-Workflow für die Vorbereitung einer Teilmenge des C4-Datensatzes, ein MPT-125M-Modell für 10 Chargen, das Umarmungsformat, die Bewertung des Modells zur WinOgrad-Herausforderung und die Generierung von Antworten auf Eingabeaufforderungen konvertiert.
(Denken Sie daran, dass dies ein Quickstart ist, um die Werkzeuge zu demonstrieren - um eine gute Qualität zu erhalten, muss der LLM länger als 10 Chargen trainiert werden?)
cd scripts
# Convert C4 dataset to StreamingDataset format
python data_prep/convert_dataset_hf.py
--dataset allenai/c4 --data_subset en
--out_root my-copy-c4 --splits train_small val_small
--concat_tokens 2048 --tokenizer EleutherAI/gpt-neox-20b --eos_text ' <|endoftext|> '
# Train an MPT-125m model for 10 batches
composer train/train.py
train/yamls/pretrain/mpt-125m.yaml
variables.data_local=my-copy-c4
train_loader.dataset.split=train_small
eval_loader.dataset.split=val_small
max_duration=10ba
eval_interval=0
save_folder=mpt-125m
# Convert the model to HuggingFace format
python inference/convert_composer_to_hf.py
--composer_path mpt-125m/ep0-ba10-rank0.pt
--hf_output_path mpt-125m-hf
--output_precision bf16
# --hf_repo_for_upload user-org/repo-name
# Evaluate the model on a subset of tasks
composer eval/eval.py
eval/yamls/hf_eval.yaml
icl_tasks=eval/yamls/copa.yaml
model_name_or_path=mpt-125m-hf
# Generate responses to prompts
python inference/hf_generate.py
--name_or_path mpt-125m-hf
--max_new_tokens 256
--prompts
" The answer to life, the universe, and happiness is "
" Here's a quick recipe for baking chocolate chip cookies: Start by " HINWEIS: Der oben zum Training des Modells verwendete composer bezieht sich auf den verteilten Launcher der Composer Library.
Wenn Sie ein Write-fähiger Huggingface-Auth-Token haben, können Sie Ihr Modell optional in den Hub hochladen! Exportieren Sie einfach Ihr Token wie folgt:
export HF_TOKEN=your-auth-token und Überzeugen Sie die Zeile, --hf_repo_for_upload ... im obigen Aufruf zur inference/convert_composer_to_hf.py enthält.
Sie können die Registrierung verwenden, um Ihre Workflows anzupassen, ohne die Bibliothek zu verlassen. Einige Komponenten der LLM -Gießerei sind registrierbar, wie Modelle, Holzfäller und Rückrufe. Dies bedeutet, dass Sie neue Optionen für diese Komponenten registrieren und dann in Ihrer YAML -Konfiguration verwenden können.
Um registrierbare Komponenten zu finden und zu verstehen, können Sie den Befehl llmfoundry registry CLI verwenden.
Wir bieten derzeit zwei Befehle:
llmfoundry registry get [--group] : Listen Sie alle Registrien und deren Komponenten auf und geben Sie optional eine bestimmte Registrierung an. Beispielnutzung: llmfoundry registry get --group loggers oder llmfoundry registry getllmfoundry registry find <group> <name> : Informationen zu einer bestimmten registrierten Komponente erhalten. Beispiel Verwendung: llmfoundry registry find loggers wandb --help Sie eine dieser Befehle, um weitere Informationen zu erhalten.
Diese Befehle können Ihnen auch helfen, zu verstehen, woraus jede Registrierung besteht, da jede Registrierung eine Dokumentation enthält, die ausgedruckt wird. Das allgemeine Konzept ist, dass jede Registrierung eine Schnittstelle definiert und Komponenten, die in dieser Registrierung registriert sind, diese Schnittstelle implementieren müssen. Wenn es einen Teil der Bibliothek gibt, der derzeit nicht erweiterbar ist, aber Sie denken, eröffnen Sie dies bitte!
Es gibt einige Möglichkeiten, eine neue Komponente zu registrieren:
Sie können registrierte Komponenten über einen Python -Einstiegspunkt angeben, wenn Sie Ihr eigenes Paket mit registrierten Komponenten erstellen. Dies wäre die erwartete Nutzung, wenn Sie eine große Erweiterung der LLM -Foundry bauen und viele Komponenten überschreiben würden. Beachten Sie, dass Dinge, die über Einstiegspunkte registriert sind, Komponenten überschreiben, die direkt im Code registriert sind.
Im Folgenden würde beispielsweise die MyLogger -Klasse unter der my_logger in der Registrierung llm_foundry.loggers registrieren:
[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "foundry_registry"
version = "0.1.0"
dependencies = [
" mosaicml " ,
" llm-foundry " ,
]
# Note: Even though in python code, this would be llmfoundry.registry.loggers,
# when specified in the entry_points, it has to be "llmfoundry_loggers". That is,
# the segments of the name should be joined by an _ in the entry_points section.
[project.entry-points."llmfoundry_loggers"]
my_logger = "foundry_registry.loggers:MyLogger" Wenn Sie neue Komponenten über Einstiegspunkte entwickeln, ist es wichtig zu beachten, dass Python -Einstiegspunkte für die Python -Umgebung global sind. Dies bedeutet, dass, wenn Sie über mehrere Pakete verfügen, die Komponenten mit demselben Schlüssel registrieren, der letzte installiert ist, der verwendet wird. Dies kann nützlich sein, um Komponenten in der LLM -Gießerei überschrieben, kann aber auch zu unerwartetem Verhalten führen, wenn nicht vorsichtig. Wenn Sie die PYProject.toml ändern, müssen Sie das Paket neu installieren, damit die Änderungen wirksam werden. Sie können dies schnell tun, indem Sie mit pip install -e . --no-deps um die Neuinstallation von Abhängigkeiten zu vermeiden.
Sie können auch eine Komponente direkt in Ihrem Code registrieren:
from composer . loggers import LoggerDestination
from llmfoundry . registry import loggers
class MyLogger ( LoggerDestination ):
pass
loggers . register ( "my_logger" , func = MyLogger )Sie können auch Dekoratoren verwenden, um Komponenten direkt von Ihrem Code zu registrieren:
from composer . loggers import LoggerDestination
from llmfoundry . registry import loggers
@ loggers . register ( "my_logger" )
class MyLogger ( LoggerDestination ):
pass Bei der Verwendung der LLM Foundry Train/Eval -Skripte müssen Sie sowohl für den direkten Anruf als auch für den Dekorateur das Argument code_paths angeben, bei dem es sich um eine Liste von Dateien handelt, die ausgeführt werden müssen, um Ihre Komponenten zu registrieren. Beispielsweise haben Sie möglicherweise eine Datei namens foundry_imports.py , die Folgendes enthält:
from foundry_registry . loggers import MyLogger
from llmfoundry . registry import loggers
loggers . register ( "my_logger" , func = MyLogger ) Anschließend werden Sie den Zug-/Evaly -Skripten in Ihrer YAML -Konfiguration code_paths angeben:
...
code_paths :
- foundry_imports.py
...Eine davon wäre die erwartete Verwendung, wenn Sie eine kleine Erweiterung der LLM -Gießerei bauen, nur ein paar Komponenten überschreiben und daher kein ganzes Paket erstellen möchten.
Schauen Sie sich Tutorial.md an, um weiter zu lernen, die mit LLM Foundry arbeiten. Das Tutorial zeigt Beispiel -Workflows, verweist auf andere Ressourcen im gesamten Repo und beantwortet häufig Fragen!
Wenn Sie Probleme mit dem Code begegnen, stellen Sie bitte GitHub -Probleme direkt an dieses Repo ein.
Wenn Sie LLMs auf der Mosaicml -Plattform trainieren möchten, wenden Sie sich an uns unter [email protected]!