AY-Robots গাইড পৃষ্ঠা যেখানে SO-100 আর্ম-এ GR00T N1.7 প্রশিক্ষণের জন্য প্রয়োজনীয় GPU টিয়ার, ডেটাসেট ফরম্যাট এবং প্রশিক্ষকের ডিফল্টগুলি দেখানো হয়েছে
GR00T N1.7SO-100ফাইন-টিউনিংLeRobotVLA

আপনার নিজস্ব SO-100 ডেটাসেটে GR00T N1.7 কীভাবে প্রশিক্ষণ দেবেন

AY-Robots ResearchAugust 23, 202628 মিনিট পড়া

একটি 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,000Hugging Face model card
দৃষ্টি-ভাষা ব্যাকবোনnvidia/Cosmos-Reason2-2B (Qwen3-VL), gated on Hugging Facerepo 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.0Isaac-GR00T repository
ওয়েটস লাইসেন্সNVIDIA Open Model License Agreementmodel card
ল্যাটেন্সি, H100 80 GB, PyTorch eager, 4 denoising steps, 1 camera85.8 ms end to end, 11.7 Hzmodel card timing table
একই হার্ডওয়্যার, TensorRT সম্পূর্ণ পাইপলাইন27.9 ms end to end, 35.9 Hzmodel card timing table
AY-Robots তার পরিবেশিত GR00T N1.7-এর জন্য যে ল্যাটেন্সি উল্লেখ করে152 ms per action stepAY-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 সেগুলিকে পাশাপাশি উপস্থাপন করে।

The AY-Robots model page for GR00T N1.7 showing parameter count, GPU tier, inference latency and the model's stated strengths and limits
The /policies/groot-n1-7 page carries the same spec strip you would otherwise assemble by hand from the model card and the repo README.

আপনি কিছু টাইপ করার আগে রানটির কী প্রয়োজন

প্রয়োজনীয়তাফাইন-টিউনিংইনফারেন্স
VRAM, NVIDIA নির্দেশিকা40 GB বা তার বেশি, H100 বা L40 সুপারিশ করা হয়16 GB বা তার বেশি, একটি RTX 4090 কাজ করে
dGPU-তে Python এবং CUDA3.12 and CUDA 12.83.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 uvuv
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 পারকেট ফাইল এবং ক্যামেরা স্ট্রিমগুলি লেখে। যদি ক্যালিব্রেশন বন্ধ থাকে, তাহলে আপনার ডেটাসেটের জয়েন্ট ভ্যালুগুলি এমন একটি রোবটকে বর্ণনা করে যা পরবর্তীতে পলিসি কার্যকর করবে তার থেকে সামান্য ভিন্ন, এবং কোনো পরিমাণ প্রশিক্ষণই তা ঠিক করতে পারে না।

bash
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=true
বর্তমান LeRobot-এ lerobot-record। পর্বের দৈর্ঘ্য ডিফল্টরূপে 60 সেকেন্ড এবং রিসেট সময় 60 সেকেন্ড। so100_follower এবং so101_follower উভয়ই একই LeRobot কনফিগার ক্লাস-এর বিরুদ্ধে নিবন্ধিত, এই কারণেই Isaac-GR00T SO100 উদাহরণে so101 নামগুলি ব্যবহার করা হয়; উভয়ই একটি SO-100-এ কাজ করে। এখানে আপনি যে ক্যামেরার নামগুলি (front, wrist) বেছে নেবেন, সেগুলি modality.json-এ আবার দেখা যেতে হবে।

LeRobot-এর নিজস্ব পরামর্শ হল প্রতিটি বস্তুর অবস্থানের জন্য প্রায় 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 ডেটাসেট গ্লসারি এন্ট্রি ব্যাখ্যা করে যে আসলে এর ভিতরে কী আছে।

