Databricks' Dolly هو نموذج لغة كبير يتبع التعليمات ويتم تدريبه على منصة التعلم الآلي Databricks المرخصة للاستخدام التجاري. استنادًا إلى pythia-12b
، تم تدريب Dolly على حوالي 15 ألفًا من التعليمات/الاستجابة لسجلات الضبط الدقيق databricks-dolly-15k
التي أنشأها موظفو Databricks في مجالات القدرة من ورقة InstructGPT، بما في ذلك العصف الذهني، والتصنيف، وضمان الجودة المغلق، والتوليد، واستخراج المعلومات، وضمان الجودة المفتوح والتلخيص. لا يعد dolly-v2-12b
نموذجًا متطورًا، ولكنه يعرض بشكل مدهش تعليمات عالية الجودة تتبع سلوكًا غير مميز للنموذج الأساسي الذي يعتمد عليه.
تلتزم Databricks بضمان استفادة كل مؤسسة وفرد من القوة التحويلية للذكاء الاصطناعي. تمثل عائلة موديلات دوللي خطواتنا الأولى في هذه الرحلة، ونحن متحمسون لمشاركة هذه التكنولوجيا مع العالم.
النموذج متاح على Hugging Face كـ databricks/dolly-v2-12b.
dolly-v2-12b
هو نموذج لغة سببية مكون من 12 مليار معلمة تم إنشاؤه بواسطة Databricks وهو مشتق من Pythia-12b الخاص بـ EleutherAI وتم ضبطه بدقة على مجموعة تعليمات تسجيل تصل إلى 15 ألف تقريبًا تم إنشاؤها بواسطة موظفي Databricks وتم إصدارها بموجب ترخيص متساهل (CC-BY- سا)
لا يعد 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 وتتضمن مقاطع من ويكيبيديا كمقاطع مرجعية لفئات التعليمات مثل ضمان الجودة المغلق و تلخيص. على حد علمنا، لا يحتوي هذا الملف على فحش أو ملكية فكرية أو معلومات تعريف شخصية حول شخصيات غير عامة، ولكنه قد يحتوي على أخطاء مطبعية وأخطاء في الوقائع. قد تعكس مجموعة البيانات أيضًا التحيزات الموجودة في ويكيبيديا. وأخيرًا، من المحتمل أن تعكس مجموعة البيانات الاهتمامات والاختيارات الدلالية لموظفي Databricks، وهم فئة ديموغرافية لا تمثل سكان العالم ككل.
تلتزم Databricks بجهود البحث والتطوير المستمرة لتطوير تقنيات الذكاء الاصطناعي المفيدة والصادقة وغير الضارة التي تزيد من إمكانات جميع الأفراد والمنظمات.
إذا كنت ترغب في اختبار النموذج ببساطة دون تدريب، فإن النموذج متاح على Hugging Face كـ databricks/dolly-v2-12b.
لاستخدام النموذج مع مكتبة transformers
على جهاز مزود بوحدات معالجة الرسومات A100:
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 24 جيجابايت)، من الضروري تحميل وتشغيل التوليد باستخدام أوزان 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 بت على V100s.
dolly
ريبو إلى 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)
أو مجموعة عقدة واحدة أحدث بنوع عقدة يحتوي على 8 وحدات معالجة رسوميات A100 (على سبيل المثال Standard_ND96asr_v4
أو p4d.24xlarge
). لاحظ أن أنواع المثيلات هذه قد لا تكون متاحة في جميع المناطق، أو قد يكون من الصعب توفيرها. في Databricks، لاحظ أنه يجب عليك تحديد وقت تشغيل GPU أولاً، وإلغاء تحديد "استخدام Photon"، لتظهر أنواع المثيلات هذه (حيثما تكون مدعومة).train_dolly
في Repo (وهو ملف train_dolly.py
في Github dolly
repo)، وأرفقه بمجموعة GPU الخاصة بك، وقم بتشغيل جميع الخلايا. عند انتهاء التدريب، سيقوم دفتر الملاحظات بحفظ النموذج ضمن /dbfs/dolly_training
.لا تتوفر أنواع مثيلات A100 في جميع المناطق السحابية، أو قد يكون من الصعب توفيرها. التدريب ممكن على أنواع مثيلات GPU الأخرى، لأحجام نماذج Dolly الأصغر، ومع تعديلات صغيرة لتقليل استخدام الذاكرة. هذه التعديلات ليست مثالية، ولكن من السهل إجراؤها.
حدد نوع عائلة GPU الخاصة بك من عنصر واجهة المستخدم gpu_family
، وأدخل عدد وحدات معالجة الرسومات المتاحة في عنصر واجهة المستخدم num_gpus
، ثم قم بتشغيل بقية التعليمات البرمجية. سيتم تعيين عدد من الخيارات المختلفة لك لتدريب النموذج على أحد أنواع GPU التالية:
تفاصيل التكوينات المختلفة أدناه.
تُفضل وحدات معالجة الرسومات A100 لتدريب جميع أحجام النماذج، وهي وحدات معالجة الرسومات الوحيدة التي يمكنها تدريب النموذج المعلمي 12B في فترة زمنية معقولة. على هذا النحو، هذا هو التكوين الافتراضي، كما هو محدد في ملف التكوين a100_config.json
Deepspeed.
لا يُنصح بتدريب النموذج المعلمي 12B على A10s.
لتدريب النموذج المعلمي 6.9B على مثيلات A10 (على سبيل المثال: g5.24xlarge
, 4 x A10 24GB; Standard_NV72ads_A10_v5
, 2 x A10)، ما عليك سوى تحديد a10
من عنصر واجهة المستخدم gpu_family
وإدخال عدد وحدات معالجة الرسومات المتوفرة في عنصر واجهة المستخدم 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 سعة 32 جيجابايت (على سبيل المثال: p3dn.24xlarge
أو Standard_ND40rs_v2
)، ما عليك سوى تحديد v100
من عنصر واجهة المستخدم gpu_family
وإدخال عدد وحدات معالجة الرسومات المتاحة في عنصر واجهة المستخدم num_gpus
، ثم تشغيل بقية التعليمات البرمجية. سيستخدم هذا ملف التكوين v100_config.json
Deepspeed، الذي يقوم بإجراء التغييرات التالية:
per-device-train-batch-size
per-device-eval-batch-size
على 3قد تتمكن من زيادة حجم الدفعة قليلاً باستخدام مثيلات سعة 32 جيجابايت، مقارنةً بما يعمل أعلاه بالنسبة لمثيلات A10 بسعة 24 جيجابايت.
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}
}