Dolly ของ Databricks คือโมเดลภาษาขนาดใหญ่ที่ทำตามคำสั่งซึ่งได้รับการฝึกฝนบนแพลตฟอร์มแมชชีนเลิร์นนิงของ Databricks ที่ได้รับอนุญาตให้ใช้ในเชิงพาณิชย์ จาก pythia-12b
นั้น Dolly ได้รับการฝึกอบรมเกี่ยวกับบันทึกการปรับแต่งคำสั่ง/การตอบสนองประมาณ 15,000 databricks-dolly-15k
ที่สร้างโดยพนักงาน Databricks ในโดเมนความสามารถจากรายงาน InstructGPT รวมถึงการระดมความคิด การจัดหมวดหมู่ QA แบบปิด การสร้าง การดึงข้อมูล QA แบบเปิด และการสรุป dolly-v2-12b
ไม่ใช่โมเดลที่ล้ำสมัย แต่แสดงคำสั่งคุณภาพสูงอย่างน่าประหลาดใจตามพฤติกรรมที่ไม่มีลักษณะเฉพาะของโมเดลพื้นฐานที่ใช้
Databricks มุ่งมั่นที่จะสร้างความมั่นใจว่าทุกองค์กรและแต่ละบุคคลจะได้รับประโยชน์จากพลังการเปลี่ยนแปลงของปัญญาประดิษฐ์ ตระกูลโมเดล Dolly ถือเป็นก้าวแรกของเราในการเดินทางครั้งนี้ และเรารู้สึกตื่นเต้นที่จะแบ่งปันเทคโนโลยีนี้กับโลก
โมเดลนี้มีอยู่ใน Hugging Face ในชื่อ databricks/dolly-v2-12b
dolly-v2-12b
คือโมเดลภาษาเชิงสาเหตุพารามิเตอร์ 12,000 ล้านพารามิเตอร์ที่สร้างขึ้นโดย Databricks ซึ่งได้มาจาก Pythia-12b ของ EleutherAI และปรับแต่งอย่างละเอียดบนคลังคำสั่งบันทึก ~ 15K ที่สร้างขึ้นโดยพนักงานของ Databricks และเผยแพร่ภายใต้ใบอนุญาตที่อนุญาต (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
แสดงถึงคำสั่งภาษาธรรมชาติที่สร้างขึ้นโดยพนักงานของ Databricks ในช่วงระยะเวลาตั้งแต่เดือนมีนาคมถึงเมษายน 2023 และรวมข้อความจาก Wikipedia ไว้เป็นข้อความอ้างอิงสำหรับหมวดหมู่การสอน เช่น QA แบบปิดและ การสรุป ตามความรู้ของเรา ไม่มีเนื้อหาลามกอนาจาร ทรัพย์สินทางปัญญา หรือข้อมูลที่สามารถระบุตัวบุคคลเกี่ยวกับบุคคลที่ไม่เปิดเผยต่อสาธารณะ แต่อาจมีการพิมพ์ผิดและข้อผิดพลาดตามข้อเท็จจริง ชุดข้อมูลอาจสะท้อนถึงอคติที่พบในวิกิพีเดีย ในที่สุด ชุดข้อมูลน่าจะสะท้อนถึงความสนใจและทางเลือกเชิงความหมายของพนักงาน Databricks ซึ่งเป็นกลุ่มประชากรที่ไม่ได้เป็นตัวแทนของประชากรโลกโดยรวม
Databricks มุ่งมั่นที่จะวิจัยและพัฒนาอย่างต่อเนื่องเพื่อพัฒนาเทคโนโลยี AI ที่เป็นประโยชน์ ซื่อสัตย์ และไม่เป็นอันตราย ซึ่งจะเพิ่มศักยภาพสูงสุดให้กับบุคคลและองค์กรทั้งหมด
หากคุณต้องการทดสอบโมเดลโดยไม่ต้องฝึกฝน โมเดลนั้นมีอยู่ใน Hugging Face เป็น databricks/dolly-v2-12b
หากต้องการใช้โมเดลกับไลบรารี transformers
บนเครื่องที่มี A100 GPU:
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 ควรทำงานเหมือนเดิม
หากต้องการสร้างโดยใช้โมเดลพารามิเตอร์ 12B บน A10s (เช่น g5.4xlarge
, 1 x A10 24GB) จำเป็นต้องโหลดและรันการสร้างโดยใช้น้ำหนัก 8 บิต ซึ่งส่งผลต่อผลลัพธ์เล็กน้อย:
bitsandbytes
ด้วยmodel_kwargs={'load_in_8bit': True}
ไปยังคำสั่ง pipeline()
ที่แสดงด้านบน เมื่อใช้ V100s (เช่น: p3.2xlarge
, 1 x V100 16GB, NC6s_v3
) ในทุกกรณี ให้ตั้งค่า torch_dtype=torch.float16
ใน pipeline()
แทน
มิฉะนั้น ให้ทำตามขั้นตอนข้างต้น โมเดลพารามิเตอร์ 12B อาจทำงานได้ไม่ดีใน 8 บิตบน V100
dolly
repo ลงใน Databricks (ใต้ Repos คลิก Add Repo ป้อน https://github.com/databrickslabs/dolly.git
จากนั้นคลิก Create Repo)13.x ML (includes Apache Spark 3.4.0, GPU, Scala 2.12)
หรือใหม่กว่าคลัสเตอร์โหนดเดียวที่มีประเภทโหนดที่มี A100 GPU 8 ตัว (เช่น Standard_ND96asr_v4
หรือ p4d.24xlarge
) โปรดทราบว่าประเภทอินสแตนซ์เหล่านี้อาจไม่สามารถใช้ได้ในทุกภูมิภาค หรืออาจจัดเตรียมได้ยาก ใน Databricks โปรดทราบว่าคุณต้องเลือกรันไทม์ของ GPU ก่อน และยกเลิกการเลือก "ใช้ Photon" เพื่อให้ประเภทอินสแตนซ์เหล่านี้ปรากฏขึ้น (หากรองรับ)train_dolly
ใน Repo (ซึ่งเป็นไฟล์ train_dolly.py
ใน repo dolly
Github) แนบไปกับคลัสเตอร์ GPU ของคุณ และเรียกใช้เซลล์ทั้งหมด เมื่อการฝึกอบรมเสร็จสิ้น สมุดบันทึกจะบันทึกโมเดลไว้ใต้ /dbfs/dolly_training
ประเภทอินสแตนซ์ A100 ไม่มีให้บริการในภูมิภาคคลาวด์ทั้งหมด หรืออาจจัดเตรียมได้ยาก การฝึกสามารถทำได้บนอินสแตนซ์ GPU ประเภทอื่นๆ สำหรับโมเดล Dolly ขนาดเล็ก และมีการแก้ไขเล็กน้อยเพื่อลดการใช้หน่วยความจำ การปรับเปลี่ยนเหล่านี้ไม่เหมาะสมที่สุด แต่ทำได้ง่าย
เลือกประเภทตระกูล GPU ของคุณจากวิดเจ็ต gpu_family
ป้อนจำนวน GPU ที่มีอยู่ในวิดเจ็ต num_gpus
จากนั้นเรียกใช้โค้ดที่เหลือ จะมีการตั้งค่าตัวเลือกต่างๆ มากมายเพื่อให้คุณฝึกโมเดลสำหรับ GPU ประเภทใดประเภทหนึ่งต่อไปนี้:
รายละเอียดของการกำหนดค่าต่างๆ มีดังต่อไปนี้
A100 GPU เหมาะสำหรับการฝึกโมเดลทุกขนาด และเป็น GPU เพียงตัวเดียวที่สามารถฝึกโมเดลพารามิเตอร์ 12B ได้ในระยะเวลาที่เหมาะสม ด้วยเหตุนี้ นี่คือการกำหนดค่าเริ่มต้น ดังที่ตั้งไว้ในไฟล์กำหนดค่า deepspeed a100_config.json
ไม่แนะนำการฝึกโมเดลพารามิเตอร์ 12B บน A10
หากต้องการฝึกโมเดลพารามิเตอร์ 6.9B บนอินสแตนซ์ A10 (เช่น g5.24xlarge
, 4 x A10 24GB; Standard_NV72ads_A10_v5
, 2 x A10) เพียงเลือก a10
จากวิดเจ็ต gpu_family
และป้อนจำนวน GPU ที่มีอยู่ในวิดเจ็ต num_gpus
จากนั้นเรียกใช้ รหัสที่เหลือ สิ่งนี้จะใช้ไฟล์กำหนดค่า a10_config.json
deepspeed ซึ่งทำการเปลี่ยนแปลงต่อไปนี้:
per-device-train-batch-size
และ per-device-eval-batch-size
ถูกตั้งค่าเป็น 3 ในการเรียกใช้ train_dolly.py
ของ deepspeed
"zero_optimization"
ของการกำหนดค่า deepspeed เราได้เพิ่ม: "offload_optimizer": {
"device": "cpu",
"pin_memory": true
},
หากต้องการทำงานบนอินสแตนซ์ V100 ที่มีหน่วยความจำ GPU ขนาด 32GB (เช่น p3dn.24xlarge
หรือ Standard_ND40rs_v2
) เพียงเลือก v100
จากวิดเจ็ต gpu_family
แล้วป้อนจำนวน GPU ที่มีอยู่ในวิดเจ็ต num_gpus
จากนั้นเรียกใช้โค้ดที่เหลือ สิ่งนี้จะใช้ไฟล์กำหนดค่า v100_config.json
deepspeed ซึ่งทำการเปลี่ยนแปลงต่อไปนี้:
per-device-train-batch-size
และ per-device-eval-batch-size
เป็น 3คุณอาจสามารถเพิ่มขนาดแบตช์ได้เล็กน้อยด้วยอินสแตนซ์ 32GB เมื่อเทียบกับขนาดที่ทำงานข้างต้นสำหรับ A10 ขนาด 24GB
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}
}