bash
# 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
কনভার্টারটি --repo-id, একটি ঐচ্ছিক --root, এবং --force-conversion গ্রহণ করে, যা যেকোনো বিদ্যমান স্থানীয় স্ন্যাপশট মুছে ফেলে এবং পুনরায় ডাউনলোড করে। এটি codebase_version: v2.1 meta/info.json-এ লেখে।
রূপান্তরটি স্থানেই ওভাররাইট করে

যদি 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./, এবং একটি অতিরিক্ত ফাইল যা স্ট্যান্ডার্ড LeRobot-এর নেই। এই অতিরিক্ত ফাইলটিতেই অবশিষ্ট বেশিরভাগ ত্রুটি থাকে।

ধাপ 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-এর জন্য রিপোজিটরি থেকে পাঠানো ফাইলটি এখানে হুবহু দেওয়া হল।

json
{
  "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"
    }
  }
}
examples/SO100/modality.json. সূচকগুলি শূন্য-ভিত্তিক এবং Python স্লাইসিং অনুসরণ করে, তাই single_arm হল [0:5] এবং gripper হল [5:6]।

আপনার রূপান্তরিত ডেটাসেটে এটি কপি করুন meta/modality.json এবং ভিডিও কীগুলিকে আপনার ক্যামেরাগুলির আসল নাম অনুযায়ী পরিবর্তন করুন। যদি আপনি একটি একক ওভারহেড ক্যামেরা দিয়ে রেকর্ড করে থাকেন যার নাম top, তাহলে original_key হল observation.images.top এবং বন্ধুত্বপূর্ণ নামটি হল আপনার ডেটা কনফিগ যা উল্লেখ করবে। দুটিকেই একমত হতে হবে, এবং তাদের কেউই আপনার জন্য অন্যটিকে পরীক্ষা করে না। ভাষা অ্যানোটেশন আরও খারাপ, কারণ একই কী তিনটি স্থানে উপস্থিত থাকতে হবে।

স্তরফাইলরেপোতে ব্যবহৃত SO-100 ফর্ম
পার্কেট কলামdata/chunk-*/episode_*.parquetannotation.human.task_description
modality.json কীmeta/modality.json, under "annotation", without the annotation. prefixhuman.task_description
ডেটা কনফিগে modality_keysyour so100_config.pyannotation.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 টার্গেট পজিশন হিসাবে অনুমান করে, কারণ একটি বাইনারি খোলা-বা-বন্ধ সংকেত ডেল্টার চেয়ে টার্গেট হিসাবে ভালো কাজ করে।

python
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)
examples/SO100/so100_config.py, প্রয়োজনীয় অংশটুকু ছাঁটা হয়েছে। NON_EEF মানে জয়েন্ট স্পেস; EEF x, y, z এর একটি নয়-মাত্রিক ভেক্টর এবং একটি 6D ঘূর্ণন আশা করবে।

এখানে দুটি বিস্তারিত বিষয় রয়েছে যা না জানলে আপনার একটি দিন নষ্ট হতে পারে। প্রথমত, action_configs হল পজিশনাল: ডকুমেন্টেশন অনুযায়ী এর দৈর্ঘ্য এবং ক্রম modality_keys এর মতো হতে হবে, এবং ভুল হলে এর পরিণতি সম্পর্কে তারা স্পষ্ট করে বলে যে ভুল উপস্থাপনা নীরবে প্রয়োগ করা হয়। আপনার গ্রিপারকে ডেল্টা হিসাবে এবং আপনার আর্মকে একটি পরম লক্ষ্য হিসাবে প্রশিক্ষণ দেওয়া হয়, এবং কোনো ত্রুটি বার্তা আসে না। দ্বিতীয়ত, register_modality_config নিশ্চিত করে যে ট্যাগটি ইতিমধ্যেই নিবন্ধিত নয়, তাই একই পাইথন প্রক্রিয়ায় দ্বিতীয় NEW_EMBODIMENT কনফিগ Embodiment tag ... already registered বার্তা দিয়ে বন্ধ হয়ে যায়। আপনি একটি স্ক্রিপ্টে এর দুটি আমদানি করতে পারবেন না। তৃতীয় একটি নিয়ম পরে প্রয়োগ করা হয়, ডিপ্লয়মেন্টের সময়: অ্যাকশন delta_indices অবশ্যই শূন্য থেকে শুরু হওয়া একটি সংলগ্ন পরিসর হতে হবে। [0, 4, 8] এর মতো একটি স্পার্স উইন্ডো প্রত্যাখ্যান করা হয়, কারণ ডাউনস্ট্রিমের সবকিছু পূর্বাভাসিত অংশকে রৈখিকভাবে সূচিত করে এবং অন্যথায় ভুল সারিগুলি কার্যকর করবে।

