[بلوق] [ورقة]
يوفر هذا المستودع التطبيقات الرسمية والتجارب لنماذج المفاهيم الكبيرة ( LCM ).
تعمل LCM على تمثيل دلالي أعلى مستوى صريح ، والذي نسميه "مفهوم". المفاهيم هي اللغات والطريقة العادلة وتمثل فكرة أعلى مستوى. في هذا العمل ، يتوافق المفهوم مع الجملة ، ونحن نستخدم مساحة تضمين السونار ، والتي تدعم ما يصل إلى 200 لغة في النص و 57 لغة في الكلام. انظر قائمة اللغات المدعومة هنا.
LCM هو نموذج تسلسل إلى تسلسل في مساحة المفاهيم المدربين على تنبؤات الجملة التلقائية للعبور. نستكشف مقاربات متعددة:
base_lcm في هذا الرمز).two_tower_diffusion_lcm في هذا الإصدار).يتم تنفيذ هذه الاستكشافات باستخدام نماذج المعلمات 1.6B وبيانات التدريب بترتيب رموز 1.3T. نحن ندرج في هذه الوصفات المستودع لإعادة إنتاج التدريب والتحديد على 1.6B MSE LCM و Two-Away Diffusion LCM. انظر التعليمات أدناه.
يعتمد مستودع LCM على FairSeq2. إذا كان لديك uv مثبت على نظامك ، فيمكنك تثبيت بيئة افتراضية مع جميع الحزم اللازمة عن طريق تشغيل الأوامر التالية:
uv sync --extra cpu --extra eval --extra data يمكنك أيضًا استخدام uv run لتشغيل الأوامر التجريبية مع البيئة الصحيحة.
لاحظ أننا نقدم متطلبات فقط لتبعيات cpu ، إذا كنت ترغب في استخدام دعم GPU ، فسيتعين عليك اختيار متغيرات Torch و FairSeq2 التي تعمل لنظامك. على سبيل المثال ، Torch 2.5.1 مع CUDA 1.21 ، ستفعل شيئًا مثل:
uv pip install torch==2.5.1 --extra-index-url https://download.pytorch.org/whl/cu121 --upgrade
uv pip install fairseq2==v0.3.0rc1 --pre --extra-index-url https://fair.pkg.atmeta.com/fairseq2/whl/rc/pt2.5.1/cu121 --upgrade
تحقق من المتغيرات FairSeq2 للمتغيرات المحتملة. لاحظ أن LCM تعتمد حاليًا على مرشح الإصدار لـ FAIRSEQ2 0.3.0 RC1.
للتثبيت مع PIP ، تكون الأوامر متشابهة للغاية ، ولكن سيتعين عليك إدارة بيئتك الخاصة والتأكد من تثبيت FairSeq2 يدويًا أولاً. على سبيل المثال ، لتثبيت cpu .
pip install --upgrade pip
pip install fairseq2==v0.3.0rc1 --pre --extra-index-url https://fair.pkg.atmeta.com/fairseq2/whl/rc/pt2.5.1/cpu
pip install -e " .[data,eval] "إذا لم يوفر FairSeq2 بناءًا لآلةك ، فتحقق من إعادة صياغة هذا المشروع لإنشاءه محليًا.
ملحوظة
إذا كنت تستخدم uv Prefix جميع الأوامر مع uv run لاستخدام البيئة التي تم إنشاؤها افتراضيًا في .venv ، على سبيل المثال ، uv run torchrun --standalone . بدلاً من ذلك ، يمكنك تفعيل البيئة مرة واحدة وإلى الأبد مع source .venv/bin/activate .
يمكن تدريب LCM وتقييمها باستخدام بيانات النص المقسمة في جمل ومدمجة مع السونار. نحن نقدم عينة معالجة خط أنابيب يمكن استخدامها لإعداد بيانات التدريب هذه ، يمكنك تشغيلها مع:
uv run --extra data scripts/prepare_wikipedia.py /output/dir/for/the/data
يوضح خط الأنابيب هذا كيفية الحصول على مجموعة بيانات من Huggingface ومعالجته مع السونار والجلوس. تحقق من الملف لمزيد من التفاصيل حول معالجة البيانات الخاصة بك. بينما يوفر البرنامج النصي مثالاً على سحب البيانات من HuggingFace ، فإننا نقدم أيضًا واجهات برمجة التطبيقات لمعالجة JSONL و Parquet و CSV.
يعتمد المدرب الموصوف أدناه على بطاقات البيانات التي تكوين مجموعات البيانات. هذه البيانات هي ملفات yaml مع مؤشرات إلى ملفات مجموعة البيانات (محليًا أو على S3) ومعلومات عن مخططها. نحن نقدم بعض عينة من الحروف بيانات في lcm/datacards/datacards.yaml . بمجرد معالجة بعض البيانات ، يمكنك تحديث بطاقات البيانات بمساراتك.
لتناسب طبيعتها الجديدة في مجال التضمين على مزيج معين من مجموعات البيانات يمكن للمرء استخدام الأمر التالي:
python scripts/fit_embedding_normalizer.py --ds dataset1:4 dataset2:1 dataset3:10 --save_path " path/to/new/normalizer.pt " --max_nb_samples 1000000 هنا ، dataset1 ، dataset2 ، dataset3 هي أسماء مجموعات البيانات التي تم الإعلان عنها في البطاقات البيانات كما هو موضح أعلاه و (4, 1, 10) أوزانها النسبية. يمكن الإعلان بعد ذلك عن العقيدة الناتجة كنموذج كما هو موضح في lcm/cards/sonar_normalizer.yaml والمرجع في جميع تكوينات تدريب النماذج.
لتدريب MSE LCM ، سوف نستخدم أحد الأوامر التالية:
الخيار 1. التدريب مع slurm باستخدام تقديم عبر قاذفة Stopes:
python -m lcm.train
+pretrain=mse
++trainer.output_dir= " checkpoints/mse_lcm "
++trainer.experiment_name=training_mse_lcm مع هذا الأمر ، سنقدم وظيفة slurm تسمى training_mse_lcm مع متطلبات الوصفة ، في هذه الحالة:
requirements :
nodes : 4
tasks_per_node : 8
gpus_per_node : 8
cpus_per_task : 32
mem_gb : 0
timeout_min : 10000يمكنك تجاوز متطلبات الوظيفة مثل حد المهلة وقسم القاذفة القوي مع:
python -m lcm.train
+pretrain=mse
++trainer.output_dir= " checkpoints/mse_lcm "
++trainer.experiment_name=training_mse_lcm
++trainer.requirements.timeout_min=100
++trainer.requirements.cpus_per_task=8
++launcher.partition= $partition_name الخيار 2. التدريب محليًا مع torchrun (على سبيل المثال باستخدام وحدات معالجة الرسومات 2 فقط) مع حجم دفعة أصغر (تجاوز ++trainer.data_loading_config.max_tokens=1000 ):
CUDA_VISIBLE_DEVICES=0,1 torchrun --standalone --nnodes=1 --nproc-per-node=2
-m lcm.train launcher=standalone
+pretrain=mse
++trainer.data_loading_config.max_tokens=1000
++trainer.output_dir= " checkpoints/mse_lcm "
+trainer.use_submitit=false مهم
نظرًا لأننا نغير عدد وحدات معالجة الرسومات المطلوبة بواسطة الوصفة ، فإن هذا لن يعيد إنتاج الإعداد التجريبي للورقة.
سيتم تنظيم نقاط تفتيش دليل checkpoints/mse_lcm على النحو التالي:
.
├── checkpoints
│ ├── step_2000
│ ├── ...
│ └── step_250000
├── config_logs
├── executor_logs
├── model_card.yaml
├── tb # tensorboard logs
└── wandb # W&B logs
لاحظ أن تسجيل W&B يتم تخطيه ما لم يكن wandb متاحًا. يمكنك تثبيت wandb مع uv pip install wandb . يمكن تغيير وسيط W&B عن طريق تجاوز قيم تكوين Hydra في الوصفة:
++trainer.wandb_project= $project_name
++trainer.wandb_run_name= $run_name على غرار الأساس MSE LCM ، يمكننا تقديم وظيفة تدريب بعد الوصفة في ./recipes/train/pretrain/two_tower.yaml عبر:
python -m lcm.train
+pretrain=two_tower
++trainer.output_dir= " checkpoints/two_tower_lcm "
++trainer.experiment_name=training_two_tower_lcm نصيحة
لفهم المكونات المختلفة لوصفات التدريب ، تحقق من هذه القراءة.
لتوضيح LCM الذي تم تدريبه مسبقًا مسبقًا على بيانات LCM على البيانات الخاضعة للإشراف ، اتبع هذه الخطوات:
الخطوة 1. قم بتسجيل نقطة تفتيش تدريب مسبقًا كأصل FairSeq2.
يمكنك Finetune نقطة التفتيش النهائية بنقاط checkpoints/two_tower_lcm/model_card.yaml أو أي نقطة تفتيش بعد عدد محدد من خطوات التدريب ، على سبيل المثال ، checkpoints/two_tower_lcm/checkpoints/step_2000/model_card.yaml . لتسجيل نقطة التفتيش المحددة ، انسخ ملف yaml الذي تم إنشاؤه تلقائيًا إلى ./lcm/cards/mycards.yaml وقم بإعادة تسمية النموذج لاستبدال الافتراضي on_the_fly_lcm . ./lcm/cards/mycards.yaml سيبدو:
__source__ : inproc
checkpoint : file://path_to/large_concept_model/checkpoints/two_tower_lcm/checkpoints/step_2000/model.pt
model_arch : two_tower_diffusion_lcm_1_6B
model_family : two_tower_diffusion_lcm
name : my_pretrained_two_towerلمعرفة المزيد حول كيفية إدارة أصول FairSeq2 ، راجع الوثائق.
الخطوة 2. قم بتشغيل وظيفة شديدة الإشارة إلى النموذج إلى Finetune ، في هذه الحالة my_pretrained_two_tower :
CUDA_VISIBLE_DEVICES=0,1 torchrun --standalone --nnodes=1 --nproc-per-node=2
-m lcm.train launcher=standalone
+finetune=two_tower
++trainer.output_dir= " checkpoints/finetune_two_tower_lcm "
++trainer.data_loading_config.max_tokens=1000
+trainer.use_submitit=false
++trainer.model_config_or_name=my_pretrained_two_towerأو
python -m lcm.train
+finetune=two_tower
++trainer.output_dir= " checkpoints/finetune_two_tower_lcm "
++trainer.experiment_name=finetune_two_tower_lcm
++trainer.model_config_or_name=my_pretrained_two_towerوبالمثل ، بالنسبة إلى Finetune A MSE LCM ، اتبع نفس الإرشادات لتسجيل نقطة تفتيش تم تدريبها مسبقًا وتقديم وظيفة في مجال التغذية مع الوصفة المناسبة (./recipes/train/finetune/mse.yaml) عبر:
python -m lcm.train
+finetune=mse
++trainer.output_dir= " checkpoints/finetune_mse_lcm "
++trainer.experiment_name=finetune_mse_lcm
++trainer.model_config_or_name=my_pretrained_mse_lcmملحوظة
للتقييم المتقدم (قياس المهام المختلفة ، ومقارنة النتائج مع LLMs ، وما إلى ذلك) ، تحقق من وثائق التقييم.
الخطوة 0. قم بتنزيل بيانات NLTK المطلوبة لتقييم Rouge:
python - m nltk . downloader punkt_tab الخطوة 1. إنشاء ونتجوء إلى مخرجات النموذج إما عن طريق الإشارة إلى ملف yaml model_card أو بعد تسجيله كأصل فيرسيك (بنفس الطريقة التي نقوم بتسجيلها my_pretrained_two_tower ):
model_card=./checkpoints/finetune_two_tower_lcm/checkpoints/step_1000/model_card.yaml
OUTPUT_DIR=evaluation_outputs/two_tower
torchrun --standalone --nnodes=1 --nproc-per-node=1 -m lcm.evaluation
--predictor two_tower_diffusion_lcm
--show_progress true
--data_loading.max_samples 100
--model_card ${model_card}
--launcher standalone
--dataset.source_suffix_text ' [MODEL]: '
--tasks finetuning_data_lcm.validation
--task_args ' {"max_gen_len": 10, "eos_config": {"text": "End of text."}} '
--data_loading.batch_size 4 --generator_batch_size 4
--dump_dir ${OUTPUT_DIR}
--inference_timesteps 40
--initial_noise_scale 0.6
--guidance_scale 3
--guidance_rescale 0.7 عندما نقيم في المثال 100 عينة فقط ( --data_loading.max_samples 100 ) ونحصر طول إخراج النموذج على 10 جمل ( --task_args '{"max_gen_len": 10}' ).
سيتم تنظيم المخرجات التي تم إلقاؤها في ./evaluation_outputs/two_tower على النحو التالي:
.
├── metadata.jsonl
├── metrics.eval.jsonl
├── raw_results
├── results
└── tb
حيث يحتوي metrics.eval.jsonl على درجات على مستوى الجسم.
لتقييم MSE LCM ، نستخدم المتنبئ المرتبط ( base_lcm ) وتقييم مع:
model_card=./checkpoints/finetune_mse_lcm/checkpoints/step_1000/model_card.yaml
OUTPUT_DIR=evaluation_outputs/mse_lcm
torchrun --standalone --nnodes=1 --nproc-per-node=1 -m lcm.evaluation
--predictor base_lcm --sample_latent_variable False
--show_progress true
--data_loading.max_samples 100
--model_card ${model_card}
--launcher standalone
--dataset.source_suffix_text ' [MODEL]: '
--tasks finetuning_data_lcm.validation
--task_args ' {"max_gen_len": 10, "eos_config": {"text": "End of text."}} '
--data_loading.batch_size 4 --generator_batch_size 4
--dump_dir ${OUTPUT_DIR} لاحظ أنه في هذا المثال ، نوضح فقط كيفية تقييم LCM على نفس مجموعة البيانات في مجال التحقيق (تقسيم التحقق). للتقييم في مهمة المصب ، ومقارنة النتائج مع LLM ، راجع وثائق التقييم.
راجع الملف المساهم حول كيفية المساعدة.
إذا كنت تستخدم قاعدة الشفرة هذه ، يرجى الاستشهاد:
@article{lcm2024,
author = {{LCM team}, Lo"{i}c Barrault, Paul-Ambroise Duquenne, Maha Elbayad, Artyom Kozhevnikov, Belen Alastruey, Pierre Andrews, Mariano Coria, Guillaume Couairon, Marta R. Costa-juss`{a}, David Dale, Hady Elsahar, Kevin Heffernan, Jo~{a}o Maria Janeiro, Tuan Tran, Christophe Ropers, Eduardo Sánchez, Robin San Roman, Alexandre Mourachko, Safiyyah Saleem, Holger Schwenk},
title = {{Large Concept Models}: Language Modeling in a Sentence Representation Space},
publisher = {arXiv},
year = {2024},
url = {https://arxiv.org/abs/2412.08821},
}
يتم إصدار هذا الرمز بموجب ترخيص MIT (انظر الترخيص).