LeRobot documentation

سياسة DiT متعددة المهام

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

سياسة 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_typeDDPM أو DDIM
--policy.num_inference_stepsيقلل عدد الخطوات من زمن الاستدلال
--policy.beta_scheduleنوع جدول الضوضاء
--policy.prediction_typeepsilon (تنبؤ بالضوضاء) أو sample (تنبؤ بالنظيفة)
--policy.clip_sampleقصّ العينات أثناء إزالة الضوضاء
--policy.clip_sample_rangeنطاق القص [-x, x]
--policy.timestep_sampling_strategybeta أو uniform؛ ويبدو أن استراتيجية beta تعمل بشكل أفضل بكثير في الممارسة العملية
--policy.integration_methodeuler أو 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 (يُحفظان تلقائيًا أثناء التدريب). عند الاستئناف، يتم تحميل الإعدادات من نقطة الحفظ، لذا لا حاجة إلى تحديد معاملات أخرى.

أوضاع الفشل الشائعة وتصحيح الأخطاء

قد تكون عملية تدريب هذه النماذج حسّاسة. فيما يلي أخطاء شائعة وطرق تصحيحها:

التوقف / عدم الحركة

قد “ينهار” النموذج أثناء الاستدلال، مما يؤدي إلى حركة ثابتة أو انعدام الحركة. وقد يحدث ذلك عندما:

  1. نقص بيانات التدريب: إذا كان لديك 20-50 مثالًا فقط، فحاول مضاعفة حجم مجموعة البيانات تقريبًا. إذا تجاوز عدد الأمثلة 300 مثالًا وما زلت ترى هذا، فقد تكون المهمة معقدة للغاية.

  2. مهام متعددة متشابهة: عندما يحتوي مجموعة البيانات الخاصة بك على مهام متعددة متشابهة (مثل التقاط كائنين مختلفين)، فقد يعتمد النموذج بشكل مفرط على التكييف اللغوي الذي قد لا يكون غنيًا بما يكفي.

نصائح لاستكشاف الأخطاء:

  • زيادة حجم مجموعة البيانات (ضاعفها حتى تتجاوز 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هدف LIBEROLIBERO 10المتوسط
87.098.293.883.290.6

المراجع

لمزيد من التفاصيل حول التنفيذ التقني والبنية، راجع:

Update on GitHub