release_note_cn.md 31.1 KB
Newer Older
1
# Release Notes
2

3
## 重要更新
4 5 6 7 8 9 10 11
本版本对框架功能层面进行了重点增强,预测部署能力全面提升,分布式训练发布PLSC支持超大规模分类,并对参数服务器模式进行优化整合。对编译选项、编译依赖以及代码库进行了全面清理优化。模型库持续完善,优化了整体层次结构,增加了动态图模型实现。端到端开发套件和工具组件进一步完善。  

**训练框架**:增加自动混合精度训练AMP接口和新控制流接口;优化Tensor使用方式和显存分配策略;新增支持Nvidia DALI GPU数据预处理库;持续优化基础OP的功能和性能;动态图的功能进一步完善,性能大幅提升,对data independent的动态图模型提供转为静态图可预测部署模型的功能;框架调试分析功能和易用性全面提升。

**预测部署**:服务器端预测库的Python API大幅优化,新增R语言、Go语言调用预测库的使用方法和示例,强化了量化支持能力;Paddle Lite支持无校准数据的训练后量化方法生成的模型,加强对OpenCL的支持,支持昆仑XPU的预测;模型压缩库PaddleSlim重构裁剪、量化、蒸馏、搜索接口,与模型库充分打通,新增大规模可扩展知识蒸馏框架 Pantheon。  

**分布式训练**:参数服务器模式下针对transpiler半异步、全异步、GEO三种模式,后端实现上统一到communicator中,前端接口统一到fleet中,通过fleet strategy灵活选择不同模式;发布大规模分类库PLSC,通过模型并行支持超多类别的分类任务。  

12
**基础模型库**:发布语音合成库Parakeet,包括多个前沿合成算法;PaddleCV新增14个图像分类预训练模型,3D和跟踪方向模型持续丰富;PaddleNLP的分词和词性标注模型支持jieba分词;PaddleRec增加多任务模型MMoE。模型库整体增加了广泛的动态图模型实现。模型库整体层次结构做了调整优化。
13 14 15

**端到端开发套件**:PaddleDetection和PaddleSeg新增大量模型实现及预训练模型,典型模型的训练速度和精度提升,模型压缩和部署能力大幅提升,使用体验全面优化。发布ElasticRec推荐排序系统,通过K8S进行部署,支持流式训练和在线预测服务。  

16
**工具组件**:PaddleHub新增52个预训练模型,总数超过100,功能和体验持续优化;多任务学习框架PALM升级内核,开放API调用,支持更多的任务类型;联邦学习PaddleFL新增公开数据集。深度强化学习框架PARL和飞桨图学习框架PGL也对应版本升级,支持更多功能,开放更多算法和基线。
17 18 19

## 训练框架
- API
20 21 22 23 24 25 26
    - 增加自动混合精度训练AMP接口:能以通用的方式把一个网络转成混合精度训练,同时保证精度波动在正常范围内
    - 增加新的控制流接口并推荐使用:新增while_loop(循环控制功能)、cond(条件分支功能)、case和switch_case(分支控制功能)4个控制流OP,更加易用,且支持如下新增功能:
        - 支持使用python callable作为控制条件或执行体
        - 支持控制流中的不同分支使用不同loss或optimizer
        - 支持控制流中的condition部分使用CPU数据或GPU数据
    - 部分API参数支持使用变量列表:针对部分API的parameter_list或no_grad_set参数只支持使用字符串列表的情况,增加对变量列表的支持,使用如下API时不再需要提前获取相关变量的name属性:
        - fluid.backward.append_backward(loss, parameter_list=None, no_grad_set=None, callbacks=None)
27
        - fluid.backward.gradients(targets, inputs, target_gradients=None, no_grad_set=None)  
28
        - 各种Optimizer的minimize方法,如Adam的minimize:minimize(loss, startup_program=None, parameter_list=None, no_grad_set=None, grad_clip=None)
