跳转到主要内容

可微分渲染的即时编译器

项目描述

关于此项目

Dr.Jit 是一个用于普通和可微分计算的 即时编译器。它最初是作为 Mitsuba 3 的数值基础创建的,Mitsuba 3 是一个可微分的 蒙特卡洛 渲染器。然而,Dr.Jit 是一个通用工具,还可以帮助进行各种其他类型的并行计算。

Dr.Jit 主要促进以下三个步骤

  • 向量化与跟踪:当 Dr.Jit 遇到一个操作(例如,一个加法 a + b)时,它不会立即执行它:相反,它会记住在某个稍后的时间需要加法,并通过将其记录到图表示(这称为 跟踪)来记住。最终,它将通过 即时编译(JIT)将记录的操作编译成一个 融合 内核,使用 LLVM(当针对CPU时)或 CUDA(当针对GPU时)。值 ab 通常是由许多元素组成的数组,系统使用多核并行性和向量指令集(如 AVX512ARM Neon)并行化它们的评估。

    Dr.Jit 对于蒙特卡洛方法非常理想,在这些方法中,必须对数百万个随机样本重复相同的计算。Dr.Jit为目标平台动态生成专门的并行代码。作为后备,Dr.Jit也可以在不进行JIT编译的情况下使用,这使得项目成为一个仅包含头文件的向量库,没有外部依赖。

  • 微分:如果需要,Dr.Jit 可以使用 自动微分(AD)来计算导数,使用 正向或反向模式累积。微分和跟踪协同产生专门的导数评估代码。

  • Python: 在 C++17 和 Python 中可以访问 Dr.Jit 类型。代码可以在任一语言中开发,甚至可以同时使用这两种语言。Python 和 C++ 代码的组合可以联合跟踪和区分。

Dr.Jit 可以处理具有自定义数据结构、副作用和多态的大型程序。它包括一个数学支持库,包括超越函数和向量、矩阵、复数、四元数等类型。

与机器学习框架的差异

当可以使用基于 Python 的 ML 框架(如 JAXTensorflowPyTorch)以及后端(如 XLATorchScript)进行动态导数编译时,我们为什么还要创建 Dr.Jit 呢?

原因与典型的工作负载有关:机器学习涉及小型的计算图,但它们由诸如卷积、矩阵乘法等算术密集型操作组成。Dr.Jit 所激励的应用(可微渲染)创建出巨大的混乱的计算图,由 10K 到数百万个“平凡”节点(基本算术运算)组成。根据我们的经验,ML 编译后端使用内部表示和优化传递,对于这种类型的输入来说过于丰富,导致它们在编译时崩溃或超时。如果你遇到过此类问题,你可能会发现 Dr.Jit 很有用。

克隆

Dr.Jit 递归依赖于两个其他仓库:用于 Python 绑定的 pybind11 和提供 JIT 编译器核心组件的 drjit-core

要获取包括这些依赖项在内的整个项目,请使用以下命令克隆项目并使用 --recursive 标志:

$ git clone --recursive https://github.com/mitsuba-renderer/drjit

文档

请参阅 readthedocs.io 上的 Dr.Jit 页面以获取示例代码和参考文档。

参考文献,引用

请参阅论文 Dr.Jit: A Just-In-Time Compiler for Differentiable Rendering,了解详细信息和激励此项目的相关问题。还有一个 视频演示,解释了更高层次的设计决策。

如果你在自己的研究中使用了 Dr.Jit,请使用以下 BibTeX 条目进行引用

