
একটি SO-100 LeRobot ডেটাসেটে NVIDIA GR00T N1.7 ফাইন-টিউনিংয়ের জন্য একটি পরীক্ষিত ওয়াকথ্রু: বাস্তব ফ্ল্যাগ, modality.json, v2.1 প্রয়োজনীয়তা, একটি রানের খরচ এবং ফাঁদগুলি।
NVIDIA আপনার সম্ভবত মালিকানাধীন হাতের জন্য একটি ফাইন-টিউনিং উদাহরণ সরবরাহ করে। এর ভিতরে Isaac-GR00T রিপোজিটরি একটি ফোল্ডার আছে যার নাম demo_data/cube_to_bowl_5: পাঁচটি পর্ব, 30 fps এ 4,148 ফ্রেম, LeRobot v2.1 হিসাবে ইতিমধ্যেই লেখা হয়েছে, যার সাথে একটি ম্যাচিং মোডালিটি কনফিগ রয়েছে examples/SO100/। এর meta/info.json রিপোর্ট করে robot_type: so101_follower, যা LeRobot এ একই কনফিগ ক্লাস so100_follower। এটি সত্যিই দরকারী, কারণ এর অর্থ হল GR00T N1.7 এর জন্য রেফারেন্স পাথ একটি ছয়-ডিগ্রি-অফ-ফ্রিডম শখের হাতটি মডেলটি যারা লিখেছেন তাদের দ্বারা রক্ষণাবেক্ষণ করা হয়। এটি একটি হিউম্যানয়েড ডেমো স্কেলড ডাউন নয়, এটি একই হাত।
খারাপ খবর হল I recorded 60 episodes এবং the arm does the task এর মধ্যে দূরত্ব। প্রায় ছয়টি জায়গা আছে যেখানে এই পাইপলাইনটি জোরে না হয়ে নীরবে ব্যর্থ হয়, এবং তাদের মধ্যে চারটি এমন ফাইলে থাকে যা বেশিরভাগ লোক কখনও খোলে না: meta/modality.json, পাইথন ডেটা কনফিগ, meta/relative_stats.json, এবং ডেটাসেটের নিজস্ব সংস্করণ স্ট্রিং। এই নির্দেশিকাটি বাস্তব কমান্ড সহ ম্যানুয়াল রুটটি শুরু থেকে শেষ পর্যন্ত দেখায়, তারপর AY-Robots এ একটি ফর্ম হিসাবে একই কাজটি দেখায়। নীচের সবকিছু 20 আগস্ট 2026 (n1.7-রিলিজ লাইন) তারিখের Isaac-GR00T প্রধান শাখার এবং 3 আগস্ট 2026 তারিখে PyPI তে প্রকাশিত lerobot 0.6.1 এর বিরুদ্ধে পরীক্ষা করা হয়েছিল। আপস্ট্রিম দ্রুত চলে, এবং যেখানে একটি ফ্ল্যাগের নাম পরিবর্তন করা হয়েছে সেখানে এই নিবন্ধটি তা উল্লেখ করে।
শুরু করার আগে আপনার যা জানা দরকার
- •GR00T N1.7 ফাইন-টিউনিং এর জন্য 40 GB বা তার বেশি VRAM প্রয়োজন। NVIDIA H100 বা L40 নোড সুপারিশ করে। একটি 24 GB RTX 4090 এই কাজটি করতে পারবে না, যদিও এটি SmolVLA এবং ACT প্রশিক্ষণ দেবে।
- •ডেটাসেটটি অবশ্যই LeRobot v2 (v2.0 বা v2.1) এবং একটি GR00T-নির্দিষ্ট meta/modality.json হতে হবে। একটি LeRobot v3.0 ডেটাসেট লোড হয় না এবং এটিকে ডাউন-কনভার্ট করতে হয়।
- •এন্ট্রি পয়েন্ট হল gr00t/experiment/launch_finetune.py, একটি tyro CLI। এতে কোনো --seed ফ্ল্যাগ নেই, তাই রানগুলি বিট-ফর-বিট পুনরুত্পাদনযোগ্য নয়।
- •একটি কাস্টম হাতের জন্য এমবডিমেন্ট ট্যাগ হল NEW_EMBODIMENT, এবং সেই ট্যাগটি --modality-config-path কে বাধ্যতামূলক করে তোলে।
- •সরবরাহকৃত SO-100 রেসিপি হাতের জয়েন্টগুলিকে RELATIVE ডেল্টা হিসাবে এবং গ্রিপারকে ABSOLUTE টার্গেট হিসাবে ভবিষ্যদ্বাণী করে। এই পেয়ারিংটি উল্টোভাবে করা একটি নীরব ব্যর্থতা, কোনো ত্রুটি নয়।
- •AY-Robots এ একই কাজটি একটি ফর্ম: 20000 স্টেপস, ব্যাচ 32, লার্নিং রেট 1e-4, A100 80 GB বা H100 টায়ারে প্রায় 4 থেকে 12 USD।
GR00T N1.7 আসলে কী
GR00T N1.7 হল একটি দৃষ্টি-ভাষা-ক্রিয়া মডেল যা মূল GR00T N1 পেপার-এ বর্ণিত দ্বৈত-সিস্টেম বিন্যাস সহ: একটি দৃষ্টি-ভাষা মডিউল যা ক্যামেরা এবং নির্দেশাবলী পড়ে, এবং একটি ডিফিউশন ট্রান্সফরমার যা সেগুলিকে অবিচ্ছিন্ন মোটর কমান্ডের একটি খণ্ডে রূপান্তরিত করে। N1.7 প্রথম অর্ধেক প্রতিস্থাপন করেছে। N1.6 থেকে Eagle ব্যাকবোনটি চলে গেছে, এর পরিবর্তে nvidia/Cosmos-Reason2-2B একটি Qwen3-VL আর্কিটেকচারে ব্যবহার করা হয়েছে, এবং মডেলটি রোবট ডেটার উপরে প্রায় 20,000 ঘন্টা ইগোসেন্ট্রিক মানব ভিডিওতে প্রাক-প্রশিক্ষিত ছিল। NVIDIA-এর নিজস্ব লেখায় এই সংখ্যা 20,854 ঘন্টা বলা হয়েছে এবং জানানো হয়েছে যে 1k থেকে 20k ঘন্টায় উন্নীত হলে গড় কাজ সম্পন্ন হওয়ার হার দ্বিগুণেরও বেশি হয়।
দ্বিতীয়ার্ধও পরিবর্তিত হয়েছে, যা আপনার কাজের জন্য গুরুত্বপূর্ণ। অ্যাকশন হেড 32টি ডিফিউশন লেয়ার থেকে 16টিতে নেমে এসেছে, পূর্বাভাসিত অ্যাকশন চাঙ্ক 16টি ধাপ থেকে 40টিতে উন্নীত হয়েছে, এবং সর্বোচ্চ স্টেট ও অ্যাকশন প্রস্থ 29 থেকে 132-এ পৌঁছেছে। এই তিনটি সংখ্যা রিপোজিটরি README-এর চেঞ্জলগ থেকে নেওয়া হয়েছে; NVIDIA-এর নিজস্ব লঞ্চ পোস্টে এখনও সিস্টেম 1-কে একটি 32-স্তর DiT হিসাবে বর্ণনা করা হয়েছে, তাই যেখানে দুটি ভিন্নমত পোষণ করে, সেখানে আপনি যে রিপোটি ক্লোন করতে চলেছেন সেটিকে বিশ্বাস করুন। অ্যাকশনগুলি ডিফল্টরূপে একটি আপেক্ষিক এন্ড-ইফেক্টর স্পেসে প্রকাশ করা হয়, যা বর্তমান পোজ থেকে ডেল্টা, পরম লক্ষ্যগুলির পরিবর্তে, যা মানব ভিডিও থেকে শেখা ম্যানিপুলেশন প্রায়োরগুলিকে রোবট নিয়ন্ত্রণে স্থানান্তরিত করতে দেয়। হেডটি নিজেই একটি ফ্লো-ম্যাচিং ডিফিউশন ট্রান্সফরমার, Pi0.5-এর মতো একই পরিবারভুক্ত কিন্তু এর সামনে একটি ভিন্ন ব্যাকবোন রয়েছে। আপনি যদি এখনও পূর্ববর্তী প্রজন্মে থাকেন, N1.7 বনাম N1.5 আপগ্রেড আপনার পাইপলাইন পুনরায় করার ন্যায্যতা প্রমাণ করে কিনা তা কভার করে।
| বৈশিষ্ট্য | মান | উৎস |
|---|---|---|
| প্যারামিটার | 3,000,000,000 | Hugging Face model card |
| দৃষ্টি-ভাষা ব্যাকবোন | nvidia/Cosmos-Reason2-2B (Qwen3-VL), gated on Hugging Face | repo README |
| অ্যাকশন হেড | Flow-matching diffusion transformer, 16 layers (N1.6 had 32) | repo README |
| পূর্বাভাসিত অ্যাকশন দিগন্ত | 40 steps for the base checkpoint (N1.6 had 16) | getting_started/policy.md and repo README |
| সর্বোচ্চ স্টেট এবং অ্যাকশন প্রস্থ | 132 (N1.6 had 29) | repo README |
| কোড লাইসেন্স | Apache 2.0 | Isaac-GR00T repository |
| ওয়েটস লাইসেন্স | NVIDIA Open Model License Agreement | model card |
| ল্যাটেন্সি, H100 80 GB, PyTorch eager, 4 denoising steps, 1 camera | 85.8 ms end to end, 11.7 Hz | model card timing table |
| একই হার্ডওয়্যার, TensorRT সম্পূর্ণ পাইপলাইন | 27.9 ms end to end, 35.9 Hz | model card timing table |
| AY-Robots তার পরিবেশিত GR00T N1.7-এর জন্য যে ল্যাটেন্সি উল্লেখ করে | 152 ms per action step | AY-Robots policy catalog |
শেষ তিনটি সারিই বেশিরভাগ মানুষের হতাশার কারণ ব্যাখ্যা করে। শিরোনামে উল্লিখিত 27.9 ms হল একটি H100-এ একটি TensorRT ইঞ্জিন, যা একটি ক্যামেরা এবং চারটি ডিনয়েজিং ধাপ সহ। একই কার্ডে সাধারণ PyTorch 85.8 ms, এবং মডেল কার্ডে এই ব্যবধান 3.08x দেখানো হয়েছে। কোনো সংখ্যাতেই একটি সার্ভিং লেয়ার, দ্বিতীয় ক্যামেরা বা একটি নেটওয়ার্ক হপ অন্তর্ভুক্ত নয়। AY-Robots তার পরিবেশিত GR00T N1.7-এর জন্য প্রতি অ্যাকশন ধাপে যে 152 ms উল্লেখ করে, তা হল লুপে সার্ভিং সহ সংখ্যা, এবং এর উপরে একটি পাবলিক-ইন্টারনেট রাউন্ড ট্রিপ থাকে। এই বিষয়ে আরও বিস্তারিত শেষে বলা হয়েছে। অন্যান্য মডেলের পাশের সংখ্যাগুলির জন্য, GR00T N1.7 বনাম Pi0.5 এবং GR00T N1.7 বনাম SmolVLA সেগুলিকে পাশাপাশি উপস্থাপন করে।