29
- 基础功能优化
30 31 32 33 34 35 36 37 38
    - 支持使用numpy的float16类型设置Tensor数据,无需先转换为uint16类型。
    - 支持直接使用负号,得到Tensor的相反数。
    - 显存分配策略:
        - 默认策略变为AutoGrowth:在不影响训练速度的情况下,按需申请显存。规避之前的默认显存预分配策略下难以在同一张GPU卡上再起新任务的问题。
        - 多卡任务显存分配调整:将不同GPU卡上的显存分配器设置为Lazy初始化的方式。若用户不使用某张卡,则不会在该卡上申请显存。避免当其他GPU卡上有显存占用时,在空闲GPU卡上跑任务若不设置CUDA_VISIBLE_DEVICES导致显存OOM的问题。
    - OP功能升级
        - elu:该激活函数支持计算二阶梯度。
        - prroi_pool:rois参数可以接受Tensor或LoDTensor类型。
        - conv2d,pool2d,batch_norm,lrn:反向计算全部支持使用MKL-DNN高性能计算库。
39
        - argsort:支持降序排序(新增descending参数,默认值为False)。
40
- 基础性能优化
41 42 43 44 45 46 47 48 49 50
    - DALI预处理加速
        - 增加对Nvidia DALI GPU数据预处理库的支持,可用于加速图片,视频,语音等数据预处理。
    - 自动混合精度训练优化
        - 实现如下优化策略,并配合DALI数据预处理,ResNet50模型训练吞吐大幅提升:V100单卡混合精度训练吞吐从600+ images/sec提升到1000+ images/sec;单机8卡吞吐达到7840 image/sec,4机32卡吞吐达到28594 images/sec。
            - 增加batch_norm和conv2d等op对NHWC数据布局输入的支持,以使用Tensor Core加速fp16计算或减少访存耗时。
            - 基于IR Pass机制对模型中的部分op pattern进行融合,如batch_norm和relu等。
            - 优化elementwise(add,mul)等op的计算kernel。
    - 优化RecomputeOptimizer提升batchsize, 在Bert-large模型上最大batchsize比不使用RecomputeOptimizer增大533.62%,比上一版本提升一倍。
    - OP性能优化
        - 实现embedding和sequence_pool的融合算子fuse_emb_seq_pool,优化bloom_filter中的murmurhash3_x64_128,有效提升部分NLP模型的训练速度。
51
        - 优化了mean op的GPU性能,输入数据为32 * 32 * 8 * 8的Tensor时,前向计算速度提升2.7倍。
52 53
        - 优化assign、lod_reset op,避免不需要的显存拷贝和data transform。
        - 优化了stack OP的kernel实现,XLnet/Ernie模型GPU单卡性能提升4.1%。
54
- 动态图
55 56 57 58 59 60 61 62 63 64
    - 功能优化
        - 移除了动态图Layers 中的 name_scope 参数,使得用户更方便继承和调用。
        - 移除to_variable接口中的block参数,简化了API的使用。
        - 针对模型参数依赖数据的问题,移除了 build_once设计,使得Layers在 **init** 执行完成之后就可以获取到所有的参数表,方便save load、参数初始化、参数debug、参数优化等。
        - 完善自动剪枝,方便用户组网并减少反向计算量。
        - 支持 SelectedRows 操作,使 Embedding 层支持单卡的稀疏更新。
        - 针对框架缺少容器类的问题,新增ParameterList、LayerList、Sequencial功能,方便用户组网。
        - 支持named_sublayers、named_parameters功能,方便用户编程。
        - 支持Linear lr warmup decay策略。
    - 性能优化
Q
qiceng 已提交
65
        - 优化了python 与c++ 交互,GradMaker、OperatorBase、allocator等。基于LSTM的语言模型任务在P40机器上性能提升提升270%。
66 67 68 69 70 71 72
        - 针对optimize中多次调用optimized_guard无用代码导致的性能问题,移除了冗余代码。Transformer模型(batch_size=64)在P40机器上,SGD、Adam等优化器有5%~8%%的性能提升。
        - 针对AdamOptimizer中额外添加scale_op更新beta参数对性能的影响,将beta更新逻辑融合到adam_op中,减少op kernel调用开销。Dialogue-PLATO模型P40机器上性能提升9.67%。
        - 优化动态图异步DataLoader,对于Mnist、ResNet等CV模型任务在P40机器上单卡训练速度提升超过40%。
        - 新增numpy bridge功能,支持在cpu模式下Tensor和ndarray之间共享底层数据,避免创建Variable时numpy输入需要拷贝的问题,提升效率。
        - 显存优化:提前删除反向不需要Tensor Buffer的前向变量空间的优化策略,在ResNet等模型上最大batch size提升20%-30%以上。
    - 动态图部署
        - 支持TracedLayer接口,实现 data independent的动态图模型转为静态图可预测部署的模型。
