Skip to content
Evezerest edited this page Dec 29, 2021 · 39 revisions

这里用于记录iCafe咨询池中沉淀的飞桨用户的提问,示例如下:

  • Q:paddle 2.0 是否支持 python2,python3.5 ?
  • A:paddle 2.0依然提供了python2,python3.5的官方安装包,但未来的某个版本将不再支持python2,python3.5。(python 官方已停止对python2,python3.5的更新和维护)
  • 卡片编号:DLTP-00000

- Q:为什么 paddle2.0以后的版本要放弃lod_tensor @张军

  • A:LodTensor 的概念和用法相对 Tensor 更复杂,会增加用户的学习成本和使用成本。(官方回复待补充)
  • 卡片编号:DLTP-38977

- Q:组网过程中,有些api输入要求lodtensor,有些api输入要求tensor,比如lstm要求lodtensor,但是后面接的softmax_with_cross_entroy要求tensor,这种情况怎么处理呢?@张军

  • A:2.0版本后,统一为Tensor,不在区分LodTensor和Tensor的概念。对于老版本API,能够都可以直接传入LodTensor。但需要注意的是,目前很多OP虽然可以接受LodTensor的输入,但是只会当做普通Tensor处理,不会处理lod信息。
  • 卡片编号:DLTP-36625

- Q: 如何对模型进行梯度裁剪?@周威

  • A: Paddle的梯度裁剪方式需要在optimizer中进行设置,目前提供三种梯度裁剪方式,分别是paddle.nn.ClipGradByValue(设定范围值裁剪)、paddle.nn.ClipGradByNorm(通过L2范数裁剪)、paddle.nn.ClipGradByGlobalNorm(通过全局L2范数裁剪),需要先创建一个该类的实例对象,然后将其传入到优化器中,优化器会在更新参数前,对梯度先进行裁剪。目前不支持其他方式的梯度裁剪。https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/nn/ClipGradByValue_cn.html#clipgradbyvalue
  • 卡片编号:DLTP-36671

- Q:静态图模型如何拿到某个variable的梯度?@秋良

  • A:把想要拿到的Variable的梯度名字放到fetch_list里,就可以获取到,一般variable的梯度的名字是variable的名字加上 "@GRAD"。
  • 卡片编号:DLTP-36713

- Q:如何打印模型中某一个参数/tensor的值?@秋良


  • Q:PaddleClas repo下用ResNet50.yaml的配置跑resnet50,如果把batch_size调整到64,其他参数有需要相应做出调整么?另外是否有一版可以跑到精度76.5%以上的配置?
  • A:按PaddleClas里的默认配置是可以跑出对应指标的。需要精度更高可以看看ResNet_vd;学习率需要依据batch_size变化的倍数做相应调整的。比如batch_size从32变为64,那么学习率需要变为原来的两倍。
  • 卡片编号:DLTP-36763


- Q:paddle存下来的所有模型变量,如何开一个脚本,单独load其中某一个变量,然后修改变量中的值?@威行


- Q:paddle 2.x 如何保存模型文件呢? (paddle 1.x 中的 model 文件)?@威行


- Q:是否有 einsum 求和api @梦柳


  • Q:添加 profiler 的时候报错如下: /paddle/paddle/fluid/platform/device_tracer.cc:131: error: function dynload::cuptiActivityEnable(CUPTI_ACTIVITY_KIND_MEMCPY) failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES.
  • A:docker 不需要 --privileged ,--cap-add SYS_ADMIN 就可以,但是 docker 里面的要是 root 用户才可以,只使用有root权限的账户也不可以
  • 卡片编号:DLTP-37279

- Q:Paddle 有多机多卡的教程么?@李季


  • Q:动态图转静态图部署后是否会存在风险?
  • A:如果推理阶段没有if for while这些分支,都是sequence的应该没有风险,有控制流的地方可以根据此文档 注意一下
  • 卡片编号:DLTP-37434

  • Q:请问paddle.hapi.model中的_all_gather函数是不是无法从不同其他卡中获取不同shape的变量,我用这个函数的时候有的卡上有64个样本,有的卡上有32个样本,调用_all_gather函数程序会卡住不动
  • A:是的, allgather得确保不同卡的shape相同
  • 卡片编号:DLTP-37430

- Q:请问iterabledataset多进程读取,每个进程读取一部分数据,最后一个batch的时候数据不够batch size的进程会卡住不动,这个有没有啥好办法解决@凯鹏


- Q:如何在同一个优化器中定义不同的参数的优化策略,比如bias的参数weight_decay的值为0.0,非bias的参数weight_decay的值为0.01@刘鹏



