
يحتوي هذا المستودع على رمز للتدريب ، والتعاون ، وتقييم ، ونشر LLMs للاستدلال مع الملحن ومنصة Mosaicml. مصممة لتكون سهلة الاستخدام وفعالة ومرنة ، تتيح قاعدة الكود هذه التجربة السريعة مع أحدث التقنيات.
ستجد في هذا الريبو:
llmfoundry/ - التعليمات البرمجية المصدر للموديلات ، مجموعات البيانات ، عمليات الاسترجاعات ، المرافق ، إلخ.scripts/ - البرامج النصية لتشغيل أعباء عمل LLMdata_prep/ - تحويل البيانات النصية من المصادر الأصلية إلى تنسيق DreamingDatAsettrain/ - Train أو Finetune Unggingface و MPT من 125 متر - 70B معلماتtrain/benchmarking - إنتاجية تدريب الملف الشخصي و MFUinference/ - تحويل النماذج إلى Huggingface أو تنسيق ONNX ، وإنشاء ردودinference/benchmarking - الكمون الاستدلال والاستدلال الإنتاجيةeval/ -تقييم LLMs على مهام التعلم الأكاديمية (أو المخصصة)mcli/ - قم بتشغيل أي من أعباء العمل هذه باستخدام MCLI ومنصة MOSAICMLTUTORIAL.mdDBRX هو أحدث مصادر مفتوحة المصدر تدرب من قبل فريق Databricks Mosaic. يستخدم بنية خليط الخبرة (MOE) وتم تدريبها مع إصدارات محسنة من الملحن ، مسبك LLM ، و Megablocks. يحتوي النموذج على إجمالي 132B و 36B المعلمات النشطة. لقد أصدرنا نموذجين DBRX:
| نموذج | طول السياق | تحميل |
|---|---|---|
| قاعدة DBRX | 32768 | https://huggingface.co/Databricks/dbrx-base |
| DBRX الإرشاد | 32768 | https://huggingface.co/Databricks/dbrx-instruct |
الأوزان النموذجية لدينا ورمزنا مرخصة لكل من الباحثين والكيانات التجارية. يمكن العثور على ترخيص Databricks Open Source عند الترخيص ، ويمكن العثور على سياسة الاستخدام المقبولة هنا.
لمزيد من المعلومات حول نماذج DBRX ، راجع https://github.com/databricks/dbrx.
المحولات المسبقة للفسيفساء (MPT) هي نماذج على طراز GPT مع بعض الميزات الخاصة-اهتمام فلاش بالكفاءة ، وذبلي لاستقراء طول السياق ، وتحسينات الاستقرار لتخفيف طفرات الخسارة. كجزء من سلسلة مؤسسة Mosaicml ، لدينا العديد من نماذج MPT المفتوحة:
| نموذج | طول السياق | تحميل | الاستخدام التجاري؟ |
|---|---|---|---|
| MPT-30B | 8192 | https://huggingface.co/mosaicml/mpt-30b | نعم |
| MPT-30B-instruct | 8192 | https://huggingface.co/mosaicml/mpt-30b-instruct | نعم |
| MPT-30B-Chat | 8192 | https://huggingface.co/mosaicml/mpt-30b-gh | لا |
| MPT-7B-8K | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k | نعم |
| MPT-7B-8K-Chat | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k-chat | لا |
| MPT-7B | 2048 | https://huggingface.co/mosaicml/mpt-7b | نعم |
| MPT-7B-instruct | 2048 | https://huggingface.co/mosaicml/mpt-7b-instruct | نعم |
| MPT-7B-Chat | 2048 | https://huggingface.co/mosaicml/mpt-7b-gh | لا |
| MPT-7B Storywriter | 65536 | https://huggingface.co/mosaicml/mpt-7b-storywriter | نعم |
لتجربة هذه النماذج محليًا ، اتبع الإرشادات الموجودة في scripts/inference/README.md إلى نماذج HF باستخدام نصوص HF_GENERATE.PY أو HF_CHAT.PY.
لقد غمرنا كل العمل المذهل الذي وضعه المجتمع في MPT! نحن هنا نقدم بعض الروابط لبعضها:
replit-code-v1-3b هو نموذج لغة سببي 2.7B يركز على إكمال الكود. تم تدريب النموذج على مجموعة فرعية من مجموعة بيانات المكدس Dedup V1.2 التي تغطي 20 لغة مثل Java و Python و C ++مقاطع فيديو تعليمية من المجتمع:
شيء مفقود؟ المساهمة مع العلاقات العامة!
تم اختبار قاعدة الكود هذه باستخدام Pytorch 2.4 مع Nvidia A100s و H100s. قد تعمل قاعدة كود هذه أيضًا على أنظمة مع أجهزة أخرى ، مثل بطاقات المستهلك NVIDIA وبطاقات AMD ، لكننا لا نختبر هذه الأنظمة بنشاط. إذا كان لديك نجاح/فشل في استخدام LLM Foundry على أنظمة أخرى ، فيرجى إخبارنا في قضية GitHub وسنقوم بتحديث مصفوفة الدعم!
| جهاز | نسخة الشعلة | إصدار CUDA | حالة |
|---|---|---|---|
| A100-40GB/80GB | 2.5.1 | 12.4 | ✅ مدعوم |
| H100-80GB | 2.5.1 | 12.4 | ✅ مدعوم |
نوصي بشدة باستخدام صور Docker الخاصة بنا. يمكنك العثور عليها هنا: https://hub.docker.com/orgs/mosaicml/repositories.
يتم تثبيت صور mosaicml/pytorch على إصدارات محددة Pytorch و CUDA ، ونادراً ما يتم تحديثها.
تم تصميم صور mosaicml/llm-foundry مع علامات جديدة على كل الالتزام بالفرع main . يمكنك تحديد تجزئة ملزمة محددة مثل mosaicml/llm-foundry:2.5.1_cu124-9867a7b أو أخذ أحدثها باستخدام mosaicml/llm-foundry:2.5.1_cu124-latest .
يرجى ملاحظة: لا تأتي صور mosaicml/llm-foundry مع حزمة llm-foundry التي تم تثبيتها مسبقًا ، فقط التبعيات. ستظل بحاجة إلى pip install llm-foundry إما من PYPI أو من المصدر.
| صورة Docker | نسخة الشعلة | إصدار CUDA | تبعيات مسبك LLM مثبتة؟ |
|---|---|---|---|
mosaicml/pytorch:2.5.1_cu124-python3.11-ubuntu22.04 | 2.5.1 | 12.4 (إنفينيباند) | لا |
mosaicml/llm-foundry:2.5.1_cu124-latest | 2.5.1 | 12.4 (إنفينيباند) | نعم |
mosaicml/llm-foundry:2.5.1_cu124_aws-latest | 2.5.1 | 12.4 (EFA) | نعم |
هذا يفترض أن لديك بالفعل pytorch و cmake والتعبئة والتغليف مثبتة. إذا لم يكن الأمر كذلك ، فيمكنك تثبيتها باستخدام pip install cmake packaging torch .
للبدء ، استنساخ الريبو وإعداد بيئتك. تختلف الإرشادات اللازمة للقيام بذلك قليلاً اعتمادًا على ما إذا كنت تستخدم Docker.
نوصي بشدة بالعمل مع مسبك LLM داخل حاوية Docker (انظر صورة Docker الموصى بها أعلاه). إذا كنت تفعل ذلك ، فاتبع هذه الخطوات لاستنساخ الريبو وتثبيت المتطلبات.
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
pip install -e " .[gpu] " # or `pip install -e .` if no NVIDIA GPU.إذا اخترت عدم استخدام Docker ، فيجب عليك إنشاء بيئة افتراضية واستخدامها.
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
# Creating and activate a virtual environment
python3 -m venv llmfoundry-venv
source llmfoundry-venv/bin/activate
pip install cmake packaging torch # setup.py requires these be installed
pip install -e " .[gpu] " # or `pip install -e .` if no NVIDIA GPU.NVIDIA H100 وحدات معالجة الرسومات لديها دعم FP8 ؛ لقد قمنا بتثبيت اهتمام وموقد في صور Docker الخاصة بنا بالفعل (انظر أعلاه). إذا كنت لا تستخدم صور Docker الخاصة بنا ، فيمكنك تثبيت هذه الحزم مع:
pip install flash-attn --no-build-isolation
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stableانظر هنا للحصول على مزيد من التفاصيل حول تمكين طبقات المحولات و AMP_FP8.
في اختبارنا لـ AMD GPU ، يشمل إعداد ENV:
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
# Creating and activate a virtual environment
python3 -m venv llmfoundry-venv-amd
source llmfoundry-venv-amd/bin/activate
# installs
pip install cmake packaging torch
pip install -e . # This installs some things that are not needed but they don't hurt
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2أخيرًا ، قم بتثبيت اهتمام Flash ROCM (التعليمات هنا).
ملحوظات:
numpy==1.23.5 ) قبل أن يعمل كل شيء بدون مشكلة. دعم LLM Foundry على أجهزة Intel Gaudi هو تجريبي ، يرجى استخدام فرع habana_alpha ومشاهدة README على هذا الفرع الذي يحتوي على تعليمات وتثبيت المشكلات المعروفة.
للاطلاع على نتائج التدريب والاستدلال على مسرعات Intel Gaudi2 ، راجع مدونتنا: https://www.databricks.com/blog/llm-training-ing-inference-intel-gaudi2-ai-accelerators
ملاحظة ، تأكد من الذهاب من خلال خطوات التثبيت أعلاه قبل تجربة QuickStart!
فيما يلي سير عمل شامل لإعداد مجموعة فرعية من مجموعة بيانات C4 ، وتدريب نموذج MPT-125M لـ 10 دفعات ، وتحويل النموذج إلى تنسيق معانقة ، وتقييم النموذج على تحدي Winograd ، وتوليد ردود على المطالبات.
(تذكر أن هذه هي عملية سريعة فقط لإظهار الأدوات - للحصول على جودة جيدة ، يجب تدريب LLM لمدة تزيد عن 10 دفعات؟)
cd scripts
# Convert C4 dataset to StreamingDataset format
python data_prep/convert_dataset_hf.py
--dataset allenai/c4 --data_subset en
--out_root my-copy-c4 --splits train_small val_small
--concat_tokens 2048 --tokenizer EleutherAI/gpt-neox-20b --eos_text ' <|endoftext|> '
# Train an MPT-125m model for 10 batches
composer train/train.py
train/yamls/pretrain/mpt-125m.yaml
variables.data_local=my-copy-c4
train_loader.dataset.split=train_small
eval_loader.dataset.split=val_small
max_duration=10ba
eval_interval=0
save_folder=mpt-125m
# Convert the model to HuggingFace format
python inference/convert_composer_to_hf.py
--composer_path mpt-125m/ep0-ba10-rank0.pt
--hf_output_path mpt-125m-hf
--output_precision bf16
# --hf_repo_for_upload user-org/repo-name
# Evaluate the model on a subset of tasks
composer eval/eval.py
eval/yamls/hf_eval.yaml
icl_tasks=eval/yamls/copa.yaml
model_name_or_path=mpt-125m-hf
# Generate responses to prompts
python inference/hf_generate.py
--name_or_path mpt-125m-hf
--max_new_tokens 256
--prompts
" The answer to life, the universe, and happiness is "
" Here's a quick recipe for baking chocolate chip cookies: Start by " ملاحظة: يشير أمر composer المستخدم أعلاه لتدريب النموذج إلى مشغل مكتبة الملحن الموزع.
إذا كان لديك رمز Auth Auth Lucked-Conforgeface ، فيمكنك اختياريًا تحميل النموذج الخاص بك إلى المحور! فقط قم بتصدير الرمز المميز الخاص بك مثل هذا:
export HF_TOKEN=your-auth-token و unfumment الخط الذي يحتوي على --hf_repo_for_upload ... في المكالمة أعلاه إلى inference/convert_composer_to_hf.py .
يمكنك استخدام السجل لتخصيص سير العمل الخاص بك دون أن تمنع المكتبة. بعض مكونات مسبك LLM قابلة للتسجيل ، مثل النماذج والمسجلات والاسترداد. هذا يعني أنه يمكنك تسجيل خيارات جديدة لهذه المكونات ، ثم استخدامها في تكوين YAML.
للمساعدة في العثور على المكونات القابلة للتسجيل وفهمها ، يمكنك استخدام أمر llmfoundry registry CLI.
نحن نقدم أمرين حاليا:
llmfoundry registry get [--group] : سرد جميع السجلات ، ومكوناتها ، تحديد سجل محدد اختياريًا. مثال الاستخدام: llmfoundry registry get --group loggers أو llmfoundry registry getllmfoundry registry find <group> <name> : احصل على معلومات حول مكون محدد مسجل. مثال الاستخدام: llmfoundry registry find loggers wandb استخدم --help على أي من هذه الأوامر لمزيد من المعلومات.
يمكن أن تساعدك هذه الأوامر أيضًا في فهم ما يتكون منه كل سجل ، حيث يحتوي كل سجل على docstring التي سيتم طباعتها. المفهوم العام هو أن كل سجل يحدد واجهة ، ويجب أن تنفذ المكونات المسجلة لهذا السجل. إذا كان هناك جزء من المكتبة غير قابلة للتمديد حاليًا ، لكنك تعتقد أنه ينبغي أن يكون ، فيرجى فتح مشكلة!
هناك بعض الطرق لتسجيل مكون جديد:
يمكنك تحديد المكونات المسجلة عبر نقطة إدخال Python إذا كنت تقوم ببناء الحزمة الخاصة بك بمكونات مسجلة. سيكون هذا هو الاستخدام المتوقع إذا كنت تقوم ببناء امتداد كبير إلى مسبك LLM ، وسوف تتجاوز العديد من المكونات. لاحظ أن الأشياء المسجلة عبر نقاط الدخول ستتخطى المكونات المسجلة مباشرة في الكود.
على سبيل المثال ، سيقوم ما يلي بتسجيل فئة MyLogger ، ضمن مفتاح my_logger ، في سجل llm_foundry.loggers :
[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "foundry_registry"
version = "0.1.0"
dependencies = [
" mosaicml " ,
" llm-foundry " ,
]
# Note: Even though in python code, this would be llmfoundry.registry.loggers,
# when specified in the entry_points, it has to be "llmfoundry_loggers". That is,
# the segments of the name should be joined by an _ in the entry_points section.
[project.entry-points."llmfoundry_loggers"]
my_logger = "foundry_registry.loggers:MyLogger" إذا وضعت مكونات جديدة عبر نقاط الدخول ، فمن المهم ملاحظة أن نقاط دخول Python عالمية لبيئة Python. هذا يعني أنه إذا كان لديك حزم متعددة تقوم بتسجيل المكونات بنفس المفتاح ، فستكون آخرها مثبتًا. يمكن أن يكون هذا مفيدًا للمكونات المتجددة في مسبك LLM ، ولكن يمكن أن يؤدي أيضًا إلى سلوك غير متوقع إذا لم يكن حذرًا. بالإضافة إلى ذلك ، إذا قمت بتغيير pyproject.toml ، فستحتاج إلى إعادة تثبيت الحزمة لتنفيذ التغييرات. يمكنك القيام بذلك بسرعة عن طريق التثبيت مع pip install -e . --no-deps لتجنب إعادة تثبيت التبعيات.
يمكنك أيضًا تسجيل مكون مباشرة في الكود الخاص بك:
from composer . loggers import LoggerDestination
from llmfoundry . registry import loggers
class MyLogger ( LoggerDestination ):
pass
loggers . register ( "my_logger" , func = MyLogger )يمكنك أيضًا استخدام الديكورات لتسجيل المكونات مباشرة من الكود الخاص بك:
from composer . loggers import LoggerDestination
from llmfoundry . registry import loggers
@ loggers . register ( "my_logger" )
class MyLogger ( LoggerDestination ):
pass لكل من أساليب المكالمة والديكور المباشر ، إذا كنت تستخدم برنامج LLM Foundry Train/Eval Scripts ، فستحتاج إلى توفير وسيطة code_paths ، وهي قائمة بالملفات التي تحتاج إلى تنفيذها من أجل تسجيل مكوناتك. على سبيل المثال ، قد يكون لديك ملف يسمى foundry_imports.py يحتوي على ما يلي:
from foundry_registry . loggers import MyLogger
from llmfoundry . registry import loggers
loggers . register ( "my_logger" , func = MyLogger ) يمكنك بعد ذلك تقديم code_paths إلى نصوص القطار/eval في تكوين YAML:
...
code_paths :
- foundry_imports.py
...سيكون أحد هذه الاستخدامات المتوقعة إذا كنت تقوم ببناء امتداد صغير إلى مسبك LLM ، فقط تجاوز عدد قليل من المكونات ، وبالتالي لا ترغب في إنشاء حزمة كاملة.
تحقق من البرنامج التعليمي. يسلط البرنامج التعليمي الضوء على مثال سير العمل ، ويشير إلى موارد أخرى في جميع أنحاء الريبو ، ويجيب بشكل متكرر الأسئلة!
إذا واجهت أي مشاكل في الرمز ، فيرجى تقديم مشكلات GitHub مباشرة إلى هذا الريبو.
إذا كنت ترغب في تدريب LLMS على منصة Mosaicml ، فتواصل معنا على [email protected]!