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 实例(例如: 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
},
要在具有 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}
}