Skip to content

Releases: PaddlePaddle/Paddle

PaddlePaddle 1.8.3

06 Aug 02:51
a44085b

Choose a tag to compare

Release Notes

新增API

  • 新增paddle.fluid.io.default_collate_fn:把一批样本合并为mini-batch。
  • 新增paddle.incubate.distributed.DistributedBatchSampler:将数据加载限制到数据集的子集的采样器。
  • 新增paddle.incubate.vision.transforms.ColorJitter:随机改变图片的亮度、对比度和饱和度。
  • 新增paddle.fluid.dygraph.StepDecay:支持动态图下StepDecay的学习率衰减策略,每隔等间隔个epoch调整,调整倍数为decay_rate倍,调整间隔为step_size。
  • 新增paddle.fluid.dygraph.MultiStepDecay:支持动态图下MultiStepDecay的学习率衰减策略,每隔若干个间隔epoch调整,调整倍数为decay_rate倍,调整间隔为自定义的tuple/list。
  • 新增paddle.fluid.layers.matrix_nms: 检测bbox后处理NMS操作。

新增功能

  • 增强paddle.fluid.contrib.slim.quantization.QuantizationTransformPass 功能:支持用户自定义量化和预处理函数。

Bug修复

  • 修复WITH_NCCL=OFF情况下的编译问题。
  • 修复less_than等compare类op输出的数据类型错误的问题。
  • 修复prelu在GPU上计算输入rank不为4的tensor时bug问题。
  • 修复Paddle在ARM飞腾cpu机器的编译问题。
  • 修复beam_search的InferShape未指明输出的形状导致transformer模型load_inference_model预测出错的问题。
  • 修复inplace pass引起的mobilenetv1, mobilenetv2, transformer模型预测速度明显下降的问题。@intel
  • 修复cos_sim op容易出nan的问题。
  • 修复Fleet API在多卡运行终止进程时,终止失败的问题。
  • 修复fluid.embedding op在参数服务器模式下,未触发稀疏通信,导致性能不及预期的问题。
  • 修复index_sample op的python接口缺失的问题。
  • 修复index_select op索引越界不报错问题。
  • 修复gcc8下roll_op单测超时的问题。
  • 标准的Ernie模型有四个输入,修复变种输入(输入个数不为4)的Ernie模型在推理期间emb_eltwise_layernorm fuse失效的bug。
  • 修复concat组网的输入维度不确定时,维度计算错误问题。
  • 增加concat多输入rank不同的报错提醒。
  • 修复部分环境import paddle时报 dlopen: cannot load any more object with static TLS的问题。

PaddlePaddle 1.8.2

15 Jun 06:39
0b3f626

Choose a tag to compare

Release Notes

重要更新

  • 移除命令式编程模式(动态图)中DataLoader.from_generator中配置generator时必须指定place参数的要求,改为默认使用动态图全局place。
  • 动态图下增加与loss相关的自适应learning_rate策略,会根据loss的变化情况自动调整学习率。

Bug修复

  • 量化功能中,修复Sigmoid OP输出名字错误的问题,修复不会收集BN OP输出Scale的错误。
  • 预测python api中,加入AnalysisConfig的无参构造函数,以正常使用set_model_buffer功能。
  • 新增编译支持:修复Windows在GPU下无法进行/MD模式编译的bug,该bug在Paddle历史一直存在,属于编译上的功能缺失。
  • 修复Windows上GPU版本的API:paddle.fluid.layers.diag的bug,该bug由1.8.0引入,会使得diag OP运行出错。
  • 修复sequence_pad的输出Length数据类型设置错误的问题,该问题会导致sequence_unpad在进行输入类型检查时报错。
  • 修复elementwise op在特定数据shape下出现梯度计算出错的问题,导致op计算报错。
  • 修复transpose_conv2d Op fp16运行结果出错的问题。
  • 修复动态图在Python2中使用[]进行slice操作时的bug,该问题会导致slice结果错误。

PaddlePaddle 2.0.0-alpha0

19 May 10:48
32f0721

Choose a tag to compare

Release Note



重要声明

  • 此版本为测试版,还在迭代中,目前还没有稳定,后续API会根据反馈有可能进行不兼容的升级。对于想要体验飞桨最新特性的开发者,欢迎试用此版本;对稳定性要求高的工业级应用场景推荐使用Paddle 1.8稳定版本。
  • 此版本主推命令式编程模式(动态图)的开发方式,并提供了高层API的封装。命令式编程模式具有很好的灵活性,高层API可以大幅减少重复代码。对于初学者或基础的任务场景,推荐使用高层API的开发方式,简单易用;对于资深开发者想要实现复杂的功能,推荐使用命令式编程模式的API,灵活高效。
  • 此版本同时对飞桨的API目录体系做了优化,原目录下API会建立alias仍然可用,但建议新的程序使用新目录结构。

基础框架