delta_indices পরিবর্তন করলে আপনাকে অবশ্যই পরিসংখ্যান পুনরুৎপাদন করতে হবে

নরম্যালাইজেশন পরিসংখ্যান, বিশেষ করে 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.pydelta_indices-এ যেকোনো পরিবর্তনের পরে এটি চালান।

ধাপ ৪: পরিবেশ

N1.7 রিপোজিটরিটিকে এখানে সরিয়ে নিয়েছে এবং Python 3.12-এ। পুরনো কন্ডা এবং pip install -e . পাথটি README-এর একটি সঙ্কুচিত অংশে এখনও বিদ্যমান, তবে এটি সতর্ক করে যে flash-attn এবং TensorRT সহ GPU নির্ভরতাগুলির ম্যানুয়াল ইনস্টলেশনের প্রয়োজন হতে পারে। আপনার যদি নির্দিষ্ট কোনো কারণ না থাকে তবে uv ব্যবহার করুন। flash-attn এর ক্ষেত্রে, একটি বিস্তারিত তথ্য বিভ্রান্তি দূর করে: আপনি দেখবেন Installing flash-attn প্রতিটি uv run-এ প্রিন্ট করা হচ্ছে। এটি পুনরায় তৈরি হচ্ছে না। uv একটি URL-পিন করা হুইলকে পুনরায় যাচাই করছে যা ইতিমধ্যেই ক্যাশে করা আছে এবং এতে দুই বা তিন সেকেন্ড সময় লাগে।

  1. 1
    git-lfs ইনস্টল করুন, তারপর সাবমডিউল সহ ক্লোন করুন

    git-lfs আবশ্যক, ঐচ্ছিক নয়। এটি ছাড়া demo_data/ এর parquet ফাইলগুলি পয়েন্টার স্টাব হিসাবে ডাউনলোড হবে এবং ফাইল তালিকায় উপস্থিত বলে মনে হওয়া একটি ডেটাসেটে ডেমো রান ব্যর্থ হবে।

    bash
    sudo apt install git-lfs && git lfs install
    git clone --recurse-submodules https://github.com/NVIDIA/Isaac-GR00T
    cd Isaac-GR00T
  2. 2
    uv ইনস্টল করুন এবং পরিবেশ সিঙ্ক করুন

    ডিফল্ট ইনস্টলেশন flash-attn এবং TensorRT সহ GPU নির্ভরতাগুলি টেনে আনে। একটি নতুন A100 বা H100 ইমেজে এটি সবচেয়ে দীর্ঘ একক ধাপ, তাই অন্য কিছুতে মনোযোগ দেওয়ার আগে এটি করুন।

    bash
    curl -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')"
  3. 3
    Hugging Face-এর বিরুদ্ধে প্রমাণীকরণ করুন

    প্রথম ট্রেনিং শুরু করার আগে এটি করুন, আট মিনিট পর ব্যর্থ হওয়ার পরে নয়।

    bash
    uv run huggingface-cli login   # or: export HF_TOKEN=<your_token>
  4. 4
    সরবরাহকৃত SO-100 ডেমো ডেটার উপর স্যানিটি-চেক

    আপনার নিজের রেকর্ডিং স্পর্শ করার আগে, demo_data/cube_to_bowl_5-এ 2000 ধাপ চালান। এটি পাঁচটি পর্ব, এটি দ্রুত শেষ হয় এবং এটি আপনার ডেটার পরিবর্তে পরিবেশকে প্রমাণ করে। যদি এই রান ব্যর্থ হয়, আপনার ডেটাসেটের জন্য আপনি যা কিছু করবেন তা সাহায্য করবে না।

    bash
    CUDA_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 উদাহরণে বাদ দেওয়া হয়েছে। এটি সংকীর্ণ অর্থে: ল্যাঙ্গুয়েজ ব্যাকবোন এবং ভিজ্যুয়াল এনকোডার স্থির থাকে, এবং যা প্রশিক্ষিত হয় তা হলো প্রোজেক্টর এবং ডিফিউশন অ্যাকশন হেড।

