天天看點

Databrick Dolly:一種遵循指令的大型語言模型

作者:運維開發木子李

#挑戰30天在頭條寫日記#

Databrick Dolly:一種遵循指令的大型語言模型

Databricks 的Dolly是一種遵循指令的大型語言模型,在 Databricks 機器學習平台上進行訓練,并獲得商業用途許可。基于,Dolly接受了 Databricks 員工在 InstructGPT 論文中生成的約pythia-12b15k 條指令/響應微調記錄的訓練 ,這些記錄包括頭腦風暴、分類、封閉式 QA、生成、資訊提取、開放式 QA 和總結。不是最先進的模型,但确實表現出令人驚訝的高品質指令,遵循的行為不是其所基于的基礎模型的特征。databricks-dolly-15kdolly-v2-12b

Databricks 緻力于確定每個組織和個人都能從人工智能的變革力量中受益。Dolly 模型系列代表了我們在這一旅程中邁出的第一步,我們很高興與世界分享這項技術。

該模型在 Hugging Face 上以databricks/dolly-v2-12b形式提供。

型号概覽

dolly-v2-12b是由Databricks建立的 120 億參數因果語言模型,源自 EleutherAI 的 Pythia-12b ,并在 Databricks 員工生成的約 15K 記錄指令語料庫上進行微調,并根據許可 (CC-BY-SA) 釋出

已知限制

性能限制

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 執行個體類型上進行推理。

A10 GPU

6.9B 和 2.8B 參數模型應按原樣工作。

要在 A10s(例如:1 x A10 24GB)上使用 12B 參數模型進行生成g5.4xlarge,需要使用 8 位權重加載并運作生成,這會對結果産生輕微影響:

  • 還安裝bitsandbytes
  • 添加model_kwargs={'load_in_8bit': True}到pipeline()上面顯示的指令

V100 GPU

使用 V100(例如:p3.2xlarge、1 x V100 16GB、NC6s_v3)時,在任何情況下均應設定torch_dtype=torch.float16為pipeline()。

否則,請按照上述步驟操作。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存儲庫中的筆記本(即train_dolly.pyGithubdolly存儲庫中的檔案),附加到 GPU 叢集,然後運作所有單元。訓練完成後,筆記本會将模型儲存在/dbfs/dolly_training.

其他執行個體的訓練

A100 執行個體類型并非在所有雲區域都可用,或者可能難以預配。對于較小的 Dolly 模型大小,可以在其他 GPU 執行個體類型上進行訓練,并進行少量修改以減少記憶體使用。這些修改并不是最佳的,但很容易實作。

從小部件中選擇您的 GPU 系列類型gpu_family,輸入小部件中可用的 GPU 數量num_gpus,然後運作其餘代碼。将為您設定許多不同的選項來訓練以下 GPU 類型之一的模型:

  • A100(預設)
  • A10
  • V100

不同配置的詳細資訊如下。

A100 GPU

A100 GPU 是訓練所有模型大小的首選,并且是唯一可以在合理的時間内訓練 12B 參數模型的 GPU。是以,這是在a100_config.jsondeepspeed 配置檔案中設定的預設配置。

A10 GPU

不建議在 A10 上訓練 12B 參數模型。

要在 A10 執行個體(例如:g5.24xlarge4 x A10 24GB;Standard_NV72ads_A10_v52 x A10)上訓練 6.9B 參數模型,隻需a10從小gpu_family部件中進行選擇并輸入小部件中可用的 GPU 數量num_gpus,然後運作其餘代碼即可。這将使用a10_config.jsondeepspeed 配置檔案,該檔案進行以下更改:

  • per-device-train-batch-size并在調用per-device-eval-batch-size中設定為 3train_dolly.pydeepspeed
  • 在"zero_optimization"deepspeed 配置部分中,我們添加了:
  • "offload_optimizer": { "device": "cpu", "pin_memory": true },

V100 GPU

要在具有 32GB GPU 記憶體(例如:p3dn.24xlarge或)的 V100 執行個體上運作,隻需從小部件中Standard_ND40rs_v2進行選擇并輸入小部件中可用的 GPU 數量,然後運作其餘代碼。這将使用deepspeed 配置檔案,該檔案進行以下更改:v100gpu_familynum_gpusv100_config.json

  • 它對 A10 進行了上述更改
  • 它啟用 fp16 浮點格式
  • 它将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}
}           

項目位址:

https://github.com/databrickslabs/dolly

繼續閱讀