مصفوفة تدريب AY-Robots مع خمسة صفوف للسياسات وأربعة أعمدة لأذرع الروبوت، كل خلية تربط بدليل تدريب نموذج وذراع محدد.
ACTSO-100lerobotالتعلم بالمحاكاةتدريب السياسات

كيفية تدريب ACT على SO-100 من الصفر

AY-Robots ResearchAugust 23, 202616 دقيقة قراءة

تدريب محول تقسيم الإجراءات (Action Chunking Transformer) من الصفر على SO-100 باستخدام lerobot: إعدادات act، وchunk_size، وn_action_steps، وجدول 100000 خطوة، واستدلال 20 مللي ثانية.

ACT هو الاستثناء بين سياسات SO-100. GR00T N1.7 و N1.5 يبدآن من nvidia/GR00T-N1.7-3B و nvidia/GR00T-N1.5-3B، و Pi0.5 من lerobot/pi05_base. ACT يبدأ من الصفر: لا توجد نقطة تحقق أساسية، لأنه ليس نموذجًا تأسيسيًا. إنه محول بحدود 80 مليون معلمة تقوم بتدريبه من الصفر على مهمة واحدة، على ذراعك، تحت إضاءتك.

هذا هو السبب أيضًا في أنه ينفذ خطوة تحكم في 20 مللي ثانية بينما يحتاج VLA ذو 3 مليارات معلمة إلى 152 إلى 485 مللي ثانية، ويكلف 1 إلى 3 دولار أمريكي لكل تشغيل بدلاً من 4 إلى 12. يشرح هذا الدليل المسار اليدوي مع lerobot على SO-100: التسجيل، إعدادات act، ما الذي تتحكم فيه chunk_size و n_action_steps، جدول الـ 100000 خطوة، والتنفيذ. ثم نفس المهمة على AY-Robots، بما في ذلك الجوانب التي لا تساعد فيها المنصة.

ما تحتاج لمعرفته

  • ACT يتدرب من الصفر: لا يوجد نموذج أساسي، لا تدريب مسبق، لا إدخال لغوي. نقطة تحقق واحدة، مهمة واحدة.
  • الورقة البحثية: حوالي 80 مليون معلمة، حوالي 5 ساعات على بطاقة RTX 2080 Ti بسعة 11 جيجابايت، استدلال في 0.01 ثانية.
  • إعدادات lerobot الافتراضية: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 steps, seed 1000.
  • على AY-Robots: 20 مللي ثانية لكل خطوة، الأسرع بين الخمسة. 50 حلقة كحد أدنى، LeRobot v3.0، بطاقة 24 جيجابايت، 1 إلى 3 دولار أمريكي لكل تشغيل.
  • يفوز في مهمة رآها، ويخسر في اللحظة التي تريد فيها تكييفًا لغويًا.
الإصدارات التي يصفها هذا

تم التحقق في 23 أغسطس 2026 مقابل lerobot 0.6.x: pyproject.toml on main reads version = "0.6.2", newest tag v0.6.1, 3 August 2026. دليل تعليمي يبدأ بـ python lerobot/scripts/train.py يسبق نقاط إدخال وحدة التحكم lerobot-train, lerobot-record and lerobot-rollout.

ما هو ACT في الواقع

تأتي تقنية Action Chunking with Transformers من ورقة ALOHA البحثية، تعلم التلاعب الثنائي الدقيق باستخدام أجهزة منخفضة التكلفة، بقلم Zhao, Kumar, Levine و Finn, arXiv, 23 أبريل 2023. يسجل الجهاز بمعدل 50 Hz باستخدام أربع كاميرات ويب تبث بدقة 480x640 بمعدل 30 fps: اثنتان على القابضات، واحدة علوية، وواحدة أمامية. يدعي الملخص تحقيق ست مهارات بنسبة نجاح تتراوح من 80 إلى 90 percent، من بينها فتح كوب توابل شفاف وإدخال بطارية، وذلك من 10 minutes من العروض التوضيحية.

يكون النص الأساسي أكثر فائدة عند التخطيط لجلسة تسجيل: 50 demonstrations لكل مهمة، باستثناء Thread Velcro عند 100، وهو ما يمثل من 10 إلى 20 minutes من البيانات ومن 30 إلى 60 minutes من الوقت الفعلي بمجرد احتساب عمليات إعادة الضبط. النجاح ليس موحدًا أيضًا: Thread Velcro ينتهي عند 20 percent، Put On Shoe عند 92، Cup Open 84، Prep Tape 64.