bash
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
একক GPU। আটটি কার্ডের জন্য, লঞ্চারটিকে uv run torchrun --nproc_per_node=8 --master_port=29500 দিয়ে প্রতিস্থাপন করুন এবং --num-gpus 8 সেট করুন। uv run torchrun ব্যবহার করুন, শুধু torchrun নয়, অন্যথায় আপনি ভুল পরিবেশ পাবেন।
ফ্ল্যাগFinetuneConfig-এ ডিফল্টএটি কী করে
--global-batch-size64গ্রেডিয়েন্ট অ্যাকুমুলেশনের আগে সমস্ত GPU জুড়ে মোট ব্যাচ। সরবরাহকৃত উদাহরণগুলি 32 ব্যবহার করে।
--learning-rate1e-4একই মান যা AY-Robots তার groot1.7 প্রশিক্ষকের জন্য পাঠায়।
--max-steps10000মোট অপ্টিমাইজার ধাপ। examples/finetune.sh র‍্যাপারটিও 10000-এ ডিফল্ট করে।
--gradient-accumulation-steps1কার্যকরী ব্যাচকে গুণ করে। 1-এর বেশি মান একটি সতর্কতা জারি করে যা আপনাকে সঞ্চিত আকার সম্পর্কে জানায়।
--save-steps and --save-total-limit1000 and 5চেকপয়েন্ট ফ্রিকোয়েন্সি, এবং কতগুলি রাখা হয়। পুরোনো চেকপয়েন্টগুলি মুছে ফেলা হয়।
--weight-decay and --warmup-ratio1e-5 and 0.05examples/finetune.sh দ্বারাও স্পষ্টভাবে সেট করা হয়েছে।
--state-dropout-prob0.2 in the CLI, 0.8 in the model configপ্রশিক্ষণের সময় প্রোপ্রিওসেপ্টিভ স্টেট এলোমেলোভাবে বাদ দেয়। আপনার কাজ যদি স্টেটের উপর নির্ভর করে তবে এটি কমিয়ে দিন।
--tune-llm and --tune-visualFalse and Falseব্যাকবোন ডিফল্টরূপে স্থির থাকে।
--tune-projector and --tune-diffusion-modelTrue and Trueপ্রোজেক্টর এবং ডিফিউশন অ্যাকশন হেডই আসলে প্রশিক্ষিত হয়।
--use-percentilesTrueকাঁচা সর্বনিম্ন এবং সর্বোচ্চের পরিবর্তে q01 এবং q99 দিয়ে স্বাভাবিক করুন।
--dataloader-num-workers2লোডারটি ডিজাইনগতভাবে CPU-ভিত্তিক। উদাহরণগুলি এটিকে 4-এ বাড়ায়।
--seeddoes not existএই CLI-তে কোনো সিড ফ্ল্যাগ নেই।

