Paddle paddlepaddle支持混合精度训练吗

vyu0f0g1  于 2021-11-30  发布在  Java
关注(0)|答案(10)|浏览(331)

如题 想知道paddlepaddle是否能支持混合精度训练或半精度训练?

  • 版本、环境信息:

   1)PaddlePaddle版本:fluid
   2)CPU:预测若用CPU,请提供CPU型号,MKL/OpenBlas/MKLDNN/等数学库使用情况
   3)GPU:cuda9 cudnn7
   4)系统环境:ubuntu python3

  • 训练信息

   1)单机/多机,单卡
   2)显存信息 6g
   3)Operator信息

6fe3ivhb

6fe3ivhb2#

目前只有一部分op可以支持,需要在之前和之后手动加datatype cast。下一个版本中会发布float16训练中自动调scale的功能,半精度训练可以全面应用。

m3eecexj

m3eecexj3#

@xuezhong@dzhwinter

运行fp16之后报错
不运行fp16则没问题

AttributeError: 'MomentumOptimizer' object has no attribute 'backward'
u2nhd7ah

u2nhd7ah4#

要安装什么版本的paddlepaddle才支持?

hjzp0vay

hjzp0vay5#

完整的fp16支持需要到fluid 1.3才行,你的报错是哪个版本的?

ni65a41a

ni65a41a6#

@dzhwinter
原来用master,现在用dev好了
但是用fp16的话还是有问题,这要怎么解决?
报错如下

File "/usr/local/lib/python3.5/dist-packages/paddle/fluid/layers/nn.py", line 1979, in conv2d
    pre_act = helper.append_bias_op(pre_bias, dim_start=1, dim_end=2)
  File "/usr/local/lib/python3.5/dist-packages/paddle/fluid/layer_helper.py", line 423, in append_bias_op
    attr=bias_attr, shape=size, dtype=input_var.dtype, is_bias=True)
  File "/usr/local/lib/python3.5/dist-packages/paddle/fluid/layer_helper.py", line 307, in create_parameter
    "Can not create parameter with default initializer when dtype is not float type. Set default_initializer to fit the parameter dtype!"
TypeError: Can not create parameter with default initializer when dtype is not float type. Set default_initializer to fit the parameter dtype!
i86rm4rw

i86rm4rw7#

反卷积没有fp16操作??

op conv2d_transpose does not have kernel for data_type
fhity93d

fhity93d8#

还没有注册fp16。这个注册一下就好了。

r7s23pms

r7s23pms9#

前一个问题是initilaizer 没有支持fp16,现在还只能加cast

4ioopgfo

4ioopgfo10#

这样子 反卷积吗?

conv6_2 = fluid.layers.cast(conv6_2, "float32")
deconv = fluid.layers.conv2d_transpose(input=conv6_2,filter_size=2,stride=2,num_filters=256,act='relu',param_attr=fluid.param_attr.ParamAttr(initializer=fluid.initializer.Normal(scale=0.01)),bias_attr=fluid.param_attr.ParamAttr(initializer=fluid.initializer.Constant(value=0.0)))

报这个错啊

line 51, in net
    deconv = fluid.layers.conv2d_transpose(input=droped,filter_size=2,stride=2,num_filters=512,act='relu',param_attr=fluid.param_attr.ParamAttr(initializer=fluid.initializer.Normal(scale=0.01)),bias_attr=fluid.param_attr.ParamAttr(initializer=fluid.initializer.Constant(value=0.0)))

paddle.fluid.core.EnforceNotMet: Invoke operator conv2d_transpose error.

C++ Callstacks: 
Tensor holds the wrong type, it holds ::paddle::platform::float16 at [/paddle/paddle/fluid/framework/tensor_impl.h:29]

相关问题