আপনি কিছু টাইপ করার আগে রানটির কী প্রয়োজন
| প্রয়োজনীয়তা | ফাইন-টিউনিং | ইনফারেন্স |
|---|---|---|
| VRAM, NVIDIA নির্দেশিকা | 40 GB বা তার বেশি, H100 বা L40 সুপারিশ করা হয় | 16 GB বা তার বেশি, একটি RTX 4090 কাজ করে |
| dGPU-তে Python এবং CUDA | 3.12 and CUDA 12.8 | 3.12 and CUDA 12.8 |
| ভিডিও ব্যাকএন্ড | torchcodec 0.8.0, FFmpeg 4 to 7 only | একই |
| ডেটাসেট ফরম্যাট | LeRobot v2 plus meta/modality.json | প্রযোজ্য নয় |
| Hugging Face অ্যাক্সেস | approved for nvidia/Cosmos-Reason2-2B | একই |
| অন্যান্য টুলিং | git-lfs and uv | uv |
| groot1.7 প্রশিক্ষকের জন্য AY-Robots GPU স্তর | A100 80 GB or H100 80 GB | পড স্বয়ংক্রিয়ভাবে সরবরাহ করা হয় |
প্রতিটি GR00T চেকপয়েন্ট, বেস nvidia/GR00T-N1.7-3B সহ, প্রথম ব্যবহারে nvidia/Cosmos-Reason2-2B লোড করে, এবং সেই রিপোজিটরি গেটেড। README ঠিক এই ব্যর্থতাটি উল্লেখ করে: মডেল লোডিং GatedRepoError / 401 Client Error দিয়ে ব্যর্থ হয়। এটি যা উল্লেখ করে না তা হল কখন এটি ঘটে, যা আপনি কার্ড ভাড়া নেওয়ার এবং রান শুরু হওয়ার পরে। মডেল পৃষ্ঠায় অ্যাক্সেসের অনুরোধ করুন, তারপর কিছু ভাড়া নেওয়ার আগে uv run huggingface-cli login চালান বা HF_TOKEN এক্সপোর্ট করুন।
ধাপ 0: পর্বগুলি নিজেই
নীচের সবকিছুই ধরে নেয় যে আপনার কাছে ইতিমধ্যেই রেকর্ড করা পর্ব রয়েছে। যদি না থাকে, তবে সেটিই আসল প্রথম ধাপ এবং এটিই নির্ধারণ করে যে ফলাফল কতটা ভালো হতে পারে, কারণ অনুকরণ শিক্ষা ডেটাতে নেই এমন তথ্য পুনরুদ্ধার করতে পারে না। প্রথমে উভয় হাত ক্যালিব্রেট করুন, তারপর একটি লিডার আর্ম ব্যবহার করে ফলোয়ারকে চালান যখন lerobot-record পারকেট ফাইল এবং ক্যামেরা স্ট্রিমগুলি লেখে। যদি ক্যালিব্রেশন বন্ধ থাকে, তাহলে আপনার ডেটাসেটের জয়েন্ট ভ্যালুগুলি এমন একটি রোবটকে বর্ণনা করে যা পরবর্তীতে পলিসি কার্যকর করবে তার থেকে সামান্য ভিন্ন, এবং কোনো পরিমাণ প্রশিক্ষণই তা ঠিক করতে পারে না।
lerobot-record \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}" \
--teleop.type=so100_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_leader_arm \
--dataset.repo_id=${HF_USER}/cube-into-bowl \
--dataset.num_episodes=60 \
--dataset.single_task="put the cube in the yellow bowl" \
--display_data=trueLeRobot-এর নিজস্ব পরামর্শ হল প্রতিটি বস্তুর অবস্থানের জন্য প্রায় 10টি করে অন্তত 50টি পর্ব রেকর্ড করা, ক্যামেরা স্থির রাখা এবং গ্রাসপিং আচরণ সামঞ্জস্যপূর্ণ রাখা। বৈচিত্র্য পরে যোগ করুন, শুরুতে নয়। মনে রাখার মতো একটি সাধারণ নিয়ম: যদি আপনি শুধুমাত্র ক্যামেরার ছবি থেকে কাজটি নিজে করতে না পারেন, তবে পলিসিও পারবে না। আর্ম-নির্দিষ্ট সেটআপের জন্য, SO-100 শুরু করা এবং SO-100 LeRobot পৃষ্ঠাটি পোর্ট, ক্যালিব্রেশন এবং ক্যামেরা সূচকগুলি কভার করে। AY-Robots-এ আপনি ব্রাউজার ব্যবহার করে ইন্টারনেটের মাধ্যমেও এটি করতে পারেন টেলিঅপারেশন এবং সরাসরি সেশন থেকে রেকর্ড করতে পারেন।
ধাপ 1: ডেটাসেটটি LeRobot v2.1 হতে হবে
এটি সবচেয়ে সাধারণ বাধা। LeRobot-এর বর্তমান CODEBASE_VERSION মেইনে হল v3.0, তাই বর্তমান টুলচেইন দিয়ে আজ যা কিছু রেকর্ড করবেন তা v3.0 হিসাবে আসবে। GR00T-এর লোডার v2 আশা করে। রিপোজিটরি স্পষ্টভাবে কারণটি ব্যাখ্যা করে: DROID, LIBERO এবং Bridge-এর মতো অনেক আপস্ট্রিম ডেটাসেট v2-এ প্রকাশিত হয়, এবং উভয়ের জন্য নেটিভ সমর্থন পরিকল্পনা করা হয়েছে কিন্তু এখনও সরবরাহ করা হয়নি। তাই রূপান্তরটি আপনার উপর নির্ভর করে, এবং এটি একটি নির্দিষ্ট কারণে নিজস্ব ভার্চুয়ালএনভে চলে: scripts/lerobot_conversion এর নিজস্ব পাইপ্রজেক্ট রয়েছে যা Python 3.10 বা 3.11 চায় এবং lerobot-কে একটি গিট কমিটে পিন করে, যখন Isaac-GR00T নিজেই Python 3.12 প্রয়োজন। রিপোজিটরি রুট থেকে কনভার্টারটি ইনস্টল করুন এবং আপনি gr00t প্যাকেজটি পাবেন, যা এর README সতর্ক করে এমন একটি ভুল। আপনি যদি ফরম্যাটটিতে নতুন হন, তাহলে LeRobot ডেটাসেট গ্লসারি এন্ট্রি ব্যাখ্যা করে যে আসলে এর ভিতরে কী আছে।
# from the Isaac-GR00T repo root
cd scripts/lerobot_conversion
uv venv
source .venv/bin/activate
uv pip install -e . --verbose
# pulls the dataset from the Hub and writes a v2.1 copy into the default cache
python convert_v3_to_v2.py --repo-id <your-hf-user>/<your-dataset>
# or, back in the repo root, keep it next to the SO-100 example
uv run --project scripts/lerobot_conversion \
python scripts/lerobot_conversion/convert_v3_to_v2.py \
--repo-id <your-hf-user>/<your-dataset> \
--root examples/SO100/my_dataset_lerobotযদি v3.0 ডেটাসেটটি স্থানীয়ভাবে ইতিমধ্যেই বিদ্যমান থাকে, তাহলে স্ক্রিপ্টটি এর পাশে v2.1 লেআউট তৈরি করে এবং তারপর অদলবদল করে: আসলটি সংস্করণ সংযুক্ত একটি সহোদর ফোল্ডারে সরানো হয়, <name>_v3.0, এবং রূপান্তরিত কপিটি আসল পথটি নেয়। (স্ক্রিপ্টের নিজস্ব ডকস্ট্রিং সেই ফোল্ডারটিকে _v30 বলে; কোডটি সংস্করণ স্ট্রিং যোগ করে, তাই আপনি আসলে যা পান তা হল _v3.0।) দ্বিতীয় বিস্ময়: আউটপুট সর্বদা <root>/<repo-id> এর অধীনে আসে, তাই --root examples/SO100/my_dataset_lerobot আপনাকে examples/SO100/my_dataset_lerobot/<your-hf-user>/<your-dataset> দেয়, এবং সেই দীর্ঘতর পথটিই --dataset-path পরে চায়। যখন একটি প্রশিক্ষণ কাজ সংস্করণগত কারণে আপনার ডেটাসেট প্রত্যাখ্যান করে, তখন v3 হিসাবে প্রত্যাখ্যাত ডেটাসেট পৃষ্ঠাটি সঠিক লক্ষণগুলি তালিকাভুক্ত করে।
রূপান্তরের পর GR00T যে কাঠামোটি চায় তা হল ক্লাসিক v2 বিন্যাস: meta/info.json, meta/episodes.jsonl, meta/tasks.jsonl, পারকুয়েট ফাইলগুলি এর অধীনে data/chunk-000/, MP4 ফাইলগুলি এর অধীনে videos/chunk-000/observation.images.
ধাপ 2: modality.json, ছয়টি সংখ্যা যা সবকিছু নির্ধারণ করে
একটি LeRobot ডেটাসেটে রোবটের অবস্থা এবং অ্যাকশন ফ্ল্যাট float32 অ্যারে হিসাবে সংরক্ষণ করা হয়। একটি SO-100-এর জন্য উভয়ের আকার হল [6]: পাঁচটি আর্ম জয়েন্ট এবং একটি গ্রিপার। ডেমো ডেটাসেট সেগুলির নাম দিয়েছে shoulder_pan.pos, shoulder_lift.pos, elbow_flex.pos, wrist_flex.pos, wrist_roll.pos, gripper.pos, কিন্তু এই নামগুলি থাকে info.json এবং পারকুয়েট ফাইলে কোনটি কোন সূচক তা বলা নেই। meta/modality.json সেই ম্যাপিং সরবরাহ করে, এবং এটি ছাড়া GR00T প্রশিক্ষণ দেবে না। SO-100-এর জন্য রিপোজিটরি থেকে পাঠানো ফাইলটি এখানে হুবহু দেওয়া হল।
{
"state": {
"single_arm": {
"start": 0,
"end": 5
},
"gripper": {
"start": 5,
"end": 6
}
},
"action": {
"single_arm": {
"start": 0,
"end": 5
},
"gripper": {
"start": 5,
"end": 6
}
},
"video": {
"front": {
"original_key": "observation.images.front"
},
"wrist": {
"original_key": "observation.images.wrist"
}
},
"annotation": {
"human.task_description": {
"original_key": "task_index"
}
}
}আপনার রূপান্তরিত ডেটাসেটে এটি কপি করুন meta/modality.json এবং ভিডিও কীগুলিকে আপনার ক্যামেরাগুলির আসল নাম অনুযায়ী পরিবর্তন করুন। যদি আপনি একটি একক ওভারহেড ক্যামেরা দিয়ে রেকর্ড করে থাকেন যার নাম top, তাহলে original_key হল observation.images.top এবং বন্ধুত্বপূর্ণ নামটি হল আপনার ডেটা কনফিগ যা উল্লেখ করবে। দুটিকেই একমত হতে হবে, এবং তাদের কেউই আপনার জন্য অন্যটিকে পরীক্ষা করে না। ভাষা অ্যানোটেশন আরও খারাপ, কারণ একই কী তিনটি স্থানে উপস্থিত থাকতে হবে।
| স্তর | ফাইল | রেপোতে ব্যবহৃত SO-100 ফর্ম |
|---|---|---|
| পার্কেট কলাম | data/chunk-*/episode_*.parquet | annotation.human.task_description |
| modality.json কী | meta/modality.json, under "annotation", without the annotation. prefix | human.task_description |
| ডেটা কনফিগে modality_keys | your so100_config.py | annotation.human.task_description |
annotation. এর পরের অংশগুলি ডেটাসেটের লেখক দ্বারা নির্বাচিত হয়। SO-100 ডেমো ডেটা annotation.human.task_description ব্যবহার করে; LIBERO এবং SimplerEnv annotation.human.action.task_description ব্যবহার করে। উভয়ই বৈধ। যদি আপনি একটি LIBERO উদাহরণ থেকে একটি কনফিগ কপি করে আপনার নিজের SO-100 রেকর্ডিংয়ের দিকে নির্দেশ করেন, তাহলে ভাষা চ্যানেলটি কিছুতে সমাধান হয় না এবং মডেলটি একটি খালি নির্দেশনার উপর প্রশিক্ষণ নেয়। ক্ষতি এখনও কমে। নীতিটি এখনও কিছু করে। এটি কেবল আপনি যা করতে বলেছিলেন তা উপেক্ষা করে।
ধাপ 3: ডেটা কনফিগ, আপেক্ষিক বাহু এবং পরম গ্রিপার
মডালিটি কনফিগ একটি পাইথন ফাইল, JSON নয়, কারণ এটি প্রতিটি অ্যাকশন গ্রুপ কীভাবে উপস্থাপিত হবে তাও নির্ধারণ করে। এটি N1.7 ওয়ার্কফ্লোর সেই অংশ যা N1.5-এ একই রূপে বিদ্যমান ছিল না এবং এটি দুবার পড়ার মতো একটি অংশ। শিপ করা SO-100 কনফিগ পাঁচটি আর্ম জয়েন্টকে বর্তমান অবস্থা থেকে RELATIVE ডেল্টা হিসাবে এবং গ্রিপারকে একটি ABSOLUTE টার্গেট পজিশন হিসাবে অনুমান করে, কারণ একটি বাইনারি খোলা-বা-বন্ধ সংকেত ডেল্টার চেয়ে টার্গেট হিসাবে ভালো কাজ করে।
from gr00t.configs.data.embodiment_configs import register_modality_config
from gr00t.data.embodiment_tags import EmbodimentTag
from gr00t.data.types import (
ActionConfig, ActionFormat, ActionRepresentation, ActionType, ModalityConfig,
)
so100_config = {
"video": ModalityConfig(
delta_indices=[0], # current frame only
modality_keys=["front", "wrist"], # must match modality.json
),
"state": ModalityConfig(
delta_indices=[0],
modality_keys=["single_arm", "gripper"],
),
"action": ModalityConfig(
delta_indices=list(range(0, 16)), # predict 16 future steps
modality_keys=["single_arm", "gripper"],
action_configs=[
ActionConfig(rep=ActionRepresentation.RELATIVE, # arm joints
type=ActionType.NON_EEF,
format=ActionFormat.DEFAULT),
ActionConfig(rep=ActionRepresentation.ABSOLUTE, # gripper
type=ActionType.NON_EEF,
format=ActionFormat.DEFAULT),
],
),
"language": ModalityConfig(
delta_indices=[0],
modality_keys=["annotation.human.task_description"],
),
}
register_modality_config(so100_config, embodiment_tag=EmbodimentTag.NEW_EMBODIMENT)এখানে দুটি বিস্তারিত বিষয় রয়েছে যা না জানলে আপনার একটি দিন নষ্ট হতে পারে। প্রথমত, action_configs হল পজিশনাল: ডকুমেন্টেশন অনুযায়ী এর দৈর্ঘ্য এবং ক্রম modality_keys এর মতো হতে হবে, এবং ভুল হলে এর পরিণতি সম্পর্কে তারা স্পষ্ট করে বলে যে ভুল উপস্থাপনা নীরবে প্রয়োগ করা হয়। আপনার গ্রিপারকে ডেল্টা হিসাবে এবং আপনার আর্মকে একটি পরম লক্ষ্য হিসাবে প্রশিক্ষণ দেওয়া হয়, এবং কোনো ত্রুটি বার্তা আসে না। দ্বিতীয়ত, register_modality_config নিশ্চিত করে যে ট্যাগটি ইতিমধ্যেই নিবন্ধিত নয়, তাই একই পাইথন প্রক্রিয়ায় দ্বিতীয় NEW_EMBODIMENT কনফিগ Embodiment tag ... already registered বার্তা দিয়ে বন্ধ হয়ে যায়। আপনি একটি স্ক্রিপ্টে এর দুটি আমদানি করতে পারবেন না। তৃতীয় একটি নিয়ম পরে প্রয়োগ করা হয়, ডিপ্লয়মেন্টের সময়: অ্যাকশন delta_indices অবশ্যই শূন্য থেকে শুরু হওয়া একটি সংলগ্ন পরিসর হতে হবে। [0, 4, 8] এর মতো একটি স্পার্স উইন্ডো প্রত্যাখ্যান করা হয়, কারণ ডাউনস্ট্রিমের সবকিছু পূর্বাভাসিত অংশকে রৈখিকভাবে সূচিত করে এবং অন্যথায় ভুল সারিগুলি কার্যকর করবে।
নরম্যালাইজেশন পরিসংখ্যান, বিশেষ করে meta/relative_stats.json, আপনি যখন সেগুলি তৈরি করেছিলেন তখন আপনার থাকা দিগন্তের দৈর্ঘ্যের জন্য গণনা করা হয়। অ্যাকশন দিগন্ত 16 থেকে 8-এ পুনরুৎপাদন না করে ছোট করলে প্রশিক্ষণ IndexError: boolean index did not match indexed array ... dimension is 8 but corresponding boolean dimension is 16 ত্রুটি দিয়ে বন্ধ হয়ে যায়। এর সমাধান একটি কমান্ড: python gr00t/data/stats.py --dataset-path <path> --embodiment-tag NEW_EMBODIMENT --modality-config-path examples/SO100/so100_config.py। delta_indices-এ যেকোনো পরিবর্তনের পরে এটি চালান।
ধাপ ৪: পরিবেশ
N1.7 রিপোজিটরিটিকে এখানে সরিয়ে নিয়েছে এবং Python 3.12-এ। পুরনো কন্ডা এবং pip install -e . পাথটি README-এর একটি সঙ্কুচিত অংশে এখনও বিদ্যমান, তবে এটি সতর্ক করে যে flash-attn এবং TensorRT সহ GPU নির্ভরতাগুলির ম্যানুয়াল ইনস্টলেশনের প্রয়োজন হতে পারে। আপনার যদি নির্দিষ্ট কোনো কারণ না থাকে তবে uv ব্যবহার করুন। flash-attn এর ক্ষেত্রে, একটি বিস্তারিত তথ্য বিভ্রান্তি দূর করে: আপনি দেখবেন Installing flash-attn প্রতিটি uv run-এ প্রিন্ট করা হচ্ছে। এটি পুনরায় তৈরি হচ্ছে না। uv একটি URL-পিন করা হুইলকে পুনরায় যাচাই করছে যা ইতিমধ্যেই ক্যাশে করা আছে এবং এতে দুই বা তিন সেকেন্ড সময় লাগে।
- 1git-lfs ইনস্টল করুন, তারপর সাবমডিউল সহ ক্লোন করুন
git-lfs আবশ্যক, ঐচ্ছিক নয়। এটি ছাড়া demo_data/ এর parquet ফাইলগুলি পয়েন্টার স্টাব হিসাবে ডাউনলোড হবে এবং ফাইল তালিকায় উপস্থিত বলে মনে হওয়া একটি ডেটাসেটে ডেমো রান ব্যর্থ হবে।
bashsudo apt install git-lfs && git lfs install git clone --recurse-submodules https://github.com/NVIDIA/Isaac-GR00T cd Isaac-GR00T - 2uv ইনস্টল করুন এবং পরিবেশ সিঙ্ক করুন
ডিফল্ট ইনস্টলেশন flash-attn এবং TensorRT সহ GPU নির্ভরতাগুলি টেনে আনে। একটি নতুন A100 বা H100 ইমেজে এটি সবচেয়ে দীর্ঘ একক ধাপ, তাই অন্য কিছুতে মনোযোগ দেওয়ার আগে এটি করুন।
bashcurl -LsSf https://astral.sh/uv/install.sh | sh sudo apt-get update && sudo apt-get install -y ffmpeg uv sync --python 3.12 uv run python -c "import gr00t; print('GR00T installed successfully')" - 3Hugging Face-এর বিরুদ্ধে প্রমাণীকরণ করুন
প্রথম ট্রেনিং শুরু করার আগে এটি করুন, আট মিনিট পর ব্যর্থ হওয়ার পরে নয়।
bashuv run huggingface-cli login # or: export HF_TOKEN=<your_token> - 4সরবরাহকৃত SO-100 ডেমো ডেটার উপর স্যানিটি-চেক
আপনার নিজের রেকর্ডিং স্পর্শ করার আগে, demo_data/cube_to_bowl_5-এ 2000 ধাপ চালান। এটি পাঁচটি পর্ব, এটি দ্রুত শেষ হয় এবং এটি আপনার ডেটার পরিবর্তে পরিবেশকে প্রমাণ করে। যদি এই রান ব্যর্থ হয়, আপনার ডেটাসেটের জন্য আপনি যা কিছু করবেন তা সাহায্য করবে না।
bashCUDA_VISIBLE_DEVICES=0 uv run python \ gr00t/experiment/launch_finetune.py \ --base-model-path nvidia/GR00T-N1.7-3B \ --dataset-path demo_data/cube_to_bowl_5 \ --embodiment-tag NEW_EMBODIMENT \ --modality-config-path examples/SO100/so100_config.py \ --num-gpus 1 \ --output-dir /tmp/test_finetune \ --max-steps 2000 \ --global-batch-size 32 \ --dataloader-num-workers 4
FFmpeg 8. torchcodec 0.8.0 শুধুমাত্র FFmpeg 4 থেকে 7 সমর্থন করে, এবং Ubuntu 25.10 এবং পরবর্তী সংস্করণগুলি 8 নম্বর সংস্করণ সরবরাহ করে। ত্রুটিটি হল Could not load libtorchcodec, যা সংস্করণ বিরোধের পরিবর্তে একটি ভাঙা ইনস্টলের মতো মনে হয়। একটি পুরানো রানটাইম ইনস্টল করুন, উদাহরণস্বরূপ conda install -c conda-forge 'ffmpeg<8', এবং এর লাইব্রেরিগুলি LD_LIBRARY_PATH-এ রাখুন। CUDA_HOME সেট করা নেই। ফাইন-টিউনিং সরাসরি ব্যর্থ হয়। একবার bash scripts/deployment/dgpu/install_deps.sh চালান, অথবা শুধু export CUDA_HOME=/usr/local/cuda।
ধাপ 5: ফাইন-টিউন কমান্ড এবং এর ফ্ল্যাগগুলি আসলে কী ডিফল্ট করে
আপনার ডেমো ডেটাসেটটি আপনার নিজের ডেটাসেট দিয়ে প্রতিস্থাপন করুন এবং আপনার প্রয়োজনীয় নিয়ন্ত্রণগুলি যোগ করুন। নীচে রিপোজিটরি তার নিজস্ব নতুন-এমবডিমেন্ট টিউটোরিয়ালে যে সম্পূর্ণ ফর্মটি ব্যবহার করে তা দেওয়া হলো, যার মধ্যে অগমেন্টেশন এবং চেকপয়েন্টিং ফ্ল্যাগগুলিও রয়েছে যা সংক্ষিপ্ত README উদাহরণে বাদ দেওয়া হয়েছে। এটি সংকীর্ণ অর্থে: ল্যাঙ্গুয়েজ ব্যাকবোন এবং ভিজ্যুয়াল এনকোডার স্থির থাকে, এবং যা প্রশিক্ষিত হয় তা হলো প্রোজেক্টর এবং ডিফিউশন অ্যাকশন হেড।
export NUM_GPUS=1
CUDA_VISIBLE_DEVICES=0 uv run python \
gr00t/experiment/launch_finetune.py \
--base-model-path nvidia/GR00T-N1.7-3B \
--dataset-path ./my_dataset_lerobot \
--embodiment-tag NEW_EMBODIMENT \
--modality-config-path examples/SO100/so100_config.py \
--num-gpus $NUM_GPUS \
--output-dir /tmp/so100 \
--save-total-limit 5 \
--save-steps 2000 \
--max-steps 20000 \
--use-wandb \
--global-batch-size 32 \
--color-jitter-params brightness 0.3 contrast 0.4 saturation 0.5 hue 0.08 \
--dataloader-num-workers 4| ফ্ল্যাগ | FinetuneConfig-এ ডিফল্ট | এটি কী করে |
|---|---|---|
| --global-batch-size | 64 | গ্রেডিয়েন্ট অ্যাকুমুলেশনের আগে সমস্ত GPU জুড়ে মোট ব্যাচ। সরবরাহকৃত উদাহরণগুলি 32 ব্যবহার করে। |
| --learning-rate | 1e-4 | একই মান যা AY-Robots তার groot1.7 প্রশিক্ষকের জন্য পাঠায়। |
| --max-steps | 10000 | মোট অপ্টিমাইজার ধাপ। examples/finetune.sh র্যাপারটিও 10000-এ ডিফল্ট করে। |
| --gradient-accumulation-steps | 1 | কার্যকরী ব্যাচকে গুণ করে। 1-এর বেশি মান একটি সতর্কতা জারি করে যা আপনাকে সঞ্চিত আকার সম্পর্কে জানায়। |
| --save-steps and --save-total-limit | 1000 and 5 | চেকপয়েন্ট ফ্রিকোয়েন্সি, এবং কতগুলি রাখা হয়। পুরোনো চেকপয়েন্টগুলি মুছে ফেলা হয়। |
| --weight-decay and --warmup-ratio | 1e-5 and 0.05 | examples/finetune.sh দ্বারাও স্পষ্টভাবে সেট করা হয়েছে। |
| --state-dropout-prob | 0.2 in the CLI, 0.8 in the model config | প্রশিক্ষণের সময় প্রোপ্রিওসেপ্টিভ স্টেট এলোমেলোভাবে বাদ দেয়। আপনার কাজ যদি স্টেটের উপর নির্ভর করে তবে এটি কমিয়ে দিন। |
| --tune-llm and --tune-visual | False and False | ব্যাকবোন ডিফল্টরূপে স্থির থাকে। |
| --tune-projector and --tune-diffusion-model | True and True | প্রোজেক্টর এবং ডিফিউশন অ্যাকশন হেডই আসলে প্রশিক্ষিত হয়। |
| --use-percentiles | True | কাঁচা সর্বনিম্ন এবং সর্বোচ্চের পরিবর্তে q01 এবং q99 দিয়ে স্বাভাবিক করুন। |
| --dataloader-num-workers | 2 | লোডারটি ডিজাইনগতভাবে CPU-ভিত্তিক। উদাহরণগুলি এটিকে 4-এ বাড়ায়। |
| --seed | does not exist | এই CLI-তে কোনো সিড ফ্ল্যাগ নেই। |
শেষ সারিটি কোনো টাইপো নয়। launch_finetune.py একটি ডেটাক্লাস থেকে তৈরি একটি টাইরো CLI, এবং সেই ডেটাক্লাসে কোনো সিড ফিল্ড নেই। README-তে আলাদাভাবে উল্লেখ করা হয়েছে যে নন-ডিটারমিনিস্টিক ইমেজ অগমেন্টেশনের কারণে রানগুলির মধ্যে 5 থেকে 6 শতাংশ ভিন্নতা দেখা যায়। একই ফ্ল্যাগ সহ দুটি রান অভিন্ন চেকপয়েন্ট তৈরি করবে না, যা অত্যন্ত গুরুত্বপূর্ণ যখন আপনি সিদ্ধান্ত নিতে চেষ্টা করছেন যে একটি হাইপারপ্যারামিটার পরিবর্তন সাহায্য করেছে নাকি আপনি ভাগ্যবান ছিলেন। তুলনামূলকভাবে, lerobot-এর নিজস্ব প্রশিক্ষক ডিফল্টরূপে সিড 1000 ব্যবহার করে, এবং LeRobot GR00T রেসিপি স্পষ্টভাবে --seed=42 পাস করে।
ফাইন-টিউনিং eval_strategy="no" সহ চলে, তাই কোনো ভ্যালিডেশন লস কার্ভ থাকে না। আপনি শুধু ট্রেনিং লস পান, আর কিছু নয়। নতুন-এমবডিমেন্ট গাইড আপনাকে --eval-strategy steps --eval-steps 500 দিয়ে এটি চালু করতে বলে, কিন্তু সেই ফ্ল্যাগটি launch_finetune.py-তে নেই: CLIটি টাইরো দ্বারা FinetuneConfig ডেটাক্লাস থেকে তৈরি হয়, এবং eval_strategy, eval_steps এবং eval_batch_size এর পরিবর্তে TrainingConfig-এর ফিল্ড। সেখানে তাদের ডিফল্টগুলি হল "no", 500 এবং 2। সেগুলিতে পৌঁছানোর জন্য, সম্পূর্ণ এন্ট্রি পয়েন্ট gr00t/experiment/launch_train.py ব্যবহার করুন, যেখানে নেস্টেড ফ্ল্যাগটি হল --training.eval-strategy। যাই হোক, শুধুমাত্র একটি হ্রাসমান ট্রেনিং লস জেনারালাইজেশন সম্পর্কে খুব কম তথ্য দেয়, যা লস কমে কিন্তু পলিসি কিছুই করে না-তে বর্ণিত পরিস্থিতির মতোই।
একটি 20000-স্টেপ রানের খরচ কত
GR00T N1.7-এর জন্য একটি 80 GB কার্ড প্রয়োজন, তাই খরচের প্রশ্নটির একটি নির্দিষ্ট উত্তর আছে। AY-Robots-এ groot1.7 প্রশিক্ষক A100 80 GB বা H100 80 GB টিয়ারে চলে, যেখানে একটি রান স্পট মার্কেটে প্রতি ঘন্টায় 1.20 থেকে 2.00 USD খরচে 3 থেকে 6 ঘন্টা সময় নেয়। ডিফল্ট 20000-স্টেপ কাজের জন্য এটি প্রায় 4 থেকে 12 USD। একই কাজ SmolVLA অথবা ACT একটি 24 GB কার্ডে প্রতি ঘন্টায় 0.30 থেকে 0.60 USD এবং প্রতি রানে 1 থেকে 3 USD খরচে চলে। এটাই আসল আপস: GR00T প্রতি প্রচেষ্টায় প্রায় চারগুণ বেশি খরচ করে, এবং আপনি আপনার ডেস্কের নিচে থাকা 4090-তে এটি চালাতে পারবেন না।
| মডেল | GPU স্তর | সাধারণ রান | সাধারণ খরচ | সর্বনিম্ন পর্ব |
|---|---|---|---|---|
| GR00T N1.7 | A100 80 GB or H100 80 GB | 3 to 6 hours | 4 to 12 USD | 50 |
| GR00T N1.5 | A100 80 GB or H100 80 GB | 3 to 6 hours | 4 to 12 USD | 50 |
| Pi0.5 | A100 80 GB or H100 80 GB | 3 to 6 hours | 4 to 12 USD | 50 |
| SmolVLA | RTX 4090 or any 24 GB card | 2 to 5 hours | 1 to 3 USD | 30 |
| ACT | RTX 4090 or any 24 GB card | 2 to 5 hours | 1 to 3 USD | 50 |
৫০-পর্ব সর্বনিম্ন একটি ভিত্তি, লক্ষ্য নয়। NVIDIA-এর নিজস্ব FAQ আরও বেশি দাবি করে: একটি সাধারণ নির্দিষ্ট-অবস্থানের পিক অ্যান্ড প্লেসের জন্য প্রায় ১০০টি ট্র্যাজেক্টরি, জটিল বা বহু-ধাপের দৃশ্যের জন্য ৫০০ বা তার বেশি, এবং সূক্ষ্ম ম্যানিপুলেশনের জন্য ১০০ থেকে ৫০০। যদি আপনার ২০টি পর্ব থাকে, তবে সন্ধ্যায় টিউনিং করার পরিবর্তে বিকেলে রেকর্ডিং করুন। ডেটা সংগ্রহের নির্দেশিকা একটি দরকারী পর্বকে একটি নষ্ট পর্ব থেকে কী আলাদা করে তা কভার করে, আপনার প্রথম ডেটাসেট রেকর্ড করুন হল সংক্ষিপ্ত সংস্করণ, এবং SO-100 ডেটা সংগ্রহ হল আর্ম-নির্দিষ্ট সংস্করণ।