基础API

  • 组网类API实现动静统一,支持在命令式编程模式和声明式编程模式(静态图)两种模式下运行

  • API目录结构调整,Paddle 1.x 版本的API主要位于paddle.fluid目录,本版本对API目录结构进行调整,使得分类更为合理,具体调整规则如下:

    • 原fluid.layers下跟tensor操作相关的API移动到paddle.tensor目录
    • 原fluid.layers下跟组网相关的操作移动到paddle.nn目录,带有参数的类型放到paddle.nn.layers目录,函数式的API放到paddle.nn.functional目录
    • 原fluid.dygraph下命令式编程模式专用API移动到paddle.imperative目录
    • 创建paddle.framework目录,用来存放跟框架相关的Program, Executor等API
    • 创建paddle.distributed目录,用来存放分布式相关的API
    • 创建paddle.optimizer目录,用来存放优化算法相关的API
    • 创建paddle.metric目录,用来创建评估指标计算相关的API
    • 创建paddle.incubate目录,用来存放孵化中的代码,其中的API有可能会发生调整,该目录存放了复数计算complex和高层API相关的代码
    • 所有在paddle.tensor和paddle.framework目录下的API,在paddle目录下创建别名,比如:paddle.tensor.creation.ones可以使用paddle.ones别名
  • 新增API如下:

    • 在paddle.nn目录新增8个组网类的API: interpolate, LogSoftmax, ReLU, Sigmoid, loss.BCELoss, loss.L1Loss, loss.MSELoss, loss.NLLLoss
    • 在paddle.tensor目录新增59个Tensor相关API:add, addcmul, addmm, allclose, arange, argmax, atan, bmm, cholesky, clamp, cross, diag_embed, dist, div, dot, elementwise_equal, elementwise_sum, equal, eye, flip, full, full_like, gather, index_sample, index_select, linspace, log1p, logsumexp, matmul, max, meshgrid, min, mm, mul, nonzero, norm, ones, ones_like, pow, randint, randn, randperm, roll, sin, sort, split, sqrt, squeeze, stack, std, sum, t, tanh, tril, triu, unsqueeze, where, zeros, zeros_like
    • 新增device_guard用来指定设备,新增manual_seed用来初始化随机数种子
  • 部分原fluid目录下API,并没有迁移到paddle目录下

    • 原fluid.contrib目录下API,保留在原位置,未迁移:BasicGRUUnit, BasicLSTMUnit, BeamSearchDecoder, Compressor, HDFSClient, InitState, QuantizeTranspiler, StateCell, TrainingDecoder, basic_gru, basic_lstm, convert_dist_to_sparse_program, ctr_metric_bundle, extend_with_decoupled_weight_decay, fused_elemwise_activation, fused_embedding_seq_pool, load_persistables_for_increment, load_persistables_for_inference, match_matrix_tensor, memory_usage, mixed_precision.AutoMixedPrecisionLists, mixed_precision.decorate, multi_download, multi_upload, multiclass_nms2, op_freq_statistic, search_pyramid_hash, sequence_topk_avg_pooling, shuffle_batch, tree_conv, var_conv_2d
    • 原LodTensor相关的API,目前还在开发中,暂未迁移:LoDTensor, LoDTensorArray, create_lod_tensor, create_random_int_lodtensor, DynamicRNN, array_length, array_read, array_write, create_array, ctc_greedy_decoder, dynamic_gru, dynamic_lstm, dynamic_lstmp, im2sequence, linear_chain_crf, lod_append, lod_reset, sequence_concat, sequence_conv, sequence_enumerate, sequence_expand, sequence_expand_as, sequence_first_step, sequence_last_step, sequence_mask, sequence_pad, sequence_pool, sequence_reshape, sequence_reverse, sequence_scatter, sequence_slice, sequence_softmax, sequence_unpad, tensor_array_to_tensor
    • 原fluid下分布式相关API,目前还在开发中,暂未迁移
    • 原fluid目录以下API,将在高层API中重新实现,未迁移:nets.glu, nets.img_conv_group, nets.scaled_dot_product_attention, nets.sequence_conv_pool, nets.simple_img_conv_pool
    • 原fluid目录以下API,有待进一步完善,暂未迁移:dygraph.GRUUnit, layers.DecodeHelper, layers.GreedyEmbeddingHelper, layers.SampleEmbeddingHelper, layers.TrainingHelper, layers.autoincreased_step_counter, profiler.cuda_profiler, profiler.profiler, profiler.reset_profiler, profiler.start_profiler, profiler.stop_profiler
    • 原fluid目录以下API不再推荐使用,未迁移:DataFeedDesc, DataFeeder, clip.ErrorClipByValue, clip.set_gradient_clip, dygraph_grad_clip.GradClipByGlobalNorm, dygraph_grad_clip.GradClipByNorm, dygraph_grad_clip.GradClipByValue, initializer.force_init_on_cpu, initializer.init_on_cpu, io.ComposeNotAligned.with_traceback, io.PyReader, io.load_params, io.load_persistables, io.load_vars, io.map_readers, io.multiprocess_reader, io.save_params, io.save_persistables, io.save_vars, io.xmap_readers, layers.BasicDecoder, layers.BeamSearchDecoder, layers.Decoder, layers.GRUCell, layers.IfElse, layers.LSTMCell, layers.RNNCell, layers.StaticRNN, layers.Switch, layers.While, layers.create_py_reader_by_data, layers.crop, layers.data, layers.double_buffer, layers.embedding, layers.fill_constant_batch_size_like, layers.gaussian_random_batch_size_like, layers.get_tensor_from_selected_rows, layers.load, layers.merge_selected_rows, layers.one_hot, layers.py_reader, layers.read_file, layers.reorder_lod_tensor_by_rank, layers.rnn, layers.uniform_random_batch_size_like, memory_optimize, release_memory, transpiler.memory_optimize, transpiler.release_memory

高层API

  • 新增paddle.incubate.hapi目录,对模型开发过程中常见的组网、训练、评估、预测、存取等操作进行封装,实现低代码开发,MNIST手写数字识别任务对比命令式编程模式实现方式,高层API可减少80%执行类代码。
  • 新增Model类封装,继承Layer类,封装模型开发过程中常用的基础功能,包括:
    • 提供prepare接口,用于指定损失函数和优化算法
    • 提供fit接口,实现训练和评估,可通过callback方式实现训练过程中执行自定义功能,比如模型存储等
    • 提供evaluate接口,实现评估集上的预测和评估指标计算
    • 提供predict接口,实现特定的测试数据推理预测
    • 提供train_batch接口,实现单batch数据的训练
  • 新增Dataset接口,对常用数据集进行封装,支持数据的随机访问
  • 新增常见Loss和Metric类型的封装
  • 新增CV领域Resize, Normalize等16种常见的数据处理接口
  • 新增CV领域lenet, vgg, resnet, mobilenetv1, mobilenetv2图像分类骨干网络
  • 新增NLP领域MultiHeadAttention, BeamSearchDecoder, TransformerEncoder, TransformerDecoder , DynamicDecode API接口
  • 发布基于高层API实现的12个模型,Transformer,Seq2seq, LAC,BMN, ResNet, YOLOv3, , VGG, MobileNet, TSM, CycleGAN, Bert, OCR

性能优化

  • 新增reshape+transpose+matmul fuse,使得Ernie量化后 INT8 模型在原来基础上性能提升约4%(6271机器),量化后INT8模型相比未经过DNNL优化(包括fuses等)和量化的FP32模型提速约6.58倍。

调试分析

  • 针对Program打印内容过于冗长,在调试中利用效率不高的问题,大幅简化Program、Block、Operator、Variable等对象的打印字符串,不损失有效信息的同时提升调试效率
  • 针对第三方库接口boost::get不安全,运行中抛出异常难以调试的问题,增加BOOST_GET系列宏替换了Paddle中600余处存在风险的boost::get,丰富出现boost::bad_get异常时的报错信息,具体增加了C++报错信息栈,出错文件及行号、期望输出类型和实际类型等,提升调试体验

Bug修复

  • 修复while loop中存在slice操作时计算结果错误的bug
  • 修复inplace ops引起的transformer 模型性能下降问题
  • 通过完善cache key, 解决Ernie精度测试最后一个batch运行失败的问题
  • 修复fluid.dygraph.guard等context中出现异常时无法正确退出的问题

2.0 alpha Release Note

