LeRobot documentation
Cosmos3
Cosmos3
Cosmos3 هو نموذج عالمي للأفعال للتحكم في الروبوتات، مبني على Cosmos 3، وهو عائلة نماذج العالم متعددة الوسائط من NVIDIA. انطلاقًا من ملاحظات الكاميرا وتعليمات لغوية، يتنبأ النموذج المشترك بإطارات الفيديو المستقبلية والقادم من أفعال الروبوت. تم تكييف تطبيق LeRobot من سياسة الأفعال الأصلية في cosmos-framework، ويعمل على النماذج Cosmos3 Nano وEdge المُطلَقة، بعد تحويلها إلى صيغة LeRobot.
- 📄 التقرير التقني الخاص بـ Cosmos 3 (arXiv:2606.02800)
- 💻 cosmos-framework وCosmos cookbook
- 🤗 مجموعة نماذج Cosmos 3
نظرة عامة على النموذج
Cosmos 3 is a Mixture-of-Transformers (MoT). Every decoder layer has two pathways with their own layer norms, attention projections and MLPs, and the two pathways meet only in a shared self-attention:
- تقرأ مسار الفهم (العقل) رموز النص في الاستعلام، ورموز صور ViT اختيارياً، باستخدام الانتباه السببي.
- تقرأ مسار التوليد (المولّد) الرموز المستمرة لفرع التسلسل الانتشاري: كامنات VAE الخاصة بـ Wan2.2 للفيديو ورموز الإجراء. وهو يولي اهتمامًا ثنائي الاتجاه لكلا المسارين ويُدرَّب باستخدام مطابقة التدفق.
بنية Mixture-of-Transformers (MoT) الخاصة بـ Cosmos 3 (الشكل 5 من التقرير التقني). يساراً: يمر التسلسل الفرعي التوليدي الذاتي (AR) عبر المُفكِّر، بينما يمر التسلسل الفرعي الانتشاري (DM) عبر المولّد، ويلتقي الاثنان في انتباه متعدد الوسائط مشترك. يميناً: قناع الانتباه، وهو سببي بالنسبة لـ AR وكامل بالنسبة للانتشار.
سياسياً، يعمل Cosmos3 في وضع نموذج الإجراءات العالمي للوصفات الأصلية للإجراءات:
- المدخلات: تُركَّب مشاهد الكاميرا في لوحة فيديو واحدة (مشهد واحد كما هو، مشاهدان جنبًا إلى جنب، ثلاثة مشاهد مع وضع الأول في الأعلى والآخرين تحته). يحمل الأمر المهمة ومعدل الإطارات ودقة اللوحة ووصف تخطيط اللوحة وعدد الإطارات الخاملة في الجزء.
- التدريب: يقوم النموذج التوجيهي بتشفير مقطع الإطار الحالي والإطارات المستقبلية بعدد
chunk_sizeباستخدام VAE، ثم يضيف ضوضاء إلى الكمونيات المستقبلية وإلى مجموعة الإجراءات، ويتعلم إزالة الضوضاء عن كليهما. الخسارة هي مجموع مرجح لخسارة الفيديو وخسارة الإجراءات. - الاستدلال: إطار الشرط نظيف، ويتم أخذ عينات من الفيديو المستقبلي والإجراءات بشكل مشترك باستخدام محلل UniPC، وتعيد السياسة مجموعة الإجراءات. يمكن حفظ الفيديو المتوقع أثناء التقييم (انظر التقييم).
- افتراضيًا، يتم تدريب مسار التوليد والطبقات المحيطة به ووحدات الإجراءات فقط (
train_gen_stream_only=true،freeze_vision_encoder=true)، كما هو الحال في وصفات ما بعد التدريب الأصلية.
توفر LeRobot الحجمين المُصدرين كصيغتي سياسة:
| Cosmos3 Nano | Cosmos3 Edge | |
|---|---|---|
| نوع السياسة | cosmos3_nano | cosmos3_edge |
| المعاملات (تُدرَّب افتراضيًا) | 16.5B (7.0B) | 4.6B (1.4B) |
| الهيكل | MoT مُهيّأ من Qwen3-VL، 36 طبقة، حجم مخفي 4096 | MoT مع محوّل كثيف بحجم 2B، 28 طبقة، حجم مخفي 2048 |
| مقسّم | nvidia/Cosmos3-Nano | nvidia/Cosmos3-Edge |
| نقطة التفتيش الأساسية | lerobot/Cosmos3-Nano | lerobot/Cosmos3-Edge |
متطلبات التثبيت
قم بتثبيت LeRobot باتباع دليل التثبيت الخاص بنا.
قم بتثبيت تبعيات Cosmos3:
pip install -e ".[cosmos3]"إذا قمت بتثبيت LeRobot من PyPI:
pip install 'lerobot[cosmos3]'أضِف الإضافات الخاصة بعملية عملك:
trainingلـlerobot-train، وliberoللتدريب أو التقييم على LIBERO، وpeftلـLoRA. على سبيل المثال:pip install -e ".[cosmos3,training,libero]"
يستخدم Cosmos3 واجهة PyTorch الخاصة بانتباه نقطة الضرب المُقيّمة (sdpa) افتراضيًا. إذا كان لديك تثبيت متوافق لـ flash_attn في بيئتك، يمكنك طلب --policy.attn_implementation=flash_attention_2. لا تجمع بينه وبين --policy.compile_model=true: فطبقات المُفكّك المُجمّعة تُعاد تجميعها لكل طبقة مع انتباه فلاش وتتوقف بخطأ إعادة تجميع.
نقاط التفتيش
| نقطة التفتيش | الحجم | بيانات التدريب | استخدام |
|---|---|---|---|
| lerobot/Cosmos3-Nano | نانو | إصدار nvidia/Cosmos3-Nano | الأساس للضبط الدقيق |
| lerobot/Cosmos3-Edge | الحافة | إصدار nvidia/Cosmos3-Edge | الأساس للضبط الدقيق |
| lerobot/Cosmos3-Nano-Policy-LIBERO | نانو | lerobot/LIBERO-Cosmos3 | تقييم LIBERO |
| lerobot/Cosmos3-Edge-Policy-LIBERO | الحافة | lerobot/LIBERO-Cosmos3 | تقييم LIBERO |
| lerobot/Cosmos3-Nano-Policy-LIBERO_10 | نانو | lerobot/LIBERO_10-Cosmos3 | تقييم LIBERO-10 |
| lerobot/Cosmos3-Edge-Policy-LIBERO_10 | الحافة | lerobot/LIBERO_10-Cosmos3 | تقييم LIBERO-10 |
- تحتوي نقاط التفتيش الأساسية على الأوزان المُطلَقة بصيغة LeRobot. وحداتها الإجراءية (
action2llm،llm2action،action_modality_embed) لم تُدرَّب بعد على روبوت، لذا ابدأ الضبط الدقيق باستخدام--policy.load_action_modules=false(انظر الضبط الدقيق على LIBERO). - يحتوي
config.jsonالخاص بالنقاط الفحص الأساسية على وصفة التدريب اللاحق الأصلية لـ DROID، بينما تكون القيم الافتراضية للفئات الخاصة بأنواع السياسات هي وصفة LIBERO الأصلية. - تحتوي نقاط التفتيش الخاصة بـ LIBERO على أوزان EMA الخاصة بجولة تدريبها.
- تُخزَّن الأوزان في صيغة bfloat16. يحدد
config.jsonقيمةdtype: float32عمداً: فالتدريب بدقة مختلطة انطلاقاً من نقاط الفحص هذه يحافظ على أوزان رئيسية بصيغة float32، تماماً كما هو الحال في التدريب الأصلي. أما للاستدلال والتقييم فمرّر--policy.dtype=bfloat16.
هناك طريقتان للبدء من نقطة تفتيش:
--policy.path=<checkpoint>يحمّل الإعدادات المخزنة والأوزان والمعالجات، ثم يطبق سطر الأوامر فوقها.--policy.type=cosmos3_nano --policy.pretrained_path=<checkpoint>(أوcosmos3_edge) يُحمّل الأوزان والمعالجات فقط، وتبدأ الإعدادات من القيم الافتراضية للفئة، وهي وصفة LIBERO.
الضبط الدقيق على LIBERO
القيم الافتراضية للفئة هي وصفة LIBERO الواردة في التقرير التقني: كتل من 16 إجراءً، تجسيد domain_id=5، بدون إجراء حالة، تطبيع كمومي للإجراءات، UniPC مع 30 خطوة وبدون إرشاد بدون مُصنِّف عند الاستدلال، ومعدل تعلّم قدره 5e-5 مع 500 خطوة إحماء وتراجع خطي إلى الصفر عند الخطوة 16000. وبالتالي، فإن البدء من نقطة تحقق أساسية باستخدام --policy.type لا يتطلب سوى --policy.load_action_modules=false.
تتدرب الوصفة على بيانات LIBERO المحوّلة إلى تخطيط Cosmos3:
- lerobot/LIBERO-Cosmos3: الأطقم الأربعة (Spatial، Object، Goal، 10)، 1693 حلقة.
- lerobot/LIBERO_10-Cosmos3: LIBERO-10 فقط، 379 حلقة.
تأتي كلتاهما من nvidia/LIBERO_LeRobot_v3، وهو بيانات الوصفة الأصلية. تكون الأفعال بعشرة أبعاد [delta position (3), rot6d (6), gripper] بدلاً من أفعال محور الزاوية السبعة الأبعاد في LIBERO، وتكون الكاميرتان observation.images.image (من منظور الشخص الثالث) وobservation.images.image2 (من معصم اليد) بدقة 256x256 وبمعدل 20 إطاراً في الثانية، وتكون إحصاءات الأفعال هي إحصاءات الوصفة الأصلية. أثناء التقييم، يقوم بيئة LIBERO بتحويل الأفعال مرة أخرى (انظر التقييم).
أمر التدريب
تدرّب وصف LIBERO الأصلي على دفعة عالمية من 2048 عينة لمدة 2000 تكرار على LIBERO-10 (أفضل نقطة تحقق قريبة من التكرار 1500) ولمدة 5000 تكرار على الأطقم الأربعة (أفضل نقطة تحقق قريبة من 4500). الأمر أدناه يعيد إنتاج ذلك على جهاز واحد مزوّد بـ 8 وحدات معالجة رسومية: FSDP2 عبر وحدات المعالجة الرسومية الثمانية، و32 عينة لكل وحدة معالجة رسومية و8 خطوات لتراكم التدرجات، بحيث يصبح 32 x 8 x 8 = 2048 عينة لكل تحديث لمُحسِّن. يُضرب كل عدد تكرارات أصلي في خطوات التراكم الثمانية: يصبح 2000 تكرار --steps=16000، ونقطة تحقق كل 500 تكرار --save_freq=4000، ويصبح الإحماء البالغ 500 ونهاية التلاشي البالغة 16000 هما 4000 و128000 على التوالي.
accelerate launch --num_processes=8 $(which lerobot-train) \
--policy.type=cosmos3_nano \
--policy.pretrained_path=lerobot/Cosmos3-Nano \
--policy.load_action_modules=false \
--policy.gradient_checkpointing=true \
--policy.repo_id=${HF_USER}/Cosmos3-Nano-Policy-LIBERO_10 \
--dataset.repo_id=lerobot/LIBERO_10-Cosmos3 \
--parallelism.dp_shard=8 \
--accelerator.fsdp.mixed_precision_policy.param_dtype=bfloat16 \
--accelerator.fsdp.mixed_precision_policy.reduce_dtype=bfloat16 \
--accelerator.fsdp.mixed_precision_policy.cast_forward_inputs=false \
--accelerator.gradient_accumulation.steps=8 \
--accelerator.gradient_accumulation.sync_each_batch=true \
--tf32=false \
--ema.type=power \
--ema.sigma_rel=0.1 \
--batch_size=32 \
--steps=16000 \
--save_freq=4000 \
--policy.scheduler_warmup_steps=4000 \
--policy.scheduler_decay_steps=128000 \
--output_dir=outputs/train/cosmos3_nano_libero_10 \
--job_name=cosmos3_nano_libero_10 \
--trackio.enable=trueاستخدم --dataset.repo_id=lerobot/LIBERO-Cosmos3 و--steps=40000 (5000 تكرار) للرباعيات الأربع. ولـ Cosmos3 Edge استخدم --policy.type=cosmos3_edge --policy.pretrained_path=lerobot/Cosmos3-Edge.
معلمات التدريب الرئيسية
| معامل | الوصف |
|---|---|
--policy.load_action_modules=false | يبدأ وحدات الإجراءات من مرحلة تهيئتها بدلاً من تحميلها، كما تفعل وصفات ما بعد التدريب الأصلية. اضبطه فقط عند الضبط الدقيق انطلاقاً من نقطة تحقق أساسية (انظر الملاحظات أدناه). |
--parallelism.dp_shard=8 | FSDP2 على 8 وحدات معالجة رسومية. يحدد هذا الإجراء وحدات التفاف FSDP2 الخاصة به، لذا لا حاجة إلى --accelerator.fsdp.wrap_modules. راجع دليل التدريب على وحدات معالجة رسومية متعددة. |
--accelerator.fsdp.mixed_precision_policy.* | الحساب وتقليل التدرجات باستخدام bfloat16 مع أوزان رئيسية من نوع float32، كما في التدريب الأصلي. حافظ على القيمة الافتراضية --policy.dtype (float32) مع ذلك: فسيؤدي استخدام سياسة من نوع bfloat16 إلى تدريب أوزان رئيسية من نوع bfloat16. |
--accelerator.gradient_accumulation.steps | الحجم العالمي للدفعة هو --batch_size مضروباً في عدد وحدات معالجة الرسوميات (GPUs) مضروباً في خطوات التراكم. يؤدي تعيين sync_each_batch=true إلى تقليل التدرجات بعد كل دفعة مصغرة، مما يجعلها تبقى مجزأة ولا تحتاج إلى نسخة إضافية غير مجزأة. |
--steps, --save_freq, --policy.scheduler_*_steps | يحتسب LeRobot خطوات الحلقة (الدفعات الدقيقة) وليس تحديثات المُحسِّن. اضرب عدد التكرارات في الوصفة الأصلية (2000 أو 5000 تكرار، إحماء 500، اضمحلال 16000، نقاط تفتيش كل 500) في خطوات التراكم. أبقِ --steps في حدود --policy.scheduler_decay_steps على الأكثر: فمعدل التعلم يصبح صفراً بعد ذلك. |
--ema.type=power --ema.sigma_rel=0.1 | متوسط الحركة الأسي (EMA) للوصفة الأصلية. يحتفظ كل نقطة تحقق أيضًا بأوزان EMA في pretrained_model_ema/، وهي الأوزان التي تُقيَّم وتُنشر. |
--tf32=false | يحافظ على عمليات ضرب المصفوفات من نوع float32 بدقة كاملة، كما هو الحال في التدريب الأصلي. |
--policy.gradient_checkpointing=true | يعيد حساب التفعيلات لطبقات المُفكِّك (decoder) والكتل البصرية في المسار العكسي (backward pass) لتوفير الذاكرة. |
--policy.compile_model=true | اختياري: torch.compile لطبقات المُفكِّك ومُشفِّر VAE. |
على وحدة معالجة رسومية واحدة أو باستخدام DDP، استبدل أعلام FSDP2 (--parallelism.dp_shard و--accelerator.fsdp.mixed_precision_policy.*) بـ--accelerator.mixed_precision=bf16. على سبيل المثال، Cosmos3 Edge على وحدة معالجة رسومية واحدة، مع 32 عينة لكل خطوة و64 خطوة تراكم للحصول على نفس الدفعة العالمية البالغة 2048:
lerobot-train \
--policy.type=cosmos3_edge \
--policy.pretrained_path=lerobot/Cosmos3-Edge \
--policy.load_action_modules=false \
--policy.gradient_checkpointing=true \
--policy.repo_id=${HF_USER}/Cosmos3-Edge-Policy-LIBERO_10 \
--dataset.repo_id=lerobot/LIBERO_10-Cosmos3 \
--accelerator.mixed_precision=bf16 \
--accelerator.gradient_accumulation.steps=64 \
--tf32=false \
--ema.type=power \
--ema.sigma_rel=0.1 \
--batch_size=32 \
--steps=128000 \
--save_freq=32000 \
--policy.scheduler_warmup_steps=32000 \
--policy.scheduler_decay_steps=1024000 \
--output_dir=outputs/train/cosmos3_edge_libero_10
--policy.load_action_modules=falseيُعاد ضبطه إلىtrueبمجرد تحميل نقطة التفتيش، لذا فإن التشغيل المحفوظ يُحمّل وحدات الإجراءات المدرَّبة مرة أخرى. هناك حالتان تُبقيان وحدات الإجراءات على قيمتها الأولية عن طريق الخطأ:
- عند بناء سياسة دون
--policy.pretrained_pathأو--policy.path: لا يتم تحميل أي شيء، لذا يبقى العلمfalse، ويتخطى أي تقييم لاحق أو استئناف لتلك الجولة وحدات الإجراءات المدرَّبة الخاصة بها.- استخدام PEFT مع وحدات الإجراء خارج
--peft.full_training_modules: في هذه الحالة، لن تُدرَّب وحدات الإجراء أبدًا.اضبط
--policy.load_action_modules=falseفقط عند الضبط الدقيق انطلاقًا من نقطة تحقق أساسية. عند استخدام PEFT، احتفظ بوحات الإجراءات في--peft.full_training_modules(القيمة الافتراضية).
متطلبات العتاد
تم القياس على وحدات معالجة رسومية A800 بسعة 80 جيجابايت باستخدام أوامر هذه الصفحة مع تفعيل نقطة التفتيش للتدرجات:
| الإعداد | وحدات معالجة الرسوميات | الحجم الدفقي لكل وحدة معالجة رسومية | ذروة الذاكرة لكل وحدة معالجة رسومية |
|---|---|---|---|
| نانو، الضبط الكامل (FSDP2) | 8 | 32 | 38 جيجابايت |
| نانو، لورا | 1 | 4 | 64 جيجابايت |
| الحافة، الضبط الدقيق الكامل | 1 | 32 | 47 جيجابايت |
| Edge، LoRA | 1 | 8 | 21 جيجابايت |
| التقييم في bfloat16، Nano وEdge | 1 | 10 بيئات | 39 جيجابايت و15 جيجابايت |
- يتطلب Cosmos3 Nano وحدات معالجة رسومية بسعة 80 جيجابايت، وأربعة منها على الأقل للضبط الدقيق الكامل: فقبل أن تقسّم FSDP2 النموذج، تحتفظ كل وحدة معالجة رسومية بالنموذج الكامل بصيغة float32 (حوالي 66 جيجابايت).
- يستغرق الأمر حوالي 45 ثانية لكل تحديث للمحسّن باستخدام أمر LIBERO أعلاه على 8 وحدات معالجة رسومية A800، أي ما يعادل حوالي 25 ساعة لـ LIBERO-10.
ضبط النموذج الدقيق على بياناتك الخاصة
يستند Cosmos3 إلى وصفة التدريب من سطر الأوامر ومجموعة البيانات: فلا تتضمن السياسة أي منطق خاص بالروبوت. تعمل أي مجموعة بيانات من LeRobot ما دامت تتبع النقاط أدناه.
متطلبات مجموعة البيانات
- الكاميرات: من كاميرا واحدة إلى ثلاث ميزات
observation.images.*، بترتيب مجموعة البياناتinfo.json. يتم تغيير حجم كل عرض إلى--policy.view_size(بحجم الكاميرا الأولى افتراضياً) وتجميعها في لوحة فيديو واحدة: عرض واحد كما هو، عرضان جنباً إلى جنب، وثلاثة مع العرض الأول في الأعلى والعرضين الآخرين جنباً إلى جنب تحته. ضع الكاميرات بترتيب ذلك التخطيط، على سبيل المثال[third person, wrist]لـ LIBERO و[wrist, exterior 1, exterior 2]لـ DROID. - عرض الوصف:
--policy.view_descriptionهو جملة في الأمر الموجه تصف تخطيط اللوحة. الأوصاف الافتراضية تصف تخطيط LIBERO (قيم افتراضية على مستوى الفئة) وتخطيط DROID (ملفconfig.jsonالأساسي). اكتب جملة تخطيطك الخاص: الوصف الخاطئ لا يُكتشف بل يُضعف الأمر الموجه فقط. - تمثيل الإجراء: يتعلم السياسة إجراءات مجموعة البيانات كما هي دون وجود خطوة تحويل. قم بتحويل الإجراءات إلى التمثيل الذي ترغب في تعلمه قبل التدريب، كما تفعل بيانات LIBERO مع دوران rot6d. إذا كان البيئة يتوقع تمثيلاً آخر، فقم بتحويل الإجراءات مرة أخرى في معالجات البيئة (تقوم بيئة LIBERO بذلك من أجل Cosmos3).
- عرض الإجراء: بحد أقصى
--policy.max_action_dim(64) قناة. يأتي عرض المخرجات من مجموعة البيانات. - معدل الإطارات:
fpsيأتي من بيانات وصفية مجموعة البيانات ويجب أن يكون معدل التحكم الفعلي: فهو يُكتب في الأمر (prompt) ويحدد محور الزمن لمواقع الفيديو وحدود الإطارات الخاملة. - الإحصاءات: طريقة تطبيع الإجراءات الافتراضية هي
QUANTILES، والتي تتطلب إحصاءاتq01وq99للإجراء فيmeta/stats.json(تتوفر هذه الإحصاءات في مجموعات البيانات المكتوبة بواسطة LeRobot). أما وصفة DROID الأصلية فتستخدمIDENTITYبدلاً من ذلك. - الحالة: عند استخدام
--policy.use_state=trueتُوضع الحالة الحالية أمام الإجراءات كإجراء حالة نظيف. ثم يجب أن يكونobservation.stateبنفس عرض القناة ومعناها كإجراء الإجراءات. وتُطبع الحالة والإجراء باستخدام إحصائياتهما الخاصة. - Language: the
taskof every frame is the instruction of the prompt. - التجسيد:
--policy.domain_idيختار صف إسقاطات الإجراء، وهو واحد من 32. تستخدم الوصفات الأصلية القيمة 5 لـ LIBERO، و8 لـ DROID، و30 لـ RoboCasa. عندما تبدأ وحدات الإجراء من قيمتها الأولية (--policy.load_action_modules=false)، يبدأ كل صف غير مدرَّب، وتعمل أي قيمة. - القطعة: عدد الإجراءات لكل قطعة
--policy.chunk_size(16 لـ LIBERO، و32 لـ DROID) وعدد الإجراءات المنفذة لكل قطعة--policy.n_action_steps.
تأتي الحقول التي تُترك عند None (fps، view_size) وأسماء قنوات الإجراءات من مجموعة البيانات. أما جميع الحقول الأخرى فتأتي من ملف الإعداد، لذا اضبطها في سطر الأوامر أو في ملف --config_path.
أسماء قنوات الإجراء والحالة. يوضح الأمر عدد الإطارات الخاملة في الجزء (أي لا يتحرك الروبوت)، ويحسب
Cosmos3IdleFrameProcessorStepهذه الإطارات من أسماء قنوات الإجراء الموجودة فيmeta/info.json. تُحدّد الأسماء بصيغة[<prefix>_]<type>_<index>أنواع القنوات:pos، أو دوران (rot6d،rot9d،axisangle،euler_xyz،quat_xyzw،quat_wxyz)، أوgripperأوjoint، مع بادئة للتمييز بين الأذرع (على سبيل المثالleft_rot6d_0). تستخدم بيانات LIBEROpos_0..2, rot6d_0..5, gripper_0، بينما تستخدم تخطيط DROIDjoint_0..6, gripper_0.لا يُشترط استخدام هذا التسمية. بدونه، يقتصر دور السياسة على تسجيل تحذير فقط، ولا تُحتسب أي إطار خامل في عدد الإطارات، وهو ما تلاحظه وصفة LIBERO على أي حال (إذ لا تحتوي حلقاتها على إطارات خاملة وفق القاعدة الأصلية). اتبع التسمية فقط إذا كنت ترغب في الحصول على عدد الإطارات الخاملة وفق وصفة DROID الأصلية.
وصفة DROID
يُعدّ ملف config.json الخاص بالنقاط الفاحصة الأساسية وصفة التدريب اللاحق الأصلية لـ DROID: تجسيد domain_id=8، مقاطع من 32 إجراءً، والحالة الحالية كإجراء حالة، وإطارات الخمول المُحتسبة عليها (use_state=true، idle_state=true)، دون تطبيع (IDENTITY)، وUniPC مع 4 خطوات ومقياس توجيه بلا مُصنِّف بقيمة 3 عند الاستدلال، ومعدل تعلّم قدره 8e-5 (المعدل الأصلي 2e-4 مضروباً في معامله 0.4) دون إحماء وتراجع خطي إلى الصفر عند الخطوة 100000. البدء من هذا الملف باستخدام --policy.path يُدرّب النموذج وفق هذه الوصفة.
تدرّب الوصفة الأصلية على الحلقات الناجحة من nvidia/Cosmos3-DROID. يحتوي مجموعة بيانات DROID بتنسيق Cosmos3 على:
- الكاميرات الثلاث
observation.images.wrist_leftوobservation.images.exterior_1_leftوobservation.images.exterior_2_left، بهذا الترتيب (كاميرا المعصم في الأعلى، والوجهان الخارجيان تحته)، بأبعاد 360x640 في البيانات الأصلية. - إجراءات مواضع مشتركة ثمانية الأبعاد مسمّاة
joint_0إلىjoint_6وgripper_0، وobservation.stateبنفس الترتيب. - معدل إطارات يبلغ 15 إطارًا في الثانية.
تدرّب الوصفة الأصلية على دفعة عالمية من 8192 عينة لمدة 10000 تكرار، مع نقطة حفظ كل 1000 تكرار. على جهاز واحد مزوّد بـ 8 وحدات معالجة رسومية، فإن 8 عينات لكل وحدة معالجة رسومية و128 خطوة تراكمية تعطي نفس الدفعة العالمية (8 x 8 x 128 = 8192)، ويُضرب كل عدد تكرارات في 128:
accelerate launch --num_processes=8 $(which lerobot-train) \
--policy.path=lerobot/Cosmos3-Nano \
--policy.load_action_modules=false \
--policy.gradient_checkpointing=true \
--policy.repo_id=${HF_USER}/Cosmos3-Nano-Policy-DROID \
--dataset.repo_id=${HF_USER}/DROID-Cosmos3 \
--parallelism.dp_shard=8 \
--accelerator.fsdp.mixed_precision_policy.param_dtype=bfloat16 \
--accelerator.fsdp.mixed_precision_policy.reduce_dtype=bfloat16 \
--accelerator.fsdp.mixed_precision_policy.cast_forward_inputs=false \
--accelerator.gradient_accumulation.steps=128 \
--accelerator.gradient_accumulation.sync_each_batch=true \
--tf32=false \
--ema.type=power \
--ema.sigma_rel=0.1 \
--batch_size=8 \
--steps=1280000 \
--save_freq=128000 \
--policy.scheduler_decay_steps=12800000 \
--output_dir=outputs/train/cosmos3_nano_droid \
--job_name=cosmos3_nano_droid \
--trackio.enable=trueتم تشغيل وصفة DROID الأصلية على 256 وحدة معالجة رسومية. على جهاز واحد مزوّد بثمانية وحدات معالجة رسومية من طراز A800، يستغرق تحديث المُحسِّن الواحد لهذا الأمر حوالي 33 دقيقة، لذا تتطلب الوصفة الكاملة العديد من الأجهزة. نفّذ الأمر نفسه على كل جهاز باستخدام أعلام العقد المتعددة الخاصة بـ accelerate launch (أو torchrun)، وقسّم داخل كل جهاز ونسّخ عبر الأجهزة باستخدام --parallelism.dp_replicate=<number of machines> --parallelism.dp_shard=8، وقسّم --accelerator.gradient_accumulation.steps وعدد الخطوات على عدد الأجهزة. راجع HSDP في دليل التدريب متعدد وحدات المعالجة الرسومية.
روبوت جديد
لروبوت جديد، ابدأ من القيم الافتراضية للفئة باستخدام --policy.type وقيّم حقول بياناتك على سطر الأوامر، على سبيل المثال:
lerobot-train \
--policy.type=cosmos3_edge \
--policy.pretrained_path=lerobot/Cosmos3-Edge \
--policy.load_action_modules=false \
--policy.domain_id=0 \
--policy.chunk_size=32 \
--policy.n_action_steps=32 \
--policy.view_description='The left half shows the front camera; the right half shows the wrist-mounted camera.' \
--dataset.repo_id=${HF_USER}/my_dataset \
...إعداد الهيكل الأساسي
إعداد الهيكل العظمي --policy.mot_backbone هو قيمة سطر أوامر واحدة. مرّر قاموس YAML يحتوي فقط على الحقول التي تريد تغييرها، على سبيل المثال نموذج بعدد طبقات أقل لاختبار سريع دون أوزان مُسبقة التدريب:
--policy.type=cosmos3_edge --policy.mot_backbone='{text_config: {num_hidden_layers: 2}, vision_config: {num_hidden_layers: 1}}'تحتفظ الحقول غير المُدخَلة بقيم الافتراضية للحجم، أو بقيم التهيئة المُحمَّلة عبر --policy.path. اكتب الأعداد العشرية على شكل 1.0e-6 (فصيغة YAML تقرأ 1e-6 كنص)، وقدم الحقول التي تكون قيمتها قاموسًا، مثل rope_parameters، بشكل كامل. يجب أن تتطابق حقول البنية مع الأوزان التي تُحمِّلها.
الضبط الدقيق باستخدام PEFT (LoRA)
يدعم Cosmos3 تقنية LoRA من خلال تكامل LeRobot PEFT (pip install -e ".[cosmos3,training,peft]"). بشكل افتراضي، تقوم LoRA بتكييف إسقاطات الانتباه في مسار التوليد (q_proj_gen، k_proj_gen، v_proj_gen، o_proj_gen)، بينما تُدرَّب وحدات الإجراء (action2llm، llm2action، action_modality_embed) بالكامل وتُحفظ مع المُكيّف.
lerobot-train \
--policy.type=cosmos3_nano \
--policy.pretrained_path=lerobot/Cosmos3-Nano \
--policy.load_action_modules=false \
--policy.gradient_checkpointing=true \
--policy.repo_id=${HF_USER}/Cosmos3-Nano-Policy-LIBERO_10-LoRA \
--peft.method_type=lora \
--peft.r=16 \
--peft.lora_alpha=32 \
--policy.optimizer_lr=5e-4 \
--policy.optimizer_weight_decay=0 \
--dataset.repo_id=lerobot/LIBERO_10-Cosmos3 \
--accelerator.mixed_precision=bf16 \
--tf32=false \
--ema.type=power \
--ema.sigma_rel=0.1 \
--batch_size=4 \
--steps=16000 \
--output_dir=outputs/train/cosmos3_nano_libero_10_lora--peft.lora_alpha=32، ومعدّل التعلم والتلاشي الوزني هما قيم وصفة Cosmos3 LoRA الأصلية. بدون--peft.lora_alpha، يستخدم PEFT القيمة 8.- عند استخدام
--policy.load_action_modules=falseقد تتغير أشكال وحدات الإجراءات (--policy.max_action_dim،--policy.num_embodiment_domains). يعمل هذا مع الضبط الدقيق الكامل فقط: عند إعادة تشغيل PEFT يتم تحميل النموذج الأساسي، والذي يتطلب نفس الأشكال. - لا يؤثر
--policy.train_gen_stream_onlyو--policy.freeze_vision_encoderعند استخدام PEFT: إذ يتم تدريب المحوِّلات ووحدات الإجراءات فقط. - لا تُضِف إسقاطات الإجراء (
action2llm،llm2action) إلى--peft.target_modules: فهي جداول خاصة بكل تجسيد تُقرأ مباشرةً بواسطة ضرب مصفوفات مجمّعة، لذا لن يُحدث LoRA أي تغيير فيها. وهي تُدرَّب بالفعل بالكامل. - حافظ على النوع الافتراضي
--policy.dtypeوهو float32 عند استخدام PEFT، بحيث تُحافظ وحدات الإجراء التي تُدرَّب بالكامل على أوزان رئيسية من نوع float32. - لا تُعرّف الوصفات الأصلية حجم دفعة LoRA أو الجدول الزمني. يحافظ الأمر على جدول LIBERO (تلاشي خطي حتى الصفر عند الخطوة 16000) مع 4 عينات في كل خطوة.
- يتدرّب Cosmos3 Nano مع LoRA على وحدة معالجة رسومية واحدة بسعة 80 جيجابايت باستخدام نقطة التفتيش للتدرجات، بحجم يقارب 64 جيجابايت عند 4 عينات لكل وحدة معالجة رسومية (انظر متطلبات العتاد).
التقييم
قيّم نقطة تحقق LIBERO على الأطقم الأربعة:
lerobot-eval \
--policy.path=lerobot/Cosmos3-Nano-Policy-LIBERO \
--policy.dtype=bfloat16 \
--tf32=false \
--env.type=libero \
--env.task=libero_spatial,libero_object,libero_goal,libero_10 \
--env.observation_height=256 \
--env.observation_width=256 \
--eval.n_episodes=10 \
--eval.batch_size=10 \
--output_dir=outputs/eval/cosmos3_nano_libero- لنقطة تحقق من تدريبك الخاص، مرر أوزان EMA:
--policy.path=outputs/train/cosmos3_nano_libero_10/checkpoints/last/pretrained_model_ema. --env.observation_height=256 --env.observation_width=256يعرض الكاميرات بدقة 256x256 الخاصة ببيانات التدريب.- تضيف بيئة LIBERO تحويل Cosmos3 للإجراءات إلى معالجاتها تلقائيًا: حيث تُعاد إجراءات rot6d ذات الأبعاد العشرة إلى إجراءات محور الزاوية ذات الأبعاد السبعة الخاصة بـ LIBERO. عند تشغيل السياسة خارج
lerobot-eval، قم ببناء معالجات البيئة باستخدامmake_env_pre_post_processors(env_cfg, policy_cfg)منlerobot.envs.factoryأيضًا. - راجع دليل LIBERO لمعرفة بروتوكول التقييم والخيارات الأخرى.
الفيديو المتوقع
يتنبأ Cosmos3 بالإطارات المستقبلية مع الإجراءات. مرّر --policy.save_predicted_video=true لفك ترميز الفيديو المتنبأ به لكل شريحة باستخدام VAE وكتابة pred_episode_*.mp4 بجانب مقاطع eval_episode_*.mp4 المُصيَّرة.
Cosmos3 Edge في مهمة LIBERO-10 «ضع الوعاء الأسود في الدرج السفلي للخزانة وأغلقه». يسار: ملاحظات الشخص الثالث والمعصم أثناء التنفيذ. يمين: الفيديو الذي تتنبأ به السياسة، حيث يُعاد أخذ العينات كل 16 إجراءً من الملاحظة الحالية.
النتائج
LIBERO
| النماذج | Libero-Spatial | Libero-Object | Libero-Goal | Libero-10 | المتوسط |
|---|---|---|---|---|---|
| Cosmos3-Nano-Policy-LIBERO | 98.0% (490/500) | 99.4% (497/500) | 97.4% (487/500) | 96.8% (484/500) | 97.90% |
| Cosmos3-Edge-Policy-LIBERO | 98.6% (493/500) | 99.4% (497/500) | 97.2% (486/500) | 96.6% (483/500) | 97.95% |
| Cosmos3-Nano-Policy-LIBERO_10 | N/A | N/A | N/A | 97.6% (488/500) | 97.60% |
| Cosmos3-Edge-Policy-LIBERO_10 | N/A | N/A | N/A | 95.2% (476/500) | 95.20% |
| Cosmos-Nano-TechReport | N/A | N/A | N/A | 97.4% | 97.40% |
معدلات النجاح في حلقة مغلقة على LIBERO. تم تدريب Cosmos3-Nano-Policy-LIBERO وCosmos3-Edge-Policy-LIBERO على مجموعات LIBERO الأربع (lerobot/Cosmos3-Nano-Policy-LIBERO، lerobot/Cosmos3-Edge-Policy-LIBERO). تم تدريب Cosmos3-Nano-Policy-LIBERO_10 وCosmos3-Edge-Policy-LIBERO_10 على LIBERO-10 فقط (lerobot/Cosmos3-Nano-Policy-LIBERO_10، lerobot/Cosmos3-Edge-Policy-LIBERO_10)، ويتبع إعداد التدريب الخاص بـ Cosmos3-Nano-Policy-LIBERO_10 وصفة LIBERO-10 المُبلَّغ عنها في التقرير التقني. Cosmos-Nano-TechReport هو معدل النجاح على LIBERO-10 لـ Cosmos3 Nano المُدرَّب على LIBERO-10 فقط، كما هو مُبلَّغ عنه في الجدول 20 من التقرير التقني (MT-init، التكرار 2000، 500 تمريرة).
الاستشهاد
@techreport{nvidia2026cosmos3,
title = {Cosmos 3: Omnimodal World Models for physical AI},
author = {{NVIDIA Cosmos Team}},
year = {2026},
url = {https://research.nvidia.com/labs/cosmos-lab/cosmos3/technical-report.pdf}
}رخصة
تتبع تنفيذ LeRobot رخصة Apache 2.0 الخاصة بـ LeRobot. وتُطرح أوزان Cosmos3 والكود الأصلي تحت رخصة OpenMDW-1.1.
Update on GitHub