المعلمة الفائقةورقة ALOHA، الجدول IIIlerobot على الفرع الرئيسي
معدل التعلم1e-5optimizer_lr = 1e-5
حجم الدفعة8batch_size = 8, in TrainPipelineConfig not ACTConfig
طبقات المشفر / فك التشفير4 / 7n_encoder_layers = 4 / n_decoder_layers = 1
حجم الكتلة k100chunk_size = 100
البعد الكامن لـ zغائب؛ يظهر Fig. 11 إسقاطًا من 32 إلى 512latent_dim = 32
التجميع الزمنيغائب؛ --temporal_agg في الكود المرجعيtemporal_ensemble_coeff = None
صف طبقات فك التشفير ليس خطأ مطبعيًا

تذكر الورقة 7 طبقات لفك التشفير، بينما lerobot يشحن طبقة واحدة، عن قصد. يشير التعليق في `configuration_act.py` إلى أن التنفيذ الأصلي يحتوي على خطأ يعني أن الطبقة الأولى فقط هي المستخدمة، مستشهدًا بـ المشكلة 25 في tonyzhaozh/act: يقرأ رأس الإجراء `hs[0]`، لذا تعمل جميع الطبقات السبع ولكن الإخراج الأول فقط يصل إلى التنبؤ. هذه المشكلة مفتوحة وبدون إجابة منذ 23 April 2024. يتطابق lerobot مع السلوك الذي أنتج النتائج المنشورة، وليس الرقم المطبوع. ارفع `--policy.n_decoder_layers` وستقوم بتدريب نموذج لم تقم الورقة بتقييمه أبدًا.

تجزئة الإجراءات هي الفكرة الأساسية

يُعيّن الاستنساخ السلوكي العادي ملاحظة واحدة لإجراء واحد، وتتراكم الأخطاء: يؤدي الانحراف إلى خروج الذراع عن التوزيع، مما ينتج عنه إجراء أسوأ، وبعد ثلاثين خطوة يكون القابض بعيدًا عن الكائن. تجزئة الإجراءات يتنبأ بـ k إجراءات في وقت واحد وينفذها، مما يقلل الأفق الفعال بمعامل k. كما يتعامل مع إزعاج خاص بالبيانات البشرية: يتوقف المشغلون عن بعد، والسياسة أحادية الخطوة لا يمكنها نمذجة توقف يعتمد على ما سبق.

تُجري الورقة دراسة استقصائية لـ k بدلاً من تأكيده. مع إيقاف التجميع الزمني، وبمتوسط أربع إعدادات، يرتفع النجاح من 1 percent عند k = 1 إلى 44 percent عند k = 100، ثم يتناقص عند 200 و 400 مع اقتراب السياسة من التحكم في الحلقة المفتوحة. هذا المنحنى هو السبب في أن القيمة الافتراضية هي 100.

  • chunk_size: عدد الإجراءات المستقبلية التي يتنبأ بها المفسّر لكل تمريرة أمامية. الافتراضي 100.
  • n_action_steps: عدد الإجراءات التي تنفذها قبل الاستعلام مرة أخرى. الافتراضي 100، لذا يقوم lerobot بتشغيل الكتلة بأكملها في حلقة مفتوحة.
  • يتحقق lerobot من أن n_action_steps <= chunk_size ويرفع ValueError إذا قمت بتعيينها بشكل معكوس.

ما يهم تشغيليًا هو حجم الكتلة (chunk_size) مقسومًا على معدل الإطارات. عند 30 إطارًا في الثانية التي تستخدمها أمثلة SO-100 الخاصة بـ lerobot، تلتزم كتلة من 100 إجراء بحوالي 3.3 ثانية من ملاحظة واحدة. إذا كانت المهمة تتطلب تصحيحًا داخل تلك النافذة، فقم بتخفيض n_action_steps، وليس chunk_size: فأنت تحتفظ بالتنبؤ الطويل وتعيد الملاحظة بشكل متكرر.

bash
# predict 100 actions, re-query after 25 of them (about 0.8 s at 30 fps)
lerobot-train \
  --dataset.repo_id=${HF_USER}/so100_cube \
  --policy.type=act \
  --policy.chunk_size=100 \
  --policy.n_action_steps=25 \
  --policy.device=cuda
