Databricks の Dolly は、商用利用が許可されている Databricks 機械学習プラットフォームでトレーニングされた命令に従う大規模な言語モデルです。 pythia-12b
に基づいて、Dolly は、ブレーンストーミング、分類、クローズド QA、生成、情報抽出、オープン QA を含む、InstructGPT 論文の機能ドメインで Databricks 従業員によって生成された約 15,000 の命令/応答微調整レコード databricks databricks-dolly-15k
でトレーニングされています。そして要約。 dolly-v2-12b
は最先端のモデルではありませんが、ベースとなる基礎モデルの特徴ではない動作に従って驚くほど高品質の命令を示します。
Databricks は、あらゆる組織と個人が人工知能の変革力から確実に利益を得られるよう取り組んでいます。 Dolly モデル ファミリーは、この旅における当社の最初の一歩を表しており、このテクノロジーを世界と共有できることに興奮しています。
このモデルは、Hugging Face で databricks/dolly-v2-12b として入手できます。
dolly-v2-12b
は、Databricks によって作成された 120 億パラメータの因果言語モデルであり、EleutherAI の Pythia-12b から派生し、Databricks の従業員によって生成され、寛容なライセンスの下でリリースされた約 15,000 のレコード命令コーパスに基づいて微調整されています (CC-BY- SA)
dolly-v2-12b
は最先端の生成言語モデルではなく、定量的なベンチマークが進行中ですが、より最新のモデル アーキテクチャや、大規模な事前トレーニング コーパスの対象となるモデルと競合するように設計されていません。
Dolly モデル ファミリは活発に開発中であるため、欠点のリストがすべてを網羅する可能性は高くありませんが、予備的な調査結果を文書化し、コミュニティと共有する手段として、既知の制限と誤作動をここに含めます。特に、 dolly-v2-12b
は、構文的に複雑なプロンプト、プログラミングの問題、数学的演算、事実誤認、日付と時刻、自由回答形式の質問応答、幻覚、特定の長さのリストの列挙、文体の模倣、ユーモアのセンスを持つことに苦労しています。さらに、 dolly-v2-12b
には、元のモデルに存在する、適切にフォーマットされた文字の書き込みなどの一部の機能がないことがわかりました。
すべての言語モデルと同様、 dolly-v2-12b
トレーニング コーパスの内容と制限を反映しています。
The Pile : GPT-J の事前トレーニング コーパスには、主に公共のインターネットから収集されたコンテンツが含まれており、ほとんどの Web スケール データセットと同様に、多くのユーザーが不快に感じるコンテンツが含まれています。そのため、モデルはこれらの欠点を反映する可能性が高く、不快なコンテンツを生成することが明示的に求められている場合には潜在的にあからさまに、偏ったまたは有害な暗黙の関連付けの場合のように微妙に反映することがあります。
databricks-dolly-15k
: dolly-v2-12b
が命令調整されているトレーニング データは、2023 年 3 月から 4 月にかけて Databricks 従業員によって生成された自然言語命令を表しており、クローズド QA や非公開 QA などの命令カテゴリの参照文として Wikipedia からの文章が含まれています。要約。当社の知る限り、わいせつな内容、知的財産、非公人に関する個人を特定する情報は含まれていませんが、タイプミスや事実誤認が含まれている可能性があります。データセットは、Wikipedia で見つかったバイアスも反映している可能性があります。最後に、このデータセットは、世界人口全体を代表していない人口統計である Databricks 従業員の興味や意味論的な選択を反映している可能性があります。
Databricks は、すべての個人と組織の可能性を最大化する、有益で誠実かつ無害な AI テクノロジーを開発するための継続的な研究開発に取り組んでいます。
トレーニングせずにモデルを単純にテストしたい場合は、モデルは Hugging Face で databricks/dolly-v2-12b として入手できます。
A100 GPU を搭載したマシンでtransformers
ライブラリを含むモデルを使用するには:
from transformers import pipeline
import torch
instruct_pipeline = pipeline(model="databricks/dolly-v2-12b", torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto")
その後、パイプラインを使用して指示に応答できます。
instruct_pipeline("Explain to me the difference between nuclear fission and fusion.")
A100 インスタンス タイプは、すべてのクラウド リージョンで利用できるわけではないか、プロビジョニングが難しい場合があります。他の GPU インスタンス タイプでも推論が可能です。
6.9B および 2.8B パラメータ モデルはそのまま動作するはずです。
A10 で 12B パラメータ モデルを使用して生成するには (例: g5.4xlarge
、1 x A10 24GB)、8 ビットの重みを使用して生成をロードして実行する必要があり、結果にわずかに影響します。
bitsandbytes
もインストールしますpipeline()
コマンドに、 model_kwargs={'load_in_8bit': True}
を追加します。 V100 (例: p3.2xlarge
、 1 x V100 16GB、 NC6s_v3
) を使用する場合は、いずれの場合も、代わりにpipeline()
でtorch_dtype=torch.float16
を設定します。
それ以外の場合は、上記の手順に従います。 12B パラメータ モデルは、V100 の 8 ビットではうまく機能しない可能性があります。
dolly
リポジトリを Databricks に追加します ([リポジトリ] で [リポジトリの追加] をクリックし、 https://github.com/databrickslabs/dolly.git
と入力して、 [リポジトリの作成] をクリックします)。Standard_ND96asr_v4
またはp4d.24xlarge
) で13.x ML (includes Apache Spark 3.4.0, GPU, Scala 2.12)
以降の単一ノード クラスターを開始します。これらのインスタンス タイプは、すべてのリージョンで利用できるわけではない場合や、プロビジョニングが難しい場合があることに注意してください。 Databricks で、これらのインスタンス タイプを表示するには (サポートされている場合)、最初に GPU ランタイムを選択し、[Photon を使用] の選択を解除する必要があることに注意してください。train_dolly
ノートブック (Github dolly
リポジトリ内のtrain_dolly.py
ファイル) を開き、GPU クラスターにアタッチして、すべてのセルを実行します。トレーニングが終了すると、ノートブックはモデルを/dbfs/dolly_training
の下に保存します。A100 インスタンス タイプは、すべてのクラウド リージョンで利用できるわけではないか、プロビジョニングが難しい場合があります。トレーニングは、メモリ使用量を削減するために小さな変更を加えれば、他の GPU インスタンス タイプでも可能です。ドリー モデル サイズが小さい場合にも可能です。これらの変更は最適ではありませんが、簡単に行うことができます。
gpu_family
ウィジェットから GPU ファミリ タイプを選択し、 num_gpus
ウィジェットに使用可能な GPU の数を入力して、残りのコードを実行します。次の GPU タイプのいずれかに合わせてモデルをトレーニングするために、さまざまなオプションが設定されます。
さまざまな構成の詳細は以下のとおりです。
A100 GPU は、すべてのモデル サイズのトレーニングに推奨されており、妥当な時間内で 12B パラメータ モデルをトレーニングできる唯一の GPU です。したがって、これはa100_config.json
deepspeed 構成ファイルで設定されているデフォルト構成です。
A10 では 12B パラメータ モデルのトレーニングはお勧めできません。
A10 インスタンス (例: g5.24xlarge
、4 x A10 24GB、 Standard_NV72ads_A10_v5
、2 x A10) で 6.9B パラメータ モデルをトレーニングするには、 gpu_family
ウィジェットからa10
選択し、 num_gpus
ウィジェットに使用可能な GPU の数を入力して実行します。コードの残りの部分。これは、 a10_config.json
deepspeed 構成ファイルを使用し、次の変更を加えます。
deepspeed
のtrain_dolly.py
呼び出しでは、 per-device-train-batch-size
とper-device-eval-batch-size
が 3 に設定されます。"zero_optimization"
セクション内に、以下を追加しました。 "offload_optimizer": {
"device": "cpu",
"pin_memory": true
},
32 GB の GPU メモリを搭載した V100 インスタンス (例: p3dn.24xlarge
またはStandard_ND40rs_v2
) で実行するには、 gpu_family
ウィジェットからv100
選択し、 num_gpus
ウィジェットに使用可能な GPU の数を入力して、残りのコードを実行します。これは、 v100_config.json
deepspeed 構成ファイルを使用し、次の変更を加えます。
per-device-train-batch-size
とper-device-eval-batch-size
を 3 に設定します。上記の 24GB A10 で機能するものと比較して、32GB インスタンスではバッチ サイズをわずかに増やすことができる場合があります。
pyenv local 3.8.13
python -m venv .venv
. .venv/bin/activate
pip install -r requirements_dev.txt
./run_pytest.sh
@online{DatabricksBlog2023DollyV2,
author = {Mike Conover and Matt Hayes and Ankit Mathur and Jianwei Xie and Jun Wan and Sam Shah and Ali Ghodsi and Patrick Wendell and Matei Zaharia and Reynold Xin},
title = {Free Dolly: Introducing the World's First Truly Open Instruction-Tuned LLM},
year = {2023},
url = {https://www.databricks.com/blog/2023/04/12/dolly-first-open-commercially-viable-instruction-tuned-llm},
urldate = {2023-06-30}
}