Installation#
ProtoMotions supports five simulation backends: IsaacGym, IsaacLab, Genesis, Newton, and MuJoCo. You can install the simulation of your choice, and the simulation backend is selected via the configuration file.
Tested Versions:
Note
We recommend creating a separate virtual environment for each simulator to avoid dependency conflicts. We recommend using conda or venv for IsaacGym, Genesis, and MuJoCo, and uv for IsaacLab and Newton.
Which installation path?#
Simulator |
Supported install |
Notes |
|---|---|---|
MuJoCo, Newton, Genesis |
Source checkout or uv dependency |
Genesis is experimental. |
IsaacLab |
Source checkout or uv dependency |
Needs NVIDIA’s package index and the CUDA 12.8 PyTorch index (see below). Python 3.11, Linux x86_64 only. |
IsaacGym |
Source checkout only |
IsaacGym is not distributed on PyPI: you download it from NVIDIA and install it by hand, and it requires Python 3.8. |
Use a source checkout if you want the pretrained checkpoints, motion files, or
the examples/ experiments — those live in Git LFS, not in the package.
Prerequisites#
After cloning the repository, fetch and check out files stored in Git LFS:
git lfs install
git lfs pull
This can take a while because pretrained checkpoints, motion files, meshes, and
USD assets are large. If you fetch a subset of assets manually, make sure the
files are checked out and not still Git LFS pointer files. Pointer files start
with version https://git-lfs.github.com/spec/v1 and can cause errors such as
is not a valid usda layer when IsaacLab loads robot assets.
Using ProtoMotions as a dependency (uv)#
Install ProtoMotions directly from Git. Robot meshes and USD assets are Git LFS
objects, so the source must be fetched with LFS enabled — lfs = true
requires uv 0.11.32+:
uv init --python 3.11 my-project
cd my-project
uv add --lfs "protomotions[newton] @ git+https://github.com/NVlabs/ProtoMotions.git"
Equivalently, configure the dependency in the downstream pyproject.toml:
[project]
dependencies = ["protomotions[newton]"] # or [mujoco] / [isaaclab] / [genesis]
[tool.uv]
required-version = ">=0.11.32"
[tool.uv.sources]
protomotions = { git = "https://github.com/NVlabs/ProtoMotions.git", lfs = true }
Then run training through the installed entry point:
uv run protomotions train-agent \
--robot-name g1 --simulator newton \
--experiment-path experiments/my_experiment.py \
--experiment-name my_run \
--motion-file data/my_motion.pt \
--num-envs 4096 --batch-size 16384
uv run protomotions info prints the resolved asset root and which simulator
modules are importable.
The package ships the Python modules and the full robot asset tree except
the SMPL/SMPL-H assets, which carry their own licence terms. Pretrained
checkpoints, motion files, and the examples/ experiments are not included;
keep a Git LFS checkout and set PROTOMOTIONS_ASSET_ROOT if you need them.
IsaacLab as a dependency#
IsaacLab projects also need NVIDIA’s package index and the CUDA 12.8 PyTorch
index. Add these entries to the downstream project’s pyproject.toml before
running uv sync:
[project]
requires-python = "==3.11.*"
dependencies = [
"protomotions[isaaclab]",
"torch==2.7.0",
"torchaudio==2.7.0",
"torchvision==0.22.0",
]
[tool.uv]
required-version = ">=0.11.32"
environments = [
"sys_platform == 'linux' and platform_machine == 'x86_64'",
]
index-strategy = "first-index"
[[tool.uv.index]]
name = "pytorch-cu128"
url = "https://download.pytorch.org/whl/cu128"
explicit = true
[[tool.uv.index]]
name = "nvidia"
url = "https://pypi.nvidia.com"
[tool.uv.sources]
protomotions = { git = "https://github.com/NVlabs/ProtoMotions.git", lfs = true }
torch = { index = "pytorch-cu128" }
torchaudio = { index = "pytorch-cu128" }
torchvision = { index = "pytorch-cu128" }
Core package metadata requires torch>=2.2 but does not select a PyTorch
index or CUDA build. The downstream environment remains responsible for
choosing the wheel that matches its simulator, CUDA runtime, and driver.
Choose Your Simulator(s)#
IsaacGym#
IsaacGym requires Python 3.8.
Create a conda environment:
conda create -n isaacgym python=3.8 conda activate isaacgym
Download IsaacGym Preview 4:
wget https://developer.nvidia.com/isaac-gym-preview-4 tar -xvzf isaac-gym-preview-4
Install IsaacGym Python API:
pip install -e isaacgym/python
Install ProtoMotions and dependencies:
pip install -e /path/to/protomotions pip install -r /path/to/protomotions/requirements_isaacgym.txt
IsaacLab#
We recommend using uv for IsaacLab installation. IsaacLab 2.x requires Python 3.11. For full installation details, see the IsaacLab Pip Installation Guide.
Create a virtual environment with uv:
uv venv --python 3.11 env_isaaclab source env_isaaclab/bin/activate
Install PyTorch and IsaacLab:
uv pip install torch==2.7.0 torchaudio==2.7.0 torchvision==0.22.0 uv pip install isaaclab[isaacsim,all]==2.3.2.post1 --extra-index-url https://pypi.nvidia.com
Install ProtoMotions and dependencies:
uv pip install -e /path/to/protomotions uv pip install -r /path/to/protomotions/requirements_isaaclab.txt
Note
IsaacLab/IsaacSim may prompt for NVIDIA EULA acceptance on first use. Accept it interactively before running unattended headless jobs.
Genesis (Experimental)#
Genesis requires Python 3.10.
Create a conda environment:
conda create -n genesis python=3.10 conda activate genesis
Install Genesis
Install ProtoMotions and dependencies:
pip install -e /path/to/protomotions pip install -r /path/to/protomotions/requirements_genesis.txt
Newton#
Newton is a GPU-accelerated physics simulator built on NVIDIA Warp, now available on PyPI. For full installation details, see the Newton Installation Guide.
Requirements: Python 3.10+ (3.11+ recommended), NVIDIA GPU (compute capability >= 5.0), driver 545+
Create a virtual environment:
python -m venv .venv_newton source .venv_newton/bin/activate
Install PyTorch and Newton:
pip install torch --index-url https://download.pytorch.org/whl/cu124 pip install "newton[examples]"
Use
newton[sim]instead ofnewton[examples]if you only need headless mode (no viewer).Install ProtoMotions and dependencies:
pip install -e /path/to/protomotions pip install -r /path/to/protomotions/requirements_newton.txt
Note
On Python 3.10, imgui-bundle (a dependency of newton[examples]) has no prebuilt
wheel and compiles from source, which can take 10-20 minutes. Python 3.11+ has prebuilt
wheels and installs instantly.
MuJoCo (CPU-only)#
MuJoCo is a CPU-only backend for quick testing and debugging without GPU. It supports single environment only (num_envs=1).
Requirements: Python 3.10+, No GPU required
Create a conda environment:
conda create -n protomotions_mujoco python=3.10 conda activate protomotions_mujoco
Install PyTorch CPU version (lighter, no CUDA needed):
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
Install ProtoMotions and dependencies:
pip install -e /path/to/protomotions pip install -r /path/to/protomotions/requirements_mujoco.txt
Run inference with MuJoCo:
python protomotions/inference_agent.py \ --checkpoint data/pretrained_models/motion_tracker/g1-bones-deploy/last.ckpt \ --motion-file data/motion_for_trackers/g1_bones_seed_mini.pt \ --simulator mujoco \ --num-envs 1
This example uses the shipped G1 motion tracker and matching motion data. The checkpoint directory includes the required
resolved_configs_inference.ptfile.
Note
MuJoCo backend is intended for quick policy validation and debugging. For training or large-scale evaluation, use GPU-accelerated backends (IsaacGym, IsaacLab, Newton, Genesis).
Troubleshooting#
IsaacLab Issues#
Torch Inductor Warning
On smaller GPUs, IsaacLab evaluation may print a warning similar to:
Not enough SMs to use max_autotune_gemm mode
This is a non-fatal PyTorch performance warning. Evaluation can continue unless it is followed by an actual traceback.
IsaacGym Issues#
libpython Error
If you encounter libpython related errors, you need to set the LD_LIBRARY_PATH to your conda environment:
# First, check your conda environment path
conda info -e
# Then set LD_LIBRARY_PATH (replace with your actual conda env path)
export LD_LIBRARY_PATH=/path/to/conda/envs/your_env/lib:$LD_LIBRARY_PATH
# For example:
export LD_LIBRARY_PATH=${CONDA_PREFIX}/lib:$LD_LIBRARY_PATH
To make this permanent for only this conda environment, add activation hooks:
mkdir -p "${CONDA_PREFIX}/etc/conda/activate.d" "${CONDA_PREFIX}/etc/conda/deactivate.d"
cat > "${CONDA_PREFIX}/etc/conda/activate.d/isaacgym-libpython.sh" <<'EOF'
export _OLD_LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}"
export LD_LIBRARY_PATH="${CONDA_PREFIX}/lib:${LD_LIBRARY_PATH:-}"
EOF
cat > "${CONDA_PREFIX}/etc/conda/deactivate.d/isaacgym-libpython.sh" <<'EOF'
export LD_LIBRARY_PATH="${_OLD_LD_LIBRARY_PATH:-}"
unset _OLD_LD_LIBRARY_PATH
EOF
Memory Issues
If you run into memory issues during training:
# Reduce number of environments in your training command
--num-envs 1024
Next Steps#
After installation, proceed to the Quick Start guide to train your first agent or run pre-trained models.