শেষ সারিটি কোনো টাইপো নয়। launch_finetune.py একটি ডেটাক্লাস থেকে তৈরি একটি টাইরো CLI, এবং সেই ডেটাক্লাসে কোনো সিড ফিল্ড নেই। README-তে আলাদাভাবে উল্লেখ করা হয়েছে যে নন-ডিটারমিনিস্টিক ইমেজ অগমেন্টেশনের কারণে রানগুলির মধ্যে 5 থেকে 6 শতাংশ ভিন্নতা দেখা যায়। একই ফ্ল্যাগ সহ দুটি রান অভিন্ন চেকপয়েন্ট তৈরি করবে না, যা অত্যন্ত গুরুত্বপূর্ণ যখন আপনি সিদ্ধান্ত নিতে চেষ্টা করছেন যে একটি হাইপারপ্যারামিটার পরিবর্তন সাহায্য করেছে নাকি আপনি ভাগ্যবান ছিলেন। তুলনামূলকভাবে, lerobot-এর নিজস্ব প্রশিক্ষক ডিফল্টরূপে সিড 1000 ব্যবহার করে, এবং LeRobot GR00T রেসিপি স্পষ্টভাবে --seed=42 পাস করে।

ভ্যালিডেশন ডিফল্টরূপে বন্ধ থাকে, এবং ডকুমেন্ট করা ফ্ল্যাগটি এই CLI-তে নেই

ফাইন-টিউনিং 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.7A100 80 GB or H100 80 GB3 to 6 hours4 to 12 USD50
GR00T N1.5A100 80 GB or H100 80 GB3 to 6 hours4 to 12 USD50
Pi0.5A100 80 GB or H100 80 GB3 to 6 hours4 to 12 USD50
SmolVLARTX 4090 or any 24 GB card2 to 5 hours1 to 3 USD30
ACTRTX 4090 or any 24 GB card2 to 5 hours1 to 3 USD50

৫০-পর্ব সর্বনিম্ন একটি ভিত্তি, লক্ষ্য নয়। NVIDIA-এর নিজস্ব FAQ আরও বেশি দাবি করে: একটি সাধারণ নির্দিষ্ট-অবস্থানের পিক অ্যান্ড প্লেসের জন্য প্রায় ১০০টি ট্র্যাজেক্টরি, জটিল বা বহু-ধাপের দৃশ্যের জন্য ৫০০ বা তার বেশি, এবং সূক্ষ্ম ম্যানিপুলেশনের জন্য ১০০ থেকে ৫০০। যদি আপনার ২০টি পর্ব থাকে, তবে সন্ধ্যায় টিউনিং করার পরিবর্তে বিকেলে রেকর্ডিং করুন। ডেটা সংগ্রহের নির্দেশিকা একটি দরকারী পর্বকে একটি নষ্ট পর্ব থেকে কী আলাদা করে তা কভার করে, আপনার প্রথম ডেটাসেট রেকর্ড করুন হল সংক্ষিপ্ত সংস্করণ, এবং SO-100 ডেটা সংগ্রহ হল আর্ম-নির্দিষ্ট সংস্করণ।

SO-100-এ GR00T N1.7-এর জন্য AY-Robots প্রশিক্ষণ গাইড, যেখানে GPU টিয়ার, প্রয়োজনীয় ডেটাসেট ফরম্যাট এবং প্রশিক্ষকের ডিফল্ট সহ স্পেক স্ট্রিপ দেখানো হয়েছে।
The /train/groot-n1-7-on-so-100 guide leads with the facts you would otherwise reconstruct by hand: GPU tier, dataset format, and the exact defaults the trainer sends.

Step 6: আর্ম স্পর্শ করার আগে ওপেন-লুপ মূল্যায়ন

