问题标签 [automatic-mixed-precision]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
863 浏览

pytorch - 为什么使用 torch.cuda.amp.GradScaler 时比例变为零?

在使用 Pytorch 的自动混合精度包 ( amp )时,我使用以下代码片段来显示比例:

这是我得到的输出:

而这一步之后的所有损失都变成Nan了(同时规模仍然为0)。
我的损失函数或训练数据有什么问题?

0 投票
0 回答
160 浏览

pytorch - 如何在 Pytorch 上使用具有模型并行性的 apex AMP(自动混合精度)?

我的模型有一些 LSTM,当使用一个 GPU 在大型序列上运行时,它们会耗尽 Cuda 内存。所以我将模型的一些组件转移到另一个 GPU 上。我用 Apex AMP 尝试了两件事:

  1. 在调用amp.initialize. 在这种情况下,我在第一次反向传播后很快就得到了 NaN。

  2. 首先调用amp.initialize,然后将模型组件移动到另一个 GPU。在这种情况下,它就像模型反向传播在单个 GPU 上运行。它耗尽了 Cuda 内存。

模型训练在没有 Apex 的情况下运行良好,所以我想我错过了在两个 GPU 上反向传播损失的一些步骤。我查看了 Apex 的文档,但是,它只谈论 DataParallelism,而不是 ModelParallelism。

有任何想法吗?

0 投票
1 回答
946 浏览

pytorch - 我可以使用自动转换(自动混合精度)加速 PyTorch 中的推理吗?

PyTorch 中 autocast的文档(另见此)仅讨论培训。如果我也使用自动转换进行推理,它会加快速度吗?

0 投票
0 回答
104 浏览

tensorflow - TensorFlow 混合精度训练:Conv2DBackpropFilter 不使用 TensorCore

我正在使用 keras 混合精度 API 以适应 GPU 中的网络。通常在我的代码中,这看起来像这样。MWE 将是:

这似乎达到了预期的效果,因为当我训练我的模型并使用 TensorBoard 回调对其进行分析时,我的大部分操作都以半精度运行,其中一些正在使用 TensorCore(我有一个具有计算能力的 GPU 7.0 以上)。

然而,Conv2DBackpropFilter没有使用 TensorCore,即使根据 TensorBoard 信息它有资格使用它。

TensorCore 操作

我还没有整个事情的最小可重现示例,如果需要,我可以处理它,但我想首先知道这是否是预期的行为,或者是否有一些已知的陷阱,因为我找不到任何网上资料。

编辑

我有一个 MRE,它的行为不同,但问题相同:为什么不使用 TensorCore(所有需要的维度都是 8 的倍数)?

在这个 MRE 中,64.2% 的操作时间花费在半精度上,这意味着半精度确实正在发生。在我的日志中,我还检查了计算能力:

然而,没有任何操作(这次不仅仅是Conv2DBackpropFilter)使用 TensorCore 运行。我不明白为什么。

tensorcore_for_mre

0 投票
1 回答
78 浏览

tensorflow - 带有 float16 的 tf2.4 混合精度返回 0 梯度

这个问题之前发过这里,我在这里重新打开它以引起更多关注。

主要问题是在正常的 float32 环境中测试时,张量流返回类似的梯度,但是在我mixed_precision.set_global_policy('mixed_float16')使用 float16 切换后,返回的梯度始终为 0。

下面是一个可以重现错误的玩具代码。

系统信息

操作系统平台和发行版:linux TensorFlow 版本(使用下面的命令):tf2.4.1

重现代码

行为描述

使用 tf.float32 设置时,梯度的结果是合理的,值在 0.6 左右,然而,当使用混合精度转换到 tf.float16 时,梯度始终为 0。我们是否应该期望计算的梯度在普通 float32 模式和混合精度 float16 模式?谢谢!

0 投票
0 回答
111 浏览

python - 使用混合精度和构建 EfficientNetB0 模型时出现 Dtype 错误

系统信息

  • 操作系统平台和发行版:MacOS
  • TensorFlow 安装自:Colab
  • TensorFlow 版本:2.5.0
  • Python版本:python 3.7
  • GPU型号和内存:Tesla T4

