Release Notes

目录

  • 重要更新
  • 用户体验提升
    • 编程易用性提升
    • 默认配置项
    • 接口优化
    • 报错信息优化
    • 文档优化
    • 编译优化
    • Windows支持增强
  • 训练框架
    • 性能优化
    • OP优化
    • Intel N-Graph集成
    • 动态图
  • 预测部署
    • 服务器云端预测库
    • 移动、嵌入式端侧预测库
    • Paddle Serving
    • PaddleSlim
  • 分布式训练
    • 性能优化
    • 容错
    • 部署
  • 模型建设
    • 易用性优化
    • PaddleNLP
    • PaddleCV
    • PaddleSpeech
    • PaddleRec
  • 工具组件
    • PaddleHub
    • PGL 图学习框架
    • PARL 深度强化学习框架
    • PaddleFL 联邦学习
    • Paddle2ONNX
    • X2Paddle
  • BUG修复

重要更新

  • 用户体验和易用性专项提升,包含全面的文档优化、报错信息优化、配置项优化、接口优化、编译优化、多平台支持以及编程易用性提升等各方面。
  • 训练框架进一步优化了速度,完善了显存优化机制,并支持在框架外部自定义C++/CUDA OP。新增了大量OP,并从多个维度优化了大量存量OP,包括兼容性、行为一致性、功能提升等方面。
  • 分布式训练新增LocalSGD、GEO-SGD等策略,大规模同步训练、异步训练速度继续提升,并支持K8S + Volcano任务提交。
  • 部署能力强化
    • 服务器端预测库增加C API,并支持版本兼容检查,实现了大量性能优化工作。
    • 发布PaddleLite,定位高性能、多平台、轻量化的端侧预测引擎,并可作为服务器端预测库的加速库。
    • PaddleServing新增超大规模分布式预估服务能力。
    • PaddleSlim强化了量化训练功能,增加了基于硬件的小模型搜索功能。
  • 模型库易用性和丰富度提升
    • PaddleNLP,发布全新seq2seq相关API和文本生成模型样例。语义表示库新增XLNet预训练模型;开源EMNLP2019阅读理解竞赛冠军模型D-NET,同时支持18个不同抽取式阅读理解数据集打榜。发布飞桨多任务学习库PALM (PAddLe Multi-task learning),更便捷支持多任务机器学习调研。
    • PaddleCV,发布训练部署端到端的图像分割库PaddleSeg。图像分类新增EfficientNet等43个预训练模型。PaddleDetection新增2019 Objects365 Full Track冠军模型、BlazeFace等人脸检测小模型,行人检测和车辆检测的预训练模型。PaddleVedio新增ActivityNet Challenge 2019夺冠模型,扩展包含video caption、video grounding等模型。
    • 发布PaddleSpeech,包含语音识别模型DeepSpeech和语音合成模型 DeepVoice3 ;
    • 增加PaddleRec的模型覆盖
  • 配套工具组件全面升级:
    • PaddleHub新增超参优化Auto Fine-tune功能,并全面提升Fine-tune功能的灵活性和易用性,预训练模型数量大幅增加。
    • 飞桨图学习框架PGL正式版发布,易用性、规模性、丰富性全面提升。
    • 飞桨深度强化学习框架PARL并行能力进一步提升,支持进化算法。
    • Paddle2ONNX和X2Paddle全面升级,飞桨和其他框架的模型互转更加方便。
    • 发布飞桨联邦学习框架PaddleFL

用户体验提升

  • 编程易用性提升
    • fetch变量便利化:针对以往基于变量重命名的存储优化策略必须要求fetch变量设置persistable = True的bug,重构了Inplace复用和跨Operator复用策略,不再强制要求fetch变量必须设置persistable=True,且不会改变任何变量的名称,且均能保证结果的正确性。
    • optimizer.minimize和其他接口调用的位置敏感性问题
