
lerobot ব্যবহার করে SO-100-এ শুরু থেকে একটি Action Chunking Transformer-কে প্রশিক্ষণ দিন: act config, 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 ms-এ একটি নিয়ন্ত্রণ ধাপ চালায়, যেখানে একটি 3 বিলিয়ন প্যারামিটার VLA-এর জন্য 152 থেকে 485 ms প্রয়োজন হয় এবং প্রতি রানে 4 থেকে 12 USD-এর পরিবর্তে 1 থেকে 3 USD খরচ হয়। এই নির্দেশিকাটি ম্যানুয়াল পদ্ধতি অনুসরণ করে lerobot একটি SO-100-এ: রেকর্ড, act কনফিগ, কী chunk_size এবং n_action_steps নিয়ন্ত্রণ করে, 100000 ধাপের সময়সূচী, রোলআউট। তারপর AY-Robots-এ একই কাজ, যেখানে প্ল্যাটফর্ম সাহায্য করে না সেই ক্ষেত্রগুলি সহ।
যা আপনার জানা দরকার
- •ACT স্ক্র্যাচ থেকে প্রশিক্ষণ নেয়: কোনো বেস মডেল নেই, কোনো প্রিট্রেয়িং নেই, কোনো ভাষার ইনপুট নেই। একটি চেকপয়েন্ট, একটি কাজ।
- •গবেষণাপত্র: প্রায় 80 মিলিয়ন প্যারামিটার, একটি 11 GB RTX 2080 Ti-তে প্রায় 5 ঘন্টা, 0.01 সেকেন্ড ইনফারেন্স।
- •lerobot-এর ডিফল্ট: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 ধাপ, seed 1000।
- •AY-Robots-এ: প্রতি ধাপে 20 ms, পাঁচটির মধ্যে দ্রুততম। সর্বনিম্ন 50 এপিসোড, LeRobot v3.0, একটি 24 GB কার্ড, প্রতি রানে 1 থেকে 3 USD।
- •এটি যে কাজটি দেখেছে তাতে জয়ী হয়, এবং যখনই আপনি ভাষা কন্ডিশনিং চান তখনই হেরে যায়।
23 আগস্ট 2026 তারিখে lerobot-এর বিপরীতে যাচাই করা হয়েছে 0.6.x: pyproject.toml on main reads version = "0.6.2", newest tag v0.6.1, 3 আগস্ট 2026। একটি টিউটোরিয়াল যা python lerobot/scripts/train.py দিয়ে শুরু হয় তা কনসোল এন্ট্রি পয়েন্টগুলির পূর্ববর্তী lerobot-train, lerobot-record এবং lerobot-rollout।
ACT আসলে কী
অ্যাকশন চাংকিং উইথ ট্রান্সফরমার্স (ACT) ALOHA পেপার থেকে এসেছে, কম খরচের হার্ডওয়্যার দিয়ে সূক্ষ্ম দ্বিপাক্ষিক ম্যানিপুলেশন শেখা, ঝাও, কুমার, লেভিন এবং ফিন দ্বারা, arXiv, 23 এপ্রিল 2023। রিগটি 50 Hz এ রেকর্ড করে চারটি ওয়েবক্যাম 30 fps এ 480x640 স্ট্রিম করে: দুটি গ্রিপারগুলিতে, একটি উপরে, একটি সামনে। অ্যাবস্ট্রাক্টটি 10 মিনিটের প্রদর্শনী থেকে 80 থেকে 90 শতাংশ সাফল্যের সাথে ছয়টি দক্ষতার দাবি করে, যার মধ্যে একটি স্বচ্ছ মশলা কাপ খোলা এবং একটি ব্যাটারি স্লট করা।
রেকর্ডিং সেশন পরিকল্পনা করার সময় মূল অংশটি আরও কার্যকর: প্রতি টাস্কে 50টি প্রদর্শনী, থ্রেড ভেলক্রো 100টি ছাড়া, যা 10 থেকে 20 মিনিটের ডেটা এবং রিসেট গণনা করার পর 30 থেকে 60 মিনিটের ওয়াল-ক্লক সময়। সাফল্যও একরকম নয়: থ্রেড ভেলক্রো 20 শতাংশে শেষ হয়, পুট অন শু 92, কাপ ওপেন 84, প্রেপ টেপ 64।
| হাইপারপ্যারামিটার | ALOHA পেপার, সারণী 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 |
গবেষণাপত্রে ৭টি ডিকোডার লেয়ারের কথা উল্লেখ করা হয়েছে, lerobot ইচ্ছাকৃতভাবে ১টি ব্যবহার করে। configuration_act.py-এর কমেন্টে বলা হয়েছে যে মূল বাস্তবায়নে একটি বাগ ছিল যার অর্থ শুধুমাত্র প্রথম লেয়ারটি ব্যবহৃত হয়, tonyzhaozh/act-এর ইস্যু ২৫ উল্লেখ করে: অ্যাকশন হেড hs[0] পড়ে, তাই সাতটি লেয়ারই চলে কিন্তু শুধুমাত্র প্রথম আউটপুট ভবিষ্যদ্বাণীতে পৌঁছায়। সেই ইস্যুটি ২৩ এপ্রিল ২০২৪ থেকে খোলা এবং উত্তরহীন। lerobot প্রকাশিত ফলাফল তৈরি করা আচরণকে অনুসরণ করে, মুদ্রিত সংখ্যাকে নয়। --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 কে ফ্রেম রেট দ্বারা ভাগ করা। lerobot-এর SO-100 উদাহরণগুলিতে ব্যবহৃত 30 fps-এ, 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 |