Important Statements

  • This version is a beta version. It is still in iteration and is not stable at present. Incompatible upgrade may be subsequently performed on APIs based on the feedback. For developers who want to experience the latest features of Paddle, welcome to this version. For industrial application scenarios requiring high stability, the stable Paddle Version 1.8 is recommended.
  • This version mainly popularizes the imperative programming development method and provides the encapsulation of high-level APIs. The imperative programming(dynamic graph) mode has great flexibility and high-level APIs can greatly reduces duplicated codes. For beginners or basic task scenarios, the high-level API development method is recommended because it is simple and easy to use. For senior developers who want to implement complex functions, the imperative programming API is commended because it is flexible and efficient.
  • This version also optimizes the Paddle API directory system. The APIs in the original directory can create an alias and are still available, but it is recommended that new programs use the new directory structure.

Basic Framework

Basic APIs

  • Networking APIs achieve dynamic and static unity and support operation in imperative programming and declarative programming modes(static graph)

  • The API directory structure is adjusted. In the Paddle Version 1.x, the APIs are mainly located in the paddle.fluid directory. This version adjusts the API directory structure so that the classification is more reasonable. The specific adjustment rules are as follows:

    • Moves the APIs related to the tensor operations in the original fluid.layers directory to the paddle.tensor directory
    • Moves the networking-related operations in the original fluid.layers directory to the paddle.nn directory. Puts the types with parameters in the paddle.nn.layers directory and the functional APIs in the paddle.nn.functional directory
    • Moves the special API for imperative programming in the original fluid.dygraph directory to the paddle.imperative directory
    • Creates a paddle.framework directory that is used to store framework-related program, executor, and other APIs
    • Creates a paddle.distributed directory that is used to store distributed related APIs
    • Creates a paddle.optimizer directory that is used to store APIs related to optimization algorithms
    • Creates a paddle.metric directory that is used to create APIs related to evaluation index calculation
    • Creates a paddle.incubate directory that is used to store incubating codes. APIs may be adjusted. This directory stores codes related to complex number computation and high-level APIs
    • Creates an alias in the paddle directory for all APIs in the paddle.tensor and paddle.framework directories. For example, paddle.tensor.creation.ones can use paddle.ones as an alias
  • The added APIs are as follows:

    • Adds eight networking APIs in the paddle.nn directory: interpolate, LogSoftmax, ReLU, Sigmoid, loss.BCELoss, loss.L1Loss, loss.MSELoss, and loss.NLLLoss
    • Adds 59 tensor-related APIs in the paddle.tensor directory: add, addcmul, addmm, allclose, arange, argmax, atan, bmm, cholesky, clamp, cross, diag_embed, dist, div, dot, elementwise_equal, elementwise_sum, equal, eye, flip, full, full_like, gather, index_sample, index_select, linspace, log1p, logsumexp, matmul, max, meshgrid, min, mm, mul, nonzero, norm, ones, ones_like, pow, randint, randn, randperm, roll, sin, sort, split, sqrt, squeeze, stack, std, sum, t, tanh, tril, triu, unsqueeze, where, zeros, and zeros_like
    • Adds device_guard that is used to specify a device. Adds manual_seed that is used to initialize a random number seed
  • Some of the APIs in the original fluid directory have not been migrated to the paddle directory

    • The following API under fluid.contrib directory are kept in th...
Read more

PaddlePaddle 1.8.1

19 May 10:33
ea1c05d

Choose a tag to compare

Release Note

功能升级

  • 动转静训练方式可以支持嵌入动态图训练,或与动态图训练方式一致。使动转静训练和动态图训练代码使用切换简便易得。
  • 动转静支持训练后通过ProgramTranslator相关接口,保存可预测部署的模型及参数文件,并支持C++端加载和预测。
  • 优化部分算子的报错信息,使得在算子出错时能得到完整的报错信息,优化使用体验。

PaddlePaddle 1.8.0

19 May 10:16
0231f58

Choose a tag to compare

Release Note

重要更新

本版本深度优化了命令式编程模式(动态图)的功能、性能和体验,框架基础功能也进一步强化;原生推理库性能显著优化,轻量化推理引擎PaddleLite实现了对硬件支持的极大覆盖,新发布前端推理引擎Paddle.js,PaddleServing全面升级,提供功能强大简单易用的服务化部署能力。对应的开发套件和工具组件进一步丰富完善,既有套件组件的功能和体验持续提升,全新发布PaddleClas视觉分类套件和量桨Paddle Quantum量子机器学习框架。

训练框架: 深度优化了命令式编程(动态图)功能、性能和体验,特别是增强了动静转换的能力,能支持依赖数据的控制流的动态图实现进行静态存储部署,也可以转为静态图模式训练;Data Loader的功能和梯度裁剪的使用方式进一步优化;声明式编程模式下多卡运行时fetch不定长Tensor等问题得到解决,混合精度配合重计算显示出支持大Batch训练很好的成效。新增了大量API,并新增 ComplexVariable,支持复数张量的表示和常见的复数运算。

预测部署: Paddle inference 新增CUDA下多线程多流支持、TRT子图对动态shape输入的支持,强化量化推理,性能显著优化;Paddle Serving 全面升级,功能完善,易用性显著提升;Paddle Lite进一步优化编译安装体验,全面提升对支持芯片的覆盖度(包括RK、MTK、百度昆仑、寒武纪、比特大陆、华为NPU等等)以及对应的模型数量和性能;PaddleSlim量化、裁剪和NAS功能持续强化;发布国内首个开源JavaScript深度学习前端推理引擎Paddle.js,可以帮助用户实现网页端深度学习模型部署。

开发套件: 全新发布PaddleClas,包含23个图像分类网络实现,117个图像预训练模型,并添加了数据增广、SSLD蒸馏等辅助策略,以及特色应用案例;PaddleSeg人像分割系列模型全面升级,新增多种遥感相关的策略方案;PaddleDetection、PaddleOCR和语音合成套件Parakeet算法覆盖更全面,速度显著提升。

工具组件: PaddleHub新增包括一系列视觉预训练模型在内更多的模型,模型总数120+; PaddleFL发布1.0版本,开源基于Mulit-party Computation (MPC)的联邦学习,支持横向、纵向等多个联邦学习场景;PGL发布业界首个结合语义信息与结构信息的图神经网络模型ERNIESage;PARL开源工业界首个进化学习应用框架Evokit;全新发布量子机器学习框架量桨Paddle Quantum。

基础框架

新增API

  • 新增fluid.device_guard:设置OP的运行设备为CPU或者GPU。
  • 新增 fluid.enable_imperativefluid.disable_imperative 接口,支持函数式启动关闭动态图模式,相对with fluid.dygraph.guard()的方式减少代码缩进。
  • 在fluid.dygraph目录新增4个API(具体定义见文档): BCELoss, L1Loss, MSELoss, NLLLoss, InstanceNorm
  • 在fluid.layers目录新增30个API(具体定义见文档): addmm, allclose, arange, bmm, clamp, cross, diag_embed, dist, dot, elementwise_equal, flip, full, full_like, index_select, interpolate, log1p, log_softmax, logsumexp, meshgrid, nonzero, randint, randn, randperm, resize_bicubic, resize_linear, roll, t, tril, triu

