
このリポジトリには、ComposerおよびMOSAICMLプラットフォームとの推論用のLLMSのトレーニング、微調整、評価、展開用コードが含まれています。使いやすく、効率的で柔軟なように設計されたこのコードベースは、最新の手法を迅速に実験することができます。
あなたはこのレポジンにあります:
llmfoundry/ - モデル、データセット、コールバック、ユーティリティなどのソースコード。scripts/ - LLMワークロードを実行するスクリプトdata_prep/ - テキストデータを元のソースからStreamingDataset形式に変換するtrain/ - 125m -70bパラメーターからのトレーニングまたはFinetuneハギングフェイスとMPTモデルtrain/benchmarking - プロファイルトレーニングスループットとMFUinference/ - モデルをHuggingfaceまたはonnx形式に変換し、応答を生成しますinference/benchmarking - プロファイルの推論レイテンシとスループットeval/ - 学術的(またはカスタム)コンテキスト学習タスクでLLMSを評価するmcli/ - MCLIとMOSAICMLプラットフォームを使用してこれらのワークロードのいずれかを起動しますTUTORIAL.mdレポ、ワークフローの例、およびFAQに深く掘り下げるDBRXは、Databricks Mosaicチームが訓練した最先端のオープンソースLLMです。混合物(Experts(MOE)アーキテクチャを使用し、Composer、LLM Foundry、およびMegablocksの最適化されたバージョンでトレーニングされました。このモデルには、132Bの合計パラメーターと36Bのアクティブパラメーターがあります。 2つのDBRXモデルをリリースしました。
| モデル | コンテキストの長さ | ダウンロード |
|---|---|---|
| DBRXベース | 32768 | https://huggingface.co/databricks/dbrx-base |
| DBRX指示 | 32768 | https://huggingface.co/databricks/dbrx-instruct |
私たちのモデルの重みとコードは、研究者と商業体の両方に対してライセンスされています。 Databricksのオープンソースライセンスはライセンスで見つけることができ、当社の許容可能な使用ポリシーはここにあります。
DBRXモデルの詳細については、https://github.com/databricks/dbrxを参照してください。
Mosaic事前処理された変圧器(MPT)は、いくつかの特別な機能を備えたGPTスタイルのモデルです。効率のためのフラッシュ注意、コンテキストの長さの外挿のためのAlibi、および損失スパイクを緩和するための安定性の改善。 MOSAICMLのFoundationシリーズの一環として、いくつかのMPTモデルをオープンソースしました。
| モデル | コンテキストの長さ | ダウンロード | 商業用途? |
|---|---|---|---|
| MPT-30B | 8192 | https://huggingface.co/mosaicml/mpt-30b | はい |
| MPT-30B-Instruct | 8192 | https://huggingface.co/mosaicml/mpt-30b-instruct | はい |
| MPT-30B-chat | 8192 | https://huggingface.co/mosaicml/mpt-30b-chat | いいえ |
| MPT-7B-8K | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k | はい |
| MPT-7B-8K-chat | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k-chat | いいえ |
| MPT-7B | 2048 | https://huggingface.co/mosaicml/mpt-7b | はい |
| MPT-7B-Instruct | 2048 | https://huggingface.co/mosaicml/mpt-7b-instruct | はい |
| MPT-7B-chat | 2048 | https://huggingface.co/mosaicml/mpt-7b-chat | いいえ |
| MPT-7B-StoryWriter | 65536 | https://huggingface.co/mosaicml/mpt-7b-storywriter | はい |
これらのモデルをローカルで試すには、hf_generate.pyまたはhf_chat.pyスクリプトを使用してscripts/inference/README.mdの指示に従ってHFモデルをプロンプトします。
私たちは、コミュニティがMPTに入れたすべての驚くべき仕事に圧倒されました!ここでは、それらのいくつかへのいくつかのリンクを提供します。
replit-code-v1-3bは、コードの完了に焦点を当てた2.7Bの因果言語モデルです。このモデルは、Java、Python、C ++などの20の言語をカバーするStack Dedup V1.2データセットのサブセットでトレーニングされています。コミュニティからのチュートリアルビデオ:
何か欠けていますか? PRに貢献してください!
このコードベースは、Nvidia A100とH100でPytorch 2.4でテストされています。このコードベースは、Consumer NvidiaカードやAMDカードなど、他のデバイスを使用したシステムでも動作する場合がありますが、これらのシステムを積極的にテストしていません。他のシステムでLLM Foundryを使用して成功/失敗している場合は、GitHubの問題でお知らせください。サポートマトリックスを更新します。
| デバイス | トーチバージョン | CUDAバージョン | 状態 |
|---|---|---|---|
| A100-40GB/80GB | 2.5.1 | 12.4 | supportサポート |
| H100-80GB | 2.5.1 | 12.4 | supportサポート |
事前に構築されたDocker画像を使用することを強くお勧めします。 https://hub.docker.com/orgs/mosaicml/repositoriesで見つけることができます。
mosaicml/pytorch画像は、特定のPytorchおよびCudaバージョンに固定されており、安定しており、めったに更新されません。
mosaicml/llm-foundry画像は、 mainブランチへのすべてのコミットで新しいタグで構築されています。 mosaicml/llm-foundry:2.5.1_cu124-9867a7bなどの特定のコミットハッシュを選択するか、 mosaicml/llm-foundry:2.5.1_cu124-latestを使用して最新のものを使用してください。
注: mosaicml/llm-foundry画像には、依存関係のみがプリインストールされたllm-foundryパッケージが付属していません。 PypiまたはSourceからpip install llm-foundry必要があります。
| Docker画像 | トーチバージョン | CUDAバージョン | LLM Foundry依存関係はインストールされていますか? |
|---|---|---|---|
mosaicml/pytorch:2.5.1_cu124-python3.11-ubuntu22.04 | 2.5.1 | 12.4(infiniband) | いいえ |
mosaicml/llm-foundry:2.5.1_cu124-latest | 2.5.1 | 12.4(infiniband) | はい |
mosaicml/llm-foundry:2.5.1_cu124_aws-latest | 2.5.1 | 12.4(EFA) | はい |
これは、すでにPytorch、Cmake、およびパッケージングがインストールされていることを前提としています。そうでない場合は、 pip install cmake packaging torchでそれらをインストールできます。
開始するには、リポジトリをクローンして環境をセットアップします。 Dockerを使用しているかどうかによって、そうするための手順はわずかに異なります。
Dockerコンテナ内でLLM Foundryを使用することを強くお勧めします(上記の推奨Docker画像を参照してください)。そうしている場合は、次の手順に従ってリポジトリをクローンし、要件をインストールしてください。
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
pip install -e " .[gpu] " # or `pip install -e .` if no NVIDIA GPU.Dockerを使用しないことを選択した場合は、仮想環境を作成して使用する必要があります。
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にはFP8サポートがあります。 Docker画像にFlashの注意と変圧器をすでにインストールしています(上記を参照)。 Docker画像を使用していない場合は、これらのパッケージを次のようにインストールできます。
pip install flash-attn --no-build-isolation
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stableTransformerEngineレイヤーとAMP_FP8の有効化の詳細については、こちらをご覧ください。
AMD GPUのテストでは、ENVセットアップには以下が含まれます。
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.2最後に、ROCM有効なフラッシュの注意をインストールします(こちらの指示はこちら)。
注:
numpy==1.23.5にダウングレードする必要がありました)。 Intel GaudiデバイスでのLLMファウンドリのサポートは実験的です。ブランチhabana_alphaを使用して、インストール命令と既知の問題があるブランチのreadmeをご覧ください。
Intel Gaudi2 Acceleratorsのトレーニングと推論のパフォーマンス結果については、https://www.databricks.com/llm-training-and-inference-intel-gaudi2-ai-aacceleratorsを参照してください。
注意クイックスタートを試す前に、上のインストール手順を確認してください!
C4データセットのサブセットを準備し、10バッチ用のMPT-125Mモデルのトレーニング、モデルのハグFace形式に変換し、WinoGRADチャレンジのモデルの評価、プロンプトへの応答を生成するためのエンドツーエンドワークフローを次に示します。
(これはツールを実証するためだけにクイックスタートであることを覚えておいてください - 良質を得るには、LLMを10を超えるバッチよりもトレーニングする必要がありますか?)
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 "注:上記のモデルをトレーニングするために使用されるcomposerコマンドは、作曲家ライブラリの分散ランチャーを指します。
書き込み対応のHuggingface Authトークンがある場合は、オプションでモデルをハブにアップロードできます。このようにトークンをエクスポートするだけです:
export HF_TOKEN=your-auth-tokenそして、上記のinference/convert_composer_to_hf.pyを含む--hf_repo_for_upload ...を含む行を除外。
レジストリを使用して、ライブラリを分岐せずにワークフローをカスタマイズできます。 LLMファウンドリの一部のコンポーネントは、モデル、ロガー、コールバックなど、登録可能です。これは、これらのコンポーネントの新しいオプションを登録し、YAML構成で使用できることを意味します。
登録可能なコンポーネントを見つけて理解するために、 llmfoundry registry CLIコマンドを使用できます。
現在、2つのコマンドを提供しています。
llmfoundry registry get [--group] :すべてのレジストリとそのコンポーネントをリストし、オプションで特定のレジストリを指定します。使用例: llmfoundry registry get --group loggersまたはllmfoundry registry getllmfoundry registry find <group> <name> :特定の登録コンポーネントに関する情報を取得します。使用法の例: llmfoundry registry find loggers wandb詳細については、これらのコマンドのいずれかを使用--helpてください。
これらのコマンドは、各レジストリには印刷されるドキュストリングが含まれているため、各レジストリが何で構成されているかを理解するのにも役立ちます。一般的な概念は、各レジストリがインターフェイスを定義し、そのレジストリに登録されているコンポーネントがそのインターフェイスを実装する必要があることです。現在拡張できないライブラリの一部があるが、そうあるべきだと思う場合は、問題を開いてください!
新しいコンポーネントを登録する方法はいくつかあります。
登録コンポーネントを使用して独自のパッケージを構築する場合は、Pythonエントリポイントを介して登録コンポーネントを指定できます。これは、LLMファウンドリーの大規模な拡張機能を構築し、多くのコンポーネントをオーバーライドする場合に予想される使用法になります。エントリポイントを介して登録されているものは、コードに直接登録されているコンポーネントをオーバーライドすることに注意してください。
たとえば、以下は、 llm_foundry.loggersレジストリに、キーmy_loggerの下にあるMyLoggerクラスを登録します。
[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"エントリポイントを介して新しいコンポーネントを開発する場合、PythonエントリポイントはPython環境にとってグローバルであることに注意することが重要です。これは、同じキーを登録するコンポーネントを登録する複数のパッケージがある場合、インストールされた最後のパッケージが使用されるものになることを意味します。これは、LLMファウンドリのコンポーネントをオーバーライドするのに役立ちますが、注意しないと予期しない動作につながる可能性があります。さらに、pyproject.tomlを変更すると、変更が有効になるためにパッケージを再インストールする必要があります。 pip install -e . --no-deps 。
コードに直接コンポーネントを登録することもできます。
from composer . loggers import LoggerDestination
from llmfoundry . registry import loggers
class MyLogger ( LoggerDestination ):
pass
loggers . register ( "my_logger" , func = MyLogger )デコレータを使用して、コードから直接コンポーネントを登録することもできます。
from composer . loggers import LoggerDestination
from llmfoundry . registry import loggers
@ loggers . register ( "my_logger" )
class MyLogger ( LoggerDestination ):
pass直接コールとデコレーターの両方のアプローチについて、LLMファウンドリトレイン/評価スクリプトを使用する場合、コンポーネントを登録するために実行する必要があるファイルのリストであるcode_paths引数を提供する必要があります。たとえば、次のことを含むfoundry_imports.pyというファイルがある場合があります。
from foundry_registry . loggers import MyLogger
from llmfoundry . registry import loggers
loggers . register ( "my_logger" , func = MyLogger )次に、YAML構成のトレーニング/評価スクリプトにcode_pathsを提供します。
...
code_paths :
- foundry_imports.py
...これらの1つは、LLMファウンドリーの小さな拡張機能を構築し、いくつかのコンポーネントを無効にするため、パッケージ全体を作成したくない場合に、予想される使用法です。
LLM Foundryでの作業について学び続けるには、Tutorial.mdをご覧ください。チュートリアルは、ワークフローの例を強調し、リポジトリ全体の他のリソースを指し、よくある質問に答えます!
コードの問題に遭遇した場合は、このレポでgithubの問題を直接提出してください。
MOSAICMLプラットフォームでLLMSをトレーニングしたい場合は、[email protected]にご連絡ください!