Databricks 的 dolly-v2-3b 是一种基于 Databricks 机器学习平台训练的指令跟随大型语言模型,可以用于商业用途。基于 pythia-2.8,Dolly 在 InstructGPT 论文中的能力领域中,包括头脑风暴、分类、闭合型问答、生成、信息提取、开放型问答和摘要,由 Databricks 员工生成了约 15,000 条指令/回复微调记录。dolly-v2-3b 不是最先进的模型,但具有非常高质量的指令跟随行为,超出了它所基于的基础模型的特性。
Dolly v2 还有更大的模型尺寸可用:
有关在各种 GPU 配置下运行推理的提示,请参阅 dolly GitHub repo 。
所有者:Databricks,Inc.
dolly-v2-3b 是由 Databricks 创建的 28亿参数因果语言模型,源于 EleutherAI's 和 Pythia-2.8b ,并在由 Databricks 员工生成的 ~15K record instruction corpus 上进行了微调,根据宽松许可证(CC-BY-SA)发布。
要在带有 GPU 的机器上使用 transformers 库使用该模型,首先确保已安装 transformers 和 accelerate 库。在 Databricks 笔记本中,您可以运行:
%pip install "accelerate>=0.16.0,<1" "transformers[torch]>=4.28.1,<5" "torch>=1.13.1,<2"
可以使用 pipeline 函数加载指令跟随流程,如下所示。这将加载模型仓库 here 中的自定义 InstructionTextGenerationPipeline,因此需要 trust_remote_code=True。通常建议包含 torch_dtype=torch.bfloat16(如果支持此类型),以减少内存使用。它似乎不会影响输出质量。如果内存足够,也可以删除它。
import torch from transformers import pipeline generate_text = pipeline(model="databricks/dolly-v2-3b", torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto")
然后,您可以使用该 pipeline 来回答指令:
res = generate_text("Explain to me the difference between nuclear fission and fusion.") print(res[0]["generated_text"])
或者,如果您不想使用 trust_remote_code=True,则可以下载 instruct_pipeline.py ,将其存储在笔记本旁边,并根据加载的模型和分词器构建自己的 pipeline:
import torch from instruct_pipeline import InstructionTextGenerationPipeline from transformers import AutoModelForCausalLM, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("databricks/dolly-v2-3b", padding_side="left") model = AutoModelForCausalLM.from_pretrained("databricks/dolly-v2-3b", device_map="auto", torch_dtype=torch.bfloat16) generate_text = InstructionTextGenerationPipeline(model=model, tokenizer=tokenizer)
要在 LangChain 中使用该 pipeline,必须设置 return_full_text=True,因为 LangChain 需要返回完整文本,默认情况下 pipeline 只返回新文本。
import torch from transformers import pipeline generate_text = pipeline(model="databricks/dolly-v2-3b", torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto", return_full_text=True)
您可以创建只包含指令或包含指令与上下文的提示:
from langchain import PromptTemplate, LLMChain from langchain.llms import HuggingFacePipeline # template for an instrution with no input prompt = PromptTemplate( input_variables=["instruction"], template="{instruction}") # template for an instruction with input prompt_with_context = PromptTemplate( input_variables=["instruction", "context"], template="{instruction}\n\nInput:\n{context}") hf_pipeline = HuggingFacePipeline(pipeline=generate_text) llm_chain = LLMChain(llm=hf_pipeline, prompt=prompt) llm_context_chain = LLMChain(llm=hf_pipeline, prompt=prompt_with_context)
使用简单指令进行预测的示例:
print(llm_chain.predict(instruction="Explain to me the difference between nuclear fission and fusion.").lstrip())
使用带有上下文的指令进行预测的示例:
context = """George Washington (February 22, 1732[b] - December 14, 1799) was an American military officer, statesman, and Founding Father who served as the first president of the United States from 1789 to 1797.""" print(llm_context_chain.predict(instruction="When was George Washington president?", context=context).lstrip())
dolly-v2-3b 不是最先进的生成型语言模型,虽然定量基准测试仍在进行中,但它不设计与规模更大的预训练语料库或更现代的模型体系结构进行竞争。
Dolly 模型系列处于活跃开发中,因此任何限制列表都不可能是详尽无遗的,但我们在这里列出已知的限制和失败,以便记录和与社区分享我们的初步发现。特别是,dolly-v2-3b 在以下方面存在困难:句法复杂的提示、编程问题、数学运算、事实错误、日期和时间、开放式问题回答、幻觉、列举特定长度的列表、风格模仿、幽默感等。此外,我们发现 dolly-v2-3b 没有一些能力,例如原始模型中的格式正确的信函撰写。
与所有语言模型一样,dolly-v2-3b 反映了其训练数据集的内容和限制。
The Pile :GPT-J 的预训练语料库主要包含从公共互联网收集的内容,与大多数大规模网络数据集一样,它包含许多用户可能会找到不可接受的内容。因此,该模型可能会反映这些缺点,有可能会在明确要求生成不可接受内容的情况下公然反映出来,并且有时会以微妙的方式反映,例如存在偏见或有害的隐含联系。
databricks-dolly-15k :dolly-v2-3b 的指令微调训练数据是由 Databricks 员工在 2023 年 3 月和 4 月期间生成的自然语言指令,并包括来自维基百科的参考段落作为闭合型 QA 和摘要等指令类别的参考段落。据我们所知,它不包含淫秽内容、非公开人物的知识产权或个人身份信息,但可能包含拼写错误和事实错误。该数据集还可能反映了维基百科中存在的偏见。最后,该数据集可能反映了 Databricks 员工的兴趣和语义选择,而这个群体并不代表全球人口。
Databricks 致力于持续研究和开发工作,致力于开发有益、诚实和无害的人工智能技术,最大限度地发挥所有个人和组织的潜力。
以下是各种模型在 EleutherAI LLM Evaluation Harness 上的基准性能,模型结果按几何平均值排序以产生可理解的顺序。如上所述,这些结果表明 dolly-v2-3b 不是最先进的。它在评估基准测试中表现低于 dolly-v1-6b,这并不令人意外,考虑到它只有一半的参数数量。
model | openbookqa | arc_easy | winogrande | hellaswag | arc_challenge | piqa | boolq | gmean |
---|---|---|---|---|---|---|---|---|
EleutherAI/pythia-2.8b | 0.348 | 0.585859 | 0.589582 | 0.591217 | 0.323379 | 0.73395 | 0.638226 | 0.523431 |
EleutherAI/pythia-6.9b | 0.368 | 0.604798 | 0.608524 | 0.631548 | 0.343857 | 0.761153 | 0.6263 | 0.543567 |
databricks/dolly-v2-3b | 0.384 | 0.611532 | 0.589582 | 0.650767 | 0.370307 | 0.742655 | 0.575535 | 0.544886 |
EleutherAI/pythia-12b | 0.364 | 0.627104 | 0.636148 | 0.668094 | 0.346416 | 0.760065 | 0.673394 | 0.559676 |
EleutherAI/gpt-j-6B | 0.382 | 0.621633 | 0.651144 | 0.662617 | 0.363481 | 0.761153 | 0.655963 | 0.565936 |
databricks/dolly-v2-12b | 0.408 | 0.63931 | 0.616417 | 0.707927 | 0.388225 | 0.757889 | 0.568196 | 0.56781 |
databricks/dolly-v2-7b | 0.392 | 0.633838 | 0.607735 | 0.686517 | 0.406997 | 0.750816 | 0.644037 | 0.573487 |
databricks/dolly-v1-6b | 0.41 | 0.62963 | 0.643252 | 0.676758 | 0.384812 | 0.773667 | 0.687768 | 0.583431 |
EleutherAI/gpt-neox-20b | 0.402 | 0.683923 | 0.656669 | 0.7142 | 0.408703 | 0.784004 | 0.695413 | 0.602236 |
@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} }