- প্রতি অ্যাকশন স্টেপে ২০ ms, পাঁচটি পদ্ধতির মধ্যে দ্রুততম, একটি ২৪ GB কার্ডে, A100-এ নয়।
- প্রতি রানে ১ থেকে ৩ USD, যেখানে ৩ B ক্লাসের জন্য ৪ থেকে ১২ USD।
- এটি যে কন্টাক্ট-রিচ কাজ দেখেছে তাতে নির্ভুল: স্লাইড জিপলক এবং স্লট ব্যাটারিতে ৮৮ এবং ৯৬ শতাংশ, যেখানে পূর্ববর্তী পদ্ধতিগুলি প্রথম পর্যায়ও অতিক্রম করতে পারেনি।
- কোনো ভাষা কন্ডিশনিং নেই: টাস্ক স্ট্রিং উপেক্ষা করা হয়, তাই একটি চেকপয়েন্ট একটি টাস্ক।
- কোনো সিমান্টিক পূর্বধারণা নেই: এটি যা কিছু জানে তা আপনার ৫০টি এপিসোড থেকে এসেছে।
- সংকীর্ণ সাধারণীকরণ: একটি ক্যামেরা সরালে আপনাকে পুনরায় প্রশিক্ষণ দিতে হবে।
- এটি নীরবে ব্যর্থ হয়: লস কমে যায়, বাহু কিছুই করে না, লগগুলিতে কিছু বলা হয় না।
- গতির সুবিধা তখনই কাজে লাগে যদি ইনফারেন্স সার্ভোগুলির পাশেই থাকে।
যখন টাস্ক এবং দৃশ্য স্থির থাকে এবং গতি দ্রুত ও নির্ভুল হতে হয়, তখন ACT বেছে নিন। একটি যখন একটি চেকপয়েন্টকে একাধিক নির্দেশনা কভার করতে হয়, তখন একটি ভিশন-ল্যাঙ্গুয়েজ-অ্যাকশন মডেল বেছে নিন। দুটি পৃষ্ঠা এই সিদ্ধান্তকে মুখোমুখি তুলনা করে: এবং । প্রকাশিত বেঞ্চমার্কের জন্য, প্রতিটি সংখ্যাকে তার উৎসের সাথে সংযুক্ত করে।
শুরু করার আগে আপনার যা প্রয়োজন
একটি ফলোয়ার আর্ম, একটি লিডার আর্ম , কমপক্ষে একটি ক্যামেরা, একটি ২৪ 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সঠিক এক্সট্রা সহ lerobot ইনস্টল করুন
রেকর্ডিংয়ের জন্য
core_scripts, প্রশিক্ষণের জন্যtraining, Feetech সার্ভোর জন্যfeetechপ্রয়োজন। পাইথন 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 পোর্ট খুঁজুন
উভয় হাত সংযুক্ত রেখে এটি চালান, প্রম্পট করা হলে একটি খুলে ফেলুন। লিনাক্সে আপনার নোড পারমিশন খুলতে হতে পারে।
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ক্যামেরা চালু রেখে একবার টেলিঅপারেট করুন
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 - 650টি পর্ব রেকর্ড করুন
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=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 পর্যন্ত, সাথে একটি শেষ সিমলিঙ্ক। সবগুলি রাখুন: সেরা নীতিটি প্রায়শই শেষটি হয় না।
| সেটিং | lerobot ডিফল্ট | AY-Robots ACT ফর্ম | মন্তব্য |
|---|---|---|---|
| ব্যাচ সাইজ | 8 | 8 | VRAM সীমাবদ্ধতায় পৌঁছালে প্রথমে এটি কমান। |
| লার্নিং রেট | 1e-5 | 1e-5 | ALOHA পেপারের মতোই। |
| সর্বোচ্চ ধাপ | 100000 | 100000 | প্রায় 50 এপিসোডের একটি সেট যেখানে উন্নতি বন্ধ করে। |
| গ্রেডিয়েন্ট অ্যাকুমুলেশন | 1 | 1, does not apply | এর পরিবর্তে ব্যাচ সাইজ পরিবর্তন করুন। |
| সিড | 1000 | exposed | GR00T-এর টাইরো এন্ট্রি পয়েন্টে কোনো সিড নেই; ACT রানগুলি পুনরাবৃত্তিযোগ্য। |
| chunk_size / n_action_steps | 100 / 100 | 100 / 100, editable | পূর্বাভাস এবং এক্সিকিউশন দিগন্ত। দ্বিতীয়টি কমান, প্রথমটি নয়। |
| চেকপয়েন্ট ফ্রিকোয়েন্সি | 20000 | not exposed | এখানে saveSteps একটি GR00T নব। |
8 ব্যাচ সাইজে দুটি 640x480 ক্যামেরা সহ ACT 24 GB-তে স্বাচ্ছন্দ্যে ফিট করে। যখন লোকেরা গতির জন্য ব্যাচ সাইজ বাড়ায়, অথবা একটি lerobot রেকর্ডিং উদাহরণে দেখানো 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 ডকুমেন্টেশন পৃষ্ঠায় এখনও বলা আছে "using the lerobot-record command" সরাসরি একটি ব্লকের উপরে যা lerobot-rollout চালায়। কমান্ডটি অনুসরণ করুন, বাক্যটি নয়।
চূড়ান্ত মডেলের পরিবর্তে একটি চেকপয়েন্ট পিন করতে, যোগ করুন --policy.pretrained_revision। এর জন্য রানটি শুরু হতে হবে --save_checkpoint_to_hub=true, ডিফল্টরূপে বন্ধ: এটি ছাড়া lerobot শুধুমাত্র চূড়ান্ত মডেলটি পুশ করে এবং অন্য কিছু নয়। এটি সহ, প্রতিটি চেকপয়েন্ট তার শূন্য-প্যাড করা ধাপ দিয়ে ট্যাগ করা হয়, তাই --policy.pretrained_revision=060000 60000 ধাপের চেকপয়েন্টটি পুনরুদ্ধার করে। আসল আর্মের উপর 100000 এর সাথে এর তুলনা করা সবচেয়ে সস্তা পরীক্ষা।
একই চেকপয়েন্টে পৌঁছানোর দুটি পথ
উপরের সবকিছুই ম্যানুয়াল পদ্ধতি এবং এটি কাজ করে। প্ল্যাটফর্ম পদ্ধতিটি একটি GPU বা পাইথন পরিবেশের মালিকানা না থাকার বিনিময়ে নিয়ন্ত্রণ ত্যাগ করে।
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 সার্ভার এবং প্রশিক্ষণ ডকুমেন্টেশন-এ বিদ্যমান।
এটি আপনার ডেটা ঠিক করে না: একটি স্থানান্তরিত ক্যামেরা সহ একটি ডেটাসেট এখানে ঠিক ততটাই খারাপভাবে প্রশিক্ষিত হয়, এবং ফর্মটি এটি সনাক্ত করতে পারে না। এটি ল্যাটেন্সি সমস্যাও দূর করে না। কন্ট্রোল লুপ প্রতি অ্যাকশন স্টেপে 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 fps-এ প্রতি 3.3 সেকেন্ডে একটি দৃশ্যমান বিরতি। আরও দুটি বিষয় জানার আছে: একটি একক ডেড জয়েন্ট সাধারণত একটি সার্ভো আইডি যা কখনও লেখা হয়নি, এবং একটি গ্রিপার যা কাছে আসে কিন্তু কখনও বন্ধ হয় না মানে প্রদর্শনীতে গ্রিপার রেঞ্জ খুব কম। সম্পূর্ণ সূচক: ব্যর্থতার মোড পৃষ্ঠাগুলি.
একটি রানের খরচ কত
| স্তর | মডেল | চালানোর সময় | প্রতি ঘণ্টার মূল্য | প্রতি রানের খরচ |
|---|---|---|---|---|
| RTX 4090 / 24 GB | ACT, SmolVLA | ২ থেকে ৫ ঘণ্টা | 0.30 to 0.60 USD | প্রায় ১ থেকে ৩ USD |
| A100 80 GB / H100 | GR00T N1.7, GR00T N1.5, Pi0.5 | ৩ থেকে ৬ ঘণ্টা | 1.20 to 2.00 USD | প্রায় ৪ থেকে ১২ USD |
পরে VLA চাইলেও ACT দিয়ে শুরু করার যুক্তি এটাই। একটি ব্যর্থ ACT রানের খরচ এক কাপ কফির দামের সমান এবং কয়েক ঘণ্টার মধ্যেই আপনাকে জানিয়ে দেয় যে আপনার ডেটাসেটে কাজটি আছে কিনা। একটি ব্যর্থ GR00T রানের খরচ একই শিক্ষার জন্য এর চারগুণ। পরবর্তীতে GR00T N1.7 অথবা SmolVLA এ উন্নীত হওয়া একটি ফর্ম পরিবর্তন, পুনর্নির্মাণ নয়। পটভূমি: ভিশন-ল্যাঙ্গুয়েজ-অ্যাকশন মডেল, সম্পূর্ণ SO-100 গাইড, আপনার প্রথম পলিসি প্রশিক্ষণ দিন এবং ইমিটেশন লার্নিং। কোনো আর্ম নেই? লাইভ পৃষ্ঠা একটি আসল SO-100 স্ট্রিম করে যা সাইন আপ না করেই চালানো যায়।
আপনার SO-100 এ ACT প্রশিক্ষণ দিন
এই নির্দিষ্ট সমন্বয়ের জন্য গাইড: ডিফল্ট, GPU স্তর এবং একটি রানের খরচ। ডেটাসেট নির্বাচন করুন, ব্যাকএন্ড কার্ড ভাড়া করে এবং চেকপয়েন্টগুলি লেখে।
প্রশিক্ষণ গাইড খুলুনএকটি প্রাক-প্রশিক্ষিত ACT মডেল আছে যা আমি ফাইন-টিউন করতে পারি?▾
না। ACT এর কোনো বেস মডেল নেই; এটি শুধুমাত্র আপনি প্রশিক্ষণ দেওয়ার পরেই বিদ্যমান থাকে। এটি টুলিংয়ের কোনো ত্রুটি নয়, ACT এমনই: গবেষণাপত্রটি প্রতিটি কাজের জন্য স্ক্র্যাচ থেকে একটি পলিসি প্রশিক্ষণ দেয়। একটি ভেন্ডর চেকপয়েন্টের জন্য, GR00T N1.7 বা Pi0.5 ব্যবহার করুন।
আমার আসলে কতগুলি এপিসোড দরকার?▾
৫০: ALOHA প্রতি টাস্কে যা রেকর্ড করেছে (থ্রেড ভেলক্রোর জন্য ১০০, যা সবচেয়ে কঠিন) এবং AY-Robots এর সর্বনিম্ন। lerobot প্রতি অবজেক্ট লোকেশনে প্রায় ১০টি এপিসোড, ক্যামেরা স্থির রেখে, গ্রাস্প সামঞ্জস্যপূর্ণ রাখার পরামর্শ দেয়। ক্যামেরা নড়াচড়া করা একশ এপিসোডের চেয়ে পঞ্চাশটি পরিষ্কার এপিসোড ভালো।
আমি কি chunk_size ১০০ থেকে পরিবর্তন করব?▾
সাধারণত না। অ্যাবলেশন k = 1 এ ১ শতাংশ থেকে k = 100 এ ৪৪ শতাংশে উঠে এবং তারপর কমে যায়, তাই ১০০ প্রায় শীর্ষে থাকে। যদি আর্মটি খুব বেশি সময় ধরে কাজ করে, তাহলে n_action_steps কমিয়ে দিন: ৩০ fps এ, প্রতি ০.৮ সেকেন্ডে ২৫টি পুনরায় কোয়েরি।
একটি প্রশিক্ষণ রান কতক্ষণ লাগে, এবং আমি কি এটি তাড়াতাড়ি থামাতে পারি?▾
১০০০০০ স্টেপের জন্য একটি ২৪ GB কার্ডে দুই থেকে পাঁচ ঘণ্টা। চেকপয়েন্টগুলি প্রতি ২০০০০ স্টেপে তৈরি হয় এবং --resume=true একটি রান আবার শুরু করে, তাই তাড়াতাড়ি থামানো নিরাপদ। তবে প্রথম সমতল অংশে নয়: লস স্থিতিশীল হওয়ার পরে মসৃণতা উন্নত হয়।
লস কমে গেছে কিন্তু আর্ম এখনও ব্যর্থ হচ্ছে। এখন কী করব?▾
প্রায় সবসময় ডেটাসেট। আর্ম এ রেকর্ড করা এপিসোডগুলি পুনরায় চালান: যদি রিপ্লে কাজটি না করে, তাহলে ডেটাতে এটি নেই। তারপর পরীক্ষা করুন কিছু নড়েছে কিনা, বিশেষ করে একটি ক্যামেরা। ACT এর কোনো পূর্বধারণা নেই, তাই এপিসোড ২১ এ একটি ধাক্কা স্থায়ী।
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