تقصير الجزء المنفذ من الكتلة دون تقصير التنبؤ.
فخ التجميع الزمني

عند تعيين --policy.temporal_ensemble_coeff، يتطلب lerobot أن يكون n_action_steps = 1، ويرفع NotImplementedError بخلاف ذلك. يقوم التجميع بالاستعلام عن السياسة في كل خطوة زمنية ويمزج التنبؤات المتداخلة لتلك الخطوة الزمنية بأوزان w_i = exp(-m * i)، حيث يحصل الأقدم على w_0. تشير الورقة إلى أنه يبلغ 3.3 بالمائة لـ ACT: وهو تأثير حقيقي ولكنه متواضع، ويضاعف عدد الاستدلالات بطول الكتلة. يمكن تحمله عند 20 مللي ثانية لكل خطوة، وليس عند 485 مللي ثانية. انظر زمن استجابة الاستدلال.

عندما يتفوق ACT على نموذج أساسي

السياسات الخمس القابلة للتدريب جنبًا إلى جنب، مع الأرقام التي تقيسها AY-Robots وتستخدمها لتحديد حجم وحدة معالجة الرسوميات (GPU) التي تستأجرها.

السياسةالعائلةالمعلماتلكل خطوةفئة وحدة معالجة الرسومياتالحد الأدنى للحلقاتمجموعة البيانات
ACTمحول التقطيع، من الصفر~80 M20 msRTX 4090 / 24 GB50LeRobot v3.0
SmolVLAVLA مدمج~450 M245 msRTX 4090 / 24 GB30LeRobot v3.0
GR00T N1.7أساس VLA، رأس الانتشار~3 B (~40 M trained)152 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
GR00T N1.5أساس VLA، سلف~3 B165 msA100 / H100 80 GB50LeRobot v2.0 or v2.1
Pi0.5VLA لمطابقة التدفق، انظر مطابقة التدفق~3 B, PaliGemma backbone485 msA100 / H100 80 GB50LeRobot v3.0
صفحة سياسات AY-Robots التي تعرض جدول مقارنة لـ ACT و SmolVLA و GR00T N1.5 و GR00T N1.7 و Pi0.5 مع عدد المعلمات ومتطلبات وحدة معالجة الرسوميات (GPU) وزمن انتقال الاستدلال والحد الأدنى لعدد الحلقات
جدول /policies: يتمتع ACT بأقل عدد من المعلمات وأقصر وقت خطوة.
تدريب ACT من الصفر
المزايا
  • 20 ms لكل خطوة عمل، الأسرع من بين الخمسة، على بطاقة 24 GB وليست A100.
  • 1 إلى 3 USD لكل تشغيل مقابل 4 إلى 12 دولارًا للفئة 3 B.
  • دقيق في الأعمال التي تتطلب احتكاكًا والتي رآها: 88 و 96 بالمائة على Slide Ziploc و Slot Battery، حيث لم تتجاوز الطرق السابقة المرحلة الأولى.
المفاضلات
  • لا يوجد تكييف لغوي: يتم تجاهل سلسلة المهام، لذا فإن نقطة تحقق واحدة هي مهمة واحدة.
  • لا توجد أولويات دلالية: كل ما يعرفه جاء من 50 حلقة تدريبية.
  • تعميم ضيق: حرك الكاميرا وستحتاج إلى إعادة التدريب.
  • يفشل بصمت: ينخفض ​​الخسارة، لا يفعل الذراع شيئًا، السجلات لا تقول شيئًا.
  • ميزة السرعة تساعد فقط إذا كان الاستدلال يتم بجانب المحركات المؤازرة.

اختر ACT عندما تكون المهمة والمشهد ثابتين ويجب أن تكون الحركة سريعة ودقيقة. اختر عندما يجب أن تغطي نقطة تحقق واحدة عدة تعليمات. صفحتان تقارنان القرار وجهاً لوجه: و . بالنسبة للمعايير المنشورة، يربط كل رقم بمصدره.

ما تحتاجه قبل أن تبدأ

ذراع تابع واحد، ذراع قائد واحد لـ ، كاميرا واحدة على الأقل، وحدة معالجة رسوميات (GPU) بسعة 24 GB. يقرأ ACT الصور ومواضع المفاصل فقط. الكاميرتان هما الحل الأمثل: عرض أمامي ثابت لمكان الأشياء، وكاميرا معصم لما هو على وشك أن يلمسه ، كما هو الحال في ALOHA.

