2.0 升级常见问题
环境变化
问题:paddle 2.0 是否支持 python2,python3.5 ?
- 答复:paddle 2.0依然提供了python2,python3.5的官方安装包,但未来的某个版本将不再支持python2,python3.5。(python 官方已停止对python2,python3.5的更新和维护)
问题:paddle 2.0 是否支持 CUDA9 ?
- 答复:本版本依然提供了CUDA9的官方安装包,但从未来的某个版本起,将不再支持CUDA9。
问题:paddle 2.0 是否支持 CentOS6.0 ?
- 答复:对于CentOS6.0,本版本仅提供了有限度的支持(仅发布了CentOS6下,Python3.7 CUDA10.2/CUDNN7 和CPU的安装包)。(CentOS6官方已宣布了停止更新和维护)
问题:paddle 2.0 是否支持 AVX指令的x86机器 ?
- 答复:2.0版本依然提供了对不支持AVX指令的x86机器上运行飞桨的支持,但未来的某个版本将会废弃对不支持AVX指令的x86机器的支持。
问题:2.0 版本移除了哪些第三方库 ?
- 答复:2.0 版本移除的第三方依赖库为:nltk、opencv、scipy、rarfile、prettytable、pathlib、matplotlib、graphviz、objgraph。由于某些功能依然会有对opencv的依赖,在使用到时,会提示用户进行安装。
具体表现为:
删除依赖这些库的API,原来Paddle基于这些第三方库提供了一些API,在删除这些依赖库的同时也删除了这些API,如:移除matplotlib的同时,paddle.utils.plot也被删除了。
删除依赖第三方库的数据集,如:移除nltk的同时,依赖nltk的数据集sentiment(nltk.movie_reivew)也被删除了。
删除依赖的第三方库后,如果需要使用这些库,需要重新安装
pip install objgraph
,直接import objgraph可能会报错。
问题:从1.x版本升级为2.0版本,哪些API有变动 ?
- 答复:飞桨框架2.0.0版本推荐用户使用位于paddle根目录下的API,同时在
paddle.fluid
目录下保留了所有的1.x版本的API,保留对之前版本API体系的支持。
查看API变动的两种方法:
依据1.8版本API到2.0版本API的对应关系表对API进行升级,请参考文档 飞桨框架API映射表
飞桨提供了迁移工具,来方便用户将旧版本的代码迁移为2.0.1版本的代码,详情请见:版本迁移工具
问题:2.0 版本中是否有LoDTensor ?
答复:2.0 版本没有LoDTensor的概念,统一使用Tensor来表示数据。
解决方案:
使用padding/bucketing的方式对数据进行处理后,使用Tensor来表示数据,进行模型训练,具体示例请参考:IMDB 数据集使用BOW网络的文本分类,使用注意力机制的LSTM的机器翻译。
在使用padding/bucketing方案对性能影响极大的场景下,请谨慎升级,并请期待未来的paddle对该功能更加易用和高效的实现。
问题:1.8开发的静态图代码能在2.0版本中运行吗 ?
- 答复:
所有1.8的静态图模型在2.0版本中都会报错。
- 问题分析:
2.0版本默认开启了动态图模式。即当调用import paddle
后,此时Paddle已经运行在动态图模式下。基于1.8开发的静态图代码,在2.0版本下直接执行会出错。为此,在静态图的一些入口API 中加入了报错检查,例如直接调用fluid.data
会遇到如下错误:
- 解决方案:
旧版本(1.8及之前版本)静态图下的代码,需要在
import paddle
后的头部位置加入paddle.enable_static()
来开启静态图模式,这样才能正常运行。原来通过
dygraph guard
写的动态图代码仍然可以正常执行。但在2.0下可以不需要像以前写dygraph guard
,直接按照动态图模式编写代码。同时,请注意对于GPU版本的paddle,在
import paddle
时默认开启动态图会选择CUDAPlace
作为默认place。如果要修改place,可以通过paddle.set_device()
来完成。
问题:2.0版本中loss.backward()
是否默认清空上个step 的梯度?
- 答复:
2.0版本新增动态图梯度累加功能,起到变相“扩大BatchSize”的作用,backward()
接口默认不清空上个step梯度。
- 解决方案:
调用optimizer.minimize()
后,显式调用optimizer.clear_grad()
来清空梯度。