- Q:paddle fluid如何自定义优化器,自定义更新模型参数的规则?@刘鹏(动态图和静态图分开写下)


  • Q:定位到Dataloader有内存泄漏现象?
  • A:2.1.1版本上DataLoader有个线程和内存不能释放的泄漏问题,2.1.2版本已经修复了,可以更新下Paddle版本试下
  • 卡片编号:DLTP-37044

- Q:有没有模型编辑/裁剪工具?@洪明(建议在在线可视化工具上增加一个裁剪保存的功能,需要 pm 评估下需求)

  • A:split_model.tar.gz可以用这个工具,对预测模型进行分割
  • 卡片编号:DLTP-36964

- Q:能够正常推理和训练,但是动转静时报 tensor shape 错误?@留杰

  • A:将输入维度中的none改成实际尺寸就可以了
  • 卡片编号:DLTP-37737

- Q:gather在paddle和torch上的区别?@锦乐


  • Q:在一个GPU平台上编译的paddle,迁移到另一个平台上会报错。
  • A:paddle编译默认 set(archs_name_default "Auto") 选项只能在编译平台上使用。需要迁移是请将此配置设置为all。
  • 卡片编号:DLTP-38267

- Q:BN使用时报 AssertionError: Optimizer set error, batch_norm_1.w_0_moment_0 should in state dict @梦思

  • A:BN在train和eval模式下需要的参数有差别,train时会多moment相关的变量,如果不在checkpoint里加载后会报错。
  • 卡片编号:DLTP-38279

  1. 另外,由于pure fp16训练模式会重新构建一份fp16数据类型的训练参数,如果在优化器的init中调用add_accumulator,这些初始化的参数在后续训练中是无效的,这会导致很对无效的参数占用着内存
  2. 目前paddle的优化器会在执行step时候调用_create_accumulators,这个问题应该是在优化器在调用step之前就去调用optimizer._accumulators
  • 卡片编号:DLTP-37967

- Q:请问paddlepaddle 2.1动态图支持recompute 和 sharding吗?@李季&李龙

  • A:支持的
  • 卡片编号:DLTP-37946

- Q:paddle有对应torch.masked_fill函数api吗,还是需要自己实现? @珂良

  • A:建议用paddle.where替代
  • 卡片编号:DLTP-39134

- Q:paddle与pytorch行为不一致,stop_gradient属性不会传递? @梦柳

  • A:paddle 和 pytorch 在设计上并不完全一致,例如 demo 中的 paddle stop_gradient 和 torch requires_grad 含义就是相反的,因此这样的输出是符合期望的。
  • 卡片编号:DLTP-39238

- Q:在复现nlp相关任务时,这两个基础算子pack_padded_sequence&pad_packed_sequence没有实现 @燚标

  • A:关于pack_padded_sequence 和 pad_packed_sequence这两个算子缺失的问题,大家可以直接在rnn或者lstm的输入中传入sequence_length实现等价的功能
  • 卡片编号:DLTP-39120


  • Q:PDC跑多机时train 0一直遇到 server not ready, wait 3 sec to retry...
  • A:在启动程序前,执行命令 export FLAGS_START_PORT=6170
  • 卡片编号:DLTP-39213

  • Q:请问动态图 CPU 训练如何设置使用多核训练?
  • A:两个方法可以开启动态图CPU单机多进程DataParallel训练:
  1. 首先如果是PaddlePaddle-CPU版本,那么 python -m paddle.distributed.launch --nproc_per_node=4 train.py 方式启动默认是 CPU 并行。也可以与2类似使用backend参数。
  2. 如果是PaddlePaddle-GPU版本,那么 python -m paddle.distributed.launch --backend=gloo --nproc_per_node=4 train.py 就可以开启CPU并行训练。 当然,也可以选择 paddle.distributed.spawn() 方式进行训练。与launch类似,只需要在参数指定backend='gloo'即可。 更加具体的描述可以见PR:https://github.com/PaddlePaddle/Paddle/pull/35745
  • 卡片编号:DLTP-39215

  • Q:请问静态图的参数如何set value?
  • A:静态图下可以使用(假设要设置的参数名称为"data"): with fluid.scope_guard(new_scope): fluid.global_scope().var("data").get_tensor().set(numpy.ones((2, 2)), fluid.CPUPlace())
  • 卡片编号:DLTP-40618

  • Q:如何对卷积权重进行赋值?直接对卷积权重赋值conv.weight = paddle.to_tensor(weight_array)会报错TypeError
  • A:卷积权重的数据类型属于ParamBase,无法直接赋值tensor。建议使用set_value的方式赋值,如下:
weight_tensor = paddle.to_tensor(weight_array)
conv.weight.set_value(weight_tensor)
  • 卡片编号:DLTP-41287

  • Q:请问torch.cuda.FloatTensor关于paddle的api是?
  • A:可以参考paddle.to_tensor, 可以选择cpu和gpu,数据的dtype 参考
  • 卡片编号:DLTP-42224
Clone this wiki locally