错误 TypeError: Input 'y' of 'Sub' Op has type float16 that does not match type float32 of argument 'x'

当前行为

在使用混合精度并构建 Keras 功能 API 模型 (EfficientNet B0) 时,它显示以下错误 TypeError: Input 'y' of 'Sub' Op has type float16 that does not match type float32 of argument 'x'

注意:由于某种原因 StackOverflow 不允许我发布图片。访问以下链接以更深入地了解该问题: https ://github.com/tensorflow/tensorflow/issues/49725

预期行为

我在上一个单元格中设置的全局策略是mixed_float16. 运行时问题正常,tensorflow 2.4.1因此错误与tensorflow 2.5.0

您可以使用以下笔记本重现相同的错误: https ://colab.research.google.com/drive/1TfNZSIJ_I7IZI35RsGFnTdj-6beMHV2_?usp=sharing

0 投票
1 回答
727 浏览

deep-learning - Pytorch混合精度学习,torch.cuda.amp运行比正常慢

我试图从属性中resnet18存在的正常模型推断结果。torchvision.models该模型仅在FP32上进行了简单的训练,没有任何混合精度学习。但是,我想在推理时获得更快的结果,所以我torch.cuda.amp.autocast()只在运行测试推理用例时启用了函数。

下面给出了相同的代码 -

没有amp-

amp-

显然,autocast()启用的代码需要双倍的时间。甚至,对于较大的模型,如resnet50,时间变化也大致相同。

有人可以帮我解决这个问题吗?我在Google Colab上运行这个例子,下面是 GPU 的规格

0 投票
0 回答
78 浏览

python - 如何在 TensorFlow 中使用自动混合精度?

我无法将自动混合精度与 TensorFlow 2.3.2(在 Windows 10 上)一起使用。

我的系统环境中有一个TF_ENABLE_AUTO_MIXED_PRECISION变量设置为 1。我已经使用显式 Python 代码启用了内存增长。

我只是在做模型推理,而不是训练。我没有打电话model.compile

我在 TensorFlow 日志中没有看到任何关于检测或启用自动混合精度的信息,并且内存要求与没有设置环境变量时一样高。7GB 很多,如果 TF 使用 float16 而不是 float32,我希望会看到不同。

除了设置环境变量之外,我还应该做些什么吗?我就是不知道出了什么问题。我只想让 TensorFlow 自动、透明地重写我的图表,并在内部使用 float16 进行计算。

0 投票
0 回答
32 浏览

tensorflow2 - 混合精度并没有提高性能

我正在尝试使用混合精度来提高我的训练和推理性能,但我注意到它似乎并没有增加,实际上只是稍微降低了我的性能。我开始只是从Tensorflow网站上复制教程,即使这样似乎也没有任何变化。为了测试性能,我简单地计算了运行 fit 函数所需的时间。我正在使用 GeForce RTX 2080 Ti 和 tf 2.4.2。任何建议将不胜感激!

0 投票
0 回答
76 浏览

python - 在 cpus 上尝试 pytorch 自动混合精度时出错

我在 cpu 上试用 pytorch。

我想用混合精度在 cpus 上训练一个模型。由于 pytorch 默认混合精度适用于 GPU,为了在 CPU 上使用混合精度,我尝试使用 ipex(https://github.com/intel/intel-extension-for-pytorch#automatically-mix-precision)最初我正在尝试使用 torch-ipex 1.0.1 和 pytorch 1.5.0 (py3.7_cpu_0)。

对于下面的片段

我收到了错误

AttributeError:模块“ipex”没有属性“enable_auto_mixed_precision”

然后我可以发现在 torch-ipex 1.0.1 中不存在 enable_auto_mixed_precision 属性,所以我使用以下命令将 torch-ipex 升级到 1.9.0

现在我在尝试导入 ipex( import intel_pytorch_extension as ipex)时遇到以下错误

导入错误:/opt/intel/oneapi/pytorch/1.5.0/lib/python3.7/site-packages/torch_ipex/lib/libtorch_ipex.so:未定义符号:_ZNK3c104Type14isSubtypeOfExtERKSt10shared_ptrIS0_EPSo