
Εκπαιδεύστε έναν Action Chunking Transformer από το μηδέν σε ένα SO-100 με το lerobot: τη διαμόρφωση act, τα chunk_size και n_action_steps, το χρονοδιάγραμμα 100000 βημάτων, την εξαγωγή συμπερασμάτων σε 20 ms.
Το ACT είναι η εξαίρεση μεταξύ των πολιτικών SO-100. Τα GR00T N1.7 και N1.5 ξεκινούν από nvidia/GR00T-N1.7-3B και nvidia/GR00T-N1.5-3B, το Pi0.5 από lerobot/pi05_base. Το ACT ξεκινά από το μηδέν: δεν υπάρχει βασικό σημείο ελέγχου (checkpoint), επειδή δεν είναι ένα θεμελιώδες μοντέλο. Είναι ένας μετασχηματιστής περίπου 80 εκατομμυρίων παραμέτρων που εκπαιδεύετε από την αρχή σε μία εργασία, στον βραχίονά σας, υπό τον φωτισμό σας.
Αυτός είναι επίσης ο λόγος που εκτελεί ένα βήμα ελέγχου σε 20 ms, ενώ ένα VLA 3 δισεκατομμυρίων παραμέτρων χρειάζεται 152 έως 485 ms, και κοστίζει 1 έως 3 USD ανά εκτέλεση αντί για 4 έως 12. Αυτός ο οδηγός ακολουθεί τη χειροκίνητη διαδρομή με lerobot σε ένα SO-100: καταγραφή, η διαμόρφωση act config, τι ελέγχουν τα chunk_size και n_action_steps control, το πρόγραμμα 100000 βημάτων, την εκτέλεση (rollout). Στη συνέχεια, την ίδια εργασία στα AY-Robots, συμπεριλαμβανομένων των σημείων όπου η πλατφόρμα δεν βοηθά.
Τι πρέπει να γνωρίζετε
- •Το ACT εκπαιδεύεται από την αρχή: χωρίς βασικό μοντέλο, χωρίς προεκπαίδευση, χωρίς γλωσσική είσοδο. Ένα σημείο ελέγχου (checkpoint), μία εργασία.
- •Η δημοσίευση: περίπου 80 M παράμετροι, περίπου 5 ώρες σε μια RTX 2080 Ti 11 GB, 0.01 s συμπερασματολογία (inference).
- •Προεπιλογές lerobot: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 steps, seed 1000.
- •Στα AY-Robots: 20 ms ανά βήμα, το ταχύτερο από τα πέντε. Ελάχιστα 50 επεισόδια, LeRobot v3.0, μια κάρτα 24 GB, 1 έως 3 USD ανά εκτέλεση.
- •Κερδίζει σε μια εργασία που έχει δει, και χάνει τη στιγμή που θέλετε γλωσσική προϋπόθεση (language conditioning).
Ελέγχθηκε στις 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, Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware, από τους Zhao, Kumar, Levine και Finn, arXiv, 23 Απριλίου 2023. Η διάταξη καταγράφει στα 50 Hz με τέσσερις κάμερες web που μεταδίδουν 480x640 στα 30 fps: δύο στους αρπάγες, μία πάνω, μία μπροστά. Η περίληψη αναφέρει έξι δεξιότητες με ποσοστό επιτυχίας 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, Πίνακας III | lerobot στο main |
|---|---|---|
| ρυθμός μάθησης | 1e-5 | optimizer_lr = 1e-5 |
| μέγεθος batch | 8 | batch_size = 8, in TrainPipelineConfig not ACTConfig |
| επίπεδα κωδικοποιητή / αποκωδικοποιητή | 4 / 7 | n_encoder_layers = 4 / n_decoder_layers = 1 |
| μέγεθος κομματιού k | 100 | chunk_size = 100 |
| λανθάνουσα διάσταση του z | απούσα· Το Σχ. 11 δείχνει μια προβολή 32 σε 512 | latent_dim = 32 |
| χρονική ομαδοποίηση | απούσα· --temporal_agg στον κώδικα αναφοράς | temporal_ensemble_coeff = None |
Η δημοσίευση αναφέρει 7 επίπεδα αποκωδικοποιητή, το lerobot παραδίδει 1, σκόπιμα. Το σχόλιο στο configuration_act.py αναφέρει ότι η αρχική υλοποίηση έχει ένα σφάλμα που σημαίνει ότι χρησιμοποιείται μόνο το πρώτο επίπεδο, επικαλούμενο το ζήτημα 25 στο tonyzhaozh/act: η κεφαλή δράσης διαβάζει το hs[0], οπότε και τα επτά επίπεδα εκτελούνται, αλλά μόνο η πρώτη έξοδος φτάνει στην πρόβλεψη. Αυτό το ζήτημα είναι ανοιχτό και αναπάντητο από τις 23 Απριλίου 2024. Το lerobot ταιριάζει με τη συμπεριφορά που παρήγαγε τα δημοσιευμένα αποτελέσματα, όχι με τον τυπωμένο αριθμό. Αυξήστε το --policy.n_decoder_layers και θα εκπαιδεύσετε ένα μοντέλο που η δημοσίευση δεν αξιολόγησε ποτέ.
Η ομαδοποίηση ενεργειών είναι η όλη ιδέα
Η συνηθισμένη κλωνοποίηση συμπεριφοράς αντιστοιχίζει μία παρατήρηση σε μία ενέργεια, και τα σφάλματα συσσωρεύονται: μια απόκλιση θέτει τον βραχίονα εκτός κατανομής, παράγοντας μια χειρότερη ενέργεια, και τριάντα βήματα αργότερα η λαβίδα δεν βρίσκεται πουθενά κοντά στο αντικείμενο. Ομαδοποίηση ενεργειών προβλέπει k ενέργειες ταυτόχρονα και τις εκτελεί, μειώνοντας τον αποτελεσματικό ορίζοντα κατά έναν παράγοντα k. Επίσης, χειρίζεται μια ενόχληση ειδική στα ανθρώπινα δεδομένα: οι τηλεχειριστές κάνουν παύσεις, και μια μονοβήματη Μαρκοβιανή πολιτική δεν μπορεί να μοντελοποιήσει μια παύση που εξαρτάται από το τι προηγήθηκε.
Η δημοσίευση διερευνά το k αντί να το επιβεβαιώνει. Με απενεργοποιημένο το χρονικό ensembling, κατά μέσο όρο σε τέσσερις ρυθμίσεις, η επιτυχία αυξάνεται από 1 τοις εκατό στο k = 1 σε 44 τοις εκατό στο k = 100, και στη συνέχεια μειώνεται στα 200 και 400 καθώς η πολιτική πλησιάζει τον έλεγχο ανοιχτού βρόχου. Αυτή η καμπύλη είναι ο λόγος που η προεπιλογή είναι 100.
- chunk_size: πόσες μελλοντικές ενέργειες προβλέπει ο αποκωδικοποιητής ανά forward pass. Προεπιλογή 100.
- n_action_steps: πόσες από αυτές εκτελείτε πριν κάνετε ξανά ερώτημα. Προεπιλογή 100, οπότε το lerobot εκτελεί ολόκληρο το chunk σε ανοιχτό βρόχο.
- Το lerobot επικυρώνει ότι
n_action_steps <= chunk_sizeκαι εγείρει έναValueErrorαν το βάλετε ανάποδα.
Αυτό που έχει σημασία λειτουργικά είναι το chunk_size διαιρούμενο με το ρυθμό καρέ. Στα 30 fps που χρησιμοποιούν τα παραδείγματα SO-100 του lerobot, ένα chunk 100 δεσμεύει περίπου 3.3 δευτερόλεπτα από μία παρατήρηση. Αν η εργασία χρειάζεται διόρθωση μέσα σε αυτό το παράθυρο, μειώστε το n_action_steps, όχι το chunk_size: διατηρείτε τη μακρά πρόβλεψη και παρατηρείτε ξανά πιο συχνά.
# 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 διαφορετικά. Το Ensembling κάνει ερωτήματα στην πολιτική σε κάθε χρονικό βήμα και αναμειγνύει τις επικαλυπτόμενες προβλέψεις για αυτό το χρονικό βήμα με βάρη w_i = exp(-m * i), με το παλαιότερο να παίρνει το w_0. Η εργασία το τοποθετεί στο 3.3 τοις εκατό για το ACT: πραγματικό αλλά μέτριο, και πολλαπλασιάζει τον αριθμό των συμπερασμάτων επί το μήκος του chunk. Προσιτό στα 20 ms ανά βήμα, όχι στα 485 ms. Δείτε καθυστέρηση συμπερασμάτων.
Όταν το ACT ξεπερνά ένα θεμελιώδες μοντέλο
Οι πέντε εκπαιδεύσιμες πολιτικές δίπλα-δίπλα, με τους αριθμούς που μετρά και χρησιμοποιεί η AY-Robots για να καθορίσει το μέγεθος της GPU που νοικιάζει.
| Πολιτική | Οικογένεια | Παράμετροι | Ανά βήμα | Επίπεδο GPU | Ελάχιστα επεισόδια | Σύνολο δεδομένων |
|---|---|---|---|---|---|---|
| ACT | Μετασχηματιστής τεμαχισμού, από το μηδέν | ~80 M | 20 ms | RTX 4090 / 24 GB | 50 | LeRobot v3.0 |
| SmolVLA | Συμπαγές VLA | ~450 M | 245 ms | RTX 4090 / 24 GB | 30 | LeRobot v3.0 |
| GR00T N1.7 | Βάση VLA, κεφαλή διάχυσης | ~3 B (~40 M trained) | 152 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| GR00T N1.5 | Βάση VLA, προκάτοχος | ~3 B | 165 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| Pi0.5 | VLA αντιστοίχισης ροής, βλέπε αντιστοίχιση ροής | ~3 B, PaliGemma backbone | 485 ms | A100 / H100 80 GB | 50 | LeRobot v3.0 |

