LeRobot documentation
سياسة DiT متعددة المهام
سياسة DiT متعددة المهام
سياسة التحوّل الانتشاري متعدد المهام (DiT) هي تطور لهندسة سياسة الانتشار الأصلية، حيث تستفيد من نموذج DiT كبير مع شروط نصية وبصرية لتعلم الروبوتات متعددة المهام. تدعم هذه النسخة أهداف الانتشار ومطابقة التدفق لتوليد الإجراءات، مما يتيح للروبوتات تنفيذ مهام متنوعة للتعامل مع الأشياء بناءً على تعليمات لغوية.
نظرة عامة على النموذج
يستخدم النموذج:
- CLIP Vision Encoder: يعالج صور RGB من عدة زوايا كاميرا
- CLIP Text Encoder: يرمّز تعليمات مهام اللغة (أوزان مجمّدة مع إسقاط قابل للتعلّم)
- Diffusion Transformer: يتنبأ بتسلسلات الإجراءات مشروطاً بالملاحظات واللغة
- هدفان: يدعم كلًا من الانتشار (DDPM/DDIM) ومطابقة التدفق لتوليد الإجراءات
يُثير هذا النموذج الحماس لأنه يتيح تحقيق دقة عالية للغاية، تنافس نماذج VLAs متعددة المليارات من المعاملات، باستخدام ما يقارب 450 مليون معامل فقط وتدريب أقل بكثير.
متطلبات التثبيت
تتطلب سياسة Multitask DiT Policy تبعيات إضافية. ثبّتها باستخدام الأمر التالي:
pip install 'lerobot[multi_task_dit]'سيؤدي هذا إلى تثبيت جميع التبعيات اللازمة بما في ذلك مكتبة HuggingFace Transformers لنماذج CLIP.
الاستخدام
للاستخدام Multitask DiT في إعدادات LeRobot الخاصة بك، حدد نوع السياسة على النحو التالي:
policy.type=multi_task_ditالتدريب
أمر التدريب الأساسي
إليك أمر تدريب كامل لتدريب Multitask DiT على مجموعة بياناتك:
lerobot-train \
--dataset.repo_id=YOUR_DATASET \
--output_dir=./outputs/multitask_dit_training \
--batch_size=32 \
--steps=5000 \
--save_freq=500 \
--log_freq=100 \
--policy.type=multi_task_dit \
--policy.device=cuda \
--policy.repo_id="HF_USER/multitask-dit-your-robot" \
--trackio.enable=trueمعلمات ضبط موصى بها وتفاصيل مجموعة البيانات (تردد تحكم 30 هرتز)
للحصول على أداء موثوق، ابدأ بهذه القيم الافتراضية المقترحة للمعاملات الفائقة:
lerobot-train \
--dataset.repo_id=YOUR_DATASET \
--output_dir=./outputs/mutitask_dit_training \
--batch_size=320 \
--steps=30000 \
--policy.type=multi_task_dit \
--policy.device=cuda \
--policy.horizon=32 \
--policy.n_action_steps=24 \
--policy.objective=diffusion \
--policy.noise_scheduler_type=DDPM \
--policy.num_train_timesteps=100 \
--policy.repo_id="HF_USER/multitask-dit-your-robot" \
--trackio.enable=trueالمعلمات الرئيسية:
- حجم الدفعة: 192-320 - إذا كان لديك وصول إلى وحدة معالجة رسومية (GPU) قادرة على دعم ذلك، فستحصل على أفضل ديناميكيات للتدريب
- Horizon: 32 - عدد خطوات الإجراء للتنبؤ، حوالي 1.0 ثانية عند 30Hz
- n_action_steps: 24 - ~0.8 ثانية عند 30Hz
- الهدف:
diffusion- ابدأ بالنموذج الانتشاري وجرب مطابقة التدفق إذا كانت جودة التوليد ضعيفة - خطوات التدريب: يُوصى بأكثر من 30 ألف خطوة للمهمة الواحدة
معلمات تكوين التدريب
اختيار الهدف
اختر بين الانتشار ومطابقة التدفق:
# Diffusion objective (default)
--policy.objective=diffusion \
--policy.noise_scheduler_type=DDPM \
--policy.num_train_timesteps=100 \
--policy.num_inference_steps=10 \
--policy.beta_schedule=squaredcos_cap_v2 \
--policy.prediction_type=epsilon \
--policy.clip_sample=true \
--policy.clip_sample_range=1.0
# Flow matching objective
--policy.objective=flow_matching \
--policy.timestep_sampling_strategy=beta \
--policy.num_integration_steps=100 \
--policy.integration_method=euler \
--policy.sigma_min=0.0| علم | ملاحظات |
|---|---|
--policy.noise_scheduler_type | DDPM أو DDIM |
--policy.num_inference_steps | يقلل عدد الخطوات من زمن الاستدلال |
--policy.beta_schedule | نوع جدول الضوضاء |
--policy.prediction_type | epsilon (تنبؤ بالضوضاء) أو sample (تنبؤ بالنظيفة) |
--policy.clip_sample | قصّ العينات أثناء إزالة الضوضاء |
--policy.clip_sample_range | نطاق القص [-x, x] |
--policy.timestep_sampling_strategy | beta أو uniform؛ ويبدو أن استراتيجية beta تعمل بشكل أفضل بكثير في الممارسة العملية |
--policy.integration_method | euler أو rk4 |
--policy.sigma_min | أقل ضوضاء في مسار الاستيفاء التدفقي |
معمارية Transformer
ضبط سعة النموذج بناءً على حجم مجموعة البيانات:
# Small datasets (< 100 examples)
--policy.num_layers=4 \
--policy.hidden_dim=512 \
--policy.num_heads=8 # should ideally be hidden_dim // 64
# Medium datasets (100-5k examples) - default
--policy.num_layers=6 \
--policy.hidden_dim=512 \
--policy.num_heads=8 # should ideally be hidden_dim // 64
# Large datasets (> 5k examples)
--policy.num_layers=8 \
--policy.hidden_dim=512 \
--policy.num_heads=8 # should ideally be hidden_dim // 64خيارات الترميز الموضعي:
يدعم النموذج طريقتين لتشفير الموضعيات لتسلسلات الإجراءات:
# Rotary Position Embedding (RoPE) - default, recommended
--policy.use_rope=true \
--policy.rope_base=10000.0 # Base frequency for RoPE
# Absolute positional encoding
--policy.use_positional_encoding=true # Disables RoPE when trueمعاملات Transformer الأخرى:
--policy.dropout=0.1 # Dropout rate for DiT blocks (0.0-1.0)
--policy.timestep_embed_dim=256 # Timestep embedding dimensionإعدادات مُشفِّر الرؤية
# Use different CLIP model for more expressivity at the cost of inference time
# experiment with larger or smaller models depending on the complexity of your tasks and size of dataset
--policy.vision_encoder_name=openai/clip-vit-large-patch14
# Use separate vision encoder per camera
# This may be useful when cameras have significantly different characteristics, but
# be wary of increased VRAM footprint.
--policy.use_separate_rgb_encoder_per_camera=true
# Image preprocessing (you may need to resize your images for inference speed ups)
--policy.image_resize_shape=[XXX,YYY] \
--policy.image_crop_shape=[224,224] \
--policy.image_crop_is_random=true # Random during training, center at inferenceإعدادات مُشفِّر النص
# Use different CLIP text encoder model
# same as vision: experiment with larger or smaller models depending on the
# complexity of your tasks and size of dataset
--policy.text_encoder_name=openai/clip-vit-large-patch14إعداد معدل التعلم
يستخدم مُشفِّر الرؤية مُضاعِف معدل تعلّم منفصلًا، حيث يُقترح أن يكون 1/10 نقطة البداية المثالية:
--policy.optimizer_lr=2e-5 \
--policy.vision_encoder_lr_multiplier=0.1 # Vision encoder LR = 0.1 * optimizer_lrإرشادات التدريب والتuning
1. مطابقة التدفق مع أخذ العينات بيتا
يعتمد التنفيذ الأصلي للنشر هنا على العمل الموصوف في ورقة LBM الخاصة بـ TRI
بالإضافة إلى ذلك، لقد طبقنا هدف مطابقة التدفق (flow-matching objective)، وهو موصوف على مستوى عالٍ في منشور مدونة بوسطن ديناميكس.
فكّر في اختبار هدف مطابقة التدفق وتقييم الفروق في الأداء لمهمتك:
--policy.objective=flow_matching \ --policy.timestep_sampling_strategy=beta \ --policy.timestep_sampling_alpha=1.5 \ --policy.timestep_sampling_beta=1.0 \ --policy.timestep_sampling_s=0.999
لم يُثبت أن هذا الحل هو الحل السحري لكل حالة استخدام، لكنه قد يؤدي في بعض الأحيان إلى إجراءات أكثر سلاسة واتساقاً.
2. عدد طبقات Transformer
طابق سعة النموذج مع حجم مجموعة البيانات الخاصة بك:
- المجموعات البيانات الصغيرة (< 100 أمثلة): قلّل إلى 4 طبقات
- المجموعات البيانات الكبيرة (> 5k أمثلة): زيادة إلى 8 طبقات
3. ضبط أفق
قد يكون النموذج حساسًا للأفق الذي تختاره. ابدأ بأفق مدته ثانية واحدة تقريبًا بناءً على تردد التحكم لديك:
- تردد 30 هرتز:
horizon=30 - تردد 10 هرتز:
horizon=10
ثم جرّب زيادة القيمة من هناك. يحدد الأفق مدى بُعد المستقبل الذي تتنبأ به النموذج بالإجراءات.
4. حساسية n_action_steps
يمكن أن يكون النموذج حساسًا جدًا أيضًا تجاه n_action_steps. ابدأ بقيمته حوالي 0.8 ثانية بناءً على تردد التحكم لديك، ثم اضبطها من هناك:
- قيم أدنى: استجابة أعلى لكن استقرار أقل محتملاً للمهام طويلة المدى
- قيم أعلى: أفضل للتنفيذ على مدى زمني طويل، لكن أعطال الحلقة المفتوحة محدودة في قدرتها على التعافي
ضبط الاستدلال
للحصول على استنتاج أسرع، استخدم DDIM مع عدد أقل من خطوات العينة:
--policy.noise_scheduler_type=DDIM \ --policy.num_inference_steps=10
استئناف التدريب
للاستئناف في التدريب من نقطة تفتيش:
lerobot-train \
--config_path=./outputs/mutitask_dit_training/checkpoints/last/pretrained_model/train_config.json \
--resume=trueيجب أن يحتوي مجلد نقطة الحفظ على ملفَي model.safetensors وconfig.json (يُحفظان تلقائيًا أثناء التدريب). عند الاستئناف، يتم تحميل الإعدادات من نقطة الحفظ، لذا لا حاجة إلى تحديد معاملات أخرى.
أوضاع الفشل الشائعة وتصحيح الأخطاء
قد تكون عملية تدريب هذه النماذج حسّاسة. فيما يلي أخطاء شائعة وطرق تصحيحها:
التوقف / عدم الحركة
قد “ينهار” النموذج أثناء الاستدلال، مما يؤدي إلى حركة ثابتة أو انعدام الحركة. وقد يحدث ذلك عندما:
نقص بيانات التدريب: إذا كان لديك 20-50 مثالًا فقط، فحاول مضاعفة حجم مجموعة البيانات تقريبًا. إذا تجاوز عدد الأمثلة 300 مثالًا وما زلت ترى هذا، فقد تكون المهمة معقدة للغاية.
مهام متعددة متشابهة: عندما يحتوي مجموعة البيانات الخاصة بك على مهام متعددة متشابهة (مثل التقاط كائنين مختلفين)، فقد يعتمد النموذج بشكل مفرط على التكييف اللغوي الذي قد لا يكون غنيًا بما يكفي.
نصائح لاستكشاف الأخطاء:
- زيادة حجم مجموعة البيانات (ضاعفها حتى تتجاوز 300 مثال)
- تدرّب لفترة أطول، حتى 100k خطوة، حتى عندما يتسبب في استقرار
- تحقق من أن النموذج يستقبل تعليمات لغوية مناسبة أو زد من تنوع التعليمات
تنفيذ المهمة الخاطئة
في بعض الأحيان، يتجاهل الروبوت تعليماتك تمامًا وينفذ مهمة أخرى. وعادةً ما يحدث هذا فقط إذا كنت قد درّبت النموذج على مهام متعددة.
الأسباب المحتملة:
- غموض تعليمات اللغة
- بيانات تدريب غير كافية خاصة بالمهمة
- التباس النموذج بين المهام المتشابهة في مجموعة البيانات متعددة المهام
نصائح لاستكشاف الأخطاء:
- تحقق من تحديد تعليمات اللغة، خاصةً إذا كانت الأوصاف متشابهة بين مهام متعددة
- تحقق من توزيع المهام في مجموعة بيانات التدريب وأضف أوزانًا للمهمة الفاشلة/المُتجاهَلة
- فكّر في الضبط الدقيق الخاص بالمهمة
عدم استقرار التدريب
إذا كانت خسارة التدريب غير مستقرة أو متباعدة:
- جرّب تعديل معدل التعلم بين
1e-5و3e-4 - زيادة حجم الدفعة إن أمكن
- تحقق من أن تطبيع مجموعة البيانات لديك صحيح
- تحقق من أن معالجة الصور المسبقة تعمل بشكل صحيح
اعتبارات الأداء
متطلبات وحدة معالجة الرسوميات
- الاستدلال: يُوصى ببطاقة RTX 5070 Ti (أو بطاقة GPU مكافئة) على الأقل للحصول على أداء سرعة معقول
- التدريب: يُعدّ وجود وحدة معالجة رسومية (GPU) بذاكرة فيديو (VRAM) كافية لتحميل أحجام دفعات (batch sizes) أكبر من 64 أمراً مثالياً، وهو ما يختلف حسب عدد ملاحظات الصور وما إلى ذلك
توصيات حجم الدفعة
- الحد الأدنى: 64 (قد يؤدي انخفاض القيمة عن ذلك إلى عدم استقرار التدريب)
- موصى به: 256-320 (أفضل أداء، يتطلب بطاقة GPU أكبر)
مثال: التدريب على مجموعة بيانات مخصصة
إليك مثالًا كاملًا للتدريب على مجموعة بيانات مخصصة:
lerobot-train \
--dataset.repo_id=YOUR_DATASET \
--output_dir=./outputs/mutitask_dit_training \
--batch_size=320 \
--steps=30000 \
--save_freq=1000 \
--log_freq=100 \
--env_eval_freq=1000 \
--policy.type=multi_task_dit \
--policy.device=cuda \
--policy.horizon=32 \
--policy.n_action_steps=24 \
--policy.objective=diffusion \
--policy.noise_scheduler_type=DDPM \
--policy.num_layers=6 \
--policy.hidden_dim=512 \
--policy.vision_encoder_name=openai/clip-vit-base-patch16 \
--policy.image_resize_shape=[320,240] \
--policy.image_crop_shape=[224,224] \
--policy.repo_id="HF_USER/multitask-dit-your-robot" \
--trackio.enable=true \
--trackio.project=multitask_ditنتائج Libero
lerobot-train \
--dataset.repo_id=HuggingFaceVLA/libero \
--policy.type=multi_task_dit \
--policy.push_to_hub=false \
--output_dir="./outputs/multitask_dit_libero" \
--job_name="multitask-dit-libero" \
--trackio.enable=true \
--trackio.project=multitask_dit_libero \
--dataset.image_transforms.enable=true \
--dataset.image_transforms.max_num_transforms=4 \
--dataset.image_transforms.tfs='{"brightness":{"type":"ColorJitter","kwargs":{"brightness":[0.75,1.25]}},"contrast":{"type":"ColorJitter","kwargs":{"contrast":[0.6,1.4]}},"saturation":{"type":"ColorJitter","kwargs":{"saturation":[0.8,1.2]}},"hue":{"type":"ColorJitter","kwargs":{"hue":[-0.05,0.05]}},"sharpness":{"type":"SharpnessJitter","kwargs":{"sharpness":[0.6,1.4]}},"rotation":{"type":"RandomRotation","kwargs":{"degrees":[-5,5]}},"translation":{"type":"RandomAffine","kwargs":{"degrees":0,"translate":[0.1,0.1]}}}' \
--dataset.video_backend=torchcodec \
--policy.use_amp=true \
--policy.horizon=48 \
--policy.n_obs_steps=2 \
--policy.use_rope=true \
--policy.use_positional_encoding=false \
--policy.hidden_dim=768 \
--policy.num_layers=8 \
--policy.num_heads=12 \
--policy.dropout=0.1 \
--policy.timestep_embed_dim=256 \
--policy.objective=diffusion \
--policy.optimizer_lr=3e-4 \
--policy.optimizer_weight_decay=0 \
--policy.scheduler_warmup_steps=0 \
--policy.vision_encoder_name=openai/clip-vit-base-patch16 \
--policy.image_resize_shape=[256,256] \
--policy.image_crop_is_random=true \
--policy.text_encoder_name=openai/clip-vit-base-patch16 \
--policy.vision_encoder_lr_multiplier=0.1 \
--policy.device=cuda \
--num_workers=8 \
--save_freq=4000 \
--log_freq=100 \
--steps=100000 \
--batch_size=320النتائج:
| LIBERO المكانية | LIBERO Object | هدف LIBERO | LIBERO 10 | المتوسط |
|---|---|---|---|---|
| 87.0 | 98.2 | 93.8 | 83.2 | 90.6 |
المراجع
لمزيد من التفاصيل حول التنفيذ التقني والبنية، راجع:
- فحص دقيق لنماذج السلوك الكبيرة للتلاعب الماهر متعدد المهام
- نماذج السلوك الكبيرة وأطلس تجدان أرضية جديدة
- تحليل وتحرير سياسة محوّل الانتشار متعدد المهام