@article{Jakob2022DrJit,
  author = {Wenzel Jakob and S{\'e}bastien Speierer and Nicolas Roussel and Delio Vicini},
  title = {Dr.Jit: A Just-In-Time Compiler for Differentiable Rendering},
  journal = {Transactions on Graphics (Proceedings of SIGGRAPH)},
  volume = {41},
  number = {4},
  year = {2022},
  month = jul,
  doi = {10.1145/3528223.3530099}
}

标志和历史

Dr.Jit 标志是由 Otto Jakob 慷慨创作的。前缀 “Dr.” 同时缩短了 可微渲染 和风格化的偏导数 D,同时也传达了强调 阿斯克勒庇俄斯之杖 的医疗含义。可微渲染算法在概念和实现层面上的复杂性已经超出了我们的控制。医生是一个可以在这种极度需要帮助的时刻提供帮助的人。 Dr.Jit 尝试扮演这个角色,以提高可微渲染研究者的福祉。

Dr.JitEnoki 项目的继任者,其高级 API 仍然与 Enoki 的 API 有一定相似之处。该系统向不同的方法发展,并有一个全新的实现,因此决定使用不同的项目名称。

项目细节


下载文件

下载适用于您的平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。

源分发版

此版本没有提供源分发文件。请参阅有关生成分发存档的教程。

构建分发版

drjit-0.4.6-cp312-cp312-win_amd64.whl (4.0 MB 查看哈希值)

上传于 CPython 3.12 Windows x86-64

drjit-0.4.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.7 MB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ x86-64

drjit-0.4.6-cp312-cp312-macosx_11_0_arm64.whl (3.3 MB 查看哈希值)

上传于 CPython 3.12 macOS 11.0+ ARM64

drjit-0.4.6-cp312-cp312-macosx_10_14_x86_64.whl (3.7 MB 查看哈希值)

上传于 CPython 3.12 macOS 10.14+ x86-64

drjit-0.4.6-cp311-cp311-win_amd64.whl (4.0 MB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

drjit-0.4.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.7 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

drjit-0.4.6-cp311-cp311-macosx_11_0_arm64.whl (2.9 MB 查看哈希值)

上传于 CPython 3.11 macOS 11.0+ ARM64

drjit-0.4.6-cp311-cp311-macosx_10_14_x86_64.whl (3.3 MB 查看哈希值)

上传于 CPython 3.11 macOS 10.14+ x86-64

drjit-0.4.6-cp310-cp310-win_amd64.whl (4.0 MB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

drjit-0.4.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.7 MB 查看哈希值)

上传时间: CPython 3.10 manylinux: glibc 2.17+ x86-64

drjit-0.4.6-cp310-cp310-macosx_11_0_arm64.whl (2.9 MB 查看哈希值)

上传时间: CPython 3.10 macOS 11.0+ ARM64

drjit-0.4.6-cp310-cp310-macosx_10_14_x86_64.whl (3.3 MB 查看哈希值)

上传时间: CPython 3.10 macOS 10.14+ x86-64

drjit-0.4.6-cp39-cp39-win_amd64.whl (4.0 MB 查看哈希值)

上传时间: CPython 3.9 Windows x86-64

drjit-0.4.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.7 MB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ x86-64

drjit-0.4.6-cp39-cp39-macosx_11_0_arm64.whl (2.9 MB 查看哈希值)

上传时间: CPython 3.9 macOS 11.0+ ARM64

drjit-0.4.6-cp39-cp39-macosx_10_14_x86_64.whl (3.3 MB 查看哈希值)

上传时间: CPython 3.9 macOS 10.14+ x86-64

drjit-0.4.6-cp38-cp38-win_amd64.whl (4.0 MB 查看哈希值)

上传时间: CPython 3.8 Windows x86-64

drjit-0.4.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.7 MB 查看哈希值)

上传时间: CPython 3.8 manylinux: glibc 2.17+ x86-64

drjit-0.4.6-cp38-cp38-macosx_11_0_arm64.whl (2.9 MB 查看哈希值)

上传时间: CPython 3.8 macOS 11.0+ ARM64

drjit-0.4.6-cp38-cp38-macosx_10_14_x86_64.whl (3.3 MB 查看哈希值)

上传时间: CPython 3.8 macOS 10.14+ x86-64

由以下支持