
Repositori ini berisi kode untuk pelatihan, finetuning, mengevaluasi, dan menggunakan LLM untuk inferensi dengan komposer dan platform MosaiCML. Dirancang agar mudah digunakan, efisien dan fleksibel, basis kode ini memungkinkan eksperimen cepat dengan teknik terbaru.
Anda akan menemukan dalam repo ini:
llmfoundry/ - kode sumber untuk model, set data, panggilan balik, utilitas, dll.scripts/ - Script untuk menjalankan beban kerja LLMdata_prep/ - Konversi data teks dari sumber asli ke format streamingDataSettrain/ - Model Pelatihan atau Finetune Huggingface dan MPT dari parameter 125m - 70Btrain/benchmarking - Throughput Pelatihan Profil dan MFUinference/ - Konversi model ke format huggingface atau onnx, dan menghasilkan responsinference/benchmarking - Latensi dan Throughput Inferensi Profileval/ -Evaluasi LLM pada tugas akademik (atau kustom) dalam pembelajaran konteksmcli/ - Luncurkan salah satu dari beban kerja ini menggunakan MCLI dan platform MOSAICMLTUTORIAL.md - menyelam lebih dalam ke repo, contoh alur kerja, dan FAQDBRX adalah llm open source canggih yang dilatih oleh tim mosaic databricks. Ini menggunakan arsitektur campuran-ekspert (MOE) dan dilatih dengan versi yang dioptimalkan dari Composer, LLM Foundry, dan Megablocks. Model ini memiliki parameter total 132b dan parameter aktif 36B. Kami telah merilis dua model DBRX:
| Model | Panjang konteks | Unduh |
|---|---|---|
| Basis DBRX | 32768 | https://huggingface.co/databricks/dbrx-base |
| Instruksi DBRX | 32768 | https://huggingface.co/databricks/dbrx-instruct |
Bobot dan kode model kami dilisensikan untuk peneliti dan entitas komersial. Lisensi open source databricks dapat ditemukan di lisensi, dan kebijakan penggunaan kami yang dapat diterima dapat ditemukan di sini.
Untuk informasi lebih lanjut tentang model DBRX, lihat https://github.com/databricks/dbrx.
Mosaic Pretrain Transformers (MPT) adalah model gaya GPT dengan beberapa fitur khusus-perhatian kilat untuk efisiensi, alibi untuk ekstrapolasi panjang konteks, dan peningkatan stabilitas untuk mengurangi lonjakan kehilangan. Sebagai bagian dari seri fondasi Mosaicml, kami telah bersumber dari beberapa model MPT:
| Model | Panjang konteks | Unduh | Penggunaan komersial? |
|---|---|---|---|
| MPT-30B | 8192 | https://huggingface.co/mosaicml/mpt-30b | Ya |
| MPT-30B-INSTRUCT | 8192 | https://huggingface.co/mosaicml/mpt-30b-instruct | Ya |
| MPT-30B-CHAT | 8192 | https://huggingface.co/mosaicml/mpt-30b-cat | TIDAK |
| MPT-7B-8K | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k | Ya |
| MPT-7B-8K-CHAT | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k-cat | TIDAK |
| MPT-7B | 2048 | https://huggingface.co/mosaicml/mpt-7b | Ya |
| MPT-7B-Instruksi | 2048 | https://huggingface.co/mosaicml/mpt-7b-instruct | Ya |
| MPT-7B-CHAT | 2048 | https://huggingface.co/mosaicml/mpt-7b-cat | TIDAK |
| MPT-7B-StoryWriter | 65536 | https://huggingface.co/mosaicml/mpt-7b-storywriter | Ya |
Untuk mencoba model -model ini secara lokal, ikuti instruksi dalam scripts/inference/README.md untuk meminta model HF menggunakan skrip hf_generate.py atau hf_chat.py kami.
Kami telah kewalahan oleh semua pekerjaan luar biasa yang dimiliki komunitas yang dimasukkan ke dalam MPT! Di sini kami menyediakan beberapa tautan ke beberapa dari mereka:
replit-code-v1-3b adalah model bahasa kausal 2.7B yang difokuskan pada penyelesaian kode. Model ini telah dilatih pada subset dari dataset Stack Dedup v1.2 yang mencakup 20 bahasa seperti Java, Python, dan C ++Video tutorial dari komunitas:
Sesuatu yang hilang? Berkontribusi dengan PR!
Basis kode ini telah diuji dengan Pytorch 2.4 dengan NVIDIA A100S dan H100S. Basis kode ini juga dapat bekerja pada sistem dengan perangkat lain, seperti kartu NVIDIA konsumen dan kartu AMD, tetapi kami tidak secara aktif menguji sistem ini. Jika Anda memiliki keberhasilan/kegagalan menggunakan LLM Foundry pada sistem lain, beri tahu kami dalam masalah GitHub dan kami akan memperbarui matriks dukungan!
| Perangkat | Versi obor | Versi CUDA | Status |
|---|---|---|---|
| A100-40GB/80GB | 2.5.1 | 12.4 | ✅ didukung |
| H100-80GB | 2.5.1 | 12.4 | ✅ didukung |
Kami sangat merekomendasikan menggunakan gambar Docker Prebuilt kami. Anda dapat menemukannya di sini: https://hub.docker.com/orgs/mosaicml/repositories.
Gambar mosaicml/pytorch disematkan ke versi pytorch dan cuda tertentu, dan stabil dan jarang diperbarui.
Gambar mosaicml/llm-foundry dibangun dengan tag baru pada setiap komit ke cabang main . Anda dapat memilih hash komit khusus seperti mosaicml/llm-foundry:2.5.1_cu124-9867a7b atau ambil yang terbaru menggunakan mosaicml/llm-foundry:2.5.1_cu124-latest .
Harap dicatat: Gambar mosaicml/llm-foundry tidak datang dengan paket llm-foundry yang diinstal, hanya dependensi. Anda masih perlu pip install llm-foundry baik dari PYPI atau dari Sumber.
| Gambar Docker | Versi obor | Versi CUDA | Dependensi pengecoran LLM terpasang? |
|---|---|---|---|
mosaicml/pytorch:2.5.1_cu124-python3.11-ubuntu22.04 | 2.5.1 | 12.4 (Infiniband) | TIDAK |
mosaicml/llm-foundry:2.5.1_cu124-latest | 2.5.1 | 12.4 (Infiniband) | Ya |
mosaicml/llm-foundry:2.5.1_cu124_aws-latest | 2.5.1 | 12.4 (EFA) | Ya |
Ini mengasumsikan Anda sudah memiliki pytorch, cmake, dan pengemasan yang diinstal. Jika tidak, Anda dapat menginstalnya dengan pip install cmake packaging torch .
Untuk memulai, klon repo dan atur lingkungan Anda. Instruksi untuk melakukannya sedikit berbeda tergantung pada apakah Anda menggunakan Docker.
Kami sangat merekomendasikan bekerja dengan LLM Foundry di dalam wadah Docker (lihat gambar Docker yang kami rekomendasikan di atas). Jika Anda melakukannya, ikuti langkah -langkah ini untuk mengkloning repo dan memasang persyaratan.
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
pip install -e " .[gpu] " # or `pip install -e .` if no NVIDIA GPU.Jika Anda memilih untuk tidak menggunakan Docker, Anda harus membuat dan menggunakan lingkungan virtual.
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 GPU memiliki dukungan FP8; Kami telah menginstal perhatian dan transformator flash di gambar Docker kami (lihat di atas). Jika Anda tidak menggunakan gambar Docker kami, Anda dapat menginstal paket ini dengan:
pip install flash-attn --no-build-isolation
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stableLihat di sini untuk detail lebih lanjut tentang mengaktifkan Lapisan TransformerEngine dan AMP_FP8.
Dalam pengujian AMD GPU kami, pengaturan Env termasuk:
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.2Terakhir , instal perhatian flash yang diaktifkan ROCM (instruksi di sini).
Catatan:
numpy==1.23.5 ) sebelum semuanya bekerja tanpa masalah. Dukungan untuk LLM Foundry pada perangkat Intel Gaudi adalah eksperimental, silakan gunakan cabang habana_alpha dan lihat readme di cabang yang memiliki instruksi menginstal dan masalah yang diketahui.
Untuk hasil kinerja pelatihan dan inferensi pada akselerator Intel Gaudi2, lihat blog kami: https://www.databricks.com/blog/llm-training-and-inference-intel-iudi2-ai-accelerators
CATATAN Pastikan untuk melewati langkah -langkah instalasi di atas sebelum mencoba QuickStart!
Berikut ini adalah alur kerja ujung ke ujung untuk menyiapkan subset dari dataset C4, melatih model MPT-125M untuk 10 batch, mengonversi model menjadi format Huggingface, mengevaluasi model pada tantangan Winograd, dan menghasilkan respons terhadap dorongan.
(Ingat ini adalah mulai cepat hanya untuk mendemonstrasikan alat - untuk mendapatkan kualitas yang baik, LLM harus dilatih lebih dari 10 batch?)
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 " Catatan: Perintah composer yang digunakan di atas untuk melatih model mengacu pada peluncur terdistribusi Perpustakaan Komposer.
Jika Anda memiliki token Auth Huggingface yang mendukung Write, Anda dapat mengunggah model Anda secara opsional ke hub! Ekspor saja token Anda seperti ini:
export HF_TOKEN=your-auth-token dan uncomment baris yang mengandung --hf_repo_for_upload ... dalam panggilan di atas ke inference/convert_composer_to_hf.py .
Anda dapat menggunakan registri untuk menyesuaikan alur kerja Anda tanpa membayar perpustakaan. Beberapa komponen LLM Foundry dapat didaftarkan, seperti model, penebang, dan panggilan balik. Ini berarti Anda dapat mendaftarkan opsi baru untuk komponen ini, dan kemudian menggunakannya di konfigurasi YAML Anda.
Untuk membantu menemukan dan memahami komponen yang dapat didaftarkan, Anda dapat menggunakan perintah llmfoundry registry CLI.
Kami menyediakan dua perintah saat ini:
llmfoundry registry get [--group] : Sebutkan semua pendaftar, dan komponennya, secara opsional menentukan registri tertentu. Contoh Penggunaan: llmfoundry registry get --group loggers atau llmfoundry registry getllmfoundry registry find <group> <name> : Dapatkan informasi tentang komponen terdaftar tertentu. Contoh Penggunaan: llmfoundry registry find loggers wandb Gunakan --help pada salah satu perintah ini untuk informasi lebih lanjut.
Perintah -perintah ini juga dapat membantu Anda memahami apa yang terdiri dari masing -masing registri, karena setiap registri berisi docstring yang akan dicetak. Konsep umum adalah bahwa setiap registri mendefinisikan antarmuka, dan komponen yang terdaftar di registri tersebut harus mengimplementasikan antarmuka itu. Jika ada bagian dari perpustakaan yang saat ini tidak dapat diperpanjang, tetapi Anda pikir seharusnya, buka masalah!
Ada beberapa cara untuk mendaftarkan komponen baru:
Anda dapat menentukan komponen terdaftar melalui Python Entrypoint jika Anda membangun paket Anda sendiri dengan komponen terdaftar. Ini akan menjadi penggunaan yang diharapkan jika Anda membangun ekstensi besar ke LLM Foundry, dan akan mengesampingkan banyak komponen. Perhatikan bahwa hal -hal yang terdaftar melalui titik masuk akan mengganti komponen yang terdaftar langsung dalam kode.
Misalnya, berikut ini akan mendaftarkan kelas MyLogger , di bawah kunci my_logger , di registri llm_foundry.loggers :
[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" Jika mengembangkan komponen baru melalui titik masuk, penting untuk dicatat bahwa titik masuk Python bersifat global ke lingkungan Python. Ini berarti bahwa jika Anda memiliki beberapa paket yang mendaftarkan komponen dengan kunci yang sama, yang terakhir diinstal akan digunakan. Ini dapat berguna untuk komponen utama di LLM Foundry, tetapi juga dapat menyebabkan perilaku yang tidak terduga jika tidak hati -hati. Selain itu, jika Anda mengubah pyproject.toml, Anda perlu menginstal ulang paket agar perubahan berlaku. Anda dapat melakukan ini dengan cepat dengan menginstal dengan pip install -e . --no-deps untuk menghindari pemasangan kembali ketergantungan.
Anda juga dapat mendaftarkan komponen langsung dalam kode Anda:
from composer . loggers import LoggerDestination
from llmfoundry . registry import loggers
class MyLogger ( LoggerDestination ):
pass
loggers . register ( "my_logger" , func = MyLogger )Anda juga dapat menggunakan dekorator untuk mendaftarkan komponen langsung dari kode Anda:
from composer . loggers import LoggerDestination
from llmfoundry . registry import loggers
@ loggers . register ( "my_logger" )
class MyLogger ( LoggerDestination ):
pass Untuk pendekatan panggilan langsung dan dekorator, jika menggunakan skrip LLM Foundry Train/Eval, Anda perlu memberikan argumen code_paths , yang merupakan daftar file yang perlu dijalankan untuk mendaftarkan komponen Anda. Misalnya, Anda mungkin memiliki file yang disebut foundry_imports.py yang berisi yang berikut:
from foundry_registry . loggers import MyLogger
from llmfoundry . registry import loggers
loggers . register ( "my_logger" , func = MyLogger ) Anda kemudian akan memberikan code_paths ke skrip kereta/eval di konfigurasi YAML Anda:
...
code_paths :
- foundry_imports.py
...Salah satunya adalah penggunaan yang diharapkan jika Anda membangun ekstensi kecil ke LLM Foundry, hanya mengesampingkan beberapa komponen, dan karenanya tidak ingin membuat seluruh paket.
Lihat tutorial.md untuk terus belajar bekerja dengan LLM Foundry. Tutorial menyoroti contoh alur kerja, menunjuk Anda ke sumber daya lain di seluruh repo, dan jawaban yang sering diajukan pertanyaan!
Jika Anda mengalami masalah dengan kode, silakan mengajukan masalah GitHub langsung ke repo ini.
Jika Anda ingin melatih LLMS di platform MosaiCML, hubungi kami di [email protected]!