מטריצת האימון של 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. מדריך זה מציג את המסלול הידני עם לרובוט על SO-100: הקלטה, תצורת ה-act, מה ש-chunk_size ו-n_action_steps שולטים, לוח הזמנים של 100000 צעדים, וההפצה. לאחר מכן אותה עבודה על AY-Robots, כולל היכן שהפלטפורמה אינה עוזרת.

מה שאתה צריך לדעת

  • ACT מתאמן מאפס: ללא מודל בסיס, ללא אימון מקדים, ללא קלט שפה. נקודת בדיקה אחת, משימה אחת.
  • המאמר: כ-80 מיליון פרמטרים, כ-5 שעות על RTX 2080 Ti עם 11 GB, הסקה ב-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 GB, 1 עד 3 דולר להרצה.
  • הוא מנצח במשימה שראה, ומפסיד ברגע שאתה רוצה התניה שפתית.
אילו גרסאות זה מתאר

נבדק ב-23 באוגוסט 2026 מול lerobot 0.6.x: pyproject.toml ב-main מציג version = "0.6.2", התגית החדשה ביותר v0.6.1, 3 באוגוסט 2026. מדריך שמתחיל עם python lerobot/scripts/train.py קדם לנקודות הכניסה לקונסולה lerobot-train, lerobot-record ו-lerobot-rollout.

מהו ACT למעשה

Action Chunking with Transformers מגיע מהמאמר ALOHA, למידת מניפולציה דו-ידנית עדינה עם חומרה בעלות נמוכה, מאת זאו, קומאר, לוין ופין, arXiv, 23 באפריל 2023. המתקן מקליט ב-50 הרץ עם ארבע מצלמות רשת המזרמות 480x640 ב-30 פריימים לשנייה: שתיים על התופסנים, אחת עליונה, אחת קדמית. התקציר טוען לשש מיומנויות עם 80 עד 90 אחוזי הצלחה, ביניהן פתיחת כוס רוטב שקופה והכנסת סוללה, מתוך 10 דקות של הדגמות.

גוף המאמר שימושי יותר בעת תכנון סשן הקלטה: 50 הדגמות למשימה, למעט Thread Velcro ב-100, שהם 10 עד 20 דקות של נתונים ו-30 עד 60 דקות של זמן שעון קיר לאחר ספירת איפוסים. ההצלחה אינה אחידה גם כן: Thread Velcro מסתיים ב-20 אחוז, Put On Shoe ב-92, Cup Open 84, Prep Tape 64.

היפרפרמטרמאמר ALOHA, טבלה IIIlerobot ב-main
קצב למידה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נעדר; איור 11 מציג הקרנה של 32 ל-512latent_dim = 32
אנסמבל זמנינעדר; --temporal_agg בקוד הייחוסtemporal_ensemble_coeff = None
שורת שכבת המפענח אינה טעות הקלדה

המאמר מפרט 7 שכבות מפענח, lerobot מספקת 1, בכוונה. ההערה ב-configuration_act.py מציינת שליישום המקורי יש באג שמשמעותו היא שרק השכבה הראשונה משמשת, תוך ציון issue 25 ב-tonyzhaozh/act: ראש הפעולה קורא את hs[0], כך שכל שבע השכבות פועלות אך רק הפלט הראשון מגיע לחיזוי. נושא זה פתוח וללא מענה מאז 23 באפריל 2024. lerobot תואמת את ההתנהגות שהפיקה את התוצאות שפורסמו, לא את המספר המודפס. העלה את --policy.n_decoder_layers ותאמן מודל שהמאמר מעולם לא העריך.

קיבוץ פעולות הוא כל הרעיון

שיבוט התנהגותי רגיל ממפה תצפית אחת לפעולה אחת, ושגיאות מצטברות: סטייה מוציאה את הזרוע מחוץ להתפלגות, מייצרת פעולה גרועה יותר, ושלושים צעדים מאוחר יותר התופסן אינו קרוב לאובייקט. קיבוץ פעולות חוזה k פעולות בבת אחת ומבצע אותן, ומקטין את האופק האפקטיבי בפקטור של k. הוא גם מטפל במטרד ספציפי לנתונים אנושיים: מפעילים מרחוק עוצרים, ומודל מרקובי חד-שלבי מדיניות אינו יכול למדל הפסקה התלויה במה שקדם לה.

המאמר מבצע אבלאציה ל-k במקום לקבוע אותו. כאשר איגום זמני כבוי, בממוצע על פני ארבע הגדרות, ההצלחה עולה מ-1 אחוז ב-k = 1 ל-44 אחוז ב-k = 100, ואז מתייצבת ב-200 ו-400 ככל שהמדיניות מתקרבת לבקרת לולאה פתוחה. עקומה זו היא הסיבה לכך שברירת המחדל היא 100.

  • chunk_size: כמה פעולות עתידיות המפענח חוזה בכל מעבר קדימה. ברירת מחדל 100.
  • n_action_steps: כמה מהן אתה מבצע לפני שליחה חוזרת של שאילתה. ברירת מחדל 100, כך ש-lerobot מריץ את כל ה-chunk בלולאה פתוחה.
  • lerobot מאמת ש-n_action_steps <= chunk_size ומעלה ValueError אם אתה מזין אותם הפוך.

מה שחשוב מבחינה תפעולית הוא chunk_size חלקי קצב הפריימים. בקצב של 30 פריימים לשנייה שבו משתמשות הדוגמאות של SO-100 ב-lerobot, chunk של 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
קיצור החלק המבוצע של ה-chunk מבלי לקצר את החיזוי.
מלכודת האינסמבל הזמני