Step 6: আর্ম স্পর্শ করার আগে ওপেন-লুপ মূল্যায়ন
একটি নতুন চেকপয়েন্ট একটি ফিজিক্যাল আর্মের উপর রাখবেন না এটা জানতে যে ট্রেনিং কাজ করেছে কিনা। প্রথমে ওপেন-লুপ ইভালুয়েশন চালান। এটি একটি রেকর্ড করা এপিসোড পুনরায় চালায়, প্রতিটি ধাপে মডেলকে অ্যাকশনের জন্য জিজ্ঞাসা করে এবং MSE ও MAE সহ গ্রাউন্ড ট্রুথের বিপরীতে ভবিষ্যদ্বাণী প্লট করে। এতে কোনো খরচ হয় না এবং এটি ধাপ 2 ও 3 থেকে আসা ম্যাপিং ভুলগুলো ধরে ফেলে।
uv run python gr00t/eval/open_loop_eval.py \
--dataset-path ./my_dataset_lerobot \
--embodiment-tag NEW_EMBODIMENT \
--model-path /tmp/so100/checkpoint-20000 \
--traj-ids 0 \
--execution-horizon 16 \
--steps 400 \
--modality-keys single_arm gripperরিপোজিটরি ইচ্ছাকৃতভাবে কাস্টম ডেটার জন্য একটি টার্গেট MSE প্রকাশ করতে অস্বীকার করে, এবং এটি সঠিক সিদ্ধান্ত: সংখ্যাটি আপনার অ্যাকশন ইউনিট, আপনার কাজ এবং আপনার ডেটাসেটের আকারের উপর নির্ভর করে, তাই অন্যের আর্ম থেকে কপি করা একটি থ্রেশহোল্ডের কোনো অর্থ নেই। যা অর্থপূর্ণ তা হলো প্রবণতা। এখানে রেফারেন্স রানটি রয়েছে যা রিপো একক H100-এ পাঁচটি এপিসোডের ডেমো ডেটাসেট এবং 2000 ধাপ সহ নথিভুক্ত করে।
| চেকপয়েন্ট | traj 0-এ গড় MSE | traj 0-এ গড় MAE |
|---|---|---|
| 500 | 87.5 | 5.63 |
| 1000 | 25.4 | 3.30 |
| 1500 | 13.2 | 2.18 |
| 2000 | 10.0 | 1.76 |
আকৃতিই সংকেত, পরম মান নয়। ত্রুটি ক্রমাগত কমতে থাকা উচিত যখন প্রশিক্ষণ ধাপ জমা হয়। শুধুমাত্র ট্র্যাজেক্টরি 0 এর পরিবর্তে পাঁচটি প্রশিক্ষণ পর্বের গড় করলে, রেপোর চূড়ান্ত চেকপয়েন্ট প্রায় 7.5 MSE এবং 1.5 MAE স্কোর করেছে, তাই এমনকি রেফারেন্স রানও আপনি কোন পর্বগুলির গড় করছেন তার উপর নির্ভর করে ভিন্নভাবে পড়ে। আপনার নিজের ডেটা সম্পর্কে কিছু পরিবর্তন করার আগে অপরিবর্তিত ডেমো কমান্ডে আপনার নিজস্ব বেসলাইন রেকর্ড করুন: যদি আপনি একটি পরিচিত-ভালো রান পুনরুত্পাদন করতে না পারেন, তাহলে আপনি একটি সেটআপ ভুলকে ডেটা সমস্যা থেকে আলাদা করতে পারবেন না। রিপোজিটরি সাধারণ লক্ষণগুলিকে কারণগুলির সাথে ম্যাপ করে, এবং সেগুলির প্রতিটিই মডেলের ত্রুটির পরিবর্তে অপারেশনাল।
| লক্ষণ | সম্ভাব্য কারণ |
|---|---|
| চেকপয়েন্ট জুড়ে MSE সমতল বা বাড়ছে | লার্নিং রেট খুব কম, অথবা ডেটা লোড হচ্ছে না। --dataset-path এবং ডেটা লোডার কর্মী পরীক্ষা করুন। |
| পূর্বাভাস বক্ররেখা সমতল বা স্থির | modality.json কী বা --modality-config-path মেলে না। অ্যাকশন কীগুলি ম্যাপ করা হয়নি। |
| MSE বিশাল, অথবা প্রশিক্ষণের সময় NaN লস | অ্যাকশন এবং স্টেট নরমালাইজেশন। meta/stats এবং অ্যাকশন রেঞ্জগুলি শারীরিকভাবে বিশ্বাসযোগ্য কিনা তা যাচাই করুন। |
| ট্র্যাজেক্টরি 0 এ ভালো, কিন্তু ধরে রাখা পর্বগুলিতে খারাপ | ডেটার অভাব, কোনো বাগ নয়। পাঁচটি ডেমো পর্ব সাধারণীকরণ করতে পারে না। |
অন্য পথ: Isaac-GR00T এর পরিবর্তে lerobot-train
বর্তমান LeRobot রিলিজ, 3 আগস্ট 2026 থেকে PyPI-তে 0.6.1, একই বেস ওজন ফাইন-টিউন করার জন্য একটি দ্বিতীয় এবং বেশ ভিন্ন উপায় সরবরাহ করে। LeRobot GR00T N1.7 কে একটি পলিসি টাইপ হিসাবে প্রকাশ করে এবং এর নিজস্ব lerobot-train এন্ট্রি পয়েন্টের মাধ্যমে এটিকে প্রশিক্ষণ দেয়। এখানে দুটি বিষয় গুরুত্বপূর্ণ। LeRobot CLI হল কনসোল স্ক্রিপ্টগুলির একটি সেট, তাই আপনি যা পড়েন যে python lerobot/scripts/train.py তা পুরনো এবং চলবে না। এবং LeRobot সম্পূর্ণরূপে GR00T N1.5 সমর্থন সরিয়ে দিয়েছে, একটি মাইগ্রেশন নোট সহ N1.5 চেকপয়েন্ট এবং কনফিগারেশন প্রত্যাখ্যান করেছে, তাই যদি আপনার LeRobot এর মাধ্যমে N1.5 প্রয়োজন হয় তবে আপনাকে lerobot==0.5.1 পিন করতে হবে, এটি সমর্থনকারী শেষ রিলিজ, যা 7 এপ্রিল 2026 এ প্রকাশিত হয়েছিল।
pip install "lerobot[groot]" "lerobot[training]"
hf auth login
lerobot-train \
--dataset.repo_id=$HF_USER/$DATASET_NAME \
--dataset.image_transforms.enable=true \
--policy.type=groot \
--policy.device=cuda \
--policy.base_model_path=nvidia/GR00T-N1.7-3B \
--policy.embodiment_tag=new_embodiment \
--policy.chunk_size=16 \
--policy.n_action_steps=16 \
--policy.use_relative_actions=true \
--policy.relative_exclude_joints='["gripper"]' \
--policy.use_bf16=true \
--seed=42 \
--batch_size=64 \
--steps=20000 \
--save_freq=5000 \
--output_dir=$OUTPUT_DIR| দিক | Isaac-GR00T launch_finetune.py | lerobot-train --policy.type=groot |
|---|---|---|
| ডেটা সেট সংস্করণ | শুধুমাত্র LeRobot v2, রূপান্তর প্রয়োজন | নেটিভ LeRobot ডেটা সেট, কোনো ডাউনগ্রেড নেই |
| মোডালিটি ম্যাপিং | meta/modality.json এবং একটি পাইথন ডেটা কনফিগ | কোনো modality.json নেই; কমান্ড লাইনে --policy.* ফ্ল্যাগ দ্বারা আচরণ সেট করা হয় |
| সিড | কোনো সিড ফ্ল্যাগ নেই | --seed, LeRobot ডিফল্ট 1000 |
| আপেক্ষিক ক্রিয়া | ডেটা কনফিগে প্রতি-কী ActionConfig | --policy.use_relative_actions এবং --policy.relative_exclude_joints |
| প্রকাশিত রেফারেন্স ফলাফল | ডেমো ডেটাতে SO-100 ওপেন-লুপ MSE প্রবণতা | LIBERO স্যুট, চারটি স্যুটে 96.5 শতাংশ গড় |
| ডিপ্লয়মেন্ট পাথ | ZMQ এর উপর run_gr00t_server.py এবং eval_so100.py | lerobot-rollout, রিয়েল-টাইম চাঙ্কিং সহ (queue_threshold 5 বা তার নিচে থাকা উচিত) |
- প্রতিটি ফ্ল্যাগ দৃশ্যমান এবং পরিবর্তনযোগ্য। আপনি ভিজ্যুয়াল এনকোডারকে আনফ্রিজ করতে পারেন, state_dropout_prob সরাতে পারেন, অথবা অ্যাকশন হরাইজন ছোট করতে পারেন।
- ওপেন-লুপ প্লটগুলি স্থানীয় ফাইল। checkpoint-5000 কে checkpoint-20000 এর সাথে ডিফার করা একটি শেল কমান্ড।
- আপনি কোনো প্ল্যাটফর্মের অনলাইন থাকার উপর নির্ভরশীল নন, এবং চেকপয়েন্ট আপনার ডিস্কে একটি স্ট্যান্ডার্ড ফরম্যাটে থাকে।
- LIBERO, SimplerEnv এবং DROID এর জন্য রেপোর বেঞ্চমার্ক উদাহরণগুলি আপনাকে আপনার নিজের ডেটা বিশ্বাস করার আগে পুনরুৎপাদন করার জন্য পরিচিত-ভালো রান দেয়।
- পরিবেশই বেশিরভাগ কাজ। FFmpeg সংস্করণ, CUDA_HOME, git-lfs, গেটেড ব্যাকবোন, torchcodec: এর কোনোটিই মডেলের সমস্যা নয় এবং এর প্রতিটিই রান বন্ধ করে দেয়।
- v3.0 থেকে v2.1 রূপান্তরের জন্য নিজস্ব ইনস্টল ধাপ সহ একটি পৃথক ভার্চুয়ালএনভ প্রয়োজন, এবং এটি আপনার ডেটা সেট ডিরেক্টরিকে ইন-প্লেস রিরাইট করে।
- GPU ভাড়া বিলিং শুরু হয় যখন আপনি ডিবাগিং শুরু করেন, প্রশিক্ষণ শুরু হলে নয়, এবং রান শেষ হলে কোনো কিছুই ইনস্ট্যান্স বন্ধ করে না।
- কোনো সিড না থাকার অর্থ বিট-ফর-বিট পুনরুৎপাদনযোগ্যতা নেই, শুধুমাত্র অগমেন্টেশন থেকে 5 থেকে 6 শতাংশ রান-টু-রান ভিন্নতা ছাড়াও।
একই চেকপয়েন্ট পাওয়ার দুটি উপায়
আপনি GPU ভাড়া করেন এবং প্রতিটি ধাপের মালিকানা আপনার। বাস্তবসম্মতভাবে, প্রথমবার এটি করতে একটি বিকেল লাগতে পারে এবং এরপর প্রতিবার বিশ মিনিট।
- SO-100-এ lerobot-record ব্যবহার করে পর্বগুলি রেকর্ড করুন। আপনি একটি LeRobot v3.0 ডেটাসেট পাবেন।
- scripts/lerobot_conversion/convert_v3_to_v2.py ব্যবহার করে এটিকে v2.1-এ রূপান্তর করুন, নিজস্ব ভার্চুয়ালএনভি-তে।
- meta/modality.json এবং একটি পাইথন মোডালিটি কনফিগ লিখুন, যা EmbodimentTag.NEW_EMBODIMENT-এর অধীনে নিবন্ধিত।
- একটি 80 GB কার্ড ভাড়া করুন, সাবমডিউল সহ ক্লোন করুন, uv sync করুন, Hugging Face-এর সাথে প্রমাণীকরণ করুন।
- launch_finetune.py চালান, তারপর কয়েকটি চেকপয়েন্টে open_loop_eval.py চালান এবং হার্ডওয়্যার স্পর্শ করার আগে MSE প্রবণতা তুলনা করুন।
- ইনস্ট্যান্স ধ্বংস করার আগে মেশিন থেকে চেকপয়েন্টটি সরিয়ে নিন, তারপর আর্মের জন্য সার্ভিং পাথ তৈরি করুন।
ভাড়া করা ইনস্ট্যান্সটি বন্ধ করার আগে সেখান থেকে চেকপয়েন্টটি কপি করে নিন। --save-total-limit 5 এর অর্থ হল প্রশিক্ষণ চলার সাথে সাথে পুরনো চেকপয়েন্টগুলি মুছে ফেলা হয়, তাই 5000 ধাপে আপনি যে চেকপয়েন্টটি চেয়েছিলেন, সেটি 20000 ধাপে আর নাও থাকতে পারে।
ফর্মের মতো একই কাজ। আপনি মডেল এবং ডেটাসেট নির্বাচন করেন, ব্যাকএন্ড প্রয়োজনীয় VRAM অনুযায়ী স্পট মার্কেটে একটি GPU ভাড়া করে, প্রশিক্ষক চালায় এবং চেকপয়েন্টগুলি অবজেক্ট স্টোরেজে লেখে। SO-100 গাইড-এ GR00T N1.7 এই সঠিক সংমিশ্রণ; প্রশিক্ষণ ম্যাট্রিক্স অন্যান্য সমস্ত মডেল এবং আর্ম পেয়ারিং রয়েছে, যার মধ্যে রয়েছে SO-101-এ GR00T N1.7।
| groot1.7 প্রশিক্ষক যা পাঠায় | মান |
|---|---|
| Batch size | 32 |
| Learning rate | 1e-4 |
| Max steps | 20000 |
| Gradient accumulation | 1, এবং এটি এই প্রশিক্ষকের জন্য কার্যকর হয় |
| Extra knob exposed in the form | saveSteps |
| Base checkpoint | nvidia/GR00T-N1.7-3B |
| Accepted dataset format | LeRobot v2.0 or v2.1 |
ডেটাসেট একটি Hugging Face রেপো আইডি থেকে, আপনার নিজের মেশিন থেকে, অথবা আপনি ডেস্কটপ ক্লায়েন্ট দিয়ে রেকর্ড করা একটি সেশন থেকে আসতে পারে। ইনফারেন্স একটি আলাদা ধাপ: প্ল্যাটফর্ম একটি পড সরবরাহ করে যা নীতিটি পরিবেশন করে, এবং আপনার স্থানীয় রোবট ক্লায়েন্ট সেই এন্ডপয়েন্টের সাথে কথা বলে। পডগুলি একটি নিষ্ক্রিয় ওয়াচডগ বহন করে এবং একটি নিষ্ক্রিয় সময়ের পরে নিজেদের ধ্বংস করে, তাই একটি ভুলে যাওয়া ব্রাউজার ট্যাব রাতারাতি বিল তৈরি করে না। আপনি যদি ক্লিক করতে না চান, তবে একই অপারেশনগুলি CLI এবং MCP সার্ভার-এ বিদ্যমান।
এখানে GR00T N1.7 এবং Pi0.5 শুধুমাত্র ক্লাউড-ভিত্তিক; শুধুমাত্র SmolVLA এবং ACT স্থানীয়ভাবেও চলে। v2.1 এর প্রয়োজনীয়তাও দূর হয় না, কারণ GR00T লোডার এটি গ্রহণ করার আগে একটি v3.0 ডেটাসেটকে এখনও রূপান্তর করতে হবে। এবং আপনার জন্য modality.json সেম্যান্টিক্স কেউ লেখে না: যদি আপনার ক্যামেরা কী বা আপনার ভাষার কী ভুল হয়, তবে উভয় রুটেই সেগুলি ভুল হবে। ব্যাকএন্ড আপনার পক্ষে কী করে এবং কী করে না তা জানতে প্রশিক্ষণ ডকুমেন্টেশন দেখুন।