- 20 ms ανά βήμα δράσης, το ταχύτερο από τα πέντε, σε κάρτα 24 GB και όχι σε A100.
- 1 έως 3 USD ανά εκτέλεση έναντι 4 έως 12 για την κατηγορία 3 B.
- Ακριβές σε εργασίες με πλούσια επαφή που έχει δει: 88 και 96 τοις εκατό στα Slide Ziploc και Slot Battery, όπου οι προηγούμενες μέθοδοι δεν πέρασαν ποτέ το πρώτο στάδιο.
- Χωρίς γλωσσική προσαρμογή: η συμβολοσειρά εργασίας αγνοείται, οπότε ένα σημείο ελέγχου αντιστοιχεί σε μία εργασία.
- Χωρίς σημασιολογικές προηγούμενες γνώσεις: όλα όσα γνωρίζει προήλθαν από τα 50 επεισόδιά σας.
- Περιορισμένη γενίκευση: μετακινήστε μια κάμερα και χρειάζεται επανεκπαίδευση.
- Αποτυγχάνει αθόρυβα: η απώλεια μειώνεται, ο βραχίονας δεν κάνει τίποτα, τα αρχεία καταγραφής δεν λένε τίποτα.
- Το πλεονέκτημα ταχύτητας βοηθά μόνο αν η εξαγωγή συμπερασμάτων βρίσκεται δίπλα στους σερβοκινητήρες.
Επιλέξτε ACT όταν η εργασία και η σκηνή είναι σταθερές και η κίνηση πρέπει να είναι γρήγορη και ακριβής. Επιλέξτε ένα , όταν ένα σημείο ελέγχου πρέπει να καλύπτει πολλές οδηγίες. Δύο σελίδες εξετάζουν την απόφαση αντιμέτωπες: και . Για δημοσιευμένα benchmarks, συνδέει κάθε αριθμό με την πηγή του.
Τι χρειάζεστε πριν ξεκινήσετε
Ένας βραχίονας ακόλουθος, ένας βραχίονας οδηγός για , τουλάχιστον μία κάμερα, μια GPU 24 GB. Το ACT διαβάζει μόνο εικόνες και θέσεις αρθρώσεων. Δύο κάμερες είναι το ιδανικό: μια σταθερή μπροστινή όψη για το πού βρίσκονται τα πράγματα, μια κάμερα καρπού για το τι πρόκειται να αγγίξει ο , όπως στο ALOHA.
| Βραχίονας | Σέρβο | Τάση | Κόστος εξαρτημάτων | Κατάσταση |
|---|---|---|---|---|
| SO-100 | Feetech STS3215 | 7.4 V | ~110 to 150 EUR | Πλήρης υποστήριξη, βραχίονας αναφοράς |
| SO-101 | Feetech STS3215 | 7.4 V | ~130 to 170 EUR | Πλήρης υποστήριξη |
| Koch v1.1 | Dynamixel XL330 / XL430 | 5 V and 12 V rails | ~250 to 350 EUR | Συμβατό |
| LeKiwi | Feetech STS3215 (arm) | 7.4 V arm, 12 V base | ~400 to 500 EUR | Συμβατό |
Τα 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Εγκαταστήστε το lerobot με τα σωστά πρόσθετα
Η καταγραφή χρειάζεται
core_scripts, η εκπαίδευσηtraining, οι σερβοκινητήρες Feetechfeetech. Python 3.12+.bashconda 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Βρείτε τη θύρα USB κάθε μπράτσου
Εκτελέστε το με και τα δύο μπράτσα συνδεδεμένα, αποσυνδέοντας το ένα όταν σας ζητηθεί. Σε Linux ίσως χρειαστεί να ανοίξετε τα δικαιώματα του κόμβου.
bashlerobot-find-port # on Linux, if the port exists but is unreadable: sudo chmod 666 /dev/ttyACM0 - 3Ορίστε τα αναγνωριστικά κινητήρα και το baudrate
Στο SO-100 αυτό συμβαίνει πριν τη συναρμολόγηση: σε αντίθεση με το SO-101, οι σύνδεσμοι είναι απρόσιτοι μόλις κατασκευαστεί. Το script διασχίζει το bus έναν κινητήρα τη φορά από τον αρπάγη, γράφοντας αναγνωριστικά στην EEPROM.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 4Βαθμονόμηση και των δύο μπράτσων
Ρυθμίστε κάθε άρθρωση στη μέση του εύρους της, πατήστε Enter και, στη συνέχεια, σαρώστε την πλήρη εμβέλειά της. Η βαθμονόμηση επιτρέπει σε μια πολιτική που έχει εκπαιδευτεί σε ένα μπράτσο να λειτουργεί σε ένα άλλο. Επαναχρησιμοποιήστε το ίδιο
id.bashlerobot-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Τηλεχειρισμός μία φορά με τις κάμερες ενεργοποιημένες
Ο εμπειρικός κανόνας του lerobot: θα πρέπει να μπορείτε να εκτελέσετε την εργασία κοιτάζοντας μόνο τις εικόνες της κάμερας. Αν δεν μπορείτε, ούτε το ACT μπορεί. Αυτό εντοπίζει περισσότερα κακά σύνολα δεδομένων από ό,τι ο μεταγενέστερος εντοπισμός σφαλμάτων.
bashlerobot-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Καταγράψτε 50 επεισόδια
Το 50 είναι το ελάχιστο των AY-Robots και αυτό που χρησιμοποιούσε το ALOHA ανά εργασία. Το lerobot συμβουλεύει 10 ανά θέση αντικειμένου, σταθερές κάμερες, σταθερή λαβή. Το
nτερματίζει ένα επεισόδιο, τοrεπανεγγράφει, τοqσταματά και κωδικοποιεί.bashHF_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