একটি নতুন চেকপয়েন্ট একটি ফিজিক্যাল আর্মের উপর রাখবেন না এটা জানতে যে ট্রেনিং কাজ করেছে কিনা। প্রথমে ওপেন-লুপ ইভালুয়েশন চালান। এটি একটি রেকর্ড করা এপিসোড পুনরায় চালায়, প্রতিটি ধাপে মডেলকে অ্যাকশনের জন্য জিজ্ঞাসা করে এবং MSE ও MAE সহ গ্রাউন্ড ট্রুথের বিপরীতে ভবিষ্যদ্বাণী প্লট করে। এতে কোনো খরচ হয় না এবং এটি ধাপ 2 ও 3 থেকে আসা ম্যাপিং ভুলগুলো ধরে ফেলে।

bash
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
প্লটগুলি /tmp/open_loop_eval/traj_<id>.jpeg-এ জমা হয় যদি না আপনি --save-plot-path পাস করেন। ডিফল্ট: --execution-horizon 16, --steps 200, --denoising-steps 4, --traj-ids 0।

রিপোজিটরি ইচ্ছাকৃতভাবে কাস্টম ডেটার জন্য একটি টার্গেট MSE প্রকাশ করতে অস্বীকার করে, এবং এটি সঠিক সিদ্ধান্ত: সংখ্যাটি আপনার অ্যাকশন ইউনিট, আপনার কাজ এবং আপনার ডেটাসেটের আকারের উপর নির্ভর করে, তাই অন্যের আর্ম থেকে কপি করা একটি থ্রেশহোল্ডের কোনো অর্থ নেই। যা অর্থপূর্ণ তা হলো প্রবণতা। এখানে রেফারেন্স রানটি রয়েছে যা রিপো একক H100-এ পাঁচটি এপিসোডের ডেমো ডেটাসেট এবং 2000 ধাপ সহ নথিভুক্ত করে।

চেকপয়েন্টtraj 0-এ গড় MSEtraj 0-এ গড় MAE
50087.55.63
100025.43.30
150013.22.18
200010.01.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 এ প্রকাশিত হয়েছিল।

bash
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
LeRobot-নেটিভ GR00T N1.7 রেসিপি। relative_exclude_joints লক্ষ্য করুন: গ্রিপারকে আপেক্ষিক ক্রিয়া থেকে বাদ দেওয়া হয়েছে, যা so100_config.py ActionRepresentation.ABSOLUTE ব্যবহার করে একই সিদ্ধান্ত নেয়।
দিকIsaac-GR00T launch_finetune.pylerobot-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.pylerobot-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 ভাড়া করেন এবং প্রতিটি ধাপের মালিকানা আপনার। বাস্তবসম্মতভাবে, প্রথমবার এটি করতে একটি বিকেল লাগতে পারে এবং এরপর প্রতিবার বিশ মিনিট।

  1. SO-100-এ lerobot-record ব্যবহার করে পর্বগুলি রেকর্ড করুন। আপনি একটি LeRobot v3.0 ডেটাসেট পাবেন।
  2. scripts/lerobot_conversion/convert_v3_to_v2.py ব্যবহার করে এটিকে v2.1-এ রূপান্তর করুন, নিজস্ব ভার্চুয়ালএনভি-তে।
  3. meta/modality.json এবং একটি পাইথন মোডালিটি কনফিগ লিখুন, যা EmbodimentTag.NEW_EMBODIMENT-এর অধীনে নিবন্ধিত।
  4. একটি 80 GB কার্ড ভাড়া করুন, সাবমডিউল সহ ক্লোন করুন, uv sync করুন, Hugging Face-এর সাথে প্রমাণীকরণ করুন।
  5. launch_finetune.py চালান, তারপর কয়েকটি চেকপয়েন্টে open_loop_eval.py চালান এবং হার্ডওয়্যার স্পর্শ করার আগে MSE প্রবণতা তুলনা করুন।
  6. ইনস্ট্যান্স ধ্বংস করার আগে মেশিন থেকে চেকপয়েন্টটি সরিয়ে নিন, তারপর আর্মের জন্য সার্ভিং পাথ তৈরি করুন।
