NVIDIA Warp 文档#

Warp 是一个 Python 框架,用于编写高性能的模拟和图形代码。 Warp 接受常规的 Python 函数,并通过 JIT 编译将它们编译为高效的内核代码,这些代码可以在 CPU 或 GPU 上运行。

Warp 专为 空间计算 设计,并配备了一组丰富的原语,可以轻松编写用于物理模拟、感知、机器人和几何处理的程序。此外,Warp 内核是可微分的,可以与 PyTorch、JAX 和 Paddle 等框架一起用作机器学习管道的一部分。

以下是使用 Warp 实现的一些模拟示例

_images/header.jpg

快速入门#

安装 Warp 最简单的方法是从 PyPI

$ pip install warp-lang

您还可以使用 `pip install warp-lang[extras]` 安装其他依赖项,用于运行示例和 USD 相关功能。

PyPI 上托管的二进制文件目前是使用 CUDA 12 运行时构建的,因此需要最低版本的 CUDA 驱动程序 525.60.13(Linux x86-64)或 528.33(Windows x86-64)。

如果需要在具有较旧 CUDA 驱动程序的系统上获得 GPU 支持,您可以从源代码构建 Warp,或者安装使用 CUDA 11.8 运行时构建的 wheels,如 Nightly Builds 中所述。

基本示例#

下面给出了一个计算随机 3D 向量长度的第一个程序示例

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)

更多示例#

warp/examples 目录位于 Github 存储库中,包含许多在子目录下分类的脚本,这些脚本展示了如何使用 Warp API 实现各种模拟方法。 大多数示例将生成包含当前工作目录中时间采样动画的 USD 文件。 在运行示例之前,用户应确保已使用以下命令安装 usd-corematplotlibpyglet

pip install warp-lang[extras]

也可以使用以下命令手动安装这些依赖项

pip install usd-core matplotlib pyglet

可以从命令行运行示例,如下所示

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

大多数示例可以在 CPU 或支持 CUDA 的设备上运行,但少数示例需要支持 CUDA 的设备。 这些在示例脚本的顶部标记。

USD 文件可以在 NVIDIA Omniverse、Pixar 的 UsdView 和 Blender 中查看或渲染。 请注意,不建议在 macOS 中使用“预览”,因为它对时间采样动画的支持有限。

内置的单元测试可以从命令行运行,如下所示

python -m warp.tests

warp/examples/core#

warp/examples/fem#

warp/examples/optim#

warp/examples/sim#

warp/examples/tile#

Omniverse#

Warp 的 Omniverse 扩展可在 Omniverse Kit 或 USD Composer 中的扩展注册表中找到。 omni.warp.core 扩展将 Warp 安装到 Omniverse 应用程序的 Python 环境中,这允许用户在其脚本和节点中导入该模块。 omni.warp 扩展提供了一系列 OmniGraph 节点和示例场景,演示了 Warp 在 OmniGraph 中的使用。 启用 omni.warp 扩展会自动启用 omni.warp.core 扩展。

请参阅 Omniverse Warp 文档,了解有关如何在 Omniverse 中使用 Warp 的更多详细信息。

了解更多#

请参阅以下资源以获取有关 Warp 的更多背景信息

Warp 中的底层技术已用于 NVIDIA 的许多研究项目,包括以下出版物

  • 使用并行可微模拟加速策略学习 - Xu, J., Makoviychuk, V., Narang, Y., Ramos, F., Matusik, W., Garg, A., & Macklin, M. (2022)

  • DiSECt:用于机器人切割的可微模拟器 - Heiden, E., Macklin, M., Narang, Y., Fox, D., Garg, A., & Ramos, F (2021)

  • gradSim:用于系统识别和视觉运动控制的可微模拟 - Murthy, J. Krishna, Miles Macklin, Florian Golemo, Vikram Voleti, Linda Petrini, Martin Weiss, Breandan Considine 等人。 (2021)

支持#

可以在 GitHub Issues 上提出问题、疑问和功能请求。

Warp 团队还会监控公共 Omniverse Discord 服务器上的 #warp 论坛,快来与我们聊天吧!

对于不适合在 GitHub Issues 或 Discord 上提出的问题,请发送电子邮件至 warp-python@nvidia.com

版本控制#

版本采用 X.Y.Z 格式,类似于 Python 本身

  • X 的增量保留用于对项目进行重大返工,从而导致破坏性不兼容(或达到 1.0 里程碑)。

  • Y 的增量用于包含一组新功能的常规版本。

  • Z 的增量用于错误修复。 原则上,没有新功能。 如果为 0 或不相关,则可以省略。

如果记录良好且逐渐引入,则这类似于 语义版本控制 的次要版本。

请注意,在 0.11.0 之前,此模式并未得到严格遵守。

许可证#

Warp 是根据 Apache License 2.0 版提供的。 有关完整的许可证文本,请参阅 LICENSE.md

贡献#

欢迎社区的贡献和拉取请求。 有关贡献 Warp 开发的更多信息,请参阅 贡献指南

引用#

如果您在您的研究中使用 Warp,请使用以下引用

@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}}
}

完整目录#

用户指南

完整索引