功能优化

  • 命令式编程模式(动态图):

    • 增强动转静的功能,新增了基于语法解析转换的ProgramTranslator,支持依赖数据的控制流的动态图模型进行部署;同时支持将动态图模型转换为静态图模型进行训练,提升RNN等任务的训练性能。
    • 重构动态图的变量生命周期管理机制,保证在train模式下不调用var.backward()接口也能正确地释放内存/显存资源。
    • 新增动态图下的double grad功能,支持依赖梯度惩罚的GAN模型训练。
    • 针对动态图下no_grad只能通过装饰器的方式使用的问题,新增了支持context manager使用方式,更方便动态图无梯度操作的代码编写。
    • 为了方便单独设置batchnorm和dropout两个op的train/eval模式设置,将train/eval模式信息从全局设置,变成Layer内部设置;新增Layer形式的Dropout,记录模式信息。
    • 支持 cond switch while_loop 控制流接口和 tensor array 的读写也可在动态图下使用 ,便于高层API的统一。
    • 修改if var在动态图模式下的行为(不兼容升级),按var中的值进行判断,解决动态图模式下 if x > y 行为与预期不符的问题;并支持将var转换为float/long/int/len/index的功能,提动态图升易用性。
    • 针对任务中强依赖hook的功能,新增Layer的forward pre-hook和forward post-hook接口,可以在不改变网络输入输出的结构的情况下方便地获取、改变网络中间层变量的值,提升动态图易用性。
    • 支持cudnn algorithm cache可以在动态图模式下生效,在waveflow模型上性能提升200%。
  • 声明式编程模式(静态图):

    • 执行器支持根据feed和fetch变量在运行时自动裁剪网络,去掉与当前feed和fetch无关的部分,提升运行效率,支持多任务学习网络。
    • 优化反向传播过程,对本身无需反向传播的变量进行自动裁剪,不再需要组网时对变量显式设置stop_gradient=True。
    • 执行器支持多卡运行时fetch不定长Tensor的功能,对使用不定长数据的任务(如NLP类部分任务等)提供更好的支持。
    • 解决单进程多卡预测阶段会丢弃尾部不足卡数的部分数据的问题,可以在DataLoader中设置drop_last=False来避免丢弃尾部数据。
    • 增加混合精度(AMP)与重计算(Recompute)配合的机制,在Bert-large模型上配合使用二者,最大batch size提升400%,吞吐提升17.5%~31.4%;
  • DataLoader:

    • 新增多进程模式加速数据读取,对于Map-style类型的数据集,用户可以通过实现自定义Dataset和BatchSampler的方式来提高数据读取性能,对于数据读取量大及预处理复杂的任务速度提升明显,如在视频分类TSM模型上,使用多进程读取模式,在声明式编程模式(“静态图”)下训练性能提升419%,命令式编程模式(“动态图”)下训练性能提升89.6%。
  • 梯度裁剪使用方式:

    • 裁剪类型统一由optimizer的grad_clip参数传入,支持全局参数裁剪和部分参数裁剪功能,原有set_gradient_clip接口不再推荐使用,并可能在后续版本中删除。同时,ParamAttr中取消了grad_clip参数(不兼容升级),无法再通过ParamAttr对单个参数进行梯度裁剪,对部分参数进行梯度裁剪的功能统一通过上述新接口实现。
  • 动态图、静态图以及高层API支持一致的Collective Operators调用。

  • Intel对Ngraph停止维护,移除NGraph库相关代码。

  • 移除所有MKL-DNN相关op中未使用的或者不兼容的属性,如is_test属性。

  • 新增对复数计算的支持:

    • 新增 ComplexVariable,支持复数张量的表示和常见的复数运算,包括四则基本运算、matmul、kron product、reshape、transpose 等;
  • 性能分析工具(Profiler)功能升级:

    • 支持按照事件之间的嵌套调用关系,分层次统计和打印Profile结果。
    • 添加tracer_option参数,可配置为DefaultOpDetailAllOpDetail,支持用户选择不同程度的计时和分析对象。
    • 添加对框架开销、GpuMemcpy操作的统计功能。
  • 报错信息全面优化

    • 累计优化数千条表意不清的报错信息,规范错误类型及错误描述。
    • 自动检测某些用户易错操作,给出明确的报错信息。
    • 优化GPU相关API报错信息,将不可读的错误代码转换为具体信息,与NVIDIA官网信息保持同步。

性能优化

  • 命令式编程模式(“动态图”):

    • 为降低框架overhead, 优化自动生成的OP函数的数据结构,ptb lm模型任务单卡训练速度提升4%。
    • 为降低框架overhead, 优化InferVarType接口设计,提升了InferVarType的速度,ptb lm模型任务训练速度提升超5%。
    • 为降低框架overhead, 减少了动态图op中非必要attribute的添加,在ptb lm模型训练任务上速度提升4%
    • 为提升数据加载性能,实现Tensor申请共享内存存储及Tensor序列化与反序列化机制,支持进程间传输Tensor,优化原动态图异步DataLoader性能,ResNet模型任务在P40机器上单卡训练速度进一步提升超15%
    • 优化了动态图 Variable slice 的性能,性能提升60%,并支持slice中step为负数。
  • 声明式编程模式(“静态图”):

    • 新增自动融合功能,支持将elementwise类、activation类、sum、cast、scale、fill_constant等逐元素计算类型的算子组成的子图进行融合,性能提升幅度依赖于在网络中匹配到的相关子图数量,目前对RNN语言模型训练速度有大幅提升。
  • OP性能优化:

    • OP的执行过程增加对Prepare Data的缓存,在10+模型训练任务上平均加速2%,框架开销最高减少6%。
    • 优化depthwise_conv2d的GPU性能,常用参数设置下加速20%。
    • 优化elementwise_mul的GPU广播模式的实现,针对不同输入可加速2~50倍。
    • 优化conv2d_transpose的GPU实现,针对fp16有显著性能提升。
    • 优化shape OP实现,避免在不同设备间的不必要数据传输而引起的等待。

Bug修复

  • 修复当数据量很大时,SGD报错Xbyak::Error的问题, 使得支持SGD大数据量可以成功运行。

  • 修复Linux版本下MKL内存泄漏的问题。

  • 修复动态图多卡启动时命令行参数解析的bug。

  • 修复clone(for_test=True)接口处理含控制流op的网络时的问题。

  • 修复动态图模块和静态图模块环依赖。

  • 修正 python 2 & 3 之间 pickle dump/load 的兼容性问题。

  • 修复动态图Layer不能注册或覆盖参数为None的问题。

  • 修复不同Op name属性值相同时造成的Op输出Var命名冲突的问题。

  • 修正concat op在axis=0时输出的LoD设置,应为输入LoD的拼接。

  • 修复BatchNorm在eval模式下无法更新的mean和var的bug。

