模型简介
模型特点
模型能力
使用案例
🚀 dolly-v2-12b模型卡片
Databricks的dolly-v2-12b
是一个遵循指令的大语言模型,在Databricks机器学习平台上训练,可用于商业用途。它基于pythia-12b
,在约15k条指令/响应微调记录上进行训练,这些记录来自Databricks员工生成的databricks-dolly-15k
,涵盖了InstructGPT论文中的多个能力领域,如头脑风暴、分类、封闭式问答、生成、信息提取、开放式问答和总结等。dolly-v2-12b
并非最先进的模型,但在遵循指令方面表现出了令人惊讶的高质量,这与它所基于的基础模型不同。
Dolly v2还有以下较小尺寸的模型:
- dolly-v2-7b,基于
pythia-6.9b
,有69亿参数。 - dolly-v2-3b,基于
pythia-2.8b
,有28亿参数。
有关在各种GPU配置下运行推理的提示,请参考dolly GitHub仓库。
所有者:Databricks, Inc.
🚀 快速开始
模型概述
dolly-v2-12b
是由Databricks创建的一个具有120亿参数的因果语言模型,它基于EleutherAI的Pythia-12b,并在Databricks员工生成的约15K条指令语料库~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
函数加载遵循指令的管道,如下所示。这里加载了模型仓库中此处的自定义InstructionTextGenerationPipeline
,因此需要设置trust_remote_code = True
。如果支持torch_dtype = torch.bfloat16
,通常建议使用它以减少内存使用,且这似乎不会影响输出质量。如果内存充足,也可以去掉该参数。
import torch
from transformers import pipeline
generate_text = pipeline(model="databricks/dolly-v2-12b", torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto")
然后可以使用该管道回答指令:
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,将其与你的笔记本放在一起,然后从加载的模型和分词器自己构建管道:
import torch
from instruct_pipeline import InstructionTextGenerationPipeline
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("databricks/dolly-v2-12b", padding_side="left")
model = AutoModelForCausalLM.from_pretrained("databricks/dolly-v2-12b", device_map="auto", torch_dtype=torch.bfloat16)
generate_text = InstructionTextGenerationPipeline(model=model, tokenizer=tokenizer)
LangChain使用示例
要在LangChain中使用该管道,必须设置return_full_text = True
,因为LangChain期望返回完整文本,而管道的默认设置是只返回新生成的文本。
import torch
from transformers import pipeline
generate_text = pipeline(model="databricks/dolly-v2-12b", 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
# 无输入的指令模板
prompt = PromptTemplate(
input_variables=["instruction"],
template="{instruction}")
# 有输入的指令模板
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-12b
不是最先进的生成式语言模型,尽管正在进行定量基准测试,但它的设计目的并非与更现代的模型架构或在更大预训练语料库上训练的模型竞争。
Dolly模型家族正在积极开发中,因此任何缺点列表都不太可能详尽无遗,但我们在此列出已知的限制和失误,以便向社区记录和分享我们的初步发现。特别是,dolly-v2-12b
在处理以下方面存在困难:语法复杂的提示、编程问题、数学运算、事实错误、日期和时间、开放式问答、幻觉、枚举特定长度的列表、风格模仿、幽默感等。此外,我们发现dolly-v2-12b
不具备原始模型中的一些能力,如格式良好的信件写作。
数据集限制
与所有语言模型一样,dolly-v2-12b
反映了其训练语料库的内容和限制。
- The Pile:GPT - J的预训练语料库主要包含从公共互联网收集的内容,与大多数网络规模的数据集一样,它包含许多用户可能会反感的内容。因此,该模型可能会反映这些缺点,在明确要求生成反感内容时可能会明显表现出来,有时也会以微妙的方式表现出来,如存在有偏见或有害的隐含关联。
databricks-dolly-15k
:dolly-v2-12b
进行指令微调的训练数据代表了Databricks员工在2023年3月至4月期间生成的自然语言指令,其中包括来自维基百科的段落,作为封闭式问答和总结等指令类别的参考段落。据我们所知,它不包含淫秽内容、知识产权或非公众人物的个人身份信息,但可能包含拼写错误和事实错误。该数据集也可能反映了维基百科中的偏见。最后,该数据集可能反映了Databricks员工的兴趣和语义选择,而这一群体并不能代表全球总体人口。
Databricks致力于持续的研究和开发工作,以开发有益、诚实和无害的人工智能技术,充分发挥所有个人和组织的潜力。
基准指标
以下是各种模型在EleutherAI LLM Evaluation Harness上的基准测试性能;模型结果按几何平均值排序,以产生一个清晰的顺序。如上所述,这些结果表明dolly-v2-12b
并非最先进的模型,实际上在某些评估基准测试中表现不如dolly-v1-6b
。我们认为这是由于基础微调数据集的组成和大小造成的,但要对这些差异的来源做出有力的说明,还需要进一步的研究。
模型 | 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 |
📄 许可证
本项目采用MIT许可证。
📚 引用
@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}
}
🔚 结束语
祝使用愉快!



