Views
No views yet
dolly-v2-3b, an instruction-following large language model trained on the Databricks machine learning platform
that is licensed for commercial use. Based on pythia-2.8b, Dolly is trained on ~15k instruction/response fine tuning records
databricks-dolly-15k generated
by Databricks employees in capability domains from the InstructGPT paper, including brainstorming, classification, closed QA, generation,
information extraction, open QA and summarization. dolly-v2-3b is not a state-of-the-art model, but does exhibit surprisingly
high quality instruction following behavior not characteristic of the foundation model on which it is based.pythia-12bpythia-6.9bdolly-v2-3b is a 2.8 billion parameter causal language model created by Databricks that is derived from
EleutherAI's Pythia-2.8b and fine-tuned
on a ~15K record instruction corpus generated by Databricks employees and released under a permissive license (CC-BY-SA)transformers library on a machine with GPUs, first make sure you have the transformers and accelerate libraries installed.
In a Databricks notebook you could run:%pip install "accelerate>=0.16.0,<1" "transformers[torch]>=4.28.1,<5" "torch>=1.13.1,<2"pipeline function as shown below. This loads a custom InstructionTextGenerationPipeline
found in the model repo here, which is why trust_remote_code=True is required.
Including torch_dtype=torch.bfloat16 is generally recommended if this type is supported in order to reduce memory usage. It does not appear to impact output quality.
It is also fine to remove it if there is sufficient memory.1import torch
2from transformers import pipeline
3
4generate_text = pipeline(model="databricks/dolly-v2-3b", torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto")1res = generate_text("Explain to me the difference between nuclear fission and fusion.")
2print(res[0]["generated_text"])trust_remote_code=True you can download instruct_pipeline.py,
store it alongside your notebook, and construct the pipeline yourself from the loaded model and tokenizer:1import torch
2from instruct_pipeline import InstructionTextGenerationPipeline
3from transformers import AutoModelForCausalLM, AutoTokenizer
4
5tokenizer = AutoTokenizer.from_pretrained("databricks/dolly-v2-3b", padding_side="left")
6model = AutoModelForCausalLM.from_pretrained("databricks/dolly-v2-3b", device_map="auto", torch_dtype=torch.bfloat16)
7
8generate_text = InstructionTextGenerationPipeline(model=model, tokenizer=tokenizer)return_full_text=True, as LangChain expects the full text to be returned
and the default for the pipeline is to only return the new text.1import torch
2from transformers import pipeline
3
4generate_text = pipeline(model="databricks/dolly-v2-3b", torch_dtype=torch.bfloat16,
5 trust_remote_code=True, device_map="auto", return_full_text=True)1from langchain import PromptTemplate, LLMChain
2from langchain.llms import HuggingFacePipeline
3
4# template for an instrution with no input
5prompt = PromptTemplate(
6 input_variables=["instruction"],
7 template="{instruction}")
8
9# template for an instruction with input
10prompt_with_context = PromptTemplate(
11 input_variables=["instruction", "context"],
12 template="{instruction}\n\nInput:\n{context}")
13
14hf_pipeline = HuggingFacePipeline(pipeline=generate_text)
15
16llm_chain = LLMChain(llm=hf_pipeline, prompt=prompt)
17llm_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())1context = """George Washington (February 22, 1732[b] - December 14, 1799) was an American military officer, statesman,
2and Founding Father who served as the first president of the United States from 1789 to 1797."""
3
4print(llm_context_chain.predict(instruction="When was George Washington president?", context=context).lstrip())dolly-v2-3b is not a state-of-the-art generative language model and, though quantitative benchmarking is ongoing, is not designed to perform
competitively with more modern model architectures or models subject to larger pretraining corpuses.dolly-v2-3b struggles with: syntactically complex prompts, programming problems, mathematical operations, factual errors,
dates and times, open-ended question answering, hallucination, enumerating lists of specific length, stylistic mimicry, having a sense of humor, etc.
Moreover, we find that dolly-v2-3b does not have some capabilities, such as well-formatted letter writing, present in the original model.dolly-v2-3b reflects the content and limitations of its training corpuses.databricks-dolly-15k: The training data on which dolly-v2-3b is instruction tuned represents natural language instructions generated
by Databricks employees during a period spanning March and April 2023 and includes passages from Wikipedia as references passages
for instruction categories like closed QA and summarization. To our knowledge it does not contain obscenity, intellectual property or
personally identifying information about non-public figures, but it may contain typos and factual errors.
The dataset may also reflect biases found in Wikipedia. Finally, the dataset likely reflects
the interests and semantic choices of Databricks employees, a demographic which is not representative of the global population at large.dolly-v2-3b is not state of the art.
It underperforms dolly-v1-6b in the evaluation benchmarks, which is not surprising considering it has half the number of parameters.| 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}
}