针对用户搭建网络时易将exe.run(startup_program)置于optimizer.minimize之后执行,从而导致不明报错的问题,在Optimizer类Op中增加了初始化检查以及易于理解的提示信息,使再出现此类问题时用户能够快速定位错误。
  • 针对用户搭建网络时易将test_program = main_program.clone(for_test=True)置于optimizer.minimize之后执行,从而导致模型测试结果错误的问题,增加了prune_backward接口对在minimize之后clone的test_program进行反向部分的裁剪,使test_program的clone操作的正确执行不再依赖于optimizer.minimize的先后关系。
  • 默认配置项
    • 显存Garbage collection开关默认打开(对应FLAGS_eager_delete_tensor_gb环境变量=0)。
    • build_strategy的选项:
      • build_strategy.enable_inplaceinplace策略默认打开。这样显存Garbage collection策略和inplace策略全默认打开,默认策略即已验证过的最优策略。
      • build_strategy.memory_optimize跨Op显存复用优化策略的默认行为调整为:在Garbage collection策略打开时默认关闭(规避两者合用会比只用Garbage collection策略效果差的问题);而在Garbage Collection策略关闭时默认打开规避两者合用会比只用Garbage collection策略效果差的问题。用户可显式设置build_strategy.memory_optimize = True/False强制打开或关闭跨op显存复用优化策略。
      • 提升了一些速度优化策略的普适性,将fuse_all_reduce_ops、fuse_broadcast_ops 选项默认打开,可以减少计算图中的计算节点个数,进而加速计算图执行。
    • execution_strategy选项:
      • 将num_iteration_per_drop_scope默认值从1改成100,每次迭代之后都要进行一次同步操作,提升速度。
  • 接口优化
    • 针对Python存储优化接口paddle.fluid.memory_optimize优化效果欠佳、不稳定等问题,彻底废弃了此接口,此版本后该接口不会对用户网络进行任何优化,并可能在后续版本中彻底移除,建议用户删除代码中的paddle.fluid.memory_optimize调用。
    • 统一DataLoader接口。针对以往Reader接口繁多、名称晦涩难懂等问题,统一了PyReader和Dataset接口,用户可通过fluid.io.DataLoader.from_xxx创建数据加载器,可通过for-range方式迭代,简化使用方法,统一接口形式。
    • RecordIO接口移除,不再支持RecordIO接口。
    • 优化data接口,新的fluid.data接口相对fluid.layes.data 接口将对输入的数据的 shape 和 dtype 进行检查,使用None 和 -1 支持可变长维度。如果输入的 shape 或者 dtype 不对,将会报错。
  • 报错信息优化
    • 简化C++信息栈输出,过滤和paddle函数无关的、对调试几乎没有帮助的栈信息和符号,大幅缩短了信息栈长度,提升了调试体验。
    • 对报错信息栈重新排版,添加清晰的分段标识与提示,并将核心提示置于最后,便于用户迅速定位重要信息,提升了调试体验。
    • 对34个重点python api增加输入类型检查,能正确报出输入类型不符合的错误,避免误导性报错。
    • 增强34个重点Op的维度检查报错信息,能打出详细维度信息,便于用户调试。
    • 针对sequence类op输入不含LoD的Tensor时报错不清晰的问题,为sequence类op增加了Input Tensor LoD信息检查,使错误提示更加直观易懂。
    • 强化机器自动化报错信息输出,在CI中强制推荐使用PADDLE_ENFORCE_XXX来替换PADDLE_ENFORCE接口,模版化打印出更具体的报错信息,并对应完成修复存量修复。
  • 文档优化
    • 全面优化了所有API的中英文文档,保证文档的正确性、规范性、易读性,完善对应示例。
    • 增加了动态图中相关的更多文档说明和实例。
    • 对预测教程文档进行整体修改,重新组织结构和内容,提高了可读性和实用性。
    • 优化了部分指南性文档。
  • 编译优化
    • 将默认的CMAKE_BUILD_TYPE从RelWithDebInfo改成Release,减少初次接触的开发者的编译目录大小,避免因为编译目录太大导致编译失败。
    • 修复inference_lib.cmake编译随机失败的问题。
    • 去掉use_fast_math编译选项,避免为了提升性能而降低了CPU/GPU上的精度。
  • Windows支持增强
    • 支持vs2017编译。
    • 编译流程优化,拆分第三方和Paddle的编译依赖关系,不再依赖openblas的预编译库。
    • 支持cuda10。
    • 增加模型支持,修复之前在windows无法正常运行的模型。
    • 支持Paddle CPU 版本离线安装包。
    • 支持预测SDK C-API。

