LeRobot documentation
LingBot-VA
LingBot-VA
LingBot-VA هو سياسة نموذج عالم ذاتي التوليد للفيديو والإجراءات مبني على مجموعة Wan2.2 للفيديو التوليدية. وهو يمزج، في تسلسل ذاتي التوليد واحد، بين التنبؤ بـ كائنات الفيديو الكامنة المستقبلية وإجراءات الروبوت (حيث “VA” تعني فيديو-إجراء). وتقوم تكاملية LeRobot بربط LingBot-VA بواجهات التدريب والتقييم والمعالج القياسية.
نظرة عامة على النموذج
LingBot-VA هو «مزيج من محوّلات» مزدوج التدفّق: تتشارك تدفّقة الفيديو/الكامن (patch_embedding_mlp → blocks → proj_out) وتدفّقة الإجراء (action_embedder → blocks → action_proj_out) نفس كتل المحوّل الثلاثين وتكييف النص.
| مكوّن | فئة | الدور |
|---|---|---|
| هيكل DiT الأساسي (قابل للتدريب) | WanTransformer3DModel | محوّل (transformer) مزدوج التدفق يحتوي على حوالي 5 مليارات من المعاملات. |
| VAE (مجمّد) | AutoencoderKLWan | Wan2.2 VAE، z_dim=48. يُسحب بشكل كسول من المستودع المصدر. |
| مُشفِّر النص (مجمّد) | UMT5EncoderModel | UMT5-XXL، d_model=4096. يُسحب بشكل كسول من المستودع المصدر. |
عند الاستدلال، تُنفّذ السياسة حلقة توليد ذاتية التراجع لكل شريحة: فهي تُزيل الضوضاء عن تدفق الكامنة للفيديو (CFG، ~20 خطوة) وتدفق الإجراء (~50 خطوة) باستخدام جدولي جدولة مستقلين لتطابق التدفق، مع الحفاظ على ذاكرة KV عبر الشرائح. تُعاد إطارات المفاتيح المرصودة فعليًا إلى ذاكرة KV أثناء تنفيذ الشريحة (نمذجة العالم في حلقة مغلقة).
ما تغطيه تكامل LeRobot
- إعداد
policy.type=lingbot_vaالقياسي من خلال LeRobot. - نقاط تفتيش جاهزة للاستخدام بصيغة LeRobot على Hub (تم تحويلها من نقاط التفتيش الأصلية المنشورة).
- الاستدلال التلقائي التتابعي ذو التدفق المزدوج خلف واجهة
select_actionالقياسية (تقييم بيئة واحدة،--eval.batch_size=1). - حفظ اختياري للفيديوهات المُتنبَّأ بها (المُتخيَّلة) الخاصة بالسياسة أثناء التقييم / التدريب.
- التقييم باستخدام
lerobot-evalعلى LIBERO و RoboTwin. - التدريب/الضبط الدقيق عبر خسارة مطابقة التدفق ذات التدفق المزدوج (
policy.forward)، راجع ما يلي.
التثبيت
- قم بتثبيت LeRobot باتباع دليل التثبيت.
- قم بتثبيت إضافة LingBot-VA الإضافية:
pip install -e ".[lingbot_va]"نقاط التفتيش
تم تحويل نقاط التفتيش الصادرة من المصدر إلى صيغة LeRobot ودفعها إلى Hub:
| النوع | نقطة التفتيش LeRobot |
|---|---|
| LIBERO-Long ما بعد التدريب | lerobot/lingbot_va_libero_long |
| التدريب اللاحق لـ RoboTwin | lerobot/lingbot_va_robotwin |
| قاعدة مُسبقة التدريب | lerobot/lingbot_va_base |
يُخزَّن فقط محوّل ~5B القابل للتدريب في model.safetensors الخاص بـ LeRobot. أما VAE المجمّد + UMT5 + مُرمّز الرموز (~20 جيجابايت) فيُستَدعى من config.wan_pretrained_path عند التحميل (القيمة الافتراضية هي المستودع المصدر robbyant/*). يعمل مُرمّز النصوص UMT5-XXL على وحدة المعالجة المركزية (CPU) افتراضيًا (config.text_encoder_device) بحيث يتّسع محوّل 5B + VAE على بطاقة رسومات واحدة بسعة 24–32 جيجابايت.
التقييم (LIBERO)
lerobot-eval \
--policy.path=lerobot/lingbot_va_libero_long \
--policy.device=cuda \
--env.type=libero --env.task=libero_10 \
--env.observation_height=128 --env.observation_width=128 \
--eval.n_episodes=50 --eval.batch_size=1 \
--output_dir=outputs/eval/lingbot_va_liberoيُنفَّذ الاستدلال البثي في LingBot-VA (ذاكرة KV + ملاحظات الإطارات الرئيسية المرصودة) للتقييم في بيئة واحدة؛ استخدم --eval.batch_size=1.
التقييم (RoboTwin)
يتطلب RoboTwin 2.0 مجموعة محاكاة SAPIEN + CuRobo. يمكنك استخدام صورة Docker الخاصة بالمعايير (docker/Dockerfile.benchmark.robotwin، والتي تتطلب أيضًا warp-lang==1.3.1 وبناء CuRobo مع قدرة وحدة معالجة الرسوميات الحاسوبية في TORCH_CUDA_ARCH_LIST). يستخدم RoboTwin التحكم في وضع طرف الأداة، لذا قم بالتنفيذ باستخدام --env.action_mode=ee: يتنبأ النموذج الاستراتيجي بفروقات xyz+quaternion+gripper لكل ذراع (تخطيط كامن robotwin_tshape) تُدمج مع وضع طرف الأداة الأولي للحلقة وتُنفَّذ عبر CuRobo IK.
lerobot-eval \
--policy.path=lerobot/lingbot_va_robotwin \
--policy.device=cuda \
--env.type=robotwin --env.task=beat_block_hammer --env.action_mode=ee \
--eval.n_episodes=10 --eval.batch_size=1 \
--output_dir=outputs/eval/lingbot_va_robotwinحفظ مقاطع الفيديو المتوقعة (المُتخيَّلة)
اضبط --policy.save_predicted_video=true لتفكيك كود VAE للفيديو المتوقع بالإضافة إلى ذلك، وكتابة pred_episode_*.mp4 بجانب مقاطع eval_episode_*.mp4 المُصوّرة من البيئة.
يعمل نفس العلم مع التقييم الدوري أثناء lerobot-train.
مشاهدة الفيديو المتخيل مباشرة
اضبط --policy.return_predicted_video=true أثناء lerobot-rollout --display_data=true لفك ترميز الفيديو المتوقع لكل جزء وعرض، مع تنفيذ كل إجراء، إطارات الكاميرا المتخيلة التي ينتمي إليها (prediction.images.<camera>، بجانب كل كاميرا حقيقية). يتسبب هذا في إجراء فك ترميز واحد بواسطة VAE لكل جزء.
التدريب / الضبط الدقيق
LingBotVAPolicy.forward(batch) ينفّذ خسارة flow-matching ذات التدفّق المزدوج
(latent_loss + action_loss، موزونة بخطوة الزمن، ومقنّعة للإجراء) كما ورد في الورقة البحثية: إذ يقوم بتشفير مقاطع الكاميرا إلى كامنات فيديو باستخدام VAE، وتشفير المهمة باستخدام UMT5، وإضافة ضجيج إلى كلا التدفّقين، وتنفيذ مسار التدريب السببي على مستوى الكتل في المحوّل، ثم إرجاع (loss, metrics). الإعداد المسبق للمحسّن هو AdamW مع جدول خطي التسخين ثم الثابت (مطابقًا للإصدار الأصلي).
المتطلبات:
- تستخدم أقنعة السبب الكتلوية flex-attention في PyTorch، لذا ابنِ السياسة باستخدام
--policy.attn_mode=flexللتدريب (الوضع الافتراضيtorchSDPA مخصص للاستدلال فقط). - لا يتسع نموذج DiT الكامل بحجم 5B على بطاقة GPU واحدة بسعة 24–32 GB عند استخدام AdamW؛ قم بإجراء الضبط الدقيق باستخدام LoRA (
--peft.method_type=LORA) و/أو تفريغ المُحسِّن. تُرجعget_optim_paramsفقط المعاملات القابلة للتدريب (مثل مُكيِّف المحلِّلات)؛ بينما تبقى مُشفِّر النص VAE + UMT5 مجمَّدة. ثبّت الحزمة الإضافيةlerobot[peft]لتفعيل دعم PEFT (انظر دليل تدريب PEFT).
lerobot-train \
--policy.path=lerobot/lingbot_va_libero_long --policy.attn_mode=flex \
--peft.method_type=LORA --peft.r=32 --peft.lora_alpha=32 \
--peft.target_modules='transformer\.blocks\.\d+\.attn[12]\.(to_q|to_v)' \
--dataset.repo_id=<your LeRobot-format dataset> \
--batch_size=1 --steps=... --output_dir=outputs/train/lingbot_vaعلى عكس SmolVLA / π₀، لا يوفر LingBot-VA أهداف LoRA افتراضية مدمجة، لذا يجب عليك تمرير --peft.target_modules بشكل صريح. الجزء الوحيد القابل للتدريب هو self.transformer (محوّل Wan ذو التدفق المزدوج)؛ ويكيّف المثال أعلاه إسقاطات الاستعلام/القيمة لكلٍّ من كتل الانتباه الذاتي (attn1) والانتباه المتقاطع (attn2)، وهو مجموعة أهداف LoRA القياسية. وسّع هذه المجموعة (مثل إضافة to_k/to_out، أو طبقات ffn) إذا كنت بحاجة إلى مُكيّف بسعة أعلى. إن تمرير --peft.method_type يعني تفعيل PEFT، لذا لا يلزم تمرير --policy.use_peft=true.
يجب أن يوفّر مجموعة البيانات مقاطع كاميرا (نافذة زمنية لكل كاميرا، مشفّرة بواسطة VAE إلى frame_chunk_size إطارات كامنة) وframe_chunk_size * action_per_frame خطوات إجراء لكل عنصر.
تنسيق البيانات (قنوات الإجراءات & ترتيب الكاميرات)
LingBot-VA هو سياسة وضع الطرف النهائي (الإحداثي)، حيث يتنبأ بأوضاع الطرف النهائي + الماسك، وليس بمواضع المفاصل. تقع الإجراءات في تخطيط ثابت متعدد الأجسام بأبعاد 30؛ قم بترجمة أبعاد إجراء روبوتك إلى هذه القنوات واملأ الباقي بـ 0 (يحدد used_action_channel_ids القنوات التي يستخدمها نقطة التفتيش المعينة فعلياً):
| القنوات | المعنى |
|---|---|
| 0–6 | وضعية الطرف النهائي للذراع اليسرى |
| 7–13 | وضعية الطرف النهائي للذراع اليمنى |
| 14–20 | مفاصل الذراع اليسرى (غير مستخدمة في نقاط التفتيش المنشورة) |
| 21–27 | مفاصل الذراع اليمنى (غير مستخدمة في نقاط التفتيش المنشورة) |
| 28 | المقبض الأيسر |
| 29 | المقبض الأيمن |
- يستخدم LIBERO القنوات
0–6: فرق EEF بست درجات حرية (xyz + دوران) + قابض (ذراع واحدة). - يستخدم RoboTwin القنوات
[0–6, 28, 7–13, 29]: EEF الأيسر (xyz + quaternion) + قابض الأيسر + EEF الأيمن + قابض الأيمن (16 بُعدًا). يقوم البيئة بتحويل هذه الأوضاع إلى مسارات مفصلية عبر CuRobo IK — حيث لا يتم التنبؤ بالمفاصل أبدًا.
يجب إعادة تعيين مساحات البيانات المشتركة (أو أي اتفاقية مختلفة لمفهوم النهاية) إلى هذا المخطط قبل ضبط هذه النقاط الفاحصة.
ترتيب الكاميرات ثابت وحساس للترتيب، حيث يتم دمج الكمونيات الخاصة بكل كاميرا مكانياً وفق ترتيب obs_cam_keys، لذا يجب أن يتطابق إسقاط الكاميرات الفيزيائية إلى الفتحات مع التدريب:
| مقياس الأداء | obs_cam_keys (بالترتيب) | camera_layout |
|---|---|---|
| LIBERO | observation.images.image (منظور الوكيل / الشخص الثالث)، observation.images.image2 (كاميرا معصم اليد) | width_concat (المتغيرات الكامنة مدمجة على محور العرض) |
| RoboTwin | observation.images.head_camera, observation.images.left_camera, observation.images.right_camera | robotwin_tshape (رأس بدقة كاملة في الأسفل، ورسغان بدقة نصفية في الأعلى) |
الكاميرا الأولى هي الكاميرا الخارجية/للقبّة، والباقي هي كاميرات المعصم.
معلمات الاستدلال (LIBERO)
| المفتاح | القيمة |
|---|---|
| الارتفاع × العرض | 128 × 128 |
| كاميرات | observation.images.image (منظور الوكيل)، observation.images.image2 (العين في اليد) |
| قنوات الإجراءات المستخدمة | 0–6 (ذراع بـ 7 درجات حرية + قابض) |
| action_per_frame / frame_chunk_size | 4 / 4 |
| attn_window | 30 |
| خطوات إزالة الضوضاء من الفيديو / الإجراء | 20 / 50 |
| guidance_scale / action_guidance_scale | 5 / 1 |
| snr_shift / action_snr_shift | 5.0 / 0.05 |
هذه هي القيم الافتراضية لـLingBotVAConfig؛ يمكنك تجاوز أيٍّ منها عبر --policy.<name>=....
ملاحظات
- واجهة الانتباه: يستخدم الاستدلال واجهة
torchSDPA (متاحة دائمًا). واجهتاflashattnوflexاختياريتان؛ ولا يُحتاج إلىflexإلا للتدريب. - حجم النموذج: يحتوي DiT على حوالي 5 مليارات من المعاملات، بينما يضيف VAE وUMT5 المجمّدةان حوالي 20 غيغابايت؛ ويتطلب الاستدلال ما يقارب 18–24 غيغابايت من ذاكرة VRAM.
رخصة
تم إصدار LingBot-VA تحت رخصة Apache-2.0. راجع المستودع الأصلي.
Update on GitHub