الذراعالمحركات المؤازرةالجهدتكلفة الأجزاءالحالة
SO-100Feetech STS32157.4 V~110 to 150 EURدعم كامل، ذراع مرجعي
SO-101Feetech STS32157.4 V~130 to 170 EURدعم كامل
Koch v1.1Dynamixel XL330 / XL4305 V and 12 V rails~250 to 350 EURمتوافق
LeKiwiFeetech STS3215 (arm)ذراع 7.4 V، قاعدة 12 V~400 to 500 EURمتوافق
7.4 V، وليس 12 V

يعمل SO-100 و SO-101 بمحركات Feetech STS3215 المؤازرة على مسار 7.4 V. تغذيتها بـ 12 V يدمرها، بهدوء كافٍ يجعل الناس يلومون البرمجيات أولاً، ومصدر طاقة Koch 12 V يتناسب مادياً مع لوحة SO-100. تحقق من الملصق. الأعراض: المحرك المؤازر لا يستجيب، الذراع يرتعش ثم يترهل. أيضاً SO-100 مقابل SO-101.

من الذراع المجرد إلى مجموعة البيانات المسجلة

التدفق أدناه هو lerobot 0.6.x. تخطاه إذا كان لديك ذراع معاير ومجموعة بيانات. وإلا فإن دليل البدء لـ SO-100، يغطي التجميع، و شرح التسجيل يغطي الالتقاط و وثائق مجموعة البيانات التنسيق.

  1. 1
    تثبيت lerobot مع الإضافات الصحيحة

    يتطلب التسجيل core_scripts، والتدريب training، ومحركات Feetech المؤازرة feetech. بايثون 3.12+.

    bash
    conda create -y -n lerobot python=3.12
    conda activate lerobot
    conda install ffmpeg -c conda-forge
    
    pip install 'lerobot[core_scripts,training,feetech]'
    lerobot-info
  2. 2
    العثور على منفذ USB لكل ذراع

    شغّله مع توصيل الذراعين، وافصل أحدهما عند المطالبة. على نظام لينكس قد تحتاج إلى فتح أذونات العقدة.

    bash
    lerobot-find-port
    # on Linux, if the port exists but is unreadable:
    sudo chmod 666 /dev/ttyACM0
  3. 3
    تعيين معرفات المحرك ومعدل الباود

    في SO-100، يحدث هذا قبل التجميع: على عكس SO-101، لا يمكن الوصول إلى الموصلات بمجرد بنائها. يقوم السكريبت بالمرور عبر الناقل محركًا واحدًا في كل مرة بدءًا من القابض، ويكتب المعرفات إلى EEPROM.

    bash
    lerobot-setup-motors \
        --robot.type=so100_follower \
        --robot.port=/dev/ttyACM0
    
    lerobot-setup-motors \
        --teleop.type=so100_leader \
        --teleop.port=/dev/ttyACM1
  4. 4
    معايرة الذراعين

    اضبط كل مفصل على منتصف نطاقه، اضغط Enter، ثم حرك كل مفصل عبر نطاقه الكامل. المعايرة تسمح لسياسة مدربة على ذراع واحدة بالعمل على ذراع أخرى. أعد استخدام نفس id.

    bash
    lerobot-calibrate \
        --robot.type=so100_follower \
        --robot.port=/dev/ttyACM0 \
        --robot.id=my_follower
    
    lerobot-calibrate \
        --teleop.type=so100_leader \
        --teleop.port=/dev/ttyACM1 \
        --teleop.id=my_leader
  5. 5
    التحكم عن بعد مرة واحدة مع تشغيل الكاميرات

    قاعدة lerobot الأساسية: يجب أن تكون قادرًا على أداء المهمة بالنظر فقط إلى صور الكاميرا. إذا لم تتمكن من ذلك، فلن يتمكن ACT أيضًا. هذا يكتشف المزيد من مجموعات البيانات السيئة أكثر من التصحيح اللاحق.

    bash
    lerobot-teleoperate \
        --robot.type=so100_follower \
        --robot.port=/dev/ttyACM0 \
        --robot.id=my_follower \
        --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \
        --teleop.type=so100_leader \
        --teleop.port=/dev/ttyACM1 \
        --teleop.id=my_leader \
        --display_data=true
  6. 6
    تسجيل 50 حلقة

    50 هو الحد الأدنى لـ AY-Robots وما استخدمه ALOHA لكل مهمة. تنصح lerobot بـ 10 لكل موقع كائن، مع تثبيت الكاميرات، وقبضة متسقة. n ينهي حلقة، r يعيد التسجيل، q يوقف ويشفر.

    bash
    HF_USER=$(NO_COLOR=1 hf auth whoami | awk -F': *' 'NR==1 {print $2}')
    
    lerobot-record \
        --robot.type=so100_follower \
        --robot.port=/dev/ttyACM0 \
        --robot.id=my_follower \
        --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \
        --teleop.type=so100_leader \
        --teleop.port=/dev/ttyACM1 \
        --teleop.id=my_leader \
        --dataset.repo_id=${HF_USER}/so100_cube \
        --dataset.num_episodes=50 \
        --dataset.single_task="Grab the black cube and put it in the bin" \
        --display_data=true
