Databricks 的 Dolly 是一種遵循指令的大型語言模型,在 Databricks 機器學習平台上進行訓練,並獲得商業用途許可。基於pythia-12b
,Dolly 接受了約 15k 指令/響應微調記錄databricks-dolly-15k
的訓練,這些記錄由Databricks 員工在InstructGPT 論文的能力域中生成,包括頭腦風暴、分類、封閉式QA、生成、信息提取、開放式QA和總結。 dolly-v2-12b
不是最先進的模型,但確實表現出了令人驚訝的高品質指令,遵循的行為並非其所基於的基礎模型的特徵。
Databricks 致力於確保每個組織和個人都能從人工智慧的變革力量中受益。 Dolly 模型系列代表了我們在這趟旅程中邁出的第一步,我們很高興與世界分享這項技術。
該模型在 Hugging Face 上以 databricks/dolly-v2-12b 形式提供。
dolly-v2-12b
是Databricks 創建的一個120 億參數因果語言模型,源自EleutherAI 的Pythia-12b,並在Databricks 員工生成的約15K 記錄指令語料庫上進行了微調,並在許可下發布(CC-BY -南澳)
dolly-v2-12b
不是最先進的生成語言模型,儘管定量基準測試正在進行中,但其設計目的並不是與更現代的模型架構或受更大預訓練語料庫影響的模型競爭。
Dolly 模型系列正在積極開發中,因此任何缺點清單都不太可能詳盡無遺,但我們在此列出了已知的限制和失誤,作為記錄並與社區分享我們初步發現的一種方式。特別是, dolly-v2-12b
會遇到以下問題:語法複雜的提示、程式設計問題、數學運算、事實錯誤、日期和時間、開放式問答、幻覺、列舉特定長度的列表、文體模仿、幽默感此外,我們發現dolly-v2-12b
不具備原始模型中存在的某些功能,例如格式良好的字母書寫。
與所有語言模型一樣, dolly-v2-12b
反映了其訓練語料庫的內容和限制。
堆:GPT-J 的預訓練語料庫包含主要從公共互聯網收集的內容,並且與大多數網路規模的資料集一樣,它包含許多用戶認為令人反感的內容。因此,該模型可能會反映這些缺點,在明確要求生成令人反感的內容的情況下可能會公開地反映,有時會微妙地反映,例如在有偏見或有害的隱性關聯的情況下。
databricks-dolly-15k
:對dolly-v2-12b
進行指令調整的訓練資料代表Databricks 員工在2023 年3 月至4 月期間產生的自然語言指令,並包括來自維基百科的段落作為指令類別的參考段落,例如封閉式QA 和總結。據我們所知,它不包含有關非公眾人物的淫穢、知識產權或個人識別信息,但可能包含拼寫錯誤和事實錯誤。該資料集也可能反映了維基百科中發現的偏見。最後,該資料集可能反映了 Databricks 員工的興趣和語義選擇,這群人並不能代表全球整體人口。
Databricks 致力於持續的研究和開發工作,以開發有用、誠實且無害的人工智慧技術,以最大限度地發揮所有個人和組織的潛力。
如果您想簡單地測試模型而不進行訓練,可以在 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 參數模型應按原樣工作。
要在 A10s 上使用 12B 參數模型進行生成(例如: g5.4xlarge
、1 x A10 24GB),需要使用 8 位元權重載入並運行生成,這會對結果產生輕微影響:
bitsandbytes
model_kwargs={'load_in_8bit': True}
加入上面顯示的pipeline()
指令中當使用 V100s(例如: p3.2xlarge
、 1 x V100 16GB、 NC6s_v3
)時,在所有情況下,請在pipeline()
中設定torch_dtype=torch.float16
。
否則,請按照上述步驟操作。 12B 參數模型可能無法在 V100 上的 8 位元中正常運作。
dolly
儲存庫新增至 Databricks(在“儲存庫”下點擊“新增儲存庫”,輸入https://github.com/databrickslabs/dolly.git
,然後按一下「建立儲存庫」)。13.x ML (includes Apache Spark 3.4.0, GPU, Scala 2.12)
或更高版本的單節點集群,其節點類型具有 8 個 A100 GPU(例如Standard_ND96asr_v4
或p4d.24xlarge
)。請注意,這些實例類型可能並非在所有區域都可用,或者可能難以預配。在 Databricks 中,請注意,您必須先選擇 GPU 執行時間,然後取消選擇“使用 Photon”,才能顯示這些實例類型(如果支援)。train_dolly
筆記本(即 Github dolly
儲存庫中的train_dolly.py
檔案),連接到 GPU 集群,然後運行所有單元。訓練完成後,筆記本會將模型儲存在/dbfs/dolly_training
下。A100 實例類型並非在所有雲端區域都可用,或可能難以預配。對於較小的 Dolly 模型大小,可以在其他 GPU 執行個體類型上進行訓練,並進行少量修改以減少記憶體使用。這些修改並不是最佳的,但很容易實現。
從gpu_family
小工具中選擇 GPU 系列類型,輸入num_gpus
小工具中可用的 GPU 數量,然後執行其餘程式碼。將為您設定許多不同的選項來訓練以下 GPU 類型之一的模型:
不同配置的詳細資訊如下。
A100 GPU 是訓練所有模型大小的首選,也是唯一可以在合理的時間內訓練 12B 參數模型的 GPU。因此,這是預設配置,如a100_config.json
deepspeed 設定檔中設定的那樣。
不建議在 A10 上訓練 12B 參數模型。
要在 A10 實例num_gpus
例如: g5.24xlarge
, 4 x A10 24GB; Standard_NV72ads_A10_v5
, 2 x A10)上訓練 6.9B 參數模型,只需從gpu_family
小部件中選擇a10
然後運行其餘的程式碼。這將使用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
},
若要在具有 32GB 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}
}