问题标签 [half-precision-float]

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 投票
8 回答
47367 浏览

c++ - 为什么没有 2 字节浮点数并且已经存在实现?

假设我真的很需要内存并且想要更小的范围(类似于shortvs int)。着色器语言已经支持half具有一半精度的浮点类型(不仅仅是来回转换以使值介于 -1 和 1 之间,即返回像这样的浮点数:)shortComingIn / maxRangeOfShort。2字节浮点数是否已经存在实现?

我也有兴趣知道为什么没有 2 字节浮点数的任何(历史?)原因。

0 投票
1 回答
2372 浏览

c++ - __fp16 类型在 GNU ARM C++ 中未定义

我正在尝试在使用__fp16GNU ARM C++ 编译器编译的程序中使用类型(半精度浮点),但是每当我尝试声明这种类型的变量时,我都会收到一条错误消息__fp16 is not declared。我认为这是因为我缺少一些头文件,但我无法找到它可能是哪个头文件的任何数据。有谁知道它在哪里定义/我应该包括什么?

0 投票
1 回答
1182 浏览

c - 我们如何使用 FP16 半精度浮点数来最小化精度误差

我有一个示例 50.33123 可以以 FP32(1.8.23) 格式存储为 0x4249532E 。如果我们将其转换为二进制

第一位是符号位,0表示正数,

接下来的 8 位是指数 -> 1000 0100 2 -> 84 16 -> 132 10。指数 132 -127 =5

尾数1.1001 0010 1010 0110 0101 110(23 位)

左移我的指数 => 110010.010101001100101110 2 => 50.33123 10

如果我们以 FP16(半精度格式)FP16 => 1.5.10 存储相同的内容:

不四舍五入
1.1001 0010 10 2 左移 5 => 110010.01010 2 => 50.3125 10
误差为 50.33123 - 50.3125 => 0.01873。

四舍五入
1.1001 0010 11 2 => 左移 5 => 110010.01011 2 => 50.34375 10
误差为 50.33123 - 50.34375 = -0.01252

我的问题是,这里的错误很重要。
有没有办法通过 FP16 实现进一步减少错误?

0 投票
1 回答
9575 浏览

c++ - 如何在 gcc 上为 x86_64 启用 __fp16 类型

__fp16浮点数据类型是 C 标准的一个众所周知的扩展,主要用于 ARM 处理器。我想在我的 x86_64 处理器上运行它们的 IEEE 版本。虽然我知道它们通常没有,但我可以使用“无符号短”存储(它们具有相同的对齐要求和存储空间)和(硬件)浮点运算来模拟它们。

有没有办法在 gcc 中请求它?

我认为四舍五入可能有点“不正确”,但这对我来说没问题。

如果这也适用于 C++,那将是理想的。

0 投票
2 回答
7853 浏览

x86 - 英特尔芯片上的半精度浮点运算

是否可以在英特尔芯片上执行半精度浮点运算?

我知道如何加载/存储/转换半精度浮点数 [1],但我不知道如何在不转换为单精度浮点数的情况下将它们相加/相乘。

[1] https://software.intel.com/en-us/articles/performance-benefits-of-half-precision-floats

0 投票
1 回答
685 浏览

opencl - 如何将 OpenCL 代码从 FP32 转换为 FP16?

有没有办法自动转换为在 FP32 GPU 上进行 FP32 计算而编写的代码,所以它总是可以进行 FP16 计算而不是 FP32?

我想要实现的是为旧 GPU(不支持 HALF 类型)运行代码,以在更新的 GPU 上运行......但我自己不通过代码......

如果不可能,请告诉我应该阅读哪些文件,自己动手做...

(新的 GPU 是 Radeon Vega Frontier,驱动程序是 ROCm 1.9.1,操作系统是 Ubuntu 18.04)(代码很广泛,由不同的模块组成......所以我不会在这里发布,除非被要求)

0 投票
0 回答
300 浏览

python - 如何获得数字的半精度浮点表示?

x我想以半精度浮点表示形式获得变量的二进制表示。x可以是任何东西(如 -1.25 或 10 等)。我已经尝试了很多事情,但无法真正做到这一点。
我试过制作自己的函数,但它不适用于所有数字。它充满了错误。
我尝试过使用 struct 但我不太了解如何使用它。

这似乎没有给出正确的表示。


0 投票
1 回答
836 浏览

keras - tf.keras.layers.Conv2D() 不适用于将 Keras 后端设置为 float16

我正在尝试在 Google Colab 中训练 CNN(也尝试使用 Tesla v100),并将 keras 后端设置为 float16。

但是在使用 Conv2D 编译模型时会引发错误。

错误信息:

但是,当我删除卷积层时,它会毫无问题地编译模型。

因此机器显然可以使用 float16,是否需要对 Keras 做任何特殊的事情才能使 Conv2D 在 float16 中工作?

0 投票
1 回答
710 浏览

python-3.x - 混合精度训练报告RET_CHECK失败,ShapeUtil::Equal(first_reduce->shape(), inst->shape())

新设置:2x2080ti Nvidia 驱动程序:430 Cuda 10.0 Cudnn 7.6 Tensorflow 1.13.1

旧设置:2x1080ti Nvidia 驱动程序:410 Cuda 9.0 Tensorflow 1.10

我实现了一个分割模型,它可以在 FP32 或混合精度下进行训练(按照此处的说明http://on-demand.gputechconf.com/gtc-taiwan/2018/pdf/5-1_Internal%20Speaker_Michael%20Carilli_PDF%20For% 20 共享.pdf )。

它适用于旧设置,但 1080ti 不完全支持 float16,这就是我切换到新设置的原因。

在新设置中,FP32 工作正常,但混合精度总是有错误: tensorflow.python.framework.errors_impl.InternalError: RET_CHECK failure (tensorflow/compiler/xla/service/gpu/ir_emitter_unnested.cc:3171) ShapeUtil::Equal(first_reduce ->形状(),inst->形状())

模型结构:

错误发生在这里:

错误:

0 投票
0 回答
954 浏览

tensorflow - TensorFlow 自动混合精度 fp16 比官方 resnet 上的 fp32 慢

我正在尝试使用来自https://github.com/tensorflow/models/blob/master/official/resnet/estimator_benchmark.py#L191的官方 ResNet 模型基准来试验tensorflow-gpu==1.14.0rc0. 我在 2080 Ti、驱动程序 410.78、CUDA 10、Ubuntu 上运行。

我进行了以下更改,以帮助确保比较快速且一目了然:

  • 将 epoch 减少到 10 个。
  • 为运行删除了 2 倍大的批量大小,tweaked以便所有内容都在相同数量的样本上进行训练。
  • 将检查点设置为仅在训练完成后发生一次。
  • 将培训切换为使用 CIFAR-10,因为我已将其下载到本地磁盘上。

我在日志中看到了这一点,这对我来说意味着 AMP 处于活动状态:

但实际运行时间较慢:

fp32(青色)运行时间小于所有 fp16 运行时间。

我该怎么做才能看到性能改进?