推理部署

Paddle Inference

功能升级

  • 新增TRT子图对动态shape输入的支持, 新加config.SetTRTDynamicShapeInfo(min_input_shape, max_input_shape, opt_input_shape)接口。此接口用来指定子图的输入的最小,最大,最优的shape信息(最优shape表示,TRT会在此shape选择运行时最优kernel)。指定shape信息后,Paddle-TRT运行期间会使用Dynamic shape模式,预测期间支持min_input_shapemax_input_shape间的任意shape的输入。该功能支持包括FCN,Faster RCNN,Ernie/Bert等动态shape输入的模型。
  • 为满足用户预测时将计算流绑定在当前线程上的需求,重构了设备上下文数据结构支持 CUDA 计算流优先级,并增加一个线程本地的显存分配器 ThreadLocalAllocator。具备不同线程绑定不同 CUDA 流的能力。
  • MKL-DNN 量化功能全面支持所有量化模型,新增支持'weight_quantize_type'为range_abs_max和'channel_wise_abs_max',支持out_threshold属性。
  • 新增官网推理API reference

性能优化

  • CUDA Bert/Ernie针对性的优化, 添加了 embedding_eltwise_layernorm 融合实现,优化了 multihead_matmulfc_elementwise_layernorm 融合实现。相比上一版本,P4卡,cuda10,batch_size=1下,ernie fp32预测从10ms优化至8.7ms。提升13%.
  • TRT子图对Ernie/Bert模型动态shape支持, 在T4卡,cuda10, batch_size=1下,ernie fp16 预测性能为2.9ms, 相比fp32的6.6ms,加速56%。
  • Paddle-TRT对mobilenet v3的优化,支持TRT hard sigmoid OP,以及新增hard swish plugin,batch_size = 1下,P4下预测从3.48ms 到2.29ms, 性能提升34%; V100下预测从2.76ms 到1.33ms, 性能提升51%。
  • 增加 swish 激活函数 DNNL 支持,使得ShuffleNet 在 6248单核上性能提升了76%。
  • 量化:新增支持matmul op量化;新增matmul+transpose+reshape fuse,scale+matmul fuse。经过matmul量化和新增fuses,Ernie fp32模型和量化后INT8模型都在原来基础上性能提升了~10%(在6271机器上)。
  • 新增 DNNL inplace op支持:目前支持 elementwise_add和包括softmax, gelu,relu等大部分激活函数的inplace执行,使得Ernie性能在6248上提升了~2%
  • 经过上述优化量化,目前Ernie INT8模型相比未经DNNL优化(包括fuses等)和量化的FP32模型提速~5.51倍。

Bug修复

  • 修复Inference阶段在TRT int8离线量化中,因融合策略不稳定导致本地与服务端生成校准表名字不一致,从而本地生成的校准表在服务中无法识别加载,会重新生成校准表的问题。目前已经能够保证在多次运行TRT离线量化校准时,校准表名字保持一致。
  • 修复Inference阶段TRT离线量化产生校准表过程中传参错误的问题。该问题会一定程度上影响最终的量化预测精度。

Paddle Serving

易用性提升

  • 使用pybind对c++代码进行封装,提供python api的使用方式,提供paddle_serving_server、paddle_serving_server_gpu、paddle_serving_client的python2和python3环境whl安装包,发布了0.2.1版本
  • 提供centos6/7环境的cpu和gpu Docker镜像,包含可执行镜像和可编译镜像
  • 提供直接保存Serving部署所需的模型和配置文件的api,与Paddle训练框架无缝衔接
  • 实现一行命令启动模型预测服务

功能完善

  • 提供RPC和HTTP两种预测服务方式
  • 支持Python和Go语言客户端
  • 支持A/B test
  • 发布了paddle_serving_app 0.0.2版本,针对LAC分词分词预处理、中文BERT模型预处理、图像处理提供预处理api。
  • 支持预测服务Timeline可视化

性能优化

  • RPC服务模式下,中文BERT语义向量表示预测服务比paddle_gpu_serving 0.8.2版本在单张P4卡batch size 1时预测速度提升2.04倍。

文档和示例

  • 完善和添加中英文使用文档、中英文开发和部署文档、中文性能调优文档。
  • 提供7种模型预测服务示例,包含中文分词、英文情感分析、中文语义向量表示、CTR预估、图像分类等领域。

Paddle Lite

功能升级

  • 编译安装
    • Paddle-Lite 编译脚本优化:Android\iOS\ArmLinux 平台各拆分出单独编译脚本,脚本提高易用性。
    • 支持Python安装:可以在PC Linux/Windows/Mac 上安装Paddle-Lite Python 库;Python 可以调用Lite opt 优化模型。
    • 支持windows 编译: 可以在windows环境编译Paddle-Lite ,当前windows环境只支持x86 编译。
  • 基础功能
    • 增加分割子图功能。对于以子图接入方式lite的模型,通过配置文件手动切分子图,让指定OP跑在host端,以提高性能(ssd_mobilenet_v1,加速约4.3倍)。
    • 优化支持无校准训练后量化方法产出的量化模型,常见分类模型量化到8bit,精度损失从2%减小到0.1%。
  • 硬件支持
    • 新增RK 1808 NPU,支持全量化MobileNetV1模型;
    • 新增MTK MT8175 APU,支持全量化MobileNetV1模型;
    • 新增百度昆仑XPU Kernel接入方式,支持ERNIE、ResNet-50和BERT模型。
    • 新增寒武纪MLU270,支持一下模型:Resnet50(int8)、Senet101(int8);
    • 新增特大陆BM1682,支持以下模型: Mobilenet、Yolov3、Mobilenet-ssd、Inceptionv4、Vgg16、DarkNet-YOLOv3、PyramidBox。
    • 移动端GPU(opencl):支持模型mobilenetv1/v2、GAN相关、mnasnet、sqeueezenet、shufflenet、resnet、unet、vgg16
    • Nvidia GPU: 增加exec多流支持,对于存在并行性的模型结构,相对单流预计有5-15%的性能提升,对于常见视觉模型,一般不具有并行性结构,开启多流无收益。cuda平台下打开多流功能config.set_multi_stream(true);
    • 对x86 平台的优化:降低预测库体积(200M---->16M),支持关闭LOG(--shutdown_log=ON)、full_api 支持多线程共享模型权重参数、新增x86 cxx_demo
    • 华为NPU:
      • benchmark模型(mobilenet_v1,mobilenet_v2,squeezenet_v1.1,mnasnet,shufflenet_v2),提速5-10倍。
      • 支持缓存不同尺寸的NPU模型,提升可变输入尺寸模型的性能。
  • Demo:
    • 新增基于相机预览的实时口罩检测Android Demo
    • 新增实时人脸关键点检测和美颜Android Demo
    • 新增移动端训练的波士顿房价预测Android Demo