训练框架

  • 性能优化
    • GPU性能优化
      • 使用cuRAND库优化dropout的GPU实现,dropout op本身加速3.4倍,Transformer base模型和big模型在V100上的训练分别加速3.8%和3.0%。
      • 对smooth_label的CUDA核函数完成代替Eigen实现,smooth_label op本身加速1.47倍。
      • 对 recurrent_op 的冗余 tensor copy 进行 share data,和删除运算过的 scope,该优化使得 benchmark 中 RNN 相关模型显存占用减少了 3 - 4 倍,速度有 2% - 数倍的提升。
    • CPU性能优化
      • BERT优化:新增matmul multi-head MKL的支持。
      • 对lookup_table_op和sequence_pool_op (sum类型)做fuse,使用sparse GEMM优化,PyramidDNN模型在CPU上的训练速度获得8%的提升。
    • 内存/显存优化
      • 新增变长输入下的MKLDNN分层缓存策略和清理策略,修复MKLDNN在变长输入下内存泄漏问题 。
      • 添加了控制流 op 多层嵌套情况下的显存优化策略支持。
      • Allocator容错机制。针对多线程并发申请显存导致显存可能瞬间峰值超标问题,设计了Allocator重试策略,在第一次申请显存失败后会等待最长10s进行失败重试(若期间有显存释放,会提前触发失败重试)。
      • 显存Cache清理。解决了以往TemporaryAllocator和Cudnn workspace单例会cache显存不释放的问题,提高显存利用率。
      • 新增AutoGrowth显存分配策略。用户可通过设置环境变量FLAGS_allocator_strategy=auto_growth开启显存自增长策略,按需分配显存,解决了原有预分配92%可用显存策略占用显存过多、难以按需分配的问题,且不影响模型训练速度。
      • 显存的Allocator容错机制完善,保证Allocator的稳定性。针对多线程并发申请显存导致显存可能瞬间峰值超标问题,设计了Allocator重试策略,在第一次申请显存失败后会等待最长10s进行失败重试(若期间有显存释放,会提前触发失败重试)。
  • OP优化
    • 支持用户在框架外部、脱离框架自定义C++/CUDA OP。
    • 新增OP
      • 新增eye_op,用于构建单位矩阵,或一批单位矩阵。
      • 新增gather_nd_op,gather_op的高维推广,用于将输入数据中的切片,收集到由索引指定的形状的张量中。
      • 新增scatter_nd_op,scatter_op的高维推广,这个操作与scatter_nd_add_op类似,除了相加的张量是通过零初始化的。相应地,scatter_nd(index, updates, shape) 等价于 scatter_nd_add(fluid.layers.zeros(shape, updates.dtype), index, updates)。 用于根据索引indices将更新数据updates散布到新的(初始为零)张量中。
      • 新增scatter_nd_add_op:通过对Variable中的单个值或切片应用稀疏加法,从而得到输出的Variable。
      • 新增center_loss:用以辅助Softmax Loss进行人脸的训练,利用softmax loss来分开不同类别,利用center loss来压缩同一类别。center loss意思为:为每一个类别提供一个类别中心,最小化mini-batch中每个样本与对应类别中心的距离,从而达到缩小类内距离的目的。
      • 新增LookAHead Optimizer:针对Paddle不支持Lookahead优化算法这一问题,我们新增了这一优化算法。它的核心原理是:维护两个参数,快参数正常做前向反向运算,当快参数更新k次后,用它来更新慢参数,使二者同步。他的效果是在某些模型上能收敛更快。
      • 新增InstanceNorm op 实例归一化:根据每个样本的每个通道的均值和方差做归一化,一般用在图像生成模型中,把一个样本的风格迁移到另一个样本中。
      • 新增PreciseRoiPooling :PrROI Pooling采用积分方式计算每个pool区域的值,这种计算方式将区域中的插值看作是连续的,计算所有插值点求积分得到该区域所包围点的总和,最后除以pool区域面积就得到该区域的值,因此结果更加准确。
      • 新增hard_swish_op:hard_swish激活函数,在MobileNetV3架构中被提出,相较于swish激活函数,具有数值稳定性好,计算速度快等优点。
      • 新增mse_loss_op:均方损失函数,用于计算两个输入间的均方差。
      • 新增elementwise_mod的float/doule kernel 。
      • 新增strided_slice op 。
      • MKLDNN kernel更新:
        • 新增Leaky_relu的MKL-DNN kernel 和 conv + activation fusion pass。
        • 支持不同axis的softmax MKL-DNN kernel。
        • 重构5个op (conv, pooling, batch_norm, softmax,LRN)的FP32 MKL-DNN kernel代码,增强代码可维护性和可读性。
    • OP功能优化升级
      • 部分op参数升级支持tensor及包含tensor的list,支持常数对应维度的推断
        • slice op 涉及参数starts 和ends。
        • reshape op 涉及参数shape。
        • expand op 涉及参数expand_times。
        • pow op 涉及参数factor。
        • fill_constant op 涉及参数 shape ,并将calc_gradient接口中使用的fill_constant_batch_size_like替换为fill_constant。
        • uniform_random op 涉及参数shape, 支持tensor及包含tensor的list。
        • image_resize、resize_nearest、resize_bilinear、resize_trilinear支持out_shape为tensor或者包含tensor的list,支持常数对应维度的推断,scale 参数支持tensor。
        • 新增crop_tensor,支持shape参数为tensor或者包含tensor的list,支持常数对应维度的推断。
      • 优化部分op输入tensor的维度检查
        • 移除huber_loss 、rank_loss和cross_entropy op中输入shape的最后一维强制为1的限制,输出loss的shape与label保持一致。
        • 新增fluid.one_hot和fluid.embeddingop,移除input参数shape最后一维为1的限制。
        • 优化sequence_pad和sequence_unpadop中length的shape,由[n,1]简化为[n]。
      • 部分op升级支持channel_last格式输入
        • conv2d、conv3d、pool2d、pool3d新增data_format参数,支持channel_last格式输入。
        • conv2d_transpose、conv3d_transpose新增data_format参数,支持channel_last格式输入。
        • image_resize、resize_nearest、resize_bilinear、resize_trilinear新增data_format参数,支持channel_last格式输入。
        • group_norm支持channel_last格式输入。
      • 涉及padding操作的OP,支持非对称padding,以及SAME和VALID 两种padding方式
        • conv2d、conv3d、pool2d、pool3d支持上述padding方式。
        • conv2d_transpose、conv3d_transpose支持上述padding方式。
      • 对以下op进行inplace显存优化支持
        • elementwise_add_grad_grad, elementwise_sub_grad_grad, elementwise_mul_grad_grad, elementwise_div_grad_grad, relu_grad_grad, leaky_relu_grad_grad, sqrt_grad_grad, square_grad_grad。针对GAN模型梯度惩罚显存占用较高的问题,为二重反向op添加inplace,优化其显存占用。
      • 升级部分仅支持LoDTensor输入的OP兼容padding模式,包括linear_crf_op, crf_decoding_op, hash_op, edit_distance_op, chunk_eval_op, warpctc_op, ctc_align_op, row_conv_op。
  • Intel N-Graph集成
    • 增加了ngraph_subgraph_pass对训练的支持,通过build strategy激活N-Graph提供对parallel executor的支持。
    • 修正N-Graph对多线程问题,提供对多线程预测的支持。
  • 动态图
    • 性能优化
      • 对动态图底层执行机制进行了重构,在大部分模型上有30%左右的速度提升 ,显存开销有2%左右下降。
    • 功能完善
      • 支持基于stop_gradient设置的自动剪枝功能和detach接口,满足冻结部分子网的需求。
      • 支持模型在不同设备上执行data_transform, 可以使用less_than/greater_than等功能。
      • 重新实现op(unsqueezed_op、unstack_op、flatten_op、fill_constant_op)等,使之能够支持动态图。
    • 易用性提升
      • 针对部分动态图不支持的接口提供了优化的报错 (包括Variable相关接口和Optimizer相关接口)。
      • 针对Layer中的参数提供了可供访问的接口。
      • 优化动态图save load接口,旧的dygraph下面的 save_persistables 删除。
      • 支持了Layer call()可以使用关键字传入,使得前向执行时可以自定义传入的参数。