73
- 调试分析
74 75 76 77 78 79 80
    - 报错信息优化 :对框架报错信息整体归类,实现报错信息的体系化,同时完成文案优化,帮助用户更快速、准确的定位和解决问题。
    - 优化性能分析profile 功能
        - 增强profiler的功能和准确性,支持不同级别的profile选项,能够在profile数据中记录事件的调用关系并打印出来。
    - 优化nan inf检查调试(通过FLAGS_check_nan_inf生效),性能、功能及输出信息均有较大提升:
        - 速度上,v100测试ResNet50模型相比原工具组件约有1000倍性能提升,保持正常训练80%以上的效率。
        - 功能上,增加fp16的支持,可设置环境变量跳过op、op_role、op_var的检查,方便fp16模型的调试。
        - 输出信息更加翔实,除出错的op及tensor名称外,还会打印出错的nan、inf及正常数值的数量以便于调试。
81
- 发布cpu训练和预测的轻量级安装包paddlepaddle-tiny,支持window/linux/Mac操作系统以及python27/python35/python36/python37:
82 83 84 85
    - 编译选项:no avx, no ml, no gpu, no unittest
    - 裁剪掉slim和部分dataset。
    - linux包体积从90M减小到37M;windows包体积从50.8M减小到9.6M;mac包体积从59M减小到19.8M。
    - 安装requirements依赖从15个减小到7个。
86 87 88

## 预测部署
- 服务器端预测库
89 90 91 92 93 94
    - Python API
        - 支持从内存读写模型,以满足模型加密的需求。
        - 不再在预测模型最后添加 Scale 算子。
        - 新增ZeroCopy API,与C++接口基本一致,支持以numpy.ndarray作为输入和输出,在Python端使用更加方便。
        - 在AnalysisConfig中增加多个接口,完整覆盖C++预测的功能,包括删除pass、禁用预测glog等。
    - 其他编程语言的支持
95
        - 新增R语言、Go语言的预测API,并增加相关的使用方法和示例
96 97 98 99 100 101 102
    - 对外提供 ProtoBuf 对应的头文件,方便用户解析模型结构的需求。
    - 带TRT编译的预测库不再从thrid_party中提供TensorRT库,需要用户自行到https://developer.nvidia.com/tensorrt 下载
    - 功能增强:
        - 打通Paddle Lite以子图方式接入,已验证 ResNet50。
        - 新增MKL-DNN FC INT8 kernel的支持
        - Paddle-TensorRT支持Ernie模型,Ernie模型(seq length=128) 在T4卡上fp16预测速度为3.6ms, 比fp32加速37%。
        - 量化:ERNIE INT8精度相比于FP32 精度略有下降,但其在第二代至强可扩展平台6271上单线程性能优化提升2.70倍,多线程性能提升1.79倍