性能优化

  • InferShape耗时降低: Predictor连续运行时,infershape总耗时从0.25ms 降低至0.08ms
  • opencl部分kernel支持动态shape并将部分计算移到ReinitWhenNeeded。fc_buffer、elementwise_add、scale、activation、grid_sampler。
  • 优化sgemm在低端机上的性能表现
  • 优化Precision Profiler功能。排版优化,新增支持标准差属性、增长率属性(在均值和标准差一样时,可以比较顺序),支持对OpenCL的Image/Buffer的每层output的精度打印,支持将每层的精度结果(最终的precision summary)写入手机设备上,便于APP调试,将精度打印与原有统计耗时的profiler的依赖分开。

Bug修复

  • 修复conv op的激活act_type未初始化导致的不同Predictor结果随机的问题。
  • 修复opencl kernel。bilinear kernel在mali gpu上兼容性问题、instance norm计算结果不对的问题、reshape的kernel注册错误导致模型转换失败问题、exp和tanh找不到kernel的导致注册kernel名写错绑定模型op失败问题。
  • 修复opencl在mali gpu的执行计算结束卡主的问题。
  • 修复opencl的资源相关问题。隔离每个Predictor中每个cl::kernel/cl::program等资源。

PaddleSlim

量化

  • 增加无校准数据训练后量化方法,int16精度无损,int8精度损失低于0.1%。
  • 增强量化功能,完善量化OP的输出scale信息,支持CPU预测端全面适配量化模型。

剪裁

  • 新增FPGM和BN scale两种剪裁策略, 在MobileNetV3-YOLOV3-COCO任务上,同等压缩率下精度提升0.6% 。
  • 新增自定义剪裁策略接口,方便开发者快速新增压缩策略。
  • 剪裁功能添加对新增Operator的默认处理逻辑,扩展支持剪裁更多复杂网络。

NAS

  • 新增DARTS系列搜索算法,并提供扩展接口,方便用户调研和实现新的模型结构搜索策略。
  • 模型结构搜索添加早停机制,提升搜索功能易用性。
  • 新增一种基于强化学习的模型结构搜索策略,并提供扩展接口,为用户调研实现新策略提供参考。

Pantheon

  • 支持以 fp16 格式进行数据...
Read more

PaddlePaddle 1.7.1

17 Mar 10:40
2a792de

Choose a tag to compare

Release Notes

功能升级

  • 支持slice OP的二阶梯度计算。
  • 在Ernie QAT量化的单元测试中增加可选参数:FP32 模型路径。用户设置后运行将呈现原始FP32模型精度和QAT INT8 模型精度。

BUG修复

  • 修复编译安装时在CentOS 6下升级glibc至2.22以下引起的import paddle失败的问题。
  • 修复预测C API在lod为空的时候,PD_GetZeroCopyOutput函数出core的问题。
  • 修复DGC未对参数中regularizer项处理的问题。
  • 修复Ernie QAT量化文档中精度复现指令问题。

PaddlePaddle 1.7.0

01 Mar 11:42
40cf4bd

Choose a tag to compare

Release Notes

重要更新

本版本对框架功能层面进行了重点增强,预测部署能力全面提升,分布式训练发布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,通过模型并行支持超多类别的分类任务。

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

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

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

训练框架

  • API
    • 增加自动混合精度训练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)
      • fluid.backward.gradients(targets, inputs, target_gradients=None, no_grad_set=None)
      • 各种Optimizer的minimize方法,如Adam的minimize:minimize(loss, startup_program=None, parameter_list=None, no_grad_set=None, grad_clip=None)
  • 基础功能优化
    • 支持使用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高性能计算库。
      • argsort:支持降序排序(新增descending参数,默认值为False)。
  • 基础性能优化
    • 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模型的训练速度。
      • 优化了mean op的GPU性能,输入数据为32 * 32 * 8 * 8的Tensor时,前向计算速度提升2.7倍。
      • 优化assign、lod_reset op,避免不需要的显存拷贝和data transform。
      • 优化了stack OP的kernel实现,XLnet/Ernie模型GPU单卡性能提升4.1%。
  • 动态图
    • 功能优化
      • 移除了动态图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策略。
    • 性能优化
      • 优化了python 与c++ 交互,GradMaker、OperatorBase、allocator等。基于LSTM的语言模型任务在P40机器上性能提升提升270%。
      • 针对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的动态图模型转为静态图可预测部署的模型。
  • 调试分析
    • 报错信息优化 :对框架报错信息整体归类,实现报错信息的体系化,同时完成文案优化,帮助用户更快速、准确的定位和解决问题。
    • 优化性能分析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及正常数值的数量以便于调试。
  • 发布cpu训练和预测的轻量级安装包paddlepaddle-tiny,支持window/linux/Mac操作系统以及python27/python35/python36/python37:
    • 编译选项: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个。