预测部署

  • 服务器云端预测库
    • 接口优化
      • 增加预测C API。
      • 针对设置环境变量GLOG_v=4可以打印出预测过程中包含模型op及op fuse的详细log会暴露较多信息,为AnalysisConfig添加DisableGlogInfo()接口(当前仅支持全局最多调用一次),方便使用者关闭GLOG输出,避免模型结构泄漏。
      • 针对用户在使用C++预测库时不易获得模型描述中的输入shape的问题,为AnalysisPredictor添加GetInputTensorShape()接口,方便用户在运行预测引擎之前从模型中拿到输入shape,以避免输入错误的shape。
    • 功能优化
      • 在模型中添加了模型版本号及算子兼容性信息。在此版本之后,旧版本模型在新版本 Paddle 库上使用 AnalysisPredictor 执行预测时会进行兼容性检查。
      • CPU INT8量化预测支持持续加强:支持mobilenet-ssd的训练后量化, 精度下降1%内, 性能提升3倍在第二代智强可扩展处理器6271上;新增Mul op的INT8 MKL-DNN kernel。
    • 性能优化
      • 优化了Mobilenetv2, ShuffleNet, Effecientnet 在CUDA GPU下的预测速度,mobilenetv2 从 5.3ms 减至 1.9ms,Shufflenetv2 从 6.3ms 减至1.4ms,Effecientnet 从60ms 减至 32ms。
      • 实现一个简化Graph中基础op的Pass,预测时,upscale_in_train类型的dropout op直接移除,downgrade_in_infer类型的dropout op使用scale op代替。该优化使ERNIE模型在P40上的预测速度提升1.8%。
      • 实现一个cudnn_placement_pass,将Graph中所有op的use_cudnn设置成true。该优化使ERNIE模型在P40上的预测速度提升10%。
      • 实现fc op的GPU Kernel,并支持将激活操作融合到fc op中。该优化使ERNIE模型在P40上的预测速度提升2.1%。
      • 实现融合fc+elementwise_add+layer_norm操作的Pass和GPU Kernel。该优化使ERNIE模型在P40上的预测速度提升4%。
      • 实现了multihead matmul 融合算法的相关PASS和Kernel。该优化使Ernie模型在P4 GPU上的速度提升超过30%。
      • 优化QAT(训练中量化)训练出来的模型在CPU INT8 kernel上执行的速度。通过PASS对训练出的QAT模型进行修改,结合训练后优化的PASS,使QAT训练出的模型可以在MobilenetV1, MobilenetV2, ResNet50,VGG16上精度变化(相比于FP32模拟量化)在0.1%内,ResNet101和VGG19精度变化在0.3%内,性能在6个模型上提升相比于原始未优化的QAT模型在第二代智强可扩展处理器6271上可达到4-9倍的性能提升。
    • 问题修复
      • 针对之前AnalysisPredictor中设置FLAGS_profile无效的问题,为AnalysisConfig添加EnableProfile()接口,现在用户可以调用该接口开启预测的profiler,而无需设置FLAG。
      • 对ZeroCopyTensor的copy_from_cpu、mutable_data等方法添加了uint8模板支持,目前ZeroCopyRun已经可以正确地接收uint8输入进行预测。
      • 针对Paddle-TRT在包含多个op共享同一参数的模型如retinanet、faster_rcnn、cascade_rcnn中出现的重复设定weight、过早删除参数等bug进行了修复,Paddle-TRT已可以支持上述模型。
  • 移动、嵌入式端侧预测库
    • 发布PaddleLite,定位高性能、多平台、轻量化的端侧预测引擎,并可作为服务器端飞桨原生预测库的加速库。具体见https://github.com/PaddlePaddle/Paddle-Lite
  • Paddle Serving
    • 新增支持超大规模分布式预估服务能力
      • 发布了来源于百度内部经过海量数据检验的高性能分布式版本kv存储器组件cube,提供稀疏参数的分布式存储和查找,在高并发条件下单位时间吞吐总量是redis的13倍,是单机版kv存储器rocksDB的6倍。
      • 发布了Elastic CTR解决方案:针对超大规模稀疏参数的CTR任务,提供了基于k8s集群的分布式训练以及serving分布式参数部署预测的流程文档,并提供了一键式的解决方案。
    • PaddleServing编译速度提升
      • 预测接口的编译依赖由paddle源码改为paddle inference lib,编译速度提升6倍。
    • PaddleServing易用性提升
      • 支持Python client
  • PaddleSlim
    • 添加基于硬件的小模型结构搜索功能。
    • 对量化训练、蒸馏和通道裁剪三种策略扩充分类模型示例,添加检测模型示例。
    • 新增部分量化功能的支持,目前用户可选择对同一类型的op仅部分进行量化。
    • 新增对pool2d、elementwise_add等op的量化训练支持。