صفحة البرنامج التعليمي للتسجيل من AY-Robots تشرح كيفية التقاط مجموعة بيانات بتنسيق LeRobot من جلسة تحكم عن بعد
البرنامج التعليمي للتسجيل. يكتب عميل سطح المكتب نفس التخطيط مثل lerobot-record.
الفخ الذي يستهلك يومًا: مجموعة بيانات غير متسقة

ليس لدى ACT أي معلومات مسبقة يمكن الاعتماد عليها، لذا فإن كل عدم اتساق يصبح دائمًا. الأخطاء الثلاثة الأكثر تكلفة: كاميرا تم تحريكها بين الحلقة 20 و 21، إضاءة تغيرت لأنك سجلت نصف المجموعة بعد الظهر، قبضة تم تنفيذها بطريقتين. كل منها يعطي منحنى خسارة يبدو مثاليًا وذراعًا تذهب إلى المكان الخطأ. انظر الخسارة تنخفض، والسياسة لا تفعل شيئًا، السياسة تعمل فقط في إعداد واحد و جمع بيانات تدريب عالية الجودة.

قبل التدريب، أعد تشغيل خمس حلقات على الأقل. ، يخزن تدفقات الكاميرا وحالات المفاصل والإجراءات لكل ، وإعادة التشغيل تدفع تلك الإجراءات مرة أخرى إلى الذراع. إذا لم تقم إعادة التشغيل بالمهمة، فإن البيانات لا تحتوي عليها ولن يخترعها التدريب.

bash
lerobot-replay \
    --robot.type=so100_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_follower \
    --dataset.repo_id=${HF_USER}/so100_cube \
    --dataset.episode=0
إعادة تشغيل الحلقة 0. إذا فشل هذا، توقف وأعد التسجيل.

تدريب سياسة ACT

هذا هو الأمر بالكامل. كل ما هو خاص بـ ACT هو بالفعل إعداد افتراضي، ولهذا السبب توصي صفحة lerobot ACT بالبدء بها.

bash
lerobot-train \
  --dataset.repo_id=${HF_USER}/so100_cube \
  --policy.type=act \
  --output_dir=outputs/train/act_so100_cube \
  --job_name=act_so100_cube \
  --policy.device=cuda \
  --wandb.enable=true \
  --policy.repo_id=${HF_USER}/act_so100_cube
أمر التدريب من وثائق lerobot 0.6.x، على مجموعة بيانات SO-100.

--policy.type=act يحمّل ACTConfig، الذي يتكيف مع عدد المحركات والكاميرات التي سجلتها مجموعة بياناتك، لذلك لا تحتاج أبدًا إلى تعريف شكل الملاحظة. --wandb.enable=true اختياري ويستحق العناء: منحنى الخسارة هو الإشارة الرخيصة الوحيدة في تشغيل يستغرق 100000 خطوة. يأتي الجدول الزمني من إعداد تدريب lerobot، وليس ACTConfig: 100000 خطوة، دفعة 8، بذرة 1000، نقطة تفتيش كل 20000 خطوة، وتسجيل كل 200.

يترك التشغيل الكامل خمسة أدلة لنقاط التفتيش، من 020000 إلى 100000، بالإضافة إلى رابط رمزي last. احتفظ بها جميعًا: غالبًا ما لا تكون أفضل سياسة هي الأخيرة.

