-
Notifications
You must be signed in to change notification settings - Fork 5.6k
用户常见问题
这里用于记录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的值?@秋良
- A:在executor.run中,将要打印的参数名字加入fetch_list参数,拿到后就可以打印。 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/static/Executor_cn.html#executor
- 对于静态图,也可以在组网时加入print算子。 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/static/Print_cn.html#print
- 卡片编号:DLTP-37741
- Q:PaddleClas repo下用ResNet50.yaml的配置跑resnet50,如果把batch_size调整到64,其他参数有需要相应做出调整么?另外是否有一版可以跑到精度76.5%以上的配置?
- A:按PaddleClas里的默认配置是可以跑出对应指标的。需要精度更高可以看看ResNet_vd;学习率需要依据batch_size变化的倍数做相应调整的。比如batch_size从32变为64,那么学习率需要变为原来的两倍。
- 卡片编号:DLTP-36763
- Q:在模型定义中使用Sequential会出现模型结构一致但是训练效果不同的问题?
- A:需要注意 PaddlePaddle 和 pytorch 并不是完全对齐的,部分 api 在使用时会存在 diff,具体可以参考:PyTorch-PaddlePaddle API映射表:https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/08_api_mapping/pytorch_api_mapping_cn.html
- 卡片编号:DLTP-36787
- Q:paddle存下来的所有模型变量,如何开一个脚本,单独load其中某一个变量,然后修改变量中的值?@威行
- A: load都是通过这个接口:https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/load_cn.html#load 可以通过set_value去修改参数:https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/Tensor_cn.html#set-value-value
- 卡片编号:DLTP-36850
- Q:paddle 2.x 如何保存模型文件呢? (paddle 1.x 中的 model 文件)?@威行
- A:参考文档:https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/02_paddle2.0_develop/08_model_save_load_cn.html
- 卡片编号:DLTP-36912
- Q:是否有 einsum 求和api @梦柳
- A:最新的 develop 分支里已经有了 einsum, 你可以试试最新版本的 paddle https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/tensor/einsum.py(给 api 文档)
- 卡片编号:DLTP-37239
- 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 有多机多卡的教程么?@李季
- A:可以参考Paddle官网的分布式训练教程:https://www.paddlepaddle.org.cn/tutorials/projectdetail/1975035 或者分布式技术文档主页:https://fleet-x.readthedocs.io/en/latest/index.html
- 卡片编号:DLTP-37450
- 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的进程会卡住不动,这个有没有啥好办法解决@凯鹏
- A:可以丢弃或者补齐数据。另外dataloader有个drop_last的参数 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/io/DataLoader_cn.html#dataloader
- 卡片编号:DLTP-37398
- Q:如何在同一个优化器中定义不同的参数的优化策略,比如bias的参数weight_decay的值为0.0,非bias的参数weight_decay的值为0.01@刘鹏
- A:AdamW里有apply_decay_param_fun可以筛选,https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/optimizer/AdamW_cn.html#adamw 。 在ParamAttr中也可以设置regularizer,https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/ParamAttr_cn.html#paramattr
- 卡片编号:DLTP-37396
- Q:请问如何在静态图中获得自动计数器的值,将它转化成可以直接使用的float或者numpy等?
- A:直接fetch变量就行了。fetch_list的列表加上warmup_ratio.name https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/static/Executor_cn.html#executor
- 卡片编号:DLTP-37394
- Q:paddle fluid如何自定义优化器,自定义更新模型参数的规则?@刘鹏(动态图和静态图分开写下)
- A:可以直接参考SGD Momentum优化器的写法,有accumulator变量先创建,然后插入相应的优化器op。 https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/optimizer.py#L1334-L1466
- 卡片编号:DLTP-37389
- 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上的区别?@锦乐
- A:torch的gather中index必须与input的维度相同,paddle的gather中index只能为1-D Tensor,如果将paddle.gather的1-D index按input维度进行broadcast后,传入torch.gather,则可与之等价,除此之外的情形则难以等价,两者存在较大的区别。https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/gather_cn.html
- 卡片编号:DLTP-37702
- 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
- Q:Momentum 构造函数里 _add_accumulator这一段注释 原因是什么? Paddle/python/paddle/optimizer/momentum.py Line 173 in c12176e 源码里注释了这么一小段,会导致另外一个工程https://github.com/PaddlePaddle/PLSC/blob/bd3f2ee722d692d5e3338ed59502801fa3081ed1/dynamic/classifiers/lsc.py#L79 这一段报错。
- A:1. 首先在paddle中其他的的优化器应该都是在_create_accumulators中都会调用add_accumulator,而不是在init函数中。最开始momentum优化器在动态图中是不支持在_create_accumulators中调用add_accumulator,而是在init中调用的,在pure fp16这个pr中(https://github.com/PaddlePaddle/Paddle/pull/35521/files),支持了在_create_accumulators中调用add_accumulator,因此去除了重复在init中调用
- 另外,由于pure fp16训练模式会重新构建一份fp16数据类型的训练参数,如果在优化器的init中调用add_accumulator,这些初始化的参数在后续训练中是无效的,这会导致很对无效的参数占用着内存
- 目前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:如何创建一个自定义数据的tensor?
- A:尝试使用to_tensor:https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/to_tensor_cn.html#to-tensor
- 卡片编号:DLTP-37882
- 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训练:
- 首先如果是PaddlePaddle-CPU版本,那么 python -m paddle.distributed.launch --nproc_per_node=4 train.py 方式启动默认是 CPU 并行。也可以与2类似使用backend参数。
- 如果是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