分布式训练

  • 性能优化
    • 新增LocalSGD多机训练算法:针对GPU多机多卡同步训练过程中存在trainer速度不一致(随机)导致同步等待问题,设计了局部异步训练策略,通过多步异步训练(无通信阻塞)实现慢trainer时间均摊,从而提升同步训练性能。在4机32块V100 GPU卡的配置下,在Resnet50 Imagenet分类任务上,测试集top5准确率达到93%的情况下,训练吞吐提升8.16%。模型链接: https://github.com/PaddlePaddle/Fleet/tree/develop/examples/local_sgd/resnet
    • 新增GEO-SGD分布式CPU多线程全异步训练算法:通过训练节点维护独立参数且局部多轮更新,同时全局参数增量更新,大幅降低了训练中的通信占比。在文本匹配Simnet_bow模型上,GEO-SGD相比飞桨1.5全异步模式,在25节点12线程下,训练速度提升2.65倍,保持效果对齐。在Word2Vec模型上,GEO-SGD相比飞桨1.5全异步模式,在4、8、16、32节点16线程下,训练速度分别提升3.79倍、3.92倍、4.69倍、6.88倍,效果保持对齐。
    • Fast Resnet:采用可变图像大小、可变batch size和矩形验证图像等策略,显著提升Resnet50模型在ImageNet数据集的训练速度。在4机32块V100 GPU卡的配置下,top5准确率达到93%的时间缩短至35分钟,收敛速度提升2.21倍。在8机64块V100 GPU卡的配置下,top5准确率达到93%的时间缩短至27分钟。模型链接:https://github.com/PaddlePaddle/Fleet/tree/develop/examples/fast_imagenet
  • 新增超大Batch训练优化器RecomputeOptimizer。在内存固定的情况下,Recompute优化器可以显著提高模型可以运行的batch size,提升为原来的 17%-309%;训练效果是无损的,收敛趋势一致,但实际吞吐会有一定损失。
  • 新增Collective Op:all_reduce_op、broadcast_op、all_gahter_op、reduce_scatter_op,支持在组网中实现进程通信。
  • 容错
    • CPU全异步训练模式加入训练节点心跳检查,及时发现异常节点。
    • 加入retry机制 修复rpc errorcode 14的错误。
  • 部署
    • Paddle-K8S-Operator新增支持Volcano Job的提交,支持CPU分布式训练。