预测部署

  • 服务器端预测库
    • Python API
      • 支持从内存读写模型,以满足模型加密的需求。
      • 不再在预测模型最后添加 Scale 算子。
      • 新增ZeroCopy API,与C++接口基本一致,支持以numpy.ndarray作为输入和输出,在Python端使用更加方便。
      • 在AnalysisConfig中增加多个接口,完整覆盖C++预测的功能,包括删除pass、禁用预测glog等。
    • 其他编程语言的支持
      • 新增R语言、Go语言的预测API,并增加相关的使用方法和示例
    • 对外提供 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倍
  • 移动/嵌入式端Paddle Lite
    • 对应发布v2.3版本。
    • model_optimize_tool多项功能升级。
    • 支持“无校准数据的训练后量化方法”,模型存储空间可减少2~4倍。
    • OpenCL:完成30个Image2D Kernel迁移,涵盖14个OP。
    • 对FPGA、NPU的支持进一步加强;支持昆仑XPU的预测。
    • 发布全新官网文档;新增“无校准数据的训练后量化方法”使用文档。
  • Paddle Serving
    • 发布bert类语义理解模型的远程文本向量表示预测服务。
    • 发布了paddle-gpu-serving whl包,通过pip安装和Python代码即可部署和使用预测服务;
    • 支持Paddlehub中的13种语义理解模型,支持单机多卡,使用Ernie_tiny模型在单张P4 GPU下平均样本长度为7时预测速度为869.56样本每秒。
  • PaddleSlim
    • 拆分PaddleSlim为独立repo。
    • 重构裁剪、量化、蒸馏、搜索接口,对用户开放底层接口。
      • 量化:
        • 新增基于KL散度的离线量化功能,支持对Embedding层量化。
        • 新增对FC的QAT MKL-DNN量化策略支持
        • 新增PostTrainingQuantization,完整实现训练后量化功能:支持量化30种OP,支持灵活设置需要量化的OP。
        • 量化训练支持设定需要量化的OP类型。
      • 裁剪: 重构剪裁实现,方便扩展支持更多类型的网络。
      • 网络结构搜索:
        • 支持SA搜索,增加更多的搜索空间,支持用户自定义搜索空间。
        • 新增one-shot搜索算法,搜索速度比上个版本快20倍。
    • 新增大规模可扩展知识蒸馏框架 Pantheon
      • student 与 teacher 、teacher与 teacher 模型之间充分解耦,可分别独立运行在不同的物理设备上,便于充分利用计算资源;
      • 支持 teacher 模型的单节点多设备大规模预测,在 BERT 等复杂模型上测试加速比达到线性;
      • 用 TCP/IP 协议实现在线蒸馏模式的通信,支持在同一网络环境下,运行在任意两个物理设备上的 teacher 模型和 student 模型之间进行知识传输;
      • 统一在线和离线两种蒸馏模式的 API 接口,不同的 teacher 模型可以工作在不同的模式下;
      • 在 student 端自动完成知识的归并与知识数据的 batch 重组,便于多 teacher 模型的知识融合。
    • 模型库:
      • 发布ResNet50、MobileNet模型的压缩benchmark
      • 打通检测库,并发布YOLOv3系列模型的压缩benchmark
      • 打通分割库,并发布Deepabv3+系列分割模型的压缩benchmark
    • 完善文档:
      • 补充API文档;新增入门教程和高级教程;增加ModelZoo文档,覆盖分类、检测、分割任务。所有文档包含中、英文。

分布式

  • 参数服务器模式:
    • 大幅降低训练过程中的内存占用,在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环境。
  • 大规模分类库PLSC:支持受限于显存容量数据并行无法处理的大规模分类问题
    • 内建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。
  • 发布ResNet50混合精度训练benchmark(单卡、多卡、多机)。

基础模型库

  • 模型库地址
  • PaddleNLP
    • seq2seq支持RL和GAN等训练模式
    • 发布分词和词性标注训练模型,利用知识蒸馏框架 Pantheon,在自有数据集上比PaddleNLP上LAC上F1值提升1%;合入jieba分词,通过加入use_paddle标签来开启深度学习模型模式;并在在jieba加入paddle版本检测和回退机制,保障用户体验。
    • 增加动态图模型实现:word2vec、senta、transformer、bert、seq2seq、LAC。
  • PaddleSpeech
    • 发布语音合成库Parakeet (Paddle PARAllel text-to-speech toolkit)
      • 实现语音合成模型数据预处理、训练和合成等的标准工作流
      • 提供对常见数据集的开箱即用的预处理实现
      • 提供语音合成领域常用模型组件,为实现模型提供支持
      • 发布语音合成模型 DeepVoice3、ClarinNet 、TransformerTTS、FastSpeech、WaveNet、WaveFlow
  • PaddleCV
    • 图像分类:
      • 新增预训练模型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
        • HRNet_W18_C,HRNet_W30_C,HRNet_W32_C,HRNet_W40_C,HRNet_W44_C,HRNet_W48_C,HRNet_W64_C
      • 支持使用DALI加速数据预处理,在ImageNet训练上获得1.5倍(ResNet50) 至3倍以上(ShuffleNet)加速,并大幅提升GPU利用率。
    • 3D方向:
      • 发布模型PointNet++、PointRCNN。
    • 跟踪模型库 :
      • 发布模型SiamFC、ATOM。
    • 增加动态图模型实现: MobileNet-v1/v2、YOLOv3、FasterRCNN、MaskRCNN、视频分类TSM模型、视频动作定位BMN模型。
  • PaddleRec
    • 发布推荐领域多任务模型MMoE, 适用于工业界大规模多任务联合训练。
    • 增加动态图模型实现:gru4rec、deepfm。

端到端开发套件

  • PaddleDetection
    • 进一步提升YOLOv3模型精度,COCO数据上精度达到43.2%,相比上个版本绝对提升1.4%。
    • 新增模型实现及预训练模型:
      • 新增Google AI Open Images 2019-...
Read more

PaddlePaddle 1.6.3

20 Jan 02:55
fa7ace7

Choose a tag to compare

Release Notes

性能优化

  • 优化ERNIE模型的CPU预测性能,BS=1时性能略优于竞品。
    • 在FC的CPU实现中对GEMM进行Padding,使得ERNIE模型FP32的单线程预测性能提升8.97%,20线程预测性能提升42.52%。
    • layer_norm实现多线程优化,该op 20线程性能提升4.73倍,ERNIE模型20线程性能提升8.88%。

Bug修复

  • 修复由于动态图弃用reshape inplace策略而导致无法进行多卡训练的问题。
  • 修复softmax_with_cross_entropy_op在axis dimension为1时出现Tensor未初始化报错的问题。
  • 修复指数滑动平均(EMA) 连续多次 apply 时结果不正确的问题。
  • 修复了Adagrad中设置decay参数不生效的问题。
  • 修复了match_matrix_op设置较大lod整型溢出的问题。
  • 修复 InitDevices() 在同一进程中前后调用的行为不一致问题。
  • 一些 Passes 在 上一级 Scope 中创建中间变量,会引起克隆时 Scope 错误的修复。
  • 修复 tensorrt calib engine key bug。
  • 修复conv_elementwise_add_fuse_pass导致Xception模型预测出错问题。
  • 修复multihead中softmax计算错误的问题。
  • 修复conv_fusion在windows环境下无法找到GPU kernel的问题。
  • 修复batch_norm_grad在scale和bias一个可训一个不可训练时会产生Shape为0梯度,导致后续若干错误的问题。
  • 修复all_reduce会对Shape为0梯度做聚合操作的问题,添加断言定位出错Tensor。
  • 针对多机开启sync_batch_norm会引入新拓扑依赖导致hang住的问题,对Fleet接口配置保持拓扑顺序避免hang住。

预测部署

  • 修复由于图优化阶段node排序不稳定导致paddle-TRT int8 calib有时无法加载已有校准表,会重新生成校准表的问题。

PaddlePaddle 1.6.2

13 Dec 07:39

Choose a tag to compare

Release Notes