চেকপয়েন্টটি আবার বাহুতে ফিরিয়ে আনা
Isaac-GR00T ZMQ-এর মাধ্যমে একটি সার্ভার-ক্লায়েন্ট বিভাজন ব্যবহার করে। নীতিটি GPU-তে চলে, এবং রোবট মেশিনে একটি পাতলা ক্লায়েন্ট পর্যবেক্ষণ পাঠায় এবং অ্যাকশন চাঙ্ক গ্রহণ করে। SO-100 উদাহরণটি অনুলিপি করার জন্য যথেষ্ট সম্পূর্ণ: শুরু করুন run_gr00t_server.py আপনার চেকপয়েন্ট এবং --embodiment-tag NEW_EMBODIMENT, তারপর চালান eval_so100.py রোবটের দিকে সিরিয়াল পোর্ট, রোবট আইডি, ক্যামেরা সূচক এবং ভাষার নির্দেশাবলী সহ। সেই কমান্ডের ক্যামেরার নামগুলি আপনার modality.json থেকে বন্ধুত্বপূর্ণ নামের সাথে মিলতে হবে, OS ডিভাইস নম্বরের সাথে নয়।
# GPU side
uv run python gr00t/eval/run_gr00t_server.py \
--model-path /tmp/so100/checkpoint-20000 \
--embodiment-tag NEW_EMBODIMENT \
--device cuda:0 \
--host 0.0.0.0 --port 5555
# robot side, from gr00t/eval/real_robot/SO100
uv run --no-sync python eval_so100.py \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM2 \
--robot.id=orange_follower \
--robot.cameras="{ front: {type: opencv, index_or_path: 6, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}" \
--policy_host=localhost --policy_port=5555 \
--lang_instruction="put the cube in the yellow bowl"যখন আপনি আর্মটি পুনরায় তারের সাথে সংযুক্ত করছেন: SO-100 7.4 V রেলে Feetech STS3215 বাস সার্ভো ব্যবহার করে। তাদেরকে 12 V সরবরাহ করলে তারা নষ্ট হয়ে যায়, এবং এটি একটি সহজ ভুল হতে পারে যদি আপনার কাছে একটি LeKiwi থাকে, যার বেস 12 V-এ চলে কিন্তু তার আর্ম চলে না। প্রথমবার চালু করার আগে সরবরাহ পরীক্ষা করুন, ধোঁয়া বেরোনোর পরে নয়। দেখুন SO-100 হার্ডওয়্যার পৃষ্ঠা এবং LeKiwi-এর বিরুদ্ধে SO-100। যদি আর্ম চালু হয় কিন্তু কিছু না নড়ে, তাহলে সার্ভো সাড়া দিচ্ছে না এখান থেকে শুরু করতে হবে।
নীতিটি কোথায় চলে সে সম্পর্কে এখন আসল কথা, কারণ প্রশিক্ষণ এবং পরিবেশনের জন্য ভিন্ন হার্ডওয়্যার প্রয়োজন। ফাইন-টিউনিংয়ের জন্য 40 GB বা তার বেশি প্রয়োজন। ইনফারেন্সের জন্য তা নয়: README-তে 16 GB বা তার বেশি উল্লেখ করা হয়েছে এবং RTX 4090 স্পষ্টভাবে উল্লেখ করা হয়েছে, তাই আপনার কাছে থাকা একটি কার্ড এমন একটি চেকপয়েন্ট পরিবেশন করতে পারে যা এটি তৈরি করতে পারত না। নীতিটি প্রতিক্রিয়াশীল মনে হয় কিনা তা VRAM দ্বারা নির্ধারিত হয় না, এটি সার্ভারটি কোথায় অবস্থিত তার উপর নির্ভর করে। AY-Robots-এ GR00T N1.7 শুধুমাত্র ক্লাউড-ভিত্তিক, তাই নিয়ন্ত্রণ লুপটি প্রতি অ্যাকশন স্টেপে 152 ms-এর উপরে একটি পাবলিক-ইন্টারনেট রাউন্ড ট্রিপ খরচ করে, এবং শুধুমাত্র SmolVLA এবং ACT স্থানীয়ভাবেও চলে। ধীর পিক অ্যান্ড প্লেসের জন্য একটি রিমোট পড টিকে থাকতে পারে। প্রতিক্রিয়াশীল কিছুর জন্য এটি সম্ভব নয়: নীতিটি এমনভাবে দ্বিধাগ্রস্ত হয়ে পড়ে যা দেখতে ঠিক একটি প্রশিক্ষণ ব্যর্থতার মতো কিন্তু তা নয়। প্রতি অ্যাকশন স্টেপে 20 ms-এ ACT হল সেই মডেল যা সবচেয়ে টাইট লুপ সহ্য করে, SmolVLA 245 ms-এ থাকে, এবং কোনো পরিমাণ ল্যাটেন্সি টিউনিং ইতিমধ্যে ব্যয় করা একটি রাউন্ড ট্রিপ ফিরিয়ে আনতে পারে না। আপনার প্রথম নীতি চালান পরিবেশন দিকটি শুরু থেকে শেষ পর্যন্ত দেখায়।
আসলে কী ভুল হয়
- প্রথম রানে GatedRepoError। আপনাকে nvidia/Cosmos-Reason2-2B-এ অ্যাক্সেস দেওয়া হয়নি, অথবা আপনি প্রমাণীকরণ করেননি। GPU ঘড়ি চালু হওয়ার পরেই এটি ঘটে।
- লোড করার সময় ডেটাসেট প্রত্যাখ্যান করা হয়েছে। প্রায় সবসময় একটি v3.0 ডেটাসেট। এটিকে ডাউনগ্রেড করুন। দেখুন v3 হিসাবে ডেটাসেট প্রত্যাখ্যান করা হয়েছে।
- বেমানান বুলিয়ান ডাইমেনশন সম্পর্কে IndexError। আপনি delta_indices পরিবর্তন করেছেন এবং পরিসংখ্যান পুনরায় তৈরি করেননি।
- ব্যাচ 32-এ মেমরি শেষ। --global-batch-size কমান এবং --gradient-accumulation-steps বাড়ান, অথবা --num-shards-per-epoch কমান, যা VRAM সীমিত হলে কনফিগ স্পষ্টভাবে সুপারিশ করে। দেখুন প্রশিক্ষণের সময় মেমরি শেষ।
- লস কমে যায়, পলিসি কিছুই করে না। ডিফল্টরূপে কোনো ভ্যালিডেশন স্প্লিট নেই, তাই একটি পরিষ্কার প্রশিক্ষণ কার্ভ খুব কমই প্রমাণ করে। এই পৃষ্ঠাটি রোগ নির্ণয় কভার করে।
- আপনার সেটআপে কাজ করে এবং অন্য কোথাও নয়। একটি ছোট ডেটাসেট যা একটি আলোক পরিস্থিতিতে ধারণ করা হয়েছে তার সাথে এটি প্রত্যাশিত। NVIDIA রঙ জিটার অগমেন্টেশন এবং বিভিন্ন আলোতে 20 থেকে 50টি এপিসোড সুপারিশ করে। এখানে আরও দেখুন।
- গ্রিপার কখনোই সঠিকভাবে বন্ধ হয় না। action_configs-এ গ্রিপার অ্যাকশন ABSOLUTE এবং আর্ম জয়েন্ট RELATIVE, এই ক্রমে আছে কিনা তা পরীক্ষা করুন। গ্রিপার বন্ধ হয় না অন্যান্য কারণগুলি তালিকাভুক্ত করে।
- রেকর্ডিংয়ের মাঝখানে একটি ক্যামেরা নীরবে বন্ধ হয়ে যায়। এপিসোডটি এখনও সেভ হয় এবং ভিডিও কী এখনও বিদ্যমান থাকে, যে কারণে এটি একটি খারাপ সমস্যা। ক্যামেরা সনাক্ত করা যায়নি এটি কভার করে।
ব্যর্থতার মোডগুলির সম্পূর্ণ সূচী এখানে রয়েছে । আপনি যদি একটি মডেল ডিবাগ করার পরিবর্তে মডেলগুলির মধ্যে নির্বাচন করেন, তাহলে এবং এর সাথে সংযুক্ত উৎস সহ বেঞ্চমার্ক সংখ্যা রয়েছে, এবং হল সেই তুলনা যা বেশিরভাগ মানুষের আসলে প্রয়োজন, কারণ এটি এমন একটি মডেলের মধ্যে নির্বাচন যা আপনি আপনার ডেস্কের নিচে থাকা কার্ডে প্রশিক্ষণ দিতে পারেন এবং এমন একটি মডেল যা ফাইন-টিউন করার জন্য আপনাকে একটি 80 GB নোড ভাড়া নিতে হবে। এই মডেলগুলি কেন এমন আচরণ করে তার পটভূমি জানতে, এবং প্রথমে পড়া উচিত। এবং যদি আপনার এখনও একটি আর্ম না থাকে, কোনো সাইনআপ ছাড়াই একটি ফিজিক্যাল SO-100 স্ট্রিম করে।
GR00T N1.7 ফাইন-টিউন করার আগে আমার কতগুলি এপিসোড প্রয়োজন?▾
AY-Robots groot1.7 প্রশিক্ষকের জন্য 50টি এপিসোডের একটি কঠিন সীমা নির্ধারণ করে। NVIDIA-এর নিজস্ব FAQ আরও বেশি দাবি করে: একটি নির্দিষ্ট স্থানে একটি সাধারণ পিক অ্যান্ড প্লেসের জন্য প্রায় 100টি ট্র্যাজেক্টরি, জটিল বা বহু-ধাপের দৃশ্যের জন্য 500 বা তার বেশি, এবং সূক্ষ্ম ম্যানিপুলেশনের জন্য 100 থেকে 500টি। 50-এর নিচে থাকলে আপনি হাইপারপ্যারামিটার টিউন করার চেয়ে আরও বেশি ডেটা রেকর্ড করলে প্রায় সবসময়ই ভালো ফল পাবেন। যদি এর পরে সাফল্য স্থিতিশীল হয়, NVIDIA HG-DAgger সুপারিশ করে: পলিসি চালান, যখন এটি ব্যর্থ হয় তখন হস্তক্ষেপ করুন এবং সেই সংশোধনগুলি ডেটাসেটে যোগ করুন।
আমার ডেটাসেট লোড হতে ব্যর্থ হয় কেন, এবং আমি কিভাবে বুঝব এটি কোন সংস্করণ?▾
meta/info.json খুলুন এবং codebase_version পড়ুন। main-এ LeRobot-এর বর্তমান CODEBASE_VERSION হল v3.0, তাই সাম্প্রতিক টুলচেইন দিয়ে রেকর্ড করা যেকোনো কিছু v3.0, এবং GR00T লোডার v2 আশা করে। Isaac-GR00T রেপো থেকে scripts/lerobot_conversion/convert_v3_to_v2.py দিয়ে রূপান্তর করুন, যা রূপান্তরিত ডেটাসেটে codebase_version: v2.1 লেখে। স্ক্রিপ্টটি তার নিজস্ব ভার্চুয়ালএনভি-তে চলে কারণ এটির GR00T পিনগুলির চেয়ে ভিন্ন lerobot সংস্করণ প্রয়োজন।
আমি কি একটি RTX 4090-এ GR00T N1.7 ফাইন-টিউন করতে পারি?▾
না। NVIDIA ফাইন-টিউনিংয়ের জন্য 40 GB বা তার বেশি VRAM সুপারিশ করে এবং H100 বা L40 নোডের নাম উল্লেখ করে; অন্যান্য কার্ড কাজ করে তবে অনেক বেশি সময় নেয়। একটি 4090-এর 24 GB আছে। AY-Robots একই কারণে শুধুমাত্র A100 80 GB এবং H100 80 GB স্তরে GR00T N1.7 অফার করে। ইনফারেন্স একটি ভিন্ন গল্প: মডেলটি পরিবেশন করার জন্য 16 GB যথেষ্ট, তাই একটি 4090 এমন একটি পলিসি চালাতে পারে যা এটি প্রশিক্ষণ দিতে পারে না। আপনি যদি একটি VLA চান যা আপনি 24 GB-তে প্রশিক্ষণ দিতে পারেন, তাহলে সেটি হল প্রায় 450 M প্যারামিটার সহ SmolVLA অথবা প্রায় 80 M প্যারামিটার সহ ACT।
কেন একই ফ্ল্যাগ সহ দুটি রান ভিন্ন চেকপয়েন্ট দেয়?▾
কারণ launch_finetune.py-এর কোনো সিড নেই। এটি একটি ডেটাক্লাস থেকে তৈরি একটি টাইরো CLI যা কোনো সিড ফিল্ড ধারণ করে না, তাই কিছুই RNG পিন করে না। রেপো আলাদাভাবে উল্লেখ করে যে নন-ডিটারমিনিস্টিক ইমেজ অগমেন্টেশনের কারণে রানগুলির মধ্যে 5 থেকে 6 শতাংশ ভিন্নতা দেখা যায়। যদি পুনরুৎপাদনযোগ্যতা গুরুত্বপূর্ণ হয়, তাহলে পরিবর্তে LeRobot রুট ব্যবহার করুন: lerobot-train --seed নেয় এবং প্রকাশিত GR00T রেসিপি --seed=42 পাস করে।
আমার কি Isaac-GR00T নাকি lerobot-train ব্যবহার করা উচিত?▾
আপনি যদি রেফারেন্স ইমপ্লিমেন্টেশন, অ্যাকশন রিপ্রেজেন্টেশনের উপর প্রতি-কী নিয়ন্ত্রণ, TensorRT এক্সপোর্ট, অথবা আপনার নিজের ডেটা বিশ্বাস করার আগে বেঞ্চমার্ক উদাহরণগুলি পুনরুৎপাদন করতে চান তবে Isaac-GR00T ব্যবহার করুন। যদি আপনার ডেটাসেট ইতিমধ্যেই LeRobot v3.0 হয় এবং আপনি এটি রূপান্তর করতে না চান, যদি আপনি একটি সিড চান, অথবা যদি আপনার স্ট্যাকের বাকি অংশ ইতিমধ্যেই LeRobot হয় তবে lerobot-train ব্যবহার করুন। উভয়ই একই nvidia/GR00T-N1.7-3B ওজন ফাইন-টিউন করে। উল্লেখ্য যে LeRobot GR00T N1.5 সমর্থন সম্পূর্ণরূপে বাদ দিয়েছে: N1.5 চেকপয়েন্টগুলি একটি মাইগ্রেশন নোট সহ প্রত্যাখ্যান করা হয়, এবং সেগুলি ব্যবহার চালিয়ে যেতে আপনাকে lerobot==0.5.1 পিন করতে হবে।
আমার কি সামনের ক্যামেরার পাশাপাশি একটি রিস্ট ক্যামেরাও দরকার?▾
শিপ করা SO-100 কনফিগারেশন উভয়ই ব্যবহার করে, এবং modality.json সামনে এবং রিস্টকে আলাদা ভিডিও কী হিসাবে ম্যাপ করে। আপনি একটি ক্যামেরা দিয়ে প্রশিক্ষণ দিতে পারেন, এবং মডেল কার্ডের ল্যাটেন্সি টেবিল একটি ক্যামেরা দিয়ে পরিমাপ করা হয়, তবে রিস্ট ভিউই পলিসিকে যোগাযোগের মুহূর্তে গ্রিপার সম্পর্কে ব্যবহারযোগ্য তথ্য দেয়। যদি আপনার রোলআউটে গ্রিপার ভুল সময়ে বন্ধ হয়, তাহলে একটি অনুপস্থিত বা খারাপভাবে লক্ষ্য করা রিস্ট ক্যামেরা পরীক্ষা করার প্রথম জিনিসগুলির মধ্যে একটি।
প্রথমে পরিবেশ তৈরি না করেই আপনার SO-100-এ GR00T N1.7 ফাইন-টিউন করুন
একটি ফর্মে মডেল, ডেটাসেট এবং হাইপারপ্যারামিটার নির্বাচন করুন। ব্যাকএন্ড স্পট মার্কেটে একটি A100 80 GB বা H100 ভাড়া নেয়, ব্যাচ 32, লার্নিং রেট 1e-4 এবং 20000 ধাপ সহ প্রশিক্ষক চালায় এবং অবজেক্ট স্টোরেজে চেকপয়েন্ট লেখে। প্রতি রানে প্রায় 4 থেকে 12 USD।
GR00T N1.7 প্রশিক্ষণ গাইড খুলুনSources
- NVIDIA Isaac-GR00T repository README, N1.7 main branch
- Isaac-GR00T: Fine-tune on Custom Embodiments (NEW_EMBODIMENT)
- Isaac-GR00T: Finetuning Models for the SO100/SO101 Robot
- Isaac-GR00T: Robot Data Preparation Guide, the GR00T LeRobot format
- Isaac-GR00T: modality config and ActionConfig reference
- Isaac-GR00T: Policy API Guide and the embodiment tag list
- Isaac-GR00T: FinetuneConfig dataclass with every CLI default
- Isaac-GR00T: the shared finetune launcher wrapper
- GR00T N1.7 FAQ: data volume, augmentation and deployment
- nvidia/GR00T-N1.7-3B model card, including the inference timing table
- nvidia/Cosmos-Reason2-2B, the gated VLM backbone used by N1.7
- GR00T N1: An Open Foundation Model for Generalist Humanoid Robots
- NVIDIA Isaac GR00T N1.7: Open Reasoning VLA Model for Humanoid Robots
- LeRobot: GR00T Policy, the lerobot-train recipe
- LeRobot: Imitation Learning on Real-World Robots (lerobot-record, lerobot-train)
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started