模型建设(PaddlePaddle/models)

  • 易用性优化
    • 全面优化了PaddleNLP和PaddleCV主要模型(Transformer,BERT,DMTK,PaddleDetection,PaddleGAN,PaddleVideo,ImageClassification)的安装、自定义数据以及对windows平台的支持等功能和体验。
  • PaddleNLP
    • 发布文本生成库Seq2seq
      • 开源多个文本生成模型,包括vanilla seq2seq,seq2seq with memory network,variational seq2seq。
    • 升级阅读理解库
      • 开源EMNLP2019阅读理解竞赛百度夺冠模型D-Net和相关预训练模型,兼容MRQA2019开放的18个抽取式阅读理解公开数据集的并行训练、高性能评估以及搭建阅读理解serving的相关工作。
    • 升级语义表示库升级
      • 开源EMNLP2019阅读理解竞赛百度夺冠模型D-Net和相关预训练模型,兼容MRQA2019开放的18个抽取式阅读理解公开数据集的并行训练、高性能评估以及搭建阅读理解serving的相关工作。
    • 升级语义表示库升级
      • 新增语义表示模型XLNet。
    • 发布开放多任务学习库PALM
      • 开源MRQA2019比赛百度夺冠使用的多任务学习框架PALM,只需要几十行代码就可以完成基于ERNIE、BERT等预训练模型的硬共享、层次共享等多任务学习算法。
  • PaddleCV
    • 发布图像分割库 PaddleSeg:具备丰富数据增强、模块化设计、高性能和端到端部署四大特点。
      • 模型
        • 新增DeeplabV3+/UNet/PSPNet/ICNet四种网络支持,对应预训练模型共18个。
        • 新增车道线分割、人像分割、人体部件分割三个预测模型。
      • 功能
        • 支持softmax loss、bce loss、dice loss以及损失函数组合配置。
        • 支持翻转、旋转、多尺度变换、模糊、色彩饱和度调整等十余种数据增强策略。
        • 支持数据检查、边训边评估、模型导出、自动可视化、调参模式等易用性功能。
        • 支持FP16混合精度训练以及动态Loss Scaling。
        • 支持多进程训练与数据预处理。
      • 端到端部署
        • 提供多平台(Windows/Linux)的C++高性能预测库编译、开发和部署。
        • 基于Paddle Serving提供高性能图像分割服务化部署能力。
    • 升级检测库 PaddleDetection
      • 新增2019 Objects365 Full Track比赛夺冠模型;新增DeformableConv系列模型;新增VGG-SSD系列模型;新增Cascade+Mask+FPN模型;新增更多基于的COCO两阶段模型;新增行人检测和车辆检测预训练模型;新增人脸检测模型Faceboxes和BlazeFace系列模型,并发布改进版的轻量级模型。
      • 功能
        • 支持multi-scale的训练、multi-scale测试,支持group norm等。支持FP16训练。增加C++预测部署能力,支持Windows和Linux系统。
        • 增加模型压缩量化和剪枝示例。
      • 增加中文文档,增加基于小数据的快速开始、迁移学习、模型导出、预测部署等文档,增加预测benchmark文档。
    • 完善图像分类模型
      • 发布9个EfficientNet预训练模型:EfficientNet-b0,EfficientNet-b1,EfficientNet-b2,EfficientNet-b3,EfficientNet-b4,EfficientNet-b5,EfficientNet-b6,EfficientNet-b7,EfficientNet-small。精度与论文持平。
      • 持续新增34个预训练模型:DarkNet53, DenseNet121,Densenet161, DenseNet169, DenseNet201, DenseNet264, SqueezeNet1_0, SqueezeNet1_1, ResNeXt50_vd_32x4d, ResNeXt152_64x4d, ResNeXt101_32x8d_wsl, ResNeXt101_32x16d_wsl, ResNeXt101_32x32d_wsl, ResNeXt101_32x48d_wsl, Fix_ResNeXt101_32x48d_wsl,ResNet18_vd,ResNet34_vd,MobileNetV1_x0_25,MobileNetV1_x0_5,MobileNetV1_x0_75,MobileNetV2_x0_75,MobilenNetV3_small_x1_0,DPN68,DPN92,DPN98,DPN107,DPN131,ResNeXt101_vd_32x4d,ResNeXt152_vd_64x4d,Xception65,Xception71,Xception41_deeplab,Xception65_deeplab,SE_ResNet50_vd。
    • 升级PaddleVedio
      • 新增动作定位模型: BMN和BSN,其中BMN模型是ActivityNet2019比赛的冠军。
      • 新增VideoGrounding方向的BaseLine模型:TALL。
      • 新增VideoCaption方向的BaseLine模型:ETS。
    • 升级PaddleGAN
      • 新增SPADE模型。
      • 替换Instanceorm实现,STGAN上判别器速度提升12%左右。
  • PaddleSpeech
    • 升级语音识别模型 DeepSpeech 至飞桨最新版本。
    • 开源语音合成模型 DeepVoice3 。
  • PaddleRec
    • 新增支持分布式训练的DeepFM、XDeepFM、DeepCrossNetwork。

