Skip to main content

A Python framework for high-performance simulation and graphics programming

Project description

PyPI version License GitHub commit activity Downloads codecov GitHub - CI Discord

NVIDIA Warp

Warp is a Python framework for writing high-performance simulation and graphics code. Warp takes regular Python functions and JIT compiles them to efficient kernel code that can run on the CPU or GPU.

Warp is designed for spatial computing and comes with a rich set of primitives that make it easy to write programs for physics simulation, perception, robotics, and geometry processing. In addition, Warp kernels are differentiable and can be used as part of machine-learning pipelines with frameworks such as PyTorch, JAX and Paddle.

Please refer to the project Documentation for API and language reference and CHANGELOG.md for release history.

A selection of physical simulations computed with Warp

Installing

Python version 3.9 or newer is recommended. Warp can run on x86-64 and ARMv8 CPUs on Windows, Linux, and macOS. GPU support requires a CUDA-capable NVIDIA GPU and driver (minimum GeForce GTX 9xx).

The easiest way to install Warp is from PyPI:

pip install warp-lang

You can also use pip install warp-lang[extras] to install additional dependencies for running examples and USD-related features.

The binaries hosted on PyPI are currently built with the CUDA 12 runtime and therefore require a minimum version of the CUDA driver of 525.60.13 (Linux x86-64) or 528.33 (Windows x86-64).

If you require GPU support on a system with an older CUDA driver, you can build Warp from source or install wheels built with the CUDA 11.8 runtime from the GitHub Releases page. Copy the URL of the appropriate wheel file (warp-lang-{ver}+cu12-py3-none-{platform}.whl) and pass it to the pip install command, e.g.

Platform Install Command
Linux aarch64 pip install https://github.com/NVIDIA/warp/releases/download/v1.8.0/warp_lang-1.8.0+cu11-py3-none-manylinux2014_aarch64.whl
Linux x86-64 pip install https://github.com/NVIDIA/warp/releases/download/v1.8.0/warp_lang-1.8.0+cu11-py3-none-manylinux2014_x86_64.whl
Windows x86-64 pip install https://github.com/NVIDIA/warp/releases/download/v1.8.0/warp_lang-1.8.0+cu11-py3-none-win_amd64.whl

The --force-reinstall option may need to be used to overwrite a previous installation.

Nightly Builds

Nightly builds of Warp from the main branch are available on the NVIDIA Package Index.

To install the latest nightly build, use the following command:

pip install -U --pre warp-lang --extra-index-url=https://pypi.nvidia.com/

Note that the nightly builds are built with the CUDA 12 runtime and are not published for macOS.

If you plan to install nightly builds regularly, you can simplify future installations by adding NVIDIA's package repository as an extra index via the PIP_EXTRA_INDEX_URL environment variable. For example:

export PIP_EXTRA_INDEX_URL="https://pypi.nvidia.com"

This ensures the index is automatically used for pip commands, avoiding the need to specify it explicitly.

CUDA Requirements

  • Warp packages built with CUDA Toolkit 11.x require NVIDIA driver 470 or newer.
  • Warp packages built with CUDA Toolkit 12.x require NVIDIA driver 525 or newer.

This applies to pre-built packages distributed on PyPI and GitHub and also when building Warp from source.

Note that building Warp with the --quick flag changes the driver requirements. The quick build skips CUDA backward compatibility, so the minimum required driver is determined by the CUDA Toolkit version. Refer to the latest CUDA Toolkit release notes to find the minimum required driver for different CUDA Toolkit versions (e.g., this table from CUDA Toolkit 12.6).

Warp checks the installed driver during initialization and will report a warning if the driver is not suitable, e.g.:

Warp UserWarning:
   Insufficient CUDA driver version.
   The minimum required CUDA driver version is 12.0, but the installed CUDA driver version is 11.8.
   Visit https://github.com/NVIDIA/warp/blob/main/README.md#installing for guidance.

This will make CUDA devices unavailable, but the CPU can still be used.

To remedy the situation there are a few options:

  • Update the driver.
  • Install a compatible pre-built Warp package.
  • Build Warp from source using a CUDA Toolkit that's compatible with the installed driver.