Το ACT δεν έχει προηγούμενες γνώσεις για να βασιστεί, οπότε κάθε ασυνέπεια γίνεται μόνιμη. Οι τρεις πιο δαπανηρές: μια κάμερα που μετακινήθηκε μεταξύ του επεισοδίου 20 και 21, φως που άλλαξε επειδή καταγράψατε το μισό σύνολο το απόγευμα, μια λαβή που έγινε με δύο τρόπους. Κάθε μία δίνει μια τέλεια καμπύλη απώλειας και ένα μπράτσο που πηγαίνει σε λάθος μέρος. Δείτε η απώλεια πέφτει, η πολιτική δεν κάνει τίποτα, η πολιτική λειτουργεί μόνο σε μία ρύθμιση και συλλογή δεδομένων εκπαίδευσης υψηλής ποιότητας.
Πριν την εκπαίδευση, αναπαράγετε τουλάχιστον πέντε επεισόδια. αποθηκεύει ροές κάμερας, καταστάσεις αρθρώσεων και ενέργειες ανά , και η αναπαραγωγή ωθεί αυτές τις ενέργειες πίσω στο μπράτσο. Εάν η αναπαραγωγή δεν εκτελεί την εργασία, τα δεδομένα δεν την περιέχουν και η εκπαίδευση δεν θα την επινοήσει.
lerobot-replay \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--dataset.repo_id=${HF_USER}/so100_cube \
--dataset.episode=0Εκπαίδευση της πολιτικής ACT
Αυτή είναι η πλήρης εντολή. Όλα τα ειδικά για το ACT είναι ήδη προεπιλεγμένα, γι' αυτό και η σελίδα ACT του lerobot λέει να ξεκινήσετε με αυτά.
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--policy.type=act φορτώνει το ACTConfig, το οποίο προσαρμόζεται στον αριθμό των κινητήρων και των καμερών που κατέγραψε το σύνολο δεδομένων σας, οπότε δεν δηλώνετε ποτέ το σχήμα παρατήρησης. --wandb.enable=true είναι προαιρετικό και αξίζει τον κόπο: η καμπύλη απώλειας είναι το μόνο φθηνό σήμα σε μια εκτέλεση 100000 βημάτων. Το χρονοδιάγραμμα προέρχεται από τη ρύθμιση εκπαίδευσης του lerobot, όχι από το ACTConfig: 100000 βήματα, batch 8, seed 1000, ένα σημείο ελέγχου κάθε 20000 βήματα, καταγραφή κάθε 200.
Μια πλήρης εκτέλεση αφήνει πέντε καταλόγους σημείων ελέγχου, από 020000 έως 100000, συν έναν τελευταίο συμβολικό σύνδεσμο. Κρατήστε τα όλα: η καλύτερη πολιτική συχνά δεν είναι η τελευταία.
| Ρύθμιση | lerobot default | AY-Robots ACT form | Σχόλιο |
|---|---|---|---|
| μέγεθος batch | 8 | 8 | Μειώστε το πρώτα αν φτάσετε στα όρια VRAM. |
| ρυθμός εκμάθησης | 1e-5 | 1e-5 | Ίδιο με την εργασία ALOHA. |
| μέγιστα βήματα | 100000 | 100000 | Περίπου εκεί που ένα σύνολο 50 επεισοδίων σταματά να βελτιώνεται. |
| συσσώρευση κλίσης | 1 | 1, does not apply | Αλλάξτε το μέγεθος batch αντ' αυτού. |
| seed | 1000 | exposed | Το σημείο εισόδου tyro του GR00T δεν έχει seed. Οι εκτελέσεις ACT είναι οι αναπαραγώγιμες. |
| chunk_size / n_action_steps | 100 / 100 | 100 / 100, editable | Ορίζοντας πρόβλεψης και εκτέλεσης. Μειώστε το δεύτερο, όχι το πρώτο. |
| συχνότητα σημείων ελέγχου | 20000 | not exposed | Το saveSteps είναι ένα ρυθμιστικό του GR00T εδώ. |
Το ACT με μέγεθος batch 8 και δύο κάμερες 640x480 χωράει άνετα σε 24 GB. Σταματά να χωράει όταν οι χρήστες αυξάνουν το μέγεθος batch για ταχύτητα, ή του δίνουν τα καρέ 1920x1080 που δείχνει ένα παράδειγμα καταγραφής lerobot. Δύο backbones 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 φορές το μήκος ξανά μετά το πλατό.
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.
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Η αξιολόγηση εκτελούνταν μέσω του lerobot-record --policy.path=.... Στην έκδοση 0.6.x είναι το lerobot-rollout με έναν επιλογέα --strategy.type: base, sentry (καταγραφή με αυτόματη μεταφόρτωση), highlight (κυκλικός buffer αποθηκευμένος με πάτημα πλήκτρου), 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 ή περιβάλλοντος Python.
- Εγκαταστήστε το lerobot 0.6.x με
core_scripts,training,feetech, ffmpeg. - Βρείτε θύρες, ορίστε αναγνωριστικά κινητήρων, βαθμονομήστε και τους δύο βραχίονες, καταγράψτε 50 επεισόδια.
- Αναπαράγετε μερικά επεισόδια για να επιβεβαιώσετε ότι τα δεδομένα περιέχουν την εργασία.
- Ενοικιάστε ή αποκτήστε μια GPU 24 GB, αντιστοιχίστε CUDA και PyTorch, εκτελέστε
lerobot-train --policy.type=act. - Περιμένετε μερικές ώρες, και μετά εκτελέστε
lerobot-rolloutστο μηχάνημα στον βραχίονα.
# 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 τον εκπαιδευτή. Για έρευνα και όχι για την παράδοση μιας εργασίας, μια πλατφόρμα αποτελεί περισπασμό.
- Καταγράψτε με τον πελάτη επιφάνειας εργασίας, ή φέρτε ένα Hugging Face repo id ή τοπικό σύνολο δεδομένων.
- Ανοίξτε τον οδηγό ACT on SO-100 και επιλέξτε μοντέλο και σύνολο δεδομένων. Οι προεπιλογές είναι αυτές του lerobot· τα chunkSize, nActionSteps, seed και logFreq είναι επεξεργάσιμα.
- Το backend ενοικιάζει μια GPU μεγέθους VRAM και γράφει σημεία ελέγχου σε αποθήκευση αντικειμένων.
- Το
/api/inference/podστη συνέχεια εξυπηρετεί την πολιτική στον τοπικό πελάτη ρομπότ. Ένας αδρανής φύλακας καταστρέφει το pod, οπότε τίποτα δεν χρεώνεται σιωπηλά. - Οι ίδιες λειτουργίες υπάρχουν στο CLI, στον διακομιστή MCP και στα έγγραφα εκπαίδευσης.
Δεν διορθώνει τα δεδομένα σας: ένα σύνολο δεδομένων με μετακινημένη κάμερα εκπαιδεύεται εξίσου άσχημα εδώ, και η φόρμα δεν μπορεί να το ανιχνεύσει. Ούτε αφαιρεί το πρόβλημα καθυστέρησης. Ο βρόχος ελέγχου είναι 20 έως 485 ms ανά βήμα δράσης, με επιπλέον διαδρομές μετ' επιστροφής στο δημόσιο διαδίκτυο, και το ACT πλήττεται περισσότερο επειδή το βήμα του είναι το συντομότερο: τα 60 ms είναι μια επιβράδυνση 12 τοις εκατό στα 485 ms του Pi0.5, αλλά τέσσερις φορές το βήμα στα 20 ms του ACT. Η απομακρυσμένη συμπερασματολογία ταιριάζει σε αργές εργασίες pick and place, όχι σε γρήγορη αντιδραστική κίνηση.