工具组件

  • PaddleHub
    • 新增超参优化Auto Fine-tune功能,实现给定超参搜索空间,自动给出较佳的超参组合。
      • 支持两种超参优化算法:基于贝叶斯优化的HAZero和哈密尔顿系统的PSHE2。
      • 支持两种评估方式:Full-Trail和Population-Based。
    • 预训练模型丰富
      • 升级ERNIE 1.0中文模型,提升模型载长文本情况下的效果(max_seq_len=512)。
      • 升级LAC模型至v2.0.0,保持效果的同时精简模型结构,提升预测速度。
      • 新增ERNIE 2.0 英文预训练模型。
      • 新增Ultra-Light-Fast-Generic-Face-Detector-1MB人脸检测模型。
      • 新增人体部件分割ACE2P模型。
      • 新增基于DeepLabv3+的人像分割模型HumanSeg。
      • 新增图像生成模型STGAN、AttGAN、StarGAN。
    • Fine-tune API升级,灵活性与易用性提升
      • 新增阅读理解Fine-tune任务。
      • 新增多指标评估功能。
      • 优化predict接口,提升预测性能。
      • 新增优化策略ULMFiT,包括以下三种配置
        • Slanted triangular learning rates:斜三角形学习率微调。
        • Discriminative fine-tuning:支持计算图按拓扑序分层采用不同学习率微调。
        • Gradual unfreezing:根据计算图的拓扑结构逐层参数解冻。
  • PGL 图学习框架
    • 对应发布飞桨图学习框架PGL v1.0正式版。
    • 易用性:新增异构图的Metapath采样与Message Passing消息传递双机制,支持包含多种类型节点和边特征的异构图建模,新增Metapath2vec、GATNE等异构图算法。同时,文档、API、Tutorial等材料也进一步完善。
    • 规模性:新增分布式图引擎和分布式Embedding,可支持十亿节点百亿边的超巨图的多种分布式训练模式。新增distributed deepwalk和distributed graphSage两个分布式样例。
    • 丰富性:新增8个、累计13个图学习模型,涵盖了图神经网络和图表征学习的主流模型。新增的8个模型分别是LINE、struc2vec、metapath2vec、GES、GATNE、SGC、Unsup-GraphSage、DGI。
  • PARL 深度强化学习框架
  • PaddleFL 联邦学习
    • 发布飞桨联邦学习框架PaddleFL,方便快捷地支持联邦学习和AI隐私算法研究,并实现了FedAvg算法和基于差分隐私的SGD算法,支持分布式安全共享学习算法调研。https://github.com/PaddlePaddle/PaddleFL
  • Paddle2ONNX
    • 对应升级paddle2onnx至0.2版本。
    • 新增pip安装方式。
    • 适配飞桨 v1.6的算子和ONNX v1.5版本。
    • 新增精度对齐框架,提供新增代码和模型转换的正确性验证功能。
    • 支持ResNet、DenseNe等10个Paddle图像分类模型的转换。
    • 支持SSD_MobileNet、YoloV3_DarkNet5等4个Paddle目标检测模型的转换。
  • X2Paddle
    • 对应升级x2paddle至0.5版本。
    • 新增pip安装方式。
    • 新增统一的caffe、tensorflow和onnx模型计算图中间表示。
    • 支持caffe多分支模型的转换。
    • 大幅提升主流框架的模型转换能力,支持44个tensorflow OP,33个caffe Layer和48个onnx OP。
    • 为Paddle Lite提供多框架模型部署能力,支持包括图像分类、目标检测和语义分割在内共18个模型的无损转换。

BUG修复

  • 修复 rnn_search 模型无法跑起来的bug。
  • 修复 save_inference_model 在 prune recurernt_op 时的 bug(该 bug 会导致一些 RNN 模型在 save inference model 后 load 预测出错)。
  • 修复了动态图中多个Layer中act和bias等参数不生效的问题(其中包括:BilinearTensorProduct, GRUUnit,Conv2DTranspose ,LayerNorm,NCE )、优化器保存的bug 、python端内存泄漏的问题、部分参数minimize段错误的问题、使用python中has_attr的失效的问题进行了修复。
  • 修复FC mkldnn pass在AVX2机器上的精度diff问题。
  • 升级MKL-DNN到0.20,并提升MKL-DNN单侧覆盖率到90%以上。
  • 修复MKL-DNN训练后量化convolution和dequant op的squash问题。

代码重构和升级

  • 清理了6个废弃的第三方库recordio,snappystream,snappy,jemalloc,anakin,gzstream。