Getting Started

An example first program that computes the lengths of random 3D vectors is given below:

import warp as wp
import numpy as np

num_points = 1024

@wp.kernel
def length(points: wp.array(dtype=wp.vec3),
           lengths: wp.array(dtype=float)):

    # thread index
    tid = wp.tid()
    
    # compute distance of each point from origin
    lengths[tid] = wp.length(points[tid])


# allocate an array of 3d points
points = wp.array(np.random.rand(num_points, 3), dtype=wp.vec3)
lengths = wp.zeros(num_points, dtype=float)

# launch kernel
wp.launch(kernel=length,
          dim=len(points),
          inputs=[points, lengths])

print(lengths)

Running Notebooks

A few notebooks are available in the notebooks directory to provide an overview over the key features available in Warp.

To run these notebooks, jupyterlab is required to be installed using:

pip install jupyterlab

From there, opening the notebooks can be done with the following command:

jupyter lab ./notebooks

Running Examples

The warp/examples directory contains a number of scripts categorized under subdirectories that show how to implement various simulation methods using the Warp API. Most examples will generate USD files containing time-sampled animations in the current working directory. Before running examples, users should ensure that the usd-core, matplotlib, and pyglet packages are installed using:

pip install warp-lang[extras]

These dependencies can also be manually installed using:

pip install usd-core matplotlib pyglet

Examples can be run from the command-line as follows:

python -m warp.examples.<example_subdir>.<example>

To browse the example source code, you can open the directory where the files are located like this:

python -m warp.examples.browse

Most examples can be run on either the CPU or a CUDA-capable device, but a handful require a CUDA-capable device. These are marked at the top of the example script.

USD files can be viewed or rendered inside NVIDIA Omniverse, Pixar's UsdView, and Blender. Note that Preview in macOS is not recommended as it has limited support for time-sampled animations.

Built-in unit tests can be run from the command-line as follows:

python -m warp.tests

warp/examples/core

dem fluid graph capture marching cubes
mesh nvdb raycast raymarch
sample mesh sph torch wave

warp/examples/fem

diffusion 3d mixed elasticity apic fluid streamlines
distortion energy navier stokes burgers magnetostatics
adaptive grid nonconforming contact darcy level-set optimization elastic shape optimization

warp/examples/optim

bounce cloth throw diffray drone
inverse kinematics spring cage trajectory soft body properties
fluid checkpoint

warp/examples/sim

cartpole cloth granular granular collision sdf
jacobian ik quadruped rigid chain rigid contact
rigid force rigid gyroscopic rigid soft contact soft body
cloth self contact

warp/examples/tile

mlp nbody walker

Building

For developers who want to build the library themselves, the following tools are required:

  • Microsoft Visual Studio 2019 upwards (Windows)
  • GCC 9.4 upwards (Linux)
  • CUDA Toolkit 11.5 or higher
  • Git LFS installed

After cloning the repository, users should run:

python build_lib.py

Upon success, the script will output platform-specific binary files in warp/bin/. The build script will look for the CUDA Toolkit in its default installation path. This path can be overridden by setting the CUDA_PATH environment variable. Alternatively, the path to the CUDA Toolkit can be passed to the build command as --cuda_path="...". After building, the Warp package should be installed using:

pip install -e .

This ensures that subsequent modifications to the library will be reflected in the Python package.

Learn More

Please see the following resources for additional background on Warp:

The underlying technology in Warp has been used in a number of research projects at NVIDIA including the following publications:

  • Accelerated Policy Learning with Parallel Differentiable Simulation - Xu, J., Makoviychuk, V., Narang, Y., Ramos, F., Matusik, W., Garg, A., & Macklin, M. (2022)
  • DiSECt: Differentiable Simulator for Robotic Cutting - Heiden, E., Macklin, M., Narang, Y., Fox, D., Garg, A., & Ramos, F (2021)
  • gradSim: Differentiable Simulation for System Identification and Visuomotor Control - Murthy, J. Krishna, Miles Macklin, Florian Golemo, Vikram Voleti, Linda Petrini, Martin Weiss, Breandan Considine et al. (2021)

