问题标签 [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.
c++ - 为什么没有 2 字节浮点数并且已经存在实现?
假设我真的很需要内存并且想要更小的范围(类似于short
vs int
)。着色器语言已经支持half
具有一半精度的浮点类型(不仅仅是来回转换以使值介于 -1 和 1 之间,即返回像这样的浮点数:)shortComingIn / maxRangeOfShort
。2字节浮点数是否已经存在实现?
我也有兴趣知道为什么没有 2 字节浮点数的任何(历史?)原因。
c++ - __fp16 类型在 GNU ARM C++ 中未定义
我正在尝试在使用__fp16
GNU ARM C++ 编译器编译的程序中使用类型(半精度浮点),但是每当我尝试声明这种类型的变量时,我都会收到一条错误消息__fp16 is not declared
。我认为这是因为我缺少一些头文件,但我无法找到它可能是哪个头文件的任何数据。有谁知道它在哪里定义/我应该包括什么?
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 实现进一步减少错误?
c++ - 如何在 gcc 上为 x86_64 启用 __fp16 类型
__fp16
浮点数据类型是 C 标准的一个众所周知的扩展,主要用于 ARM 处理器。我想在我的 x86_64 处理器上运行它们的 IEEE 版本。虽然我知道它们通常没有,但我可以使用“无符号短”存储(它们具有相同的对齐要求和存储空间)和(硬件)浮点运算来模拟它们。
有没有办法在 gcc 中请求它?
我认为四舍五入可能有点“不正确”,但这对我来说没问题。
如果这也适用于 C++,那将是理想的。
x86 - 英特尔芯片上的半精度浮点运算
是否可以在英特尔芯片上执行半精度浮点运算?
我知道如何加载/存储/转换半精度浮点数 [1],但我不知道如何在不转换为单精度浮点数的情况下将它们相加/相乘。
[1] https://software.intel.com/en-us/articles/performance-benefits-of-half-precision-floats
opencl - 如何将 OpenCL 代码从 FP32 转换为 FP16?
有没有办法自动转换为在 FP32 GPU 上进行 FP32 计算而编写的代码,所以它总是可以进行 FP16 计算而不是 FP32?
我想要实现的是为旧 GPU(不支持 HALF 类型)运行代码,以在更新的 GPU 上运行......但我自己不通过代码......
如果不可能,请告诉我应该阅读哪些文件,自己动手做...
(新的 GPU 是 Radeon Vega Frontier,驱动程序是 ROCm 1.9.1,操作系统是 Ubuntu 18.04)(代码很广泛,由不同的模块组成......所以我不会在这里发布,除非被要求)
python - 如何获得数字的半精度浮点表示?
x
我想以半精度浮点表示形式获得变量的二进制表示。x
可以是任何东西(如 -1.25 或 10 等)。我已经尝试了很多事情,但无法真正做到这一点。
我试过制作自己的函数,但它不适用于所有数字。它充满了错误。
我尝试过使用 struct 但我不太了解如何使用它。
这似乎没有给出正确的表示。
keras - tf.keras.layers.Conv2D() 不适用于将 Keras 后端设置为 float16
我正在尝试在 Google Colab 中训练 CNN(也尝试使用 Tesla v100),并将 keras 后端设置为 float16。
但是在使用 Conv2D 编译模型时会引发错误。
错误信息:
但是,当我删除卷积层时,它会毫无问题地编译模型。
因此机器显然可以使用 float16,是否需要对 Keras 做任何特殊的事情才能使 Conv2D 在 float16 中工作?
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->形状())
模型结构:
错误发生在这里:
错误:
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 处于活动状态:
但实际运行时间较慢:
我该怎么做才能看到性能改进?