
lerobot के साथ SO-100 पर एक एक्शन चंकिंग ट्रांसफार्मर को स्क्रैच से प्रशिक्षित करें: ACT कॉन्फ़िग, chunk_size और n_action_steps, 100000 स्टेप शेड्यूल, 20 ms इन्फेरेंस।
SO-100 नीतियों में ACT सबसे अलग है। GR00T N1.7 और N1.5 यहाँ से शुरू होते हैं nvidia/GR00T-N1.7-3B और nvidia/GR00T-N1.5-3B, Pi0.5 यहाँ से lerobot/pi05_base। ACT कुछ भी नहीं से शुरू होता है: कोई बेस चेकपॉइंट नहीं है, क्योंकि यह एक फाउंडेशन मॉडल नहीं है। यह लगभग 80 मिलियन पैरामीटर वाला एक ट्रांसफार्मर है जिसे आप अपने हाथ पर, अपनी रोशनी में, एक ही कार्य पर खरोंच से प्रशिक्षित करते हैं।
यही कारण है कि यह 20 मिलीसेकंड में एक नियंत्रण चरण चलाता है जहाँ 3 बिलियन पैरामीटर वाले VLA को 152 से 485 मिलीसेकंड की आवश्यकता होती है, और प्रति रन 4 से 12 के बजाय 1 से 3 USD का खर्च आता है। यह मार्गदर्शिका लेरोबोट के साथ मैन्युअल मार्ग बताती है, एक SO-100 पर: रिकॉर्ड, act कॉन्फ़िग, क्या chunk_size और n_action_steps नियंत्रित करते हैं, 100000 स्टेप शेड्यूल, रोलआउट। फिर AY-Robots पर वही काम, जिसमें यह भी शामिल है कि प्लेटफ़ॉर्म कहाँ मदद नहीं करता है।
आपको क्या जानने की आवश्यकता है
- •ACT खरोंच से प्रशिक्षित होता है: कोई बेस मॉडल नहीं, कोई प्रीट्रेनिंग नहीं, कोई भाषा इनपुट नहीं। एक चेकपॉइंट, एक कार्य।
- •पेपर: लगभग 80 मिलियन पैरामीटर, 11 GB RTX 2080 Ti पर लगभग 5 घंटे, 0.01 सेकंड अनुमान।
- •लेरोबोट डिफ़ॉल्ट: chunk_size 100, n_action_steps 100, बैच 8, lr 1e-5, 100000 स्टेप्स, सीड 1000।
- •AY-Robots पर: प्रति स्टेप 20 मिलीसेकंड, पाँचों में सबसे तेज़। न्यूनतम 50 एपिसोड, LeRobot v3.0, एक 24 GB कार्ड, प्रति रन 1 से 3 USD।
- •यह उस कार्य पर जीतता है जिसे इसने देखा है, और जैसे ही आप भाषा कंडीशनिंग चाहते हैं, यह हार जाता है।
23 अगस्त 2026 को लेरोबोट 0.6.x के विरुद्ध जाँच की गई: `main` पर `pyproject.toml` में `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 पेपर से आया है, Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware, झाओ, कुमार, लेविन और फिन द्वारा, arXiv, 23 अप्रैल 2023 को प्रकाशित। यह रिग 50 हर्ट्ज़ पर रिकॉर्ड करता है जिसमें चार वेबकैम 480x640 रेजोल्यूशन पर 30 एफपीएस पर स्ट्रीम करते हैं: दो ग्रिपर पर, एक ऊपर और एक सामने। एब्स्ट्रैक्ट में 10 मिनट के प्रदर्शनों से छह कौशलों में 80 से 90 प्रतिशत सफलता का दावा किया गया है, जिनमें एक पारदर्शी मसाला कप खोलना और बैटरी डालना शामिल है।
रिकॉर्डिंग सत्र की योजना बनाते समय मुख्य भाग अधिक उपयोगी होता है: प्रति कार्य 50 प्रदर्शन, थ्रेड वेल्क्रो के लिए 100 को छोड़कर, जिसमें 10 से 20 मिनट का डेटा और रीसेट गिनने के बाद 30 से 60 मिनट का वास्तविक समय लगता है। सफलता भी एक समान नहीं है: थ्रेड वेल्क्रो 20 प्रतिशत पर समाप्त होता है, पुट ऑन शू 92 पर, कप ओपन 84 पर, प्रेप टेप 64 पर।
| हाइपरपैरामीटर | ALOHA paper, तालिका III | lerobot ऑन मेन |
|---|---|---|
| लर्निंग रेट | 1e-5 | optimizer_lr = 1e-5 |
| बैच साइज़ | 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 डिकोडर लेयर्स सूचीबद्ध हैं, लेरोबोट जानबूझकर 1 भेजता है। configuration_act.py में टिप्पणी कहती है कि मूल कार्यान्वयन में एक बग है जिसका अर्थ है कि केवल पहली लेयर का उपयोग किया जाता है, tonyzhaozh/act में इश्यू 25 का हवाला देते हुए: एक्शन हेड hs[0] पढ़ता है, इसलिए सभी सात लेयर्स चलती हैं लेकिन केवल पहला आउटपुट ही भविष्यवाणी तक पहुंचता है। वह इश्यू 23 अप्रैल 2024 से खुला और अनुत्तरित है। लेरोबोट उस व्यवहार से मेल खाता है जिसने प्रकाशित परिणाम दिए, न कि मुद्रित संख्या से। --policy.n_decoder_layers बढ़ाएँ और आप एक ऐसा मॉडल प्रशिक्षित करेंगे जिसका पेपर ने कभी मूल्यांकन नहीं किया।
एक्शन चंकिंग ही पूरा विचार है
सामान्य व्यवहारिक क्लोनिंग एक अवलोकन को एक क्रिया से मैप करती है, और त्रुटियां बढ़ती जाती हैं: एक विचलन हाथ को वितरण से बाहर कर देता है, जिससे एक खराब क्रिया उत्पन्न होती है, और तीस चरणों के बाद ग्रिपर वस्तु के कहीं भी पास नहीं होता है। एक्शन चंकिंग एक साथ k क्रियाओं की भविष्यवाणी करता है और उन्हें निष्पादित करता है, जिससे प्रभावी क्षितिज k के एक कारक से कम हो जाता है। यह मानव डेटा के लिए विशिष्ट एक परेशानी को भी संभालता है: टेलीऑपरेटर रुकते हैं, और एक एकल-चरण मार्कोवियन पॉलिसी एक ऐसे ठहराव को मॉडल नहीं कर सकता जो पहले क्या हुआ उस पर निर्भर करता है।
पेपर k को सिद्ध करने के बजाय उसे एब्लेट करता है। टेम्पोरल एन्सेम्बलिंग बंद होने पर, चार सेटिंग्स पर औसत, सफलता k = 1 पर 1 प्रतिशत से बढ़कर k = 100 पर 44 प्रतिशत हो जाती है, फिर 200 और 400 पर कम हो जाती है क्योंकि पॉलिसी ओपन-लूप नियंत्रण के करीब पहुंचती है। वह वक्र ही कारण है कि डिफ़ॉल्ट 100 है।
- chunk_size: डिकोडर प्रति फॉरवर्ड पास में कितने भविष्य के कार्यों की भविष्यवाणी करता है। डिफ़ॉल्ट 100।
- n_action_steps: फिर से क्वेरी करने से पहले आप उनमें से कितने निष्पादित करते हैं। डिफ़ॉल्ट 100, इसलिए lerobot पूरे चंक को ओपन लूप में चलाता है।
- lerobot
n_action_steps <= chunk_sizeको मान्य करता है और यदि आप इसे उल्टा करते हैं तोValueErrorउठाता है।
परिचालन की दृष्टि से जो मायने रखता है वह है chunk_size को फ्रेम दर से विभाजित करना। 30 fps पर lerobot के SO-100 उदाहरणों का उपयोग करते हुए, 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 उठाता है। एनसेंबलिंग हर टाइमस्टेप पर पॉलिसी को क्वेरी करता है और उस टाइमस्टेप के लिए ओवरलैपिंग भविष्यवाणियों को वज़न w_i = exp(-m * i) के साथ मिश्रित करता है, जिसमें सबसे पुराने को w_0 मिलता है। पेपर इसे ACT के लिए 3.3 प्रतिशत बताता है: वास्तविक लेकिन मामूली, और यह अनुमान गणना को चंक की लंबाई से गुणा करता है। 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 पर नहीं।
- 3 B क्लास के लिए 4 से 12 के मुकाबले प्रति रन 1 से 3 USD।
- संपर्क-समृद्ध कार्यों पर सटीक, जो इसने देखे हैं: स्लाइड ज़िपलॉक और स्लॉट बैटरी पर 88 और 96 प्रतिशत, जहाँ पिछली विधियाँ कभी पहले चरण को पार नहीं कर पाईं।
- कोई भाषा कंडीशनिंग नहीं: कार्य स्ट्रिंग को अनदेखा किया जाता है, इसलिए एक चेकपॉइंट एक कार्य है।
- कोई सिमेंटिक पूर्वज्ञान नहीं: यह जो कुछ भी जानता है वह आपके 50 एपिसोड से आया है।
- संकीर्ण सामान्यीकरण: एक कैमरा हिलाएं और आपको फिर से प्रशिक्षित करना होगा।
- यह चुपचाप विफल हो जाता है: लॉस कम होता है, भुजा कुछ नहीं करती, लॉग कुछ नहीं कहते।
- गति का लाभ तभी मिलता है जब अनुमान सर्वो के बगल में हो।
ACT चुनें जब कार्य और दृश्य निश्चित हों और गति तेज़ और सटीक होनी चाहिए। एक चुनें जब एक चेकपॉइंट को कई निर्देशों को कवर करना हो। दो पृष्ठ निर्णय को आमने-सामने रखते हैं: और । प्रकाशित बेंचमार्क के लिए, हर संख्या को उसके स्रोत से जोड़ता है।
शुरू करने से पहले आपको क्या चाहिए
एक फॉलोअर आर्म, एक लीडर आर्म के लिए, कम से कम एक कैमरा, एक 24 GB GPU। 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सही एक्स्ट्रा के साथ लेरोबोट इंस्टॉल करें
रिकॉर्डिंग के लिए
core_scripts, ट्रेनिंग के लिएtraining, Feetech सर्वो के लिएfeetechकी आवश्यकता होती है। 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मोटर आईडी और बॉडरेट सेट करें
SO-100 पर यह असेंबली से पहले होता है: SO-101 के विपरीत, एक बार बनने के बाद कनेक्टर दुर्गम हो जाते हैं। स्क्रिप्ट ग्रिपर से एक-एक मोटर करके बस को स्कैन करती है, और EEPROM में आईडी लिखती है।
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 4दोनों आर्म्स को कैलिब्रेट करें
प्रत्येक जॉइंट को उसकी रेंज के मध्य में सेट करें, एंटर दबाएं, फिर प्रत्येक को उसकी पूरी रेंज में घुमाएं। कैलिब्रेशन एक आर्म पर प्रशिक्षित पॉलिसी को दूसरे पर चलाने की अनुमति देता है। वही
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कैमरा चालू करके एक बार टेलीऑपरेट करें
लेरोबोट का सामान्य नियम: आपको केवल कैमरा छवियों को देखकर कार्य करने में सक्षम होना चाहिए। यदि आप नहीं कर सकते, तो 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 - 650 एपिसोड रिकॉर्ड करें
50 AY-Robots का न्यूनतम है और ALOHA ने प्रति कार्य यही उपयोग किया था। लेरोबोट प्रति वस्तु स्थान 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=0ACT पॉलिसी को प्रशिक्षित करना
यह पूरा कमांड है। ACT-विशिष्ट सब कुछ पहले से ही डिफ़ॉल्ट है, यही कारण है कि lerobot ACT पेज उन्हें शुरू करने के लिए कहता है।
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 स्टेप्स, बैच 8, सीड 1000, एक चेकपॉइंट हर 20000 स्टेप्स पर, और हर 200 पर लॉगिंग।
एक पूर्ण रन में पाँच चेकपॉइंट डायरेक्टरीज़ (020000 से 100000 तक) और एक अंतिम सिमलिंक छोड़ता है। उन सभी को रखें: सबसे अच्छी पॉलिसी अक्सर अंतिम वाली नहीं होती है।
| सेटिंग | लेरोबोट डिफ़ॉल्ट | AY-रोबोट्स ACT फॉर्म | टिप्पणी |
|---|---|---|---|
| बैच आकार | 8 | 8 | यदि आप VRAM सीमा तक पहुँचते हैं तो इसे पहले कम करें। |
| लर्निंग रेट | 1e-5 | 1e-5 | ALOHA पेपर के समान। |
| अधिकतम स्टेप्स | 100000 | 100000 | लगभग वह बिंदु जहाँ 50 एपिसोड का सेट बेहतर होना बंद कर देता है। |
| ग्रेडिएंट संचय | 1 | 1, does not apply | इसके बजाय बैच आकार बदलें। |
| सीड | 1000 | exposed | GR00T के टायरो एंट्री पॉइंट में कोई सीड नहीं है; ACT रन ही प्रतिलिपि प्रस्तुत करने योग्य होते हैं। |
| चंक्स_साइज / n_एक्शन_स्टेप्स | 100 / 100 | 100 / 100, editable | भविष्यवाणी और निष्पादन क्षितिज। दूसरे को कम करें, पहले को नहीं। |
| चेकपॉइंट आवृत्ति | 20000 | not exposed | यहाँ saveSteps एक GR00T नॉब है। |
दो 640x480 कैमरों के साथ बैच आकार 8 पर ACT 24 GB पर आराम से फिट बैठता है। यह तब फिट होना बंद कर देता है जब लोग गति के लिए बैच आकार बढ़ाते हैं, या इसे 1920x1080 फ्रेम देते हैं जैसा कि एक लेरोबोट रिकॉर्डिंग उदाहरण दिखाता है। 1080p पर दो ResNet-18 बैकबोन का मेमोरी प्रोफाइल बहुत अलग होता है। एक बड़ा कार्ड किराए पर लेने से पहले --batch_size को 4 तक कम करें। देखें ट्रेनिंग में मेमोरी से बाहर।
अवधि: पेपर में 11 GB RTX 2080 Ti पर लगभग 5 घंटे, lerobot के ACT पेज के अनुसार 100k स्टेप्स के लिए कुछ घंटे, AY-Robots 24 GB टियर पर 2 से 5 घंटे। इसे कम न करें। संदर्भ रेपो के 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 (कीस्ट्रोक द्वारा सहेजा गया रिंग बफर), dagger (लूप में मानव) और episodic। 23 अगस्त 2026 तक ACT दस्तावेज़ पृष्ठ अभी भी lerobot-rollout चलाने वाले ब्लॉक के ठीक ऊपर "lerobot-record कमांड का उपयोग करके" कहता है। कमांड का पालन करें, वाक्य का नहीं।
अंतिम मॉडल के बजाय एक चेकपॉइंट को पिन करने के लिए, जोड़ें --policy.pretrained_revision। इसके लिए रन को --save_checkpoint_to_hub=true से शुरू होना चाहिए था, डिफ़ॉल्ट रूप से बंद: इसके बिना lerobot अंतिम मॉडल और कुछ भी नहीं धकेलता है। इसके साथ, प्रत्येक चेकपॉइंट को उसके शून्य-पैडेड स्टेप के साथ टैग किया जाता है, इसलिए --policy.pretrained_revision=060000 60000 स्टेप वाले को पुनर्प्राप्त करता है। वास्तविक आर्म पर इसकी 100000 के मुकाबले तुलना करना सबसे सस्ता उपलब्ध प्रयोग है।
एक ही चेकपॉइंट तक पहुँचने के दो रास्ते
ऊपर दिया गया सब कुछ मैन्युअल तरीका है और यह काम करता है। प्लेटफ़ॉर्म का तरीका GPU या Python एनवायरनमेंट का मालिक न होने के बदले नियंत्रण का त्याग करता है।
core_scripts,training,feetech, ffmpeg के साथ lerobot 0.6.x इंस्टॉल करें।- पोर्ट्स ढूंढें, मोटर आईडी सेट करें, दोनों आर्म्स को कैलिब्रेट करें, 50 एपिसोड रिकॉर्ड करें।
- डेटा में कार्य शामिल है यह पुष्टि करने के लिए कुछ एपिसोड फिर से चलाएं।
- 24 GB GPU किराए पर लें या खरीदें, 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 संपादित करें, एक कैमरा जोड़ें, ट्रेनर को फोर्क करें। किसी कार्य को शिप करने के बजाय अनुसंधान के लिए, एक प्लेटफ़ॉर्म एक भटकाव है।
- डेस्कटॉप क्लाइंट के साथ रिकॉर्ड करें, या एक Hugging Face repo id या स्थानीय डेटासेट लाएं।
- ACT on SO-100 गाइड खोलें और मॉडल और डेटासेट चुनें। डिफ़ॉल्ट lerobot वाले हैं; chunkSize, nActionSteps, seed और logFreq संपादन योग्य हैं।
- बैकएंड VRAM द्वारा आकार का एक GPU किराए पर लेता है और चेकपॉइंट्स को ऑब्जेक्ट स्टोरेज में लिखता है।
/api/inference/podफिर स्थानीय रोबोट क्लाइंट को पॉलिसी प्रदान करता है। एक निष्क्रिय वॉचडॉग पॉड को नष्ट कर देता है, इसलिए कुछ भी चुपचाप बिल नहीं होता है।- वही ऑपरेशन CLI, MCP सर्वर और ट्रेनिंग डॉक्स में मौजूद हैं।
यह आपके डेटा को ठीक नहीं करता है: एक स्थानांतरित कैमरे वाला डेटासेट यहां भी उतना ही खराब प्रशिक्षित होता है, और फ़ॉर्म इसका पता नहीं लगा सकता। न ही यह विलंबता (latency) समस्या को दूर करता है। नियंत्रण लूप प्रति एक्शन स्टेप 20 से 485 ms का होता है, जिसमें सार्वजनिक-इंटरनेट राउंड ट्रिप भी शामिल होती हैं, और ACT को सबसे अधिक नुकसान होता है क्योंकि इसका स्टेप सबसे छोटा होता है: 60 ms, Pi0.5 के 485 ms पर 12 प्रतिशत की धीमी गति है, लेकिन ACT के 20 ms पर स्टेप का चार गुना है। रिमोट इन्फरेंस धीमी पिक एंड प्लेस के लिए उपयुक्त है, न कि तेज़ प्रतिक्रियाशील गति के लिए।

वास्तव में क्या गलत होता है
प्रशिक्षण कमांड में शायद ही कोई परेशानी होती है। परेशानी इसके आसपास की चीजों में होती है, जो इस बात पर आधारित होती है कि वे पहली बार कितनी बार समस्या पैदा करती हैं।
| लक्षण | सामान्य कारण | पृष्ठ |
|---|---|---|
| lerobot-find-port कुछ नहीं दिखाता | ड्राइवर, केबल या नोड अनुमतियाँ | आर्म का पता नहीं चला |
| रिकॉर्ड करते समय कैमरा गायब | रीबूट पर इंडेक्स बदल गया, या एक USB कंट्रोलर पर दो कैमरे | कैमरे का पता नहीं चला |
| प्रशिक्षण डेटासेट को अस्वीकार करता है | ACT को v3.0 चाहिए, GR00T को v2.1 चाहिए | डेटासेट को v3 के रूप में अस्वीकार किया गया |
| CUDA मेमोरी से बाहर | बैच का आकार बढ़ा दिया गया, या 480p के बजाय 1080p फ्रेम | प्रशिक्षण में मेमोरी से बाहर |
| लॉस अच्छा दिखता है, आर्म कुछ नहीं करता | डेटा में कार्य की कमी है, या एक कैमरा हिल गया | लॉस गिरता है, पॉलिसी कुछ नहीं करती |
| झटकेदार गति या एपिसोड के बीच में ठहराव | कम प्रशिक्षित, एक चंक बाउंड्री स्टॉल, या एक टाइम-आउट इन्फरेंस कॉल | पॉलिसी गति के बीच में रुक जाती है |
दो पंक्तियों पर जोर देना आवश्यक है। ACT LeRobot v3.0 पर प्रशिक्षित होता है जबकि GR00T का लोडर इस पर क्रैश हो जाता है और उसे v2.1 की आवश्यकता होती है, इसलिए एक डेटासेट जो ACT को प्रशिक्षित करता है, वह GR00T रन को विफल कर सकता है। और अंतिम पंक्ति में दो समाधान हैं: ACT के लेखक झटकेदार गति का उत्तर अधिक प्रशिक्षण से देते हैं, जबकि n_action_steps 100 पर एक वास्तविक ठहराव एक चंक बाउंड्री पर आता है, 30 एफपीएस पर हर 3.3 सेकंड में एक दृश्यमान ठहराव। जानने के लिए दो और बातें: एक अकेला निष्क्रिय जोड़ आमतौर पर एक सर्वर आईडी जो कभी नहीं लिखी गई, और एक ग्रिपर जो पास आता है लेकिन कभी बंद नहीं होता का मतलब है प्रदर्शनों में ग्रिपर रेंज बहुत कम। पूर्ण सूचकांक: विफलता मोड पृष्ठ।
एक रन की लागत क्या है
| टियर | मॉडल | रन का समय | प्रति घंटा कीमत | प्रति रन लागत |
|---|---|---|---|---|
| RTX 4090 / 24 GB | ACT, SmolVLA | 2 से 5 घंटे | 0.30 to 0.60 USD | लगभग 1 से 3 USD |
| A100 80 GB / H100 | GR00T N1.7, GR00T N1.5, Pi0.5 | 3 से 6 घंटे | 1.20 to 2.00 USD | लगभग 4 से 12 USD |
यह ACT से शुरू करने का तर्क है, भले ही आप बाद में VLA चाहते हों। एक असफल ACT रन की लागत एक कॉफी के बराबर होती है और घंटों के भीतर आपको बता देता है कि आपके डेटासेट में कार्य शामिल है या नहीं। एक असफल GR00T रन की लागत उसी सबक के लिए चार गुना होती है। बाद में GR00T N1.7 या SmolVLA पर जाना एक रूप परिवर्तन है, पुनर्निर्माण नहीं। पृष्ठभूमि: विजन-लैंग्वेज-एक्शन मॉडल, संपूर्ण SO-100 गाइड, अपनी पहली पॉलिसी को प्रशिक्षित करें और इमिटेशन लर्निंग। कोई आर्म नहीं? लाइव पेज बिना साइन अप किए एक वास्तविक SO-100 को चलाने के लिए स्ट्रीम करता है।
अपने SO-100 पर ACT को प्रशिक्षित करें
इस सटीक संयोजन के लिए गाइड: डिफ़ॉल्ट, GPU टियर और एक रन की लागत क्या है। डेटासेट चुनें, बैकएंड कार्ड किराए पर लेता है और चेकपॉइंट लिखता है।
प्रशिक्षण गाइड खोलेंक्या कोई प्रीट्रेन्ड ACT मॉडल है जिसे मैं इसके बजाय फाइन-ट्यून कर सकता हूँ?▾
नहीं। ACT का कोई बेस मॉडल नहीं है; यह तभी मौजूद होता है जब आप इसे प्रशिक्षित करते हैं। यह टूलिंग में कोई कमी नहीं है, यह वही है जो ACT है: पेपर प्रति कार्य स्क्रैच से एक पॉलिसी को प्रशिक्षित करता है। विक्रेता चेकपॉइंट के लिए, GR00T N1.7 या Pi0.5 का उपयोग करें।
मुझे वास्तव में कितने एपिसोड की आवश्यकता है?▾
50: ALOHA ने प्रति कार्य (थ्रेड वेल्क्रो के लिए 100, जो इसका सबसे कठिन है) और AY-Robots न्यूनतम के लिए जो रिकॉर्ड किया। lerobot प्रति वस्तु स्थान लगभग 10 की सलाह देता है, कैमरे स्थिर, पकड़ सुसंगत। पचास साफ एपिसोड सौ ऐसे एपिसोड से बेहतर होते हैं जहाँ कैमरा हिल गया हो।
क्या मुझे chunk_size को 100 से बदलना चाहिए?▾
आमतौर पर नहीं। एब्लेशन k = 1 पर 1 प्रतिशत से बढ़कर k = 100 पर 44 प्रतिशत हो जाता है और उसके बाद कम होता जाता है, इसलिए 100 शीर्ष के करीब बैठता है। यदि आर्म बहुत देर तक कमिट करता है, तो इसके बजाय n_action_steps को कम करें: 30 fps पर, हर 0.8 सेकंड में 25 री-क्वेरी।
एक प्रशिक्षण रन में कितना समय लगता है, और क्या मैं इसे जल्दी रोक सकता हूँ?▾
100000 स्टेप्स के लिए 24 GB कार्ड पर दो से पांच घंटे। चेकपॉइंट हर 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