Frequently Asked Questions

See the FAQ in the Warp documentation.

Support

Problems, questions, and feature requests can be opened on GitHub Issues.

The Warp team also monitors the #warp forum on the public Omniverse Discord server, come chat with us!

For inquiries not suited for GitHub Issues or Discord, please email warp-python@nvidia.com.

Versioning

Versions take the format X.Y.Z, similar to Python itself:

  • Increments in X are reserved for major reworks of the project causing disruptive incompatibility (or reaching the 1.0 milestone).
  • Increments in Y are for regular releases with a new set of features.
  • Increments in Z are for bug fixes. In principle, there are no new features. Can be omitted if 0 or not relevant.

This is similar to Semantic Versioning but is less strict regarding backward compatibility. Like with Python, some breaking changes can be present between minor versions if well-documented and gradually introduced.

Note that prior to 0.11.0, this schema was not strictly adhered to.

License

Warp is provided under the Apache License, Version 2.0. Please see LICENSE.md for full license text.

Contributing

Contributions and pull requests from the community are welcome. Please see the Contribution Guide for more information on contributing to the development of Warp.

Publications & Citation

Research Using Warp

Our PUBLICATIONS.md file lists academic and research publications that leverage the capabilities of Warp. We encourage you to add your own published work using Warp to this list.

Citing Warp

To cite Warp itself in your own publications, please use the following BibTeX entry:

@misc{warp2022,
  title        = {Warp: A High-performance Python Framework for GPU Simulation and Graphics},
  author       = {Miles Macklin},
  month        = {March},
  year         = {2022},
  note         = {NVIDIA GPU Technology Conference (GTC)},
  howpublished = {\url{https://github.com/nvidia/warp}}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

warp_lang-1.8.0-py3-none-win_amd64.whl (112.1 MB view details)

Uploaded Python 3Windows x86-64

warp_lang-1.8.0-py3-none-manylinux_2_34_aarch64.whl (130.9 MB view details)

Uploaded Python 3manylinux: glibc 2.34+ ARM64

warp_lang-1.8.0-py3-none-manylinux_2_28_x86_64.whl (129.9 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

warp_lang-1.8.0-py3-none-macosx_10_13_universal2.whl (45.3 MB view details)

Uploaded Python 3macOS 10.13+ universal2 (ARM64, x86-64)

File details

Details for the file warp_lang-1.8.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: warp_lang-1.8.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 112.1 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for warp_lang-1.8.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 2c7627bee127b522551e02f44c35d7d6a4e5632ff4b58199208012e7f2f6c608
MD5 1ffdc05419971e98b22e7954ff651842
BLAKE2b-256 1bba627ba9f67db53fd428dd3e10a1b5f78a1ed8c10e4ba9bea207b9b51604be

See more details on using hashes here.

File details

Details for the file warp_lang-1.8.0-py3-none-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for warp_lang-1.8.0-py3-none-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 0ecf3b07c1d6d16592ab0318c86f452e16fb3337cfe327bcb76d793a98226dd8
MD5 4f8895209b8f60456a719b9cb67ec3a6
BLAKE2b-256 4b5275d80da77359cdf46c587ee85107cf6d5952a52e8cd987cff29cf85caabd

See more details on using hashes here.

File details

Details for the file warp_lang-1.8.0-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for warp_lang-1.8.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 373464bee59be37018d134b5924bf8fdb33d1313f484fd1b7c64296971c26ae2
MD5 c8b0c30e98b6987f89af6648581f85e5
BLAKE2b-256 5a7d4a80e98139220476db62d9990fadf6d8e93404bc0dab5d6147e69da937c4

See more details on using hashes here.

File details

Details for the file warp_lang-1.8.0-py3-none-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for warp_lang-1.8.0-py3-none-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 1be62e7b3e8019ccccc00916c2798afc6c4bfce17d1d6025dc8ef5c790e42c1d
MD5 08880503479a156d4634db2ebce20552
BLAKE2b-256 285b27cbc1339c34b3d18dfee86c050b2be42781ed30f131d97e80522926e02a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page