### PyTorch 如何计算共轭 Wirtinger 导数?[](#how-does-pytorch-compute-the-conjugate-wirtinger-derivative "Permalink to this heading")
### PyTorch 如何计算共轭 Wirtinger 导数?
通常,我们的导数公式将 grad_output 作为输入,表示我们已经计算过的传入向量雅可比乘积,即,∂s∗∂L,其中 L 是整个计算的损失(产生实际损失),s 是我们函数的输出。这里的目标是计算∂z∗∂L,其中 z 是函数的输入。事实证明,在实际损失的情况下,我们可以仅仅计算∂s∗∂L,即使链式法则暗示我们也需要访问∂s∂L。如果您想跳过这个推导,请查看本节中的最后一个方程,然后跳到下一节。
...
...
@@ -324,7 +324,7 @@ Wirtinger 微积分建议研究 f(z, z*),如果 f 是实可微的,则保证
没有钩子,`x`,`y.grad_fn._saved_self`和`y.grad_fn._saved_other`都指向同一个张量对象。有了钩子,PyTorch 将 x 打包并解包为两个新的张量对象,这两个对象与原始 x 共享相同的存储(不执行复制)。## 后向钩子执行[](#backward-hooks-execution"Permalink to this heading")
没有钩子,`x`,`y.grad_fn._saved_self`和`y.grad_fn._saved_other`都指向同一个张量对象。有了钩子,PyTorch 将 x 打包并解包为两个新的张量对象,这两个对象与原始 x 共享相同的存储(不执行复制)。## 后向钩子执行
您可以通过在其构造函数中传递`pin_memory=True`来使`DataLoader`返回放置在固定内存中的批次。### 使用 nn.parallel.DistributedDataParallel 而不是多进程或 nn.DataParallel[](#use-nn-parallel-distributeddataparallel-instead-of-multiprocessing-or-nn-dataparallel"Permalink to this heading")
此外,如果您正在使用 CUDA 张量,并且 CUDA 版本为 10.2 或更高,则应根据 CUDA 文档设置环境变量 CUBLAS_WORKSPACE_CONFIG:[`docs.nvidia.com/cuda/cublas/index.html#cublasApi_reproducibility`](https://docs.nvidia.com/cuda/cublas/index.html#cublasApi_reproducibility)
### CUDA 卷积确定性性[](#cuda-convolution-determinism "跳转到此标题")
### CUDA 卷积确定性性
虽然禁用 CUDA 卷积基准测试(如上所述)确保 CUDA 每次运行应用程序时选择相同的算法,但该算法本身可能是非确定性的,除非设置`torch.use_deterministic_algorithms(True)`或`torch.backends.cudnn.deterministic = True`。后者仅控制此行为,不像`torch.use_deterministic_algorithms()`会使其他 PyTorch 操作也表现出确定性。
...
...
@@ -102,7 +102,7 @@ tensor([[[ 1.1900, -2.3409],
在某些版本的 CUDA 中,RNN 和 LSTM 网络可能具有非确定性行为。有关详细信息和解决方法,请参阅`torch.nn.RNN()`和`torch.nn.LSTM()`。
+**type_q**([*type*](https://docs.python.org/3/library/functions.html#type"(in Python v3.12)")) - `Distribution` 的子类。## 转换[](#module-torch.distributions.transforms"Permalink to this heading")
@@ -224,7 +224,7 @@ with traced.graph.inserting_after(node):
FX 还提供了另一种自动化级别,即在直接图操作之上。`replace_pattern()` API 本质上是一个用于编辑`Graph`的“查找/替换”工具。它允许您指定一个`pattern`和一个`replacement`函数,然后将跟踪这些函数,查找`pattern`图中操作组的实例,并用`replacement`图的副本替换这些实例。这可以帮助大大自动化繁琐的图操作代码,随着转换变得更复杂,这些代码可能变得难以控制。
像 PyCharm 或 VSCode 这样的 IDE 通常内置了调试器。在您的 IDE 中,您可以选择要么 a)通过在 IDE 中打开终端窗口(例如在 VSCode 中选择 View → Terminal)使用`pdb`,要么 b)使用内置调试器(通常是围绕`pdb`的图形包装器)。## 符号跟踪的限制[](#limitations-of-symbolic-tracing"跳转到此标题的永久链接")
像 PyCharm 或 VSCode 这样的 IDE 通常内置了调试器。在您的 IDE 中,您可以选择要么 a)通过在 IDE 中打开终端窗口(例如在 VSCode 中选择 View → Terminal)使用`pdb`,要么 b)使用内置调试器(通常是围绕`pdb`的图形包装器)。## 符号跟踪的限制
FX 使用一种**符号跟踪**系统(也称为[符号执行](https://en.wikipedia.org/wiki/Symbolic_execution))来以可转换/可分析的形式捕获程序的语义。该系统是**跟踪**的,因为它执行程序(实际上是一个`torch.nn.Module`或函数)以记录操作。它是**符号**的,因为在执行过程中流经程序的数据不是真实数据,而是符号(FX 术语中的`Proxy`)。
当 Python 模块被识别为依赖项时,`torch.package`会遍历模块的 Python AST 表示,并查找具有标准形式的导入语句的支持:`from x import y`,`import z`,`from w import v as u`等。当遇到这些导入语句之一时,`torch.package`会将导入的模块注册为依赖项,然后以相同的 AST 遍历方式解析它们自己。