Databricks의 Dolly는 상업적 사용이 허가된 Databricks 기계 학습 플랫폼에서 훈련된 명령을 따르는 대규모 언어 모델입니다. pythia-12b
를 기반으로 Dolly는 브레인스토밍, 분류, 비공개 QA, 생성, 정보 추출, 공개 QA를 포함하여 InstructGPT 문서의 기능 영역에서 Databricks 직원이 생성한 ~15k 명령/응답 미세 조정 기록 databricks-dolly-15k
에 대해 교육을 받았습니다. 그리고 요약. dolly-v2-12b
는 최첨단 모델은 아니지만 기반 모델의 특징이 아닌 동작에 따라 놀랍도록 높은 품질의 명령을 보여줍니다.
Databricks는 모든 조직과 개인이 인공 지능의 혁신적인 힘으로부터 혜택을 누릴 수 있도록 최선을 다하고 있습니다. Dolly 모델 제품군은 이 여정의 첫 번째 단계를 대표하며, 이 기술을 전 세계와 공유하게 되어 기쁘게 생각합니다.
이 모델은 Hugging Face에서 databricks/dolly-v2-12b로 제공됩니다.
dolly-v2-12b
는 EleutherAI의 Pythia-12b에서 파생되었으며 Databricks 직원이 생성하고 허용 라이센스에 따라 출시된 ~15K 레코드 명령 코퍼스에서 미세 조정된 Databricks에서 만든 120억 매개변수 인과 언어 모델입니다(CC-BY- SA)
dolly-v2-12b
최첨단 생성 언어 모델이 아니며 정량적 벤치마킹이 진행 중이지만 보다 현대적인 모델 아키텍처 또는 더 큰 사전 훈련 코퍼스가 적용되는 모델과 경쟁적으로 작동하도록 설계되지 않았습니다.
Dolly 모델 계열은 활발하게 개발 중이므로 모든 단점 목록이 완전할 수는 없습니다. 그러나 예비 조사 결과를 문서화하고 커뮤니티와 공유하기 위한 수단으로 여기에 알려진 제한 사항과 오류를 포함합니다. 특히, dolly-v2-12b
구문적으로 복잡한 프롬프트, 프로그래밍 문제, 수학적 연산, 사실적 오류, 날짜 및 시간, 개방형 질문 응답, 환각, 특정 길이의 목록 열거, 문체 모방, 유머 감각 등의 문제로 어려움을 겪고 있습니다. 또한, dolly-v2-12b
에는 원래 모델에 있는 올바른 형식의 편지 쓰기와 같은 일부 기능이 없다는 것을 발견했습니다.
모든 언어 모델과 마찬가지로 dolly-v2-12b
훈련 자료의 내용과 한계를 반영합니다.
The Pile : GPT-J의 사전 훈련 코퍼스에는 대부분 공용 인터넷에서 수집된 콘텐츠가 포함되어 있으며 대부분의 웹 규모 데이터 세트와 마찬가지로 많은 사용자가 불쾌하다고 생각할 콘텐츠가 포함되어 있습니다. 따라서 모델은 이러한 단점을 반영할 가능성이 높으며, 불쾌한 콘텐츠를 생성하도록 명시적으로 요청하는 경우 잠재적으로 명백하게, 때로는 편향되거나 유해한 암시적 연관성의 경우처럼 미묘하게 반영할 수 있습니다.
databricks-dolly-15k
: dolly-v2-12b
가 교육 조정된 교육 데이터는 2023년 3월부터 4월까지 Databricks 직원이 생성한 자연어 지침을 나타내며 Wikipedia의 구절을 비공개 QA 및 비공개 QA와 같은 지침 범주에 대한 참조 구절로 포함합니다. 요약. 우리가 아는 바로는 여기에는 음란물, 지적 재산 또는 비공개 인물에 대한 개인 식별 정보가 포함되어 있지 않지만 오타 및 사실적 오류가 포함될 수 있습니다. 데이터 세트는 Wikipedia에서 발견된 편견을 반영할 수도 있습니다. 마지막으로, 데이터세트는 전 세계 인구 전체를 대표하지 않는 인구통계인 Databricks 직원의 관심사와 의미론적 선택을 반영할 가능성이 높습니다.
Databricks는 모든 개인과 조직의 잠재력을 극대화하는 유용하고 정직하며 무해한 AI 기술을 개발하기 위해 지속적인 연구 개발 노력에 전념하고 있습니다.
훈련 없이 모델을 간단히 테스트하려는 경우 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(예: g5.4xlarge
, 1 x A10 24GB)에서 12B 매개변수 모델을 사용하여 생성하려면 8비트 가중치를 사용하여 생성을 로드하고 실행해야 하며 이는 결과에 약간 영향을 미칩니다.
bitsandbytes
도 설치하세요pipeline()
명령에 model_kwargs={'load_in_8bit': True}
를 추가합니다. V100s(예: p3.2xlarge
, 1 x V100 16GB, NC6s_v3
)를 사용하는 경우 모든 경우에 대신 pipeline()
에서 torch_dtype=torch.float16
설정하세요.
그렇지 않은 경우 위의 단계를 따르세요. 12B 매개변수 모델은 V100의 8비트에서 제대로 작동하지 않을 수 있습니다.
dolly
저장소를 추가합니다(Repos에서 Add Repo를 클릭하고 https://github.com/databrickslabs/dolly.git
입력한 다음 Create Repo를 클릭합니다).Standard_ND96asr_v4
또는 p4d.24xlarge
)을 사용하여 13.x ML (includes Apache Spark 3.4.0, GPU, Scala 2.12)
이상 단일 노드 클러스터를 시작합니다. 이러한 인스턴스 유형은 일부 지역에서 사용 가능하지 않거나 프로비저닝이 어려울 수 있습니다. Databricks에서는 이러한 인스턴스 유형이 표시되도록 하려면 먼저 GPU 런타임을 선택하고 "Photon 사용"을 선택 취소해야 합니다(지원되는 경우).dolly
저장소의 train_dolly.py
파일)에서 train_dolly
노트북을 열고 GPU 클러스터에 연결하고 모든 셀을 실행합니다. 훈련이 끝나면 노트북은 /dbfs/dolly_training
아래에 모델을 저장합니다.A100 인스턴스 유형은 모든 클라우드 지역에서 사용할 수 없거나 프로비저닝하기 어려울 수 있습니다. 다른 GPU 인스턴스 유형, 더 작은 Dolly 모델 크기 및 메모리 사용량을 줄이기 위한 약간의 수정을 통해 훈련이 가능합니다. 이러한 수정은 최적은 아니지만 간단하게 수행할 수 있습니다.
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 구성 파일을 사용하여 다음과 같이 변경됩니다.
per-device-train-batch-size
및 per-device-eval-batch-size
deepspeed
의 train_dolly.py
호출에서 3으로 설정됩니다."zero_optimization"
섹션에 다음을 추가했습니다. "offload_optimizer": {
"device": "cpu",
"pin_memory": true
},
32GB GPU 메모리(예: p3dn.24xlarge
또는 Standard_ND40rs_v2
)가 있는 V100 인스턴스에서 실행하려면 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}
}