الإعدادافتراضي lerobotنموذج AY-Robots ACTملاحظة
حجم الدفعة88اخفضه أولاً إذا واجهت حدود VRAM.
معدل التعلم1e-51e-5نفس ما ورد في ورقة ALOHA.
الحد الأقصى للخطوات100000100000تقريبًا حيث تتوقف مجموعة من 50 حلقة عن التحسن.
تراكم التدرج11, does not applyغيّر حجم الدفعة بدلاً من ذلك.
البذرة1000exposedنقطة دخول tyro في GR00T لا تحتوي على بذرة؛ تشغيلات ACT هي القابلة للتكرار.
حجم الكتلة / عدد خطوات الإجراء100 / 100100 / 100, editableأفق التنبؤ والتنفيذ. اخفض الثاني، وليس الأول.
تكرار نقطة التفتيش20000not exposedsaveSteps هو مقبض GR00T هنا.
نقص الذاكرة مشكلة في حجم الدفعة، وليست مشكلة في البطاقة

يتناسب ACT بحجم دفعة 8 مع كاميرتين بدقة 640x480 بشكل مريح على 24 جيجابايت. يتوقف عن التناسب عندما يرفع الأشخاص حجم الدفعة لزيادة السرعة، أو يغذونه بإطارات 1920x1080 التي يظهرها مثال تسجيل lerobot واحد. اثنين من هياكل ResNet-18 الأساسية بدقة 1080p يمثلان ملف ذاكرة مختلفًا تمامًا. اخفض --batch_size إلى 4 قبل استئجار بطاقة أكبر. انظر نقص الذاكرة أثناء التدريب.

المدة: حوالي 5 ساعات على بطاقة RTX 2080 Ti بسعة 11 جيجابايت في الورقة البحثية، بضع ساعات لـ 100 ألف خطوة لكل صفحة ACT الخاصة بـ lerobot، من 2 إلى 5 ساعات على فئة 24 جيجابايت من AY-Robots. لا تختصرها. يذكر ملف README الخاص بالمستودع المرجعي أن السياسة المتشنجة أو المتوقفة مؤقتًا تحتاج عادةً إلى المزيد من التدريب، لأن النجاح والسلاسة يستمران في التحسن بعد استقرار الخسارة: بالنسبة للبيانات الواقعية، يتطلب الأمر 5000 حقبة على الأقل، أو 3 إلى 4 أضعاف المدة مرة أخرى بعد الاستقرار.

bash
lerobot-train \
  --config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
  --resume=true
استئناف تشغيل متوقف من آخر نقطة تحقق.

تشغيل السياسة المدربة على الذراع

يستخدم النشر lerobot-rollout. يجب أن تتطابق مفاتيح الكاميرا مع المفاتيح المسجلة: سياسة مدربة على front و wrist لن تقبل cam0 و cam1، و rename_map لا يساعد، لأنه يحتاج إلى نقطة تحقق مدربة مسبقًا. يمكن حذف سلسلة المهام؛ مثال lerobot الخاص يشير إلى أنها قابلة للتخطي لـ ACT.

bash
lerobot-rollout \
  --strategy.type=base \
  --policy.path=${HF_USER}/act_so100_cube \
  --robot.type=so100_follower \
  --robot.port=/dev/ttyACM0 \
  --robot.id=my_follower \
  --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \
  --display_data=true \
  --duration=60
نشر مستقل بدون تسجيل. استخدم --strategy.type=sentry لتسجيل حلقات التقييم.
تمت إعادة تسمية هذا الأمر مؤخرًا، لذا تختلف البرامج التعليمية القديمة

كان التقييم يُجرى باستخدام lerobot-record --policy.path=.... في الإصدار 0.6.x، أصبح lerobot-rollout مع محدد --strategy.type: base، sentry (تسجيل مع تحميل تلقائي)، highlight (مخزن مؤقت حلقي يتم حفظه بضغطة مفتاح)، dagger (بشري في الحلقة) و episodic. اعتبارًا من 23 أغسطس 2026، لا تزال صفحة وثائق ACT تقول "باستخدام الأمر lerobot-record" مباشرة فوق كتلة تشغل lerobot-rollout. اتبع الأمر، وليس الجملة.

