Databricks 的Dolly是一种遵循指令的大型语言模型,在 Databricks 机器学习平台上进行训练,并获得商业用途许可。基于,Dolly 接受了由 Databricks 员工在 InstructGPT 论文的能力域中生成的pythia-12b
约 15k 条指令/响应微调记录的训练
,包括头脑风暴、分类、封闭式 QA、生成、信息提取、开放式 QA 和总结。不是最先进的模型,但确实表现出令人惊讶的高质量指令,遵循的行为不是其所基于的基础模型的特征。databricks-dolly-15k
dolly-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 实例类型上进行推理。
6.9B 和 2.8B 参数模型应该按原样工作。
要在 A10s(例如:1 x A10 24GB)上使用 12B 参数模型进行生成g5.4xlarge
,需要使用 8 位权重加载并运行生成,这会对结果产生轻微影响:
- 还安装
bitsandbytes
- 添加
model_kwargs={'load_in_8bit': True}
到pipeline()
上面显示的命令
使用 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.py
Githubdolly
存储库中的文件),附加到 GPU 集群,然后运行所有单元。训练完成后,笔记本会将模型保存在/dbfs/dolly_training
.
A100 实例类型并非在所有云区域都可用,或者可能难以预配。对于较小的 Dolly 模型大小,可以在其他 GPU 实例类型上进行训练,并进行少量修改以减少内存使用。这些修改并不是最佳的,但很容易实现。
从小部件中选择您的 GPU 系列类型gpu_family
,输入小部件中可用的 GPU 数量num_gpus
,然后运行其余代码。将为您设置许多不同的选项来训练以下 GPU 类型之一的模型:
- A100(默认)
- A10
- V100
不同配置的详细信息如下。
A100 GPU 是训练所有模型大小的首选,并且是唯一可以在合理的时间内训练 12B 参数模型的 GPU。因此,这是在a100_config.json
deepspeed 配置文件中设置的默认配置。
不建议在 A10 上训练 12B 参数模型。
g5.24xlarge
要在 A10 实例(例如:4 x A10 24GB;Standard_NV72ads_A10_v5
2 x A10)上训练 6.9B 参数模型,只需a10
从小gpu_family
部件中进行选择并输入小部件中可用的 GPU 数量num_gpus
,然后运行其余代码即可。这将使用a10_config.json
deepspeed 配置文件,该文件进行以下更改:
per-device-train-batch-size
并在调用per-device-eval-batch-size
中设置为 3train_dolly.py
deepspeed
- 在
"zero_optimization"
deepspeed 配置部分中,我们添加了:"offload_optimizer": { "device": "cpu", "pin_memory": true },
要在具有 32GB GPU 内存(例如:p3dn.24xlarge
或Standard_ND40rs_v2
)的 V100 实例上运行,只需v100
从小gpu_family
部件中进行选择并输入小部件中可用的 GPU 数量num_gpus
,然后运行其余代码。这将使用v100_config.json
deepspeed 配置文件,该文件进行以下更改:
- 它对 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}
}