যে ধাপটি সবাই ভুলে যায়

ভাড়া করা ইনস্ট্যান্সটি বন্ধ করার আগে সেখান থেকে চেকপয়েন্টটি কপি করে নিন। --save-total-limit 5 এর অর্থ হল প্রশিক্ষণ চলার সাথে সাথে পুরনো চেকপয়েন্টগুলি মুছে ফেলা হয়, তাই 5000 ধাপে আপনি যে চেকপয়েন্টটি চেয়েছিলেন, সেটি 20000 ধাপে আর নাও থাকতে পারে।

AY-Robots প্রশিক্ষণ ম্যাট্রিক্স যেখানে পাঁচটি পলিসি মডেল সারি হিসাবে এবং চারটি রোবট আর্ম কলাম হিসাবে রয়েছে, প্রতিটি সেল একটি নির্দিষ্ট প্রশিক্ষণ গাইডের সাথে লিঙ্ক করা।
The /train matrix: পাঁচটি মডেল বনাম চারটি আর্ম। GR00T N1.7 সারিটি SO-101, Koch v1.1 এবং LeKiwi-কেও কভার করে।

চেকপয়েন্টটি আবার বাহুতে ফিরিয়ে আনা

Isaac-GR00T ZMQ-এর মাধ্যমে একটি সার্ভার-ক্লায়েন্ট বিভাজন ব্যবহার করে। নীতিটি GPU-তে চলে, এবং রোবট মেশিনে একটি পাতলা ক্লায়েন্ট পর্যবেক্ষণ পাঠায় এবং অ্যাকশন চাঙ্ক গ্রহণ করে। SO-100 উদাহরণটি অনুলিপি করার জন্য যথেষ্ট সম্পূর্ণ: শুরু করুন run_gr00t_server.py আপনার চেকপয়েন্ট এবং --embodiment-tag NEW_EMBODIMENT, তারপর চালান eval_so100.py রোবটের দিকে সিরিয়াল পোর্ট, রোবট আইডি, ক্যামেরা সূচক এবং ভাষার নির্দেশাবলী সহ। সেই কমান্ডের ক্যামেরার নামগুলি আপনার modality.json থেকে বন্ধুত্বপূর্ণ নামের সাথে মিলতে হবে, OS ডিভাইস নম্বরের সাথে নয়।

bash
# 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"
--execution-horizon নিয়ন্ত্রণ করে যে পুনরায় পরিকল্পনা করার আগে কতগুলি পূর্বাভাসিত ধাপ কার্যকর করা হবে। এটি নীতির action_horizon-এর বেশি হতে পারবে না, এবং এই সংখ্যাটি আপনার মডালিটি কনফিগে action delta_indices-এর দৈর্ঘ্য, বেস মডেলের নয়। সরবরাহকৃত SO-100 কনফিগ 16টি ধাপের পূর্বাভাস দেয়, তাই 16 হল আপনার সর্বোচ্চ সীমা; বেস nvidia/GR00T-N1.7-3B চেকপয়েন্ট 40টির জন্য কনফিগার করা হয়েছে, এবং policy.md স্পষ্টভাবে বলে যে ফাইন-টিউন করা চেকপয়েন্ট ভিন্ন হতে পারে। এটি অতিক্রম করলে আপনি একটি ValueError পাবেন যা উভয় সংখ্যা উল্লেখ করবে। রিয়েল-টাইম স্থাপনার জন্য ডকুমেন্টেশন 8 মানটি সুপারিশ করে। পুরানো ফ্ল্যাগ নাম --action-horizon এখনও কাজ করে তবে সতর্ক করে।
7.4 V, 12 V নয়

যখন আপনি আর্মটি পুনরায় তারের সাথে সংযুক্ত করছেন: 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 প্রশিক্ষণ গাইড খুলুন

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started