Τι πάει πραγματικά στραβά
Σχεδόν κανένας πόνος δεν βρίσκεται στην εντολή εκπαίδευσης. Βρίσκεται στα πράγματα γύρω της, ταξινομημένα με βάση το πόσο συχνά εμφανίζονται για πρώτη φορά.
| Σύμπτωμα | Συνήθης αιτία | Σελίδα |
|---|---|---|
| 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 fps. Δύο ακόμη να γνωρίζετε: μια μόνο νεκρή άρθρωση είναι συνήθως ένα αναγνωριστικό σερβομηχανισμού που δεν γράφτηκε ποτέ, και ένας αρπάγας που πλησιάζει αλλά δεν κλείνει ποτέ σημαίνει πολύ μικρό εύρος αρπάγα στις επιδείξεις. Πλήρες ευρετήριο: οι σελίδες τρόπων αστοχίας.
Τι κοστίζει μια εκτέλεση
| Βαθμίδα | Μοντέλα | Χρόνος εκτέλεσης | Τιμή ανά ώρα | Κόστος ανά εκτέλεση |
|---|---|---|---|---|
| RTX 4090 / 24 GB | ACT, SmolVLA | 2 to 5 hours | 0.30 to 0.60 USD | about 1 to 3 USD |
| A100 80 GB / H100 | GR00T N1.7, GR00T N1.5, Pi0.5 | 3 to 6 hours | 1.20 to 2.00 USD | about 4 to 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 είναι μόνιμο.
Sources
- Zhao, Kumar, Levine, Finn: Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware (ACT), arXiv 2304.13705
- ALOHA / ACT project page
- tonyzhaozh/act, the reference implementation and its training-length advice
- tonyzhaozh/act issue 25: the action head reads only the first decoder layer
- huggingface/lerobot
- lerobot ACTConfig: chunk_size, n_action_steps, n_decoder_layers and the rest of the defaults
- lerobot TrainPipelineConfig: steps, batch_size, seed, save_freq, log_freq, save_checkpoint_to_hub
- lerobot train_utils: zero-padded checkpoint dirs, the last symlink and checkpoint push tagging
- lerobot v0.6.1 release, 3 August 2026
- LeRobot docs: ACT
- LeRobot docs: imitation learning on real robots (record, replay, train, rollout)
- LeRobot docs: SO-100 setup, motor ids and calibration
- LeRobot docs: installation and the optional extras
- Hugging Face blog: LeRobot Community Datasets, the ImageNet of Robotics, When and How?
- TheRobotStudio/SO-ARM100: Standard Open Arm 100
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started