103
- 移动/嵌入式端[Paddle Lite](https://github.com/PaddlePaddle/Paddle-Lite)
104 105 106 107 108 109
    - 对应发布v2.3版本。
    - model_optimize_tool多项功能升级。
    - 支持“无校准数据的训练后量化方法”,模型存储空间可减少2~4倍。
    - OpenCL:完成30个Image2D Kernel迁移,涵盖14个OP。
    - 对FPGA、NPU的支持进一步加强;支持昆仑XPU的预测。
    - 发布全新官网文档;新增“无校准数据的训练后量化方法”使用文档。
110
- [Paddle Serving](https://github.com/PaddlePaddle/Serving)
111 112 113
    - 发布bert类语义理解模型的远程文本向量表示预测服务。
    - 发布了paddle-gpu-serving whl包,通过pip安装和Python代码即可部署和使用预测服务;
    - 支持Paddlehub中的13种语义理解模型,支持单机多卡,使用Ernie_tiny模型在单张P4 GPU下平均样本长度为7时预测速度为869.56样本每秒。
114
- [PaddleSlim](https://github.com/PaddlePaddle/PaddleSlim)
115 116 117 118 119 120 121 122 123 124 125 126 127
    - 拆分PaddleSlim为独立repo。
    - 重构裁剪、量化、蒸馏、搜索接口,对用户开放底层接口。
        - 量化:
            - 新增基于KL散度的离线量化功能,支持对Embedding层量化。
            - 新增对FC的QAT MKL-DNN量化策略支持
            - 新增PostTrainingQuantization,完整实现训练后量化功能:支持量化30种OP,支持灵活设置需要量化的OP。
            - 量化训练支持设定需要量化的OP类型。
        - 裁剪: 重构剪裁实现,方便扩展支持更多类型的网络。
        - 网络结构搜索:
            - 支持SA搜索,增加更多的搜索空间,支持用户自定义搜索空间。
            - 新增one-shot搜索算法,搜索速度比上个版本快20倍。
    - 新增大规模可扩展知识蒸馏框架 Pantheon
        - student 与 teacher 、teacher与 teacher 模型之间充分解耦,可分别独立运行在不同的物理设备上,便于充分利用计算资源;
128
        - 支持 teacher 模型的单节点多设备大规模预测,在 BERT 等复杂模型上测试加速比达到线性;
129 130 131 132 133 134 135 136 137
        - 用 TCP/IP 协议实现在线蒸馏模式的通信,支持在同一网络环境下,运行在任意两个物理设备上的 teacher 模型和 student 模型之间进行知识传输;
        - 统一在线和离线两种蒸馏模式的 API 接口,不同的 teacher 模型可以工作在不同的模式下;
        - 在 student 端自动完成知识的归并与知识数据的 batch 重组,便于多 teacher 模型的知识融合。
    - 模型库:
        - 发布ResNet50、MobileNet模型的压缩benchmark
        - 打通检测库,并发布YOLOv3系列模型的压缩benchmark
        - 打通分割库,并发布Deepabv3+系列分割模型的压缩benchmark
    - 完善文档:
        - 补充API文档;新增入门教程和高级教程;增加ModelZoo文档,覆盖分类、检测、分割任务。所有文档包含中、英文。
138 139 140

## 分布式
- 参数服务器模式:
141 142 143 144 145 146 147 148 149 150 151
    - 大幅降低训练过程中的内存占用,在1亿规模embedding任务上,Trainer端内存可以降低90%
    - 大幅降低分布式保存模型、加载模型的内存占用, Pserver端内存峰值最大可降低为原先的$1/N,N$为Pserver节点个数。
    - 优化GEO模式 稠密参数通信
    - 支持分布式AUC指标计算
    - 新增分布式Barrier功能
    - 非Fleet的transpiler API加入过期警示, 该API计划在下一个版本中移除
    - Communicator加入半异步模式
    - TrainFromDataset训练接口支持半异步模式
    - Fleet加入DistributedStrategy, 进一步提升分布式易用性, 整合目前分布式相关FLAG
    - Fleet pslib模式支持一个program多loss训练,优化训练性能
    - 千亿稀疏模式支持k8s环境。
152
- [大规模分类库PLSC](https://github.com/PaddlePaddle/PLSC):支持受限于显存容量数据并行无法处理的大规模分类问题
153 154 155
    - 内建ResNet50、ResNet101和ResNet152三种模型,并支持自定义模型;单机8张V100 GPU配置下,ResNet50模型百万类别训练速度2,122.56 images/s,相比标准ResNet50模型加速倍1.3倍;
    - 发布模型在线预测服务plsc-serving whl包,预测人脸识别模型的图片语义向量表示,支持使用用户训练的模型进行预测。ResNet50模型(batch size=256)在单张V100 GPU下预测速度为523.47 images/s;
    - 发布基于ResNet50网络和MS1M-ArcFace数据集的预训练模型:https://plsc.bj.bcebos.com/pretrained_model/resnet50_distarcface_ms1mv2.tar.gz。
156 157 158
- 发布ResNet50混合精度训练benchmark(单卡、多卡、多机)。

## 基础模型库
159
- [模型库地址](https://github.com/PaddlePaddle/models)
160
- PaddleNLP
161 162 163
    - seq2seq支持RL和GAN等训练模式
    - 发布分词和词性标注训练模型,利用知识蒸馏框架 Pantheon,在自有数据集上比PaddleNLP上LAC上F1值提升1%;合入jieba分词,通过加入use_paddle标签来开启深度学习模型模式;并在在jieba加入paddle版本检测和回退机制,保障用户体验。
    - 增加动态图模型实现:word2vec、senta、transformer、bert、seq2seq、LAC。
164
- PaddleSpeech  
165 166 167 168 169
    - 发布语音合成库Parakeet (Paddle PARAllel text-to-speech toolkit)
        - 实现语音合成模型数据预处理、训练和合成等的标准工作流
        - 提供对常见数据集的开箱即用的预处理实现
        - 提供语音合成领域常用模型组件,为实现模型提供支持
        - 发布语音合成模型 DeepVoice3、ClarinNet 、TransformerTTS、FastSpeech、WaveNet、WaveFlow
170
- PaddleCV  
171 172 173 174
    - 图像分类:
        - 新增预训练模型SENet-vd、Res2Net、HRNet系列模型总共14个:
            - SE_ResNet18_vd,SE_ResNet34_vd,SE_ResNeXt50_vd_32x4d,ResNeXt152_vd_32x4d
            - Res2Net50_26w_4s,Res2Net50_14w_8s,Res2Net50_vd_26w_4s
175
            - HRNet_W18_C,HRNet_W30_C,HRNet_W32_C,HRNet_W40_C,HRNet_W44_C,HRNet_W48_C,HRNet_W64_C
176 177 178 179 180 181
        - 支持使用DALI加速数据预处理,在ImageNet训练上获得1.5倍(ResNet50) 至3倍以上(ShuffleNet)加速,并大幅提升GPU利用率。
    - 3D方向:
        - 发布模型PointNet++、PointRCNN。
    - 跟踪模型库 :
         - 发布模型SiamFC、ATOM。
    - 增加动态图模型实现: MobileNet-v1/v2、YOLOv3、FasterRCNN、MaskRCNN、视频分类TSM模型、视频动作定位BMN模型。
182
- PaddleRec
183 184
    - 发布推荐领域多任务模型MMoE, 适用于工业界大规模多任务联合训练。
    - 增加动态图模型实现:gru4rec、deepfm。
185 186

## 端到端开发套件
187
- [PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection)
188 189 190 191 192
    - 进一步提升YOLOv3模型精度,COCO数据上精度达到43.2%,相比上个版本绝对提升1.4%。
    - 新增模型实现及预训练模型:
        - 新增Google AI Open Images 2019-Object Detction比赛中的最佳单模型CascadeCARCNN-FPN-Dcnv2-Nonlocal ResNet200-vd,同时也发布此算法基于Objects365数据的预训练模型。
        - 新增backbone为CBResNet、Res2Net、HRNet的系列预训练模型。
        - 新增LibraRCNN算法及预训练模型。
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
      - FasterRCNN R50 FPN模型新增基于GIoU、DIoU、CIoU loss的预训练模型,不降低预测速度的情况下,在COCO数据上精度分别提升1.1%,0.9%,1.3%。
  - 新增模块:
      - 主干网络: 新增CBResNet、Res2Net、HRNet。
      - Loss模块: 新增GIoU loss、 DIoU loss、CIoU loss,以及Libra loss,YOLOv3的loss支持细粒度op组合。
      - 后处理模块: 新增softnms,DIOU nms模块。
      - 正则模块: 新增DropBlock模块。
  - 功能优化和改进:
      - 加速YOLOv3数据预处理,整体训练提速40%。
      - 优化数据预处理逻辑。
      - 增加人脸检测预测benchmark数据。
      - 增加Paddle预测库Python API下的预测示例。
  - 检测模型压缩:
      - 裁剪: 发布MobileNet-YOLOv3裁剪方案和模型,在VOC数据集上FLOPs - 69.6%, mAP + 1.4%,在COCO数据集上FLOPS-28.8%, mAP + 0.9%; 发布ResNet50vd-dcn-YOLOv3裁剪方案和模型,在COCO数据集上FLOPS - 18.4%, mAP + 0.8%。
      - 蒸馏: 发布MobileNet-YOLOv3蒸馏方案和模型,在VOC数据上mAP + 2.8%,在COCO数据上mAP + 2.1%。
      - 量化: 发布YOLOv3和BlazeFace的量化模型。
      - 裁剪+蒸馏: 发布MobileNet-YOLOv3裁剪+蒸馏方案和模型,在COCO数据集上FLOPS - 69.6%,GPU下预测加速64.5%,mAP - 0.3 %; 发布ResNet50vd-dcn-YOLOv3裁剪+蒸馏方案和模型,基于COCO数据FLOPS - 43.7%,GPU下预测加速24.0%,mAP + 0.6 %。
      - 搜索: 开源BlazeFace-Nas的完整搜索方案。
  - 预测部署:
      - 适配Paddle预测库对TensorRT的支持、对FP16精度的支持。
  - 文档:
      - 新增数据预处理模块介绍文档、实现自定义数据Reader的文档。
      - 新增如何新增算法模型的文档。
      - 文档部署到网站: https://paddledetection.readthedocs.io/zh/latest/

- [PaddleSeg](https://github.com/PaddlePaddle/PaddleSeg)
218
    - 新增模型
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
        - 适用于车道线分割场景的LaneNet模型。
        - 轻量级Fast-SCNN模型。
      - 适用于高精度场景的HRNet语义分割模型 。
  - 发布基于PaddleSlim的多种模型压缩方案:
      - 基于Cityscapes的Fast-SCNN裁剪方案和模型。
      - 基于Cityscapes的Deeplabv3p-Xception和Deeplabv3p-MobilenetV2蒸馏方案。
      - 基于Cityscapes的Deeplabv3p-MobilenetV2搜索方案。
      - 基于Cityscapes的Deeplabv3p-Mobilenet量化方案和模型。
  - 预测部署能力提升
      - 新增Python轻量级部署。
      - 新增对 FP16、Int8量化模型的TensorRT预测加速支持。
      - 新增DeepLabv3p-MobileNetV2的人像分割Paddle-Lite移动端部署教程和案例。
      - 优化模型导出环节,支持图像预处理和后处理的GPU化,性能提升10%~20%。
      - 提供U-Net, ICNet, PSPNet, DeepLabv3+等模型的在不同尺寸图像的预测性能Benchmark,便于用户根据性能进行模型选型。
  - 体验优化
      - 新增学习率warmup功能,支持与不同的学习率Decay策略配合使用,提升Fine-tuning的稳定性。
      - 支持对标注图使用伪彩色图像格式的保存,提升标注图片的预览体验。
      - 新增自动保存mIoU最优模型的功能。
      - 全面优化文档逻辑,提供如工业质检、眼底筛查等工业场景的AIStudio实战教程。
- [ElasticRec](https://github.com/PaddlePaddle/ElasticRec)
    - 发布了ElasticRec推荐排序系统,通过K8S进行部署,支持流式训练和在线预测服务。
240 241

## 工具组件
242
- [PaddleHub](https://github.com/PaddlePaddle/PaddleHub)
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
    - 预训练模型丰富,新增52个预训练模型,目前预训练模型总数100+:
        - 语义模型:新增RoBERTa_wwm、BERT_wwm、ERNIE-Tiny等5个语义模型
        - 文本分类:新增黄反鉴别模型3个。
        - 图像分类:新增ResNext-WSL、EfficientNet等共36个图像分类模型。
        - 目标检测:新增行人检测,车辆检测等共5个检测模型。
        - 关键点检测:新增人脸关键点检测和人体姿态关键点检测模型2个。
        - 人脸口罩检测:新增基于PyramidBox-Lite的人脸口罩检测模型2个。
        - 通用人脸检测:新增Ultra Light Fast Generic Face Detector、PyramidBox-Lite等通用人脸检测模型4个。
    - 功能:
        - 新增基于Paddle Serving的Bert Service文本向量表示服务。
        - Task灵活性增强,新增Hook机制可以支持用户自定义代码加载。
        - 优化代码结果,命令行执行速度提升50% 。
        - 重构Dataset、Reader,适配自定义数据集代码量降低60%。
        - 优化AutoFinetune接口,支持多实验的可视化效果显示。
    - 体验优化
        - 逻辑全面优化,新增丰富的AIStudio教程内容。
        - 官网落地页全新升级,提供在线快速体验和教程指导的功能。
260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281
- 多任务学习框架[PALM](https://github.com/PaddlePaddle/PALM)
  - 支持python3和windows
  - 升级框架内核和多任务底层机制,开放API调用
    - 灵活的模型保存机制,支持单任务保存和全图保存
  - 支持连续训练和连续预测,单次执行下可自由切换数据集文件
  - 新增模型定制化/自定义功能
  - 重构多任务底层kernel,修复若干影响通用性和稳定性的bugs
- 强化多任务学习能力
  - 支持多任务场景下每个任务有不同的batch size和sequence length
  - 修复了多任务多卡训练时,各个显卡上任务不一致的问题
  - 优化了多任务学习调度和终止策略,普遍提升模型泛化能力
- 强化支持的任务的功能和类型
  - 匹配任务支持增强,支持pairwise learning和多类别(如NLI句子关系判断)。
  - 机器阅读理解任务支持增强,新增用户可控的预处理超参数。
  - 新增支持序列标注任务。
- 强化大规模训练/推理能力
  - 新增自动多卡预测能力
  - 重构异步reader,多卡场景下支持变长padding
- 新增预训练模型管理和下载模块
  - 支持BERT、ERNIE、RoBERTa等各预训练模型的管理和下载
  - 新增RoBERTa中文预训练模型
- 联邦学习[PaddleFL](https://github.com/PaddlePaddle/PaddleFL)
282 283 284 285 286
    - 新增scheduler与submitter功能:scheduler可用于在训练过程中控制trainer是否参加更新 。submitter可用于完成在MPI集群提交paddleFL任务的功能
    - 新增LEAF dataset联邦学习公开数据集,并添加api,用于设置benchmark。支持图像分类,情感分析,字符预测等领域的经典数据集,如MNIST,Sentiment140
    - 根据新增组件,在example中修改了原有的样例,并添加了femnist_demo, submitter_demo样例
    - 优化fl_distribute_transpiler,使FedAvg strategy新增对adam optimizer支持;
    - 新增SecAgg strategy(Secure Aggregation),用于实现安全的参数聚合;
287 288 289 290 291 292 293 294
- 深度强化学习框架[PARL](https://github.com/PaddlePaddle/PARL)
  - 发布v1.3版。
  - 新增对Multi-Agent RL算法支持,包括MADDPG。
  - 新增对多卡训练的支持,发布多卡DQN算法示例。
  - 开源连续控制领域的SOTA算法TD3和SAC。
  - 开源NeurIPS2019强化学习挑战赛事冠军模型实现和训练方案,开放训练好的模型(可考虑公开课)
- 飞桨图学习框架[PGL](https://github.com/PaddlePaddle/PGL)
  -  发布v1.1版:
295 296 297
    - 新增对权威图学习数据集OGB的支持,全面支持nodepropered、linkpred、graphpropered三大类型任务,并发布SOTA基线。
    - 发布图推荐解决方案PGL-Rec和知识图嵌入算法集PGL-KE。
    - 易用化改进,发布PGL高阶API。
298
     - 其他升级点:多进程图采样优化,加速GraphSAGE类模型3倍;新增基于Lod Tensor的Graph Batch算子,Graph Pooling算子;Model Zoo新增模型,包括分布式异构图算法、GraphZoom、PinSage等。
299 300 301

## 代码重构和升级
- 编译
302 303 304 305
    - 增加WITH_NCCL编译选项,单卡用户可显示指定WITH_NCCL=OFF加速编译。
    - 新增编译选项WITH_TP_CACHE,缓存第三方源码,避免重复下载,Windows用户可将其设置为ON,加快编译速度并提高编译稳定性。
    - `CUDA_ARCH_NAME`默认值设成`Auto`(`All`表示编译所有gpu架构,`Auto`表示只编译当前机器gpu架构),对开发者来说,使用`Auto``All`节省非常多的编译时间,提高开发效率。
    - 减少了冗余的link环节与产物、多余的文件拷贝,加快了Windows下的编译速度。
306
- 外部依赖库
307 308 309
    - 升级MKL-DNN到最新1.1版本。
    - 将预测库与`third_party` 解耦,重构了28个第三方依赖的编译代码,便于统一管理外部依赖。
    - 移除了第三方依赖的私人仓库2个、无用依赖1个、无用的patch下代码2000+行,提高仓库质量。
310
- 代码清理、重构和优化
311 312 313 314 315 316
    - 去掉无用的`contrib/float16`目录,删除BRPC下无用的snappy/snappystream依赖。
    -`python/paddle/fluid/layers/nn.py`中,根据API功能拆出`loss.py``sequence_lod.py`,减少`nn.py`的代码量,便于阅读。
    - 修复`-Wno-error=sign-compare`的warning对应的代码(共100多处),后续所有该类warning会在编译时报错,提高代码质量
    - 去掉WindowsMSVC编译的`WarningLnk4006/WarningLnk4221`(共约300处),提高仓库质量。
    - 减少reduce_op, expand_op, expand_as_op模版类数量,加速GPU编译和减少whl包70M的空间。
    - 动态图下通过代码自动生成每个OP的pybind函数,用于在layers中直接调用,提高动态图性能并减少与静态图的耦合度。
317 318 319 320 321 322 323 324 325 326 327

## BUG修复
- 修复基于PaddleDetection的 Faster-RCNN使用Python API预测时MKL-DNN报错问题。
- 修复sum op的GPU实现中,由于部分Tensor没有初始化引起训练挂掉的问题。
- 修复fill_constant中,value设置为大整数时精度损失的问题。
- 修复softmax_with_cross_entropy_op在CUDA上的精度不一致问题。
- 修复clone program时program中的stop_gradient属性不能拷贝到新program的问题。
- 修复elementwise_pow op在整数上的精度损失问题。
- 修复一些 GFLAGS 不能在预测库外进行指定的问题。
- 修复 Analysistor 多线程下若干 Pass 导致预测随机 core 的问题。(fc_gru_fuse_pass,seqconv_eltadd_relu_fuse_pass,attention_lstm_fuse_pass,embedding_fc_lstm_fuse_pass,fc_lstm_fuse_pass,seq_concat_fc_fuse_pass)
- 修复了在使用 NativePredictor 指定使用 CPU 预测后,在同一进程内使用 AnalysisConfig 指定 GPU 不生效的错误。
328
- 修复Windows上-DWITH_MKL=OFF时编译报错的bug。
329 330
- 修复py_func OP无法输入tuple(Variable) 的bug,新增如何写PythonOP的代码示例。
- 修复sigmoid cudnn kernel错调用成tanh cudnn kernel的问题。
331
- 修复部分动态图模式下reshape、Conv2D相关的bug;修复网络中部分参数无梯度,导致程序crash 的bug。
332 333
- 修复GradientClip在参数服务器模式下运行错误的BUG。
- 修复参数服务器全异步模式下内存泄露的问题。
Q
qiceng 已提交
334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353

## 兼容性说明
- 静态图:1.7版本对上一版本(1.6.0~1.6.3)完全兼容,1.6+版本训练的模型均可在1.7版本下进行训练或预测。
- 动态图:1.7版本作了大量提升易用性的优化,有部分升级无法兼顾兼容性:
	- paddle.fluid.dygraph提供的API中统一移除了”name_scope”参数:该参数在设计和使用上均没有实际意义,属于冗余参数,为了减少调用API的复杂性,统一进行移除。
	- 部分API参数列表变更:
		- Conv2D、Conv2DTranspose、Conv3D、Conv3DTranspose:添加必选参数 num_channels (required, int),用于表示输入图像的通道数。
		- LayerNorm:移除 begin_norm_axis参数;添加必选参数 normalized_shape (required, int | list | tuple),用于表示需规范化的shape。
		- NCE:添加必选参数 dim (required, int),用于表示输入的维度(一般为词嵌入的维度)。
		- PRelu:添加参数 input_shape (list | tuple),用于表示输入的维度,该参数仅在mode参数为”all”时为必选参数。
		- BilinearTensorProduct:移除参数 size,添加必选参数 input1_dim (required, int) 和 input2_dim (required, int),分别用于表示第一个和第二个输入的维度大小。
		- GroupNorm:添加必选参数 num_channels (required, int),用于表示输入的通道数。
		- SpectralNorm:添加必选参数 weight_shape (required, list | tuple),用于表示权重参数的shape。
		- TreeConv:添加参数 feature_size (required, int),用于表示nodes_vector的shape最后一维的维度。
	- API使用方式变更:
		- Embedding:不再要求输入数据的最后一维必须为1,而且输出的shape的规则发生了改变,比如在NLP任务中,1.6版的Embedding要求输入数据的shape形如[batch_size, seq_len, 1],在1.7版本为保证输出的shape同样为[batch_size, seq_len, embedding_size],输入的shape需为[batch_size, seq_len],
		- FC API被删除,替换用法为Linear,具体迁移方法请见Linear API的文档。
		- Optimizer定义时,需显式指定要优化的参数列表,参数列表可以通过Layer的 parameters() 接口直接获取。
	- 参数名称的变化:
		- 1.7 版本参数名称为了和静态图统一,命名规则进行了调整,增量训练无法加载上一版本(1.6.0~1.6.3)保存的模型。