重要更新

  • 报错信息优化
    • 规范并升级Paddle的报错体系,为内部检查增加了声明报错类别的功能,具体地,增加了12种错误类型、以及相应兼容原有体系的用于声明错误类型的接口,解决了Paddle报错无类别的问题。
    • 进一步简化了C++报错信息栈,去掉C++报错信息中由于Place参数引入的大量无用boost模板参数信息,对于Op类报错缩减了50%以上的栈信息,显著提升了有效信息的密度和调试体验。
    • 全量拦截Op获取Kernel类型时由于Tensor未初始化导致内部报错且报错信息晦涩难懂的问题,增加了合理的检查,并辅以清晰明确的报错提示信息,有效提升了调试体验。
    • 进一步优化了Paddle报错信息栈的排版,将开发者书写的错误提示置于Error summary最前方,调整Paddle错误检查模板生成的提示至次行,用Hint字样标明,使用户能够直观看到最重要的错误提示信息,提升了调试体验。
  • DGCMomentumOptimizer完善及bug修复
    • 完善DGC算法流程使其与论文一致,对论文中未涉及的Regularization(Weight Decay)项进行修正,精度已完全对齐baseline。
    • 针对DGC下开启fuse策略会导致DGC失效的问题,添加报错信息引导用户关闭fuse。
    • 修复DGC通信流下临时分配buffer导致的nan及hang住问题。

bug修复

  • 修复one_hot算子中allow_out_of_range参数无效的问题。
  • 修复softmax_with_cross_entropy GPU数值稳定版计算可能出现INF最终导致出现NAN的bug。
  • 修复pool/conv/conv_transpose系列中padding是”SAME”模式时实际padding值计算的bug。
  • 修复expand API报错信息文案中写错类型名字。
  • 修复test_accuracy_op.py和test_zeros_op.py两个错误的报错单测。
  • 修复ParallelExecutor fuse_all_optimizer_ops策略在部分Operator没有GPU kernel时,网络使用脏数据训练导致计算错误的bug。
  • 修复ParallelExecutor fuse_all_optimizer_ops策略在混合精度训练时仍然使策略生效从而导致训练报错退出的易用性问题。
  • 修复elementwise_mod float/double kernel可能计算出负值的问题。
  • 修复custom op编译时mkldnn等头文件未提供问题。
  • 修复batchnorm中用户不能同时使用fuse_with_relu和act参数不能同时使用问题。
  • 修复elementwise_add op MKL-DNN kernel中内存错误(导致人脸模型预测报错)。
  • 修复pool/conv/conv_transpose MKL-DNN kernel中padding是“SAME”模式时实际padding计算的bug。
  • 修复ERNIE-large模型使用MKL-DNN预测报错问题。
  • 修复Gelu grad op在AVX2机器上的精度diff问题。
  • 修复layernorm反向单测问题。
  • 修复训练后量化和训练中量化优化性能在C-API下比较问题。
  • 修复ernie预测中multihead计算的differ问题。
  • 修复GRU OP计算的问题。
  • 修复共享参数模型如retinanet下使用paddle-TensorRT预测时,重复设置cpu weight的报错仍然存在的问题。

Op升级

  • crop_tensor支持参数shape任意元素为-1。
  • maxout、lrn支持输入为NHWC格式。
  • batch_norm momentum参数支持Variable作为输入。
  • AdamOptimizer beta1/beta2参数支持Variable作为输入。
  • conv/conv_transpose/lrn/pool op MKL-DNN kernel 支持前向NHWC计算。
  • 对于conv/conv_transpose/lrn/pool op MKL-DNN kernel 反向无法支持NHWC格式进行报错提示。
  • 提升argsort op的性能,添加descending排序模式。
  • conv_fusion OP 支持非对称padding特性。

性能优化

  • 优化数据规模较大场景下topk op的性能。

预测部署

  • AnalysisPredictorDisableGlogInfo()接口提供屏蔽预测所有日志输出的功能,满足在使用paddle预测库时仅输出用户自定义日志的需求。
  • Paddle预测(包括Paddle-TRT子图)支持NV Jetson硬件,包括nano,tx2,Xavier。
    • 支持Paddle预测在Jetson硬件上的源码编译。
    • 发布1.6.2 Jetson硬件C++预预编译预测lib,官网链接
    • 保持接口的一致性:C++预测接口没有发生变化,在Jetson硬件上使用预测接口同Server端一致。
    • 支持所有Paddle训练产出的模型在Jetson硬件上可使用Paddle原生预测。
    • 支持Paddle-TRT预测在Jetson硬件上的加速。

PaddlePaddle 1.6.1

13 Nov 09:06

Choose a tag to compare

Release Notes

Bug修复

  • 修复crop_tensor不支持shape参数中多个元素为-1的bug。
  • 修复conv_transpose未兼容AnyLayout设置的bug,该bug会导致预测模型运行出错或者结果与以前版本存在差异。
  • 修复reshape的input不支持多个维度值为-1。
  • 修复split op不检测参数num_or_sections为list/tuple时元素值的正确性。
  • 修复anaconda安装失败,不需要把检查文档示例的python文件打入whl包。
  • 修复MKL-DNN在第二代智强可扩展平台6271上FP32和INT8性能回归问题。
  • 修复concat中报错信息中未正确打印变量。
  • 修复pool参数pool_padding和conv/conv_transpose参数padding不兼容旧版本预测库。

预测部署

  • 模型支持
    • paddle-TensorRT支持分割模型pspnet,在P4上提升性能11.8%。
  • 易用性优化
    • 针对TensorRT 5及以下版本不支持变长输入,而用户在输入不一致shape时无明确报错信息的问题,为paddle-TensorRT输入shape添加了检查,现在当输入shape不一致时会抛出正确报错信息,提示用户设置正确的输入shape。
  • 问题修复
    • 针对paddle-TensorRT在含有adaptive_pool2d op的模型上存在diff的问题进行了修复,现在paddle-TensorRT已支持adaptive pooling。
    • 针对paddle-TensorRT在转换split op时不能正确处理num_or_sections属性为整数时的情况导致报错的问题进行了修复,现在paddle-TensorRT已经能对split op正常支持。

训练框架

  • OP功能优化升级
    • split op参数num_or_sections支持包含Tensor的list,参数dim支持Tensor;
    • split op参数num_or_sections 是list/tuple时,支持包含-1并自动推断-1的值;
    • concat op参数axis支持Tensor;
    • unsqueeze op参数axes支持int,Tensor及包含Tensor的list;
    • maxout op支持NHWC格式输入,新增参数axis用来指定通道所在维度索引。
    • lrn op支持NHWC新增参数data_format指定数据格式。
  • OP功能完善
    • 重新实现squeeze_op使之能够支持动态图。
  • 报错信息优化:
    • 增强Operator类中TypeError的报错信息文案。