הגדר את --policy.temporal_ensemble_coeff ו-lerobot דורש n_action_steps = 1, ומעלה NotImplementedError אחרת. אינסמבל שולח שאילתה למדיניות בכל צעד זמן וממזג את החיזויים החופפים עבור צעד זמן זה עם משקלים w_i = exp(-m * i), כאשר הישן ביותר מקבל w_0. המאמר מציין זאת ב-3.3 אחוז עבור ACT: אמיתי אך צנוע, וזה מכפיל את ספירת ההסקה באורך ה-chunk. משתלם ב-20 אלפיות השנייה לכל צעד, לא ב-485 אלפיות השנייה. ראה זמן השהיה של הסקה.

כאשר ACT עולה על מודל יסוד

חמשת המדיניות הניתנות לאימון זו לצד זו, עם המספרים ש-AY-Robots מודדת ומשתמשת בהם כדי לקבוע את גודל ה-GPU שהיא שוכרת.

מדיניותמשפחהפרמטריםלכל צעדרמת 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 אלפיות שנייה לצעד פעולה, המהיר מבין החמישה, על כרטיס 24 GB ולא A100.
  • 1 עד 3 דולר לריצה לעומת 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 arm, 12 V base~400 to 500 EURתואם
7.4 V, not 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
    הגדר את מזהי המנועים וקצב ה-baud

    ב-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 הוא כבר ברירת מחדל, ולכן דף ה-ACT של lerobot ממליץ להתחיל איתם.

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טופס ACT של AY-Robotsהערה
גודל אצווה88הורד אותו קודם אם אתה נתקל במגבלות VRAM.
קצב למידה1e-51e-5זהה למאמר ALOHA.
מספר צעדים מקסימלי100000100000בערך הנקודה שבה סט של 50 פרקים מפסיק להשתפר.
צבירת גרדיאנטים11, לא רלוונטישנה את גודל האצווה במקום זאת.
גרעין1000חשוףנקודת הכניסה של tyro ב-GR00T אינה כוללת גרעין; הרצות ACT הן אלו שניתנות לשחזור.
chunk_size / n_action_steps100 / 100100 / 100, ניתן לעריכהאופק חיזוי וביצוע. הורד את השני, לא את הראשון.
תדירות נקודות שמירה20000לא חשוףsaveSteps הוא בורר של GR00T כאן.
חוסר זיכרון הוא בעיית גודל אצווה, לא בעיית כרטיס

ACT בגודל אצווה 8 עם שתי מצלמות 640x480 מתאים בנוחות ל-24 GB. הוא מפסיק להתאים כאשר אנשים מעלים את גודל האצווה למהירות, או מזינים לו את פריימי 1920x1080 שדוגמת הקלטה אחת של lerobot מציגה. שני עורקי ResNet-18 ב-1080p הם בעלי פרופיל זיכרון שונה מאוד. הורד את --batch_size ל-4 לפני השכרת כרטיס גדול יותר. ראה חוסר זיכרון באימון.

משך: כ-5 שעות על RTX 2080 Ti בנפח 11 GB במאמר, מספר שעות עבור 100k צעדים לפי עמוד ה-ACT של lerobot, 2 עד 5 שעות על שכבת ה-24 GB של 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 עדיין מציין "using the lerobot-record command" ישירות מעל בלוק שמריץ lerobot-rollout. עקוב אחר הפקודה, לא אחר המשפט.

כדי לקבע נקודת ביקורת (checkpoint) ולא את המודל הסופי, הוסף --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 GB, התאם את 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, הוסף מצלמה, בצע Fork למאמן. למחקר ולא למסירת משימה, פלטפורמה היא הסחת דעת.

מטריצת האימון של AY-Robots עם חמש שורות מדיניות וארבע עמודות זרוע רובוטית, כאשר כל תא מקשר למדריך האימון הספציפי עבור שילוב המודל והזרוע הזה
המטריצה ב-/train. שורת ACT מול עמודת SO-100 היא המדריך של מאמר זה.

מה באמת משתבש

כמעט כל הקושי אינו בפקודת האימון. הוא בדברים שמסביב לה, מסודרים לפי תדירות הבעיות בפעם הראשונה.

תסמיןגורם נפוץעמוד
lerobot-find-port לא מציג כלוםהרשאות דרייבר, כבל או צומתזרוע לא מזוהה
מצלמה חסרה בזמן הקלטהאינדקס השתנה באתחול, או שתי מצלמות בבקר USB אחדמצלמה לא מזוהה
האימון דוחה את מערך הנתוניםACT דורש v3.0, GR00T צריך v2.1מערך נתונים נדחה כ-v3
CUDA אזל הזיכרוןגודל אצווה הוגדל, או פריימים של 1080p במקום 480pאזל הזיכרון באימון
ה-loss נראה מצוין, הזרוע לא עושה כלוםהנתונים חסרים את המשימה, או שמצלמה זזהה-loss יורד, המדיניות לא עושה כלום
תנועה קופצנית או הפסקה באמצע פרקלא אומן מספיק, עצירה בגבול מקטע, או קריאת הסקה שפג תוקפההמדיניות קופאת באמצע תנועה

שתי שורות ראויות להדגשה. 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 דולר ארה"בכ-1 עד 3 דולר ארה"ב
A100 80 GB / H100GR00T N1.7, GR00T N1.5, Pi0.53 עד 6 שעות1.20 עד 2.00 דולר ארה"בכ-4 עד 12 דולר ארה"ב

זוהי הטענה להתחיל עם 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 פריימים לשנייה, 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