可微分渲染的即时编译器
项目描述
关于此项目
Dr.Jit 是一个用于普通和可微分计算的 即时编译器。它最初是作为 Mitsuba 3 的数值基础创建的,Mitsuba 3 是一个可微分的 蒙特卡洛 渲染器。然而,Dr.Jit 是一个通用工具,还可以帮助进行各种其他类型的并行计算。
Dr.Jit 主要促进以下三个步骤
向量化与跟踪:当 Dr.Jit 遇到一个操作(例如,一个加法 a + b)时,它不会立即执行它:相反,它会记住在某个稍后的时间需要加法,并通过将其记录到图表示(这称为 跟踪)来记住。最终,它将通过 即时编译(JIT)将记录的操作编译成一个 融合 内核,使用 LLVM(当针对CPU时)或 CUDA(当针对GPU时)。值 a 和 b 通常是由许多元素组成的数组,系统使用多核并行性和向量指令集(如 AVX512 或 ARM Neon)并行化它们的评估。
Dr.Jit 对于蒙特卡洛方法非常理想,在这些方法中,必须对数百万个随机样本重复相同的计算。Dr.Jit为目标平台动态生成专门的并行代码。作为后备,Dr.Jit也可以在不进行JIT编译的情况下使用,这使得项目成为一个仅包含头文件的向量库,没有外部依赖。
微分:如果需要,Dr.Jit 可以使用 自动微分(AD)来计算导数,使用 正向或反向模式累积。微分和跟踪协同产生专门的导数评估代码。
Python: 在 C++17 和 Python 中可以访问 Dr.Jit 类型。代码可以在任一语言中开发,甚至可以同时使用这两种语言。Python 和 C++ 代码的组合可以联合跟踪和区分。
Dr.Jit 可以处理具有自定义数据结构、副作用和多态的大型程序。它包括一个数学支持库,包括超越函数和向量、矩阵、复数、四元数等类型。
与机器学习框架的差异
当可以使用基于 Python 的 ML 框架(如 JAX、Tensorflow 和 PyTorch)以及后端(如 XLA 和 TorchScript)进行动态导数编译时,我们为什么还要创建 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.Jit 是 Enoki 项目的继任者,其高级 API 仍然与 Enoki 的 API 有一定相似之处。该系统向不同的方法发展,并有一个全新的实现,因此决定使用不同的项目名称。
项目细节
下载文件
下载适用于您的平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。
源分发版
构建分发版
哈希值 for drjit-0.4.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f02a219fdd01d4832f0f1fba1e8d68d5c55322d095fcbf626d66bdf6a787c693 |
|
MD5 | 91190f08721fbe3d617778339a731c93 |
|
BLAKE2b-256 | 6594b7a9f0ff142a770ad0a2f33e802c74d553d615ea0300ee644a884ebe8761 |
哈希值 for drjit-0.4.6-cp312-cp312-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 52b9de6493b825bdd589e58b5ced4f3dbb6b8b3714ea64294f2d310f25c38d9c |
|
MD5 | 8ce2d1b36a20e11ae09aa6cd58bd8409 |
|
BLAKE2b-256 | b327c6ae38e88071684d59ce7836b9b3fc23d3414ef8074c62519761320286cc |
哈希值 for drjit-0.4.6-cp312-cp312-macosx_10_14_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d9d79bdc1b4300b3615c23455759800412b041baca308d916ee57dcc8df036ea |
|
MD5 | d00c221882d6aaf1c451e3eb65114a0b |
|
BLAKE2b-256 | b094597c85278e8a31bc6442dc5cbacb252c5b73c9a26fd33f68fd071d40ff28 |
哈希值 for drjit-0.4.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4ad24dd522831f9dc2ba38a4b63eab2caf1f23fea5f25795d03e46fd8ba7b11c |
|
MD5 | cadd73ab3e8997db1478aafae865cd14 |
|
BLAKE2b-256 | dff84dcab18d8768247c8a77aa6e9f9bcf283e3aa0e71a26d360f73a956efb39 |
哈希值 for drjit-0.4.6-cp311-cp311-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 382b3b093f06b859f3ce4539a56d16e76b1298e25db788b0c31ca30d56c1cdf3 |
|
MD5 | 2da068495a1e9fa071be592f732de7b5 |
|
BLAKE2b-256 | 8d9cae7bda95b71f79c6a378d7057c987978fc02713cd2a746775604398cf5f1 |
哈希值 for drjit-0.4.6-cp311-cp311-macosx_10_14_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7b21e8bf28d7cfb732a5f060419055f18d72a2568bf12cce50132eacb316e355 |
|
MD5 | 6159972da581dfef5554f0fe8a52b554 |
|
BLAKE2b-256 | 9cf05ae2a3ba5cbb43ee39237fd2be7409a4b9445662eed8114a0463004b65db |
哈希值 for drjit-0.4.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dcb92670b8e95afab4b57b3a40ff17c0d5e6358d2cf1bfb7f47ecbc78b108acb |
|
MD5 | 58f5791da3dfffdda0b1912ba3f69e7c |
|
BLAKE2b-256 | 47daa3e3c697c9d758421f7ac0cbbc198a81607085829793a7c6eb9ae4e17d62 |
哈希值 for drjit-0.4.6-cp310-cp310-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c4289950e6f8a2da4ff545160a4882dd8f11c7888e71d9bac8220717e1e12109 |
|
MD5 | 0f59d13d087f9d65a1914815a728c040 |
|
BLAKE2b-256 | 166b0b9cbbe815eb356ae06486c3f5533b80dbaa82eee51e79cdec7c1d168cb5 |
哈希值 for drjit-0.4.6-cp310-cp310-macosx_10_14_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 69576b5f438083df724f5c73a0faaa96623da4bbec2c4d5ae0fa1e51edd94fa4 |
|
MD5 | ff914d3a01dbbc6deb6e1807627bd65b |
|
BLAKE2b-256 | 614ac0447bf09f9461948c4de3472b6c7da6bb574d37902fdf65409bbf899deb |
哈希值 用于 drjit-0.4.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 00bc884b85f9bcc7164c189e4db425bffa962bc32f54c154ee99da69b3eb3a55 |
|
MD5 | 177387bf43b8b41462e2040c23784488 |
|
BLAKE2b-256 | c83bdef11290b6d7d88d3073426ab0cd3071d4dd04f094c490f0024087b0cee4 |
哈希值 用于 drjit-0.4.6-cp39-cp39-macosx_10_14_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a4d8c0316412a6adf05a6d513bca81bbc563a24e9383f2d0c8bba7520ea356fd |
|
MD5 | 5dc88f8a34035bb5af30df6b2d6634fc |
|
BLAKE2b-256 | 671b675a6533f836f00d1292f75fa0f934320a6c756922c974d97c0fe7c3d893 |
哈希值 用于 drjit-0.4.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6c01485c0b773e2b8f7ea1b7e7ab27ca4a84f45ebf0b03d857839d6642b3b20f |
|
MD5 | d0d0842c359e5baefdeecdfddae86ac1 |
|
BLAKE2b-256 | b58190aceb695938b6f40eb3ad003ee2116c7b6bb9bb2bad8dc02e3e303cbc41 |
哈希值 用于 drjit-0.4.6-cp38-cp38-macosx_10_14_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3b57d48cc3d5b5459bc1eb61f81b60e619af1fe57ad23188c7b2c09980ee46a3 |
|
MD5 | bc679d5a238b2b8750e6d6c06f359fff |
|
BLAKE2b-256 | 4596efb8871333b0af41e9b2cb5c33163d9a1ee0d7c587d4271dc756420b70c6 |