لتثبيت نقطة تحقق بدلاً من النموذج النهائي، أضف --policy.pretrained_revision. يتطلب ذلك أن يكون التشغيل قد بدأ بـ --save_checkpoint_to_hub=true، وهو غير مفعل افتراضيًا: بدونه، يقوم lerobot بدفع النموذج النهائي ولا شيء آخر. معه، يتم وسم كل نقطة تحقق بخطوتها المبطنة بالأصفار، لذا --policy.pretrained_revision=060000 يستعيد نقطة التحقق ذات الخطوة 60000. مقارنتها بـ 100000 على الذراع الحقيقية هي أرخص تجربة متاحة.

مساران لنفس نقطة التحقق

كل ما سبق هو المسار اليدوي وهو يعمل. مسار المنصة يضحي بالتحكم مقابل عدم امتلاك وحدة معالجة رسوميات (GPU) أو بيئة بايثون.

  1. ثبّت lerobot 0.6.x مع core_scripts، training، feetech، ffmpeg.
  2. ابحث عن المنافذ، اضبط معرفات المحركات، عاير كلا الذراعين، سجل 50 حلقة.
  3. أعد تشغيل بضع حلقات للتأكد من أن البيانات تحتوي على المهمة.
  4. استأجر أو امتلك وحدة معالجة رسوميات (GPU) بسعة 24 جيجابايت، طابق CUDA و PyTorch، ثم شغّل lerobot-train --policy.type=act.
  5. انتظر بضع ساعات، ثم شغّل lerobot-rollout على الجهاز المتصل بالذراع.
bash
# the two commands that matter, end to end
lerobot-record --robot.type=so100_follower --robot.port=/dev/ttyACM0 \
  --teleop.type=so100_leader --teleop.port=/dev/ttyACM1 \
  --dataset.repo_id=${HF_USER}/so100_cube --dataset.num_episodes=50 \
  --dataset.single_task="Grab the black cube"

lerobot-train --dataset.repo_id=${HF_USER}/so100_cube --policy.type=act \
  --output_dir=outputs/train/act_so100_cube --policy.device=cuda
ما يوفره لك هذا المسار

تحكم كامل: عدّل configuration_act.py، أضف كاميرا، انسخ المدرب. للبحث بدلاً من تسليم مهمة، المنصة تشتيت.

مصفوفة تدريب AY-Robots بخمسة صفوف للسياسات وأربعة أعمدة لأذرع الروبوت، حيث ترتبط كل خلية بدليل التدريب المحدد لهذا النموذج وتركيبة الذراع.
المصفوفة على /train. صف ACT مقابل عمود SO-100 هو دليل هذه المقالة.

ما الذي يحدث خطأ بالفعل

تقريباً لا يوجد أي صعوبة في أمر التدريب. بل تكمن الصعوبة في الأمور المحيطة به، مرتبة حسب تكرار حدوثها لأول مرة.

العرضالسبب المعتادالصفحة
lerobot-find-port لا يعرض شيئًاتعريف المشغل، الكابل أو أذونات العقدةالذراع غير مكتشف
الكاميرا مفقودة وقت التسجيلتغير الفهرس عند إعادة التشغيل، أو وجود كاميرتين على وحدة تحكم USB واحدةالكاميرا غير مكتشفة
التدريب يرفض مجموعة البياناتACT يتطلب v3.0، GR00T يحتاج v2.1مجموعة البيانات مرفوضة كـ v3
نفاد ذاكرة CUDAحجم الدفعة مرتفع، أو إطارات 1080p بدلاً من 480pنفاد الذاكرة في التدريب
الخسارة تبدو جيدة، الذراع لا يفعل شيئًاالبيانات تفتقر إلى المهمة، أو تحركت الكاميراالخسارة تنخفض، السياسة لا تفعل شيئًا
حركة متقطعة أو توقف مؤقت في منتصف الحلقةتدريب غير كافٍ، توقف عند حدود الكتلة، أو استدعاء استدلال انتهت مدتهالسياسة تتجمد في منتصف الحركة

يستحق صفان التركيز. ACT يتدرب على LeRobot v3.0 بينما يتعطل محمل GR00T عليه ويحتاج إلى v2.1، لذا فإن مجموعة بيانات تدرب ACT يمكن أن تفشل تشغيل GR00T. والصف الأخير يحتوي على إصلاحين: مؤلفو ACT يجيبون على الحركة المتقطعة بمزيد من التدريب، بينما مع n_action_steps عند 100، يحدث توقف حقيقي عند حدود الكتلة، وهو توقف مرئي كل 3.3 ثوانٍ عند 30 إطارًا في الثانية. هناك اثنان آخران يجب معرفتهما: المفصل الميت الواحد عادة ما يكون معرف سيرفو لم يتم كتابته مطلقًا، و قابض يقترب ولكنه لا يغلق أبدًا يعني نطاق قابض قليل جدًا في العروض التوضيحية. الفهرس الكامل: صفحات أوضاع الفشل.

تكلفة التشغيل

الفئةالنماذجمدة التشغيلالسعر لكل ساعةالتكلفة لكل تشغيل
RTX 4090 / 24 GBACT, SmolVLA2 إلى 5 ساعات0.30 إلى 0.60 USDحوالي 1 إلى 3 USD
A100 80 GB / H100GR00T N1.7, GR00T N1.5, Pi0.53 إلى 6 ساعات1.20 إلى 2.00 USDحوالي 4 إلى 12 USD

هذه هي الحجة للبدء بـ ACT حتى لو كنت تريد VLA لاحقًا. يكلف تشغيل ACT الفاشل سعر فنجان قهوة ويخبرك في غضون ساعات ما إذا كانت مجموعة بياناتك تحتوي على المهمة. يكلف تشغيل GR00T الفاشل أربعة أضعاف ذلك لنفس الدرس. الانتقال إلى GR00T N1.7 أو SmolVLA بعد ذلك هو تغيير في الشكل، وليس إعادة بناء. خلفية: نماذج الرؤية واللغة والحركة، الـ الدليل الكامل لـ SO-100، تدريب سياستك الأولى و التعلم بالمحاكاة. لا يوجد ذراع؟ صفحة البث المباشر تبث SO-100 حقيقية للتحكم بها دون الحاجة للتسجيل.

تدريب ACT على SO-100 الخاص بك

الدليل الخاص بهذا المزيج المحدد: الإعدادات الافتراضية، فئة وحدة معالجة الرسوميات (GPU) وتكلفة التشغيل. اختر مجموعة البيانات، ويقوم الواجهة الخلفية (backend) باستئجار البطاقة وكتابة نقاط الحفظ.

افتح دليل التدريب
هل يوجد نموذج ACT مدرب مسبقًا يمكنني ضبطه بدلاً من ذلك؟

لا. ACT ليس لديه نموذج أساسي؛ إنه موجود فقط بعد تدريبه. هذه ليست فجوة في الأدوات، بل هي طبيعة ACT: الورقة تدرب سياسة من الصفر لكل مهمة. للحصول على نقطة حفظ من بائع، استخدم GR00T N1.7 أو Pi0.5.

كم عدد الحلقات التي أحتاجها حقًا؟

50: ما سجله ALOHA لكل مهمة (100 لـ Thread Velcro، وهي الأصعب) والحد الأدنى لـ AY-Robots. ينصح lerobot بحوالي 10 لكل موقع كائن، مع كاميرات ثابتة، وقبضة متسقة. خمسون حلقة نظيفة تتفوق على مائة حلقة تحركت فيها الكاميرا.

هل يجب أن أغير chunk_size من 100؟

عادة لا. يتصاعد الاستئصال من 1 بالمائة عند k = 1 إلى 44 بالمائة عند k = 100 ويتناقص بعد ذلك، لذا فإن 100 تقترب من القمة. إذا استغرقت الذراع وقتًا طويلاً، قم بتقليل n_action_steps بدلاً من ذلك: عند 30 fps، 25 إعادة استعلام كل 0.8 ثانية.

كم يستغرق تشغيل التدريب، وهل يمكنني إيقافه مبكرًا؟

من ساعتين إلى خمس ساعات على بطاقة 24 GB لـ 100000 خطوة. تهبط نقاط الحفظ كل 20000 خطوة و --resume=true تستأنف التشغيل، لذا فإن التوقف المبكر آمن. فقط ليس عند الجزء المسطح الأول: تتحسن السلاسة بعد استقرار الخسارة.

انخفضت الخسارة وما زالت الذراع تفشل. ماذا الآن؟

دائمًا تقريبًا مجموعة البيانات. أعد تشغيل الحلقات المسجلة على الذراع: إذا لم يؤدِ الإعادة المهمة، فإن البيانات لا تحتوي عليها. ثم تحقق مما إذا كان أي شيء قد تحرك، خاصة الكاميرا. ACT ليس لديه أي معرفة مسبقة، لذا فإن دفعة بسيطة في الحلقة 21 تكون دائمة.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started