Skip to content

Releases: PaddlePaddle/Paddle

PaddlePaddle 2.0.0

01 Feb 02:31
fd9d6fd
Compare
Choose a tag to compare

Release Note

重要更新

飞桨框架2.0.0版本有如下重要更新:

  • 编程范式:默认开启动态图模式进行模型开发和训练,通过动转静的方式进行模型部署和训练加速。如果需要使用静态图编程范式,可以通过paddle.enable_static()来切换到静态图模式。
  • API体系:对API进行了补充,对目录结构进行了调整,使得更加易用,详情请见:API文档,同时,提供高层API简化使用流程;详情请见: 飞桨高层API使用指南
  • 框架功能:对数据加载、动态图执行,OP性能,混合精度训练,分布式训练,动静转换,等进行了功能增强和性能优化。
  • 环境适配: 提供了对ARM架构CPU的支持,增加了对Python 3.8、CUDA 10.1/10.2的支持,发布支持CUDA11的安装包(experimental),发布支持百度昆仑芯片的安装包(experimental),详情请见:开始使用
  • 模型库及开发套件:飞桨的官方模型库和套件已经完成绝大部分模型升级至飞桨框架2.0.0版本。
    • PaddleHub:支持2.0动态图,全面迁移动态图编程模式,模型开发调试更加方便,finetune接口更加灵活易用。
    • PaddleDetection: 支持2.0动态图,覆盖检测方向主流算法(PP-YOLO、Faster-RCNN、SOLOv2),支持动静转换,打通预测部署,提供了更加模块化的组网方式。
    • PaddleClas: 支持2.0动态图,提供了29个系列的分类算法和134个预训练模型,提供了基于SSLD知识蒸馏的优化方案,将分类模型的精度普遍提升3%以上。
    • PaddleSeg: 支持2.0动态图,提供了50+的高质量预训练模型,支持15+主流分割网络,提供了业界的SOTA模型OCRNet,很好的提升了产品易用性。
    • PaddleOCR: 支持2.0动态图,PPOCR系统、文字检测模型(DB,EAST,SAST)与文字识别模型(Rosetta,CRNN,StarNet)完成2.0动态图适配。
    • PaddleGAN:支持2.0动态图,所有模型,包括风格迁移、视频增强、唇形迁移、人脸动漫化等九种模型均基于动态图开发。
    • PaddleRec:支持2.0动态图,免安装,动静组网统一,方便用户的调研和上线,同时整理发布了推荐系统经典数据集。
    • PaddleNLP:支持2.0动态图,提供25+预训练模型和易用的API方式提升文本建模效率。
    • Parakeet:支持2.0动态图,已发布的声学模型及声码器均良好支持动态图版本。
    • PaddleVideo:支持2.0动态图,包含了视频分类和视频动作定位方向模型,包括: TSN、TSM、SlowFast、AttentionLSTM、BMN模型以及特色应用预训练模型VideoTag和FootballAction。
    • AmazonDJL:易用流畅的Java推理接口,支持各操作系统平台(Mac/Windows/Linux),支持Paddle预训练模型部署,更多的信息请参考DJL支持Paddle的官方文档

前瞻性预告

  • 飞桨框架计划在未来的某个版本起,放弃对python2和python3.5的支持,建议您升级python到3.8版本来使用飞桨。
  • 飞桨框架计划在未来的某个版本起,放弃对CUDA9的支持,建议您升级CUDA版本来使用飞桨。

训练框架

兼容性说明

  • 编程范式:飞桨2.0.0默认开启了命令式编程范式(动态图),但仍然保留对静态图的支持,静态图代码(包括1.8版本的静态图代码),可以通过添加paddle.enable_static()后来运行。
  • API:飞桨框架2.0.0版本推荐用户使用位于paddle根目录下的API,同时在paddle.fluid目录下保留了所有的1.x版本的API,保留对之前版本API体系的支持。因此,1.x版本的静态图训练代码,添加paddle.enable_static()即可在2.0.0版本上正常运行;1.x版本训练保存的模型,可以使用2.0.0版本进行推理。
  • 我们整理了1.8版本API到2.0版本API的对应关系表
  • 我们提供了迁移工具,来方便您将基于旧版本的代码迁移为2.0.0版本的代码,详情请见:版本迁移工具

动态图模式

默认开启动态图模式进行模型开发和训练,通过动转静的方式进行模型部署和训练加速。详情,请参看:动态图动态图转静态图

API体系

  • 基础API
    • API目录结构调整,1.x 版本的API主要位于paddle.fluid目录,本版本对API目录结构进行调整,使得分类更为合理,具体调整后的目录说明请参见API文档
    • 新增API共186个,修复和完善API共260个:详情请参考2.0.0 pre release版本的release notes,以及API文档
    • 新增分布式基础通信类API到paddle.distributed: broadcast, all_reduce, reduce, all_gather, scatter, barrier;动态图多卡训练启动API spawn, init_parallel_env,动静统一启动方式fleetrun
    • 组网类API实现动静统一,支持在动态图模式和静态图模式两种模式下运行。
  • 高层API
    • 新增飞桨高层API,对模型开发过程中常见的组网、训练、评估、预测、存取等操作进行封装,实现低代码开发,请参见飞桨高层API使用指南
    • 新增分布式高层API paddle.distributed.fleet,支持通过配置DistributedStrategy来支持多种优化策略组合和自动并行、分布式指标计算、InMemoryDataset

功能优化(含分布式)

动态图基础功能

  • 易用性优化:
    • Tensor功能增强:新增Tensor拷贝接口Tensor.clone(),及120余个Tensor计算操作接口(如Tensor.cos()等);新增使用索引或切片原地修改Tensor的功能;新增Tensor与Scalar运算时自动类型提升的功能;动态图Tensor打印信息优化,展示形式与Numpy保持相同。
    • Layer功能增强:新增Layer深拷贝接口Layer.deepcopy();新增Layer属性和函数查看接口Layer.dir();自本版本起,Layer.eval()调用后,Trace功能仍会自动记录反向操作,如不需要记录反向,需要显式调用paddle.no_grad()。
    • Optimizer新增set_lr()接口,可在动态图模式下灵活调整学习率。
    • 新增set_global_initializer()接口,可定义全局的参数初始化方法。
    • 多卡运行代码简化,不需要再显式调用scale_loss和apply_collective_grads。
  • 性能优化:
    • 多卡训练时Embedding等API支持使用稀疏参数梯度更新的功能。
    • 动态图训练和推理新增对Intel加速库oneDNN(原MKL-DNN)的支持,CPU训练场景Resnet50模型可提速6倍。
    • 新增动态图Inplace计算功能,可复用Tensor存储空间,减小显存占用,并新增View方法,可以在共享底层存储的情况下改变Tensor描述。
    • 【不兼容升级】新增动态图梯度累加功能,起到变相“扩大BatchSize”的作用,backward()接口默认不清空梯度,需要显式调用optimizer.clear_grad()来清空梯度
  • Bug修复:
    • 修复了多个模型在train/eval切换时会互相干扰的问题。

动态图转静态图

  • 动静转换新增语法支持
    • 新增return语法支持,可以在if-elif-else或者循环条件中提前return,并能够return不同类型的tensor或None。
    • 新增对函数signature中含有**kwargs参数的支持。
    • 新增for、for enumerate遍历Tensor和TensorList的语法支持,遍历Tensor的操作更加灵活。
    • 新增更多python语法支持,如print,assert,cast,isinstance,tuple,dict.pop()等。
  • 动静转换易用性优化
    • 动转静的返回类型从callable函数改为Class,可以调用Class的code,main_program等接口更轻松获取转化后的静态图信息。
    • 动转静装饰器to_static新增支持直接装饰model实例,如to_static(model, input_spec) 。
    • 新增jit.not_to_static装饰器,可以在动转静过程中,不转化该函数。
    • 增加set_verbosity()和set_code_level()接口,可以设置不同级别来查看动转静过程的log或者中间状态的代码。
    • 新增InputSpec,可以指定动转静时输入Tensor变量的形状和数据类型。
    • 报错信息优化,可以定位到原动态图错误的代码行,并隐藏与用户无关的报错信息。
    • 支持用 pdb.set_trace() 进行断点调试。
  • 优化部署模型存储载入接口
    • 新增paddle.jit.save接口用于动转静模型的保存,该接口同时兼容存储未经paddle.jit.to_static转写的Layer对象以及paddle.DataParallel模型,删除旧接口ProgramTranslator.save_inference_model。
    • 新增 paddle.jit.load 接口用于载入静态图格式存储的预测模型,包括paddle.jit.save和paddle.io.save_inference_model保存的模型,模型载入后可在动态图下用于模型推理或者模型训练调优。
    • paddle.jit.TransLatedLayer新增program方法,用于获取paddle.jit.load载入模型的program,便于了解模型结构。
    • 【不兼容升级】paddle.jit.save, paddle.jit.load接口参数model_path含义变更,改为存储文件前缀而非目录。

混合精度训练

  • 混合精度策略升级:黑白名单策略(下简称“O1策略”)之外,新增“Almost FP16(下简称O2策略)”支持,即尽可能多使用FP16进行计算。
    • 新增FP16 Guard功能(paddle.static.amp.fp16_guard),支持用户自由控制模型中单个Op是否选用FP16计算类型。
    • 用户可自定义custom_black_list,以控制某一类Op保持FP32计算。
    • 使用O2策略,Resnet50和Bert base在V100单卡训练速度分别可达1400images/s和590sequences/s。
  • 易用性优化:
    • 使用paddle.static.amp包统一管理与静态图混合精度训练相关的接口。
    • AutoMixedPrecisionLists提供简化名称CustomOpLists,即用户可使用CustomOpLists自定义AMP黑白名单Op列表。

分布式训练优化

  • 集合通信All Reduce
    • 支持千亿语言模型混合并行训练:支持基于executor接口的流水线并行训练,sharding-DP策略,GradientMerge+AMP策略,Recompute+Offload策略,megatron策略
    • 支持动态图:支持多流通信策略,自动rebuild group策略,高性能稀疏参数通信,多卡梯度顺序一致性策略
  • 参数服务器PS
    • 大规模稀疏功能升级:升级大规模稀疏PS-API,抽象通信组件/参数表/优化器基类,方便用户通过子类派生方式进行二次开发;同时还支持千亿特征流式训练,含特征准入,退场,增量训练,分布式指标预测等;通信方式从GRPC切换成了BRPC
    • 开源异构参数服务器,既支持传统的纯CPU机器PS,也支持基于三级存储(SSD/内存/显存)的纯GPU机器PS,还支持CPU机器+GPU机器/昆仑机器混布PS,可以完成万亿参数点击率预估模型的分钟级训练
  • 新训练机制支持:
    • 支持基于控制流的多任务分布式训练,性能较基于Intag的多任务提升50%以上
  • 分布式启动方式优化
    • 支持使用paddle.distibuted.spawn接口启动all_gather等分布式低阶API;
    • paddle.distributed.launch接口升级,支持指定单节点的进程数,并可简化为fleetrun
    • 优化gen_nccl_id,去除grpc依赖,添加一定的容错性,提升分布式任务启动的稳定性;
    • 支持Gloo方式启动集合通信多CPU

模型保存与载入

  • 规范Layer、Optimzier等API的set_dict方法名,统一改为set_state_dict。
  • paddle.load兼容性增强:支持从fluid.io.save_inference_model和fluid.io.save_params/persistables等接口的存储结果中载入Layer的state_dict。
  • 修改paddle.save/load接口行为,paddle.save不再为存储结果添加后缀,paddle.load每次载入仅返回一个结果,规范接口语义。
  • 移除paddle.SaveLoadConfig,对于paddle.jit.save, paddle.jit.load, paddle.load等接口兼容载入的场景,使用**kwargs传入额外的配置,简化接口的使用。
  • 原静态图API paddle.io.save, paddle.io.load, paddle.io.save_inference_model, paddle.io.load_inference_model移动到paddle.static模块下。
  • 优化paddle.static.load_program_state接口使用体验,在不指定载入var_list的使用场景中,载入目录存在干扰文件时仅警告而不报错。

复数计算

  • 扩展动静态图执行引擎,支持复数神经网络训练与复数梯度累加。
  • 新增mul, div, matmul, kron, abs等Op对复数计算支持。

ONNX功能升级

  • 新增API: paddle.onnx.export支持paddle2.0动态图转换到ONNX协议
  • 新增PPOCR,PPYOLO,FasterRCNN,ERNIE等模型转换
  • 更丰富的Paddle op覆盖,支持88个Paddle OP算子,同时支持导出为ONNX 1~12不同版本的算子集

性能优化(含分布式)

  • 动态图性能优化:

    • 数据读取性能优化:简化动态图模式下DataLoader底层实现逻辑,降低读取线程开销,进一步提升数据读取效率,提升模型整体训练速度。MobileNetV1在V100单卡、BatchSize=128的场景下整体训练速度提升34%。
    • 动态图组网API升级和性能优化,大量动态图API将直接调用自动生成的Pybind接口,性能显著提升。
    • 提高了Resnet50 oneDNN动态图训练的性能。目前CPU场景Resnet50 oneDNN 动态图训练速度提升6.4 倍。
  • OP性能优化:

    • argsort:优化输入Tensor的元素个数等于其axis维长度时的性能,前向速度提升34倍,反向速度提升10倍。
    • dropout:优化GPU性能,FP32性能提升约20%,FP16性能提升约50%。
    • cast:优化GPU性能,性能提升10%~20%。
    • softmax:优化axis=-1的情况下的GPU性能,针对不同shape有3倍~96倍的提升。
    • 其他OP性能优化:cumsum,reshape,Flatten,IndexSelect,Roll,elementwise_add,AdamW及RNN类(LSTM,GRU,SimpleRNN)等OP,均有明显性能提升。
  • 策略优化:

    • 新增fused_bn_add_act融合策略,可以自动对batch_norm+elementwise_add+activation的组合模式进行自动融合加速。
    • 新增梯度聚合的inplace addto策略,支持原位梯度累加,在ResNet-50混合精度训练中性能提升6.3%。
  • 优化FastThreadedSSAGraphExecutor调度,修复通信同步场景下,通信计算不重叠的情况,4机32卡resnet50提升约0.3%。

  • 分布式性能优化:

    • 优化lars策略, ResNet50 分布式多卡训练 16k batch size 的 time2train 指标小于 10 分钟。
    • 优化paddle.fleet amp分布式性能,修复最后一个通信和计算不重叠的情况,fp16 4机32卡性能提升约0.5%。
    • 优化paddle.fleet.gradient_merge分布式性能,先聚合梯度再通信,多机性能可提升20%-40%,达到线性加速比。
    • 优化参数服务器通信组件Communicator性能。GEO-400batch通信一次的情况下,W2V模型吞吐率、Simnet-Bow模型性能均有显著提升。Async模式下,相较于飞桨框架1.8按本,W2V模型吞吐率提升11%,CTR-DNN模型性能提升14% 。

调试分析

  • 将框架内仅100处使用LOG(FATAL)抛出异常的写法统一改为使用PADDLE_THROW,优化由于框架不支持某种行为而导致的报错格式与内容。
  • 完善框架内Signal Handler实现,优化执行遇到系统Signal错误时的报错格式与内容。
  • 优化框架报错栈格式,将编译时python报错栈移至原生报错栈下方,提升报错信息阅读体验。
  • 累计进一步完善约1500余条框架内检查报错的错误类型与提示文案,提升框架整体调试易用性。
  • 动态图报错信息增强,动态图下Pybind层的报错信息进行系统性增强,提升用户体验。
  • 优化Paddle Python端报错异常类型,与Python原生报错类型对齐。
  • 默认隐藏C++报错栈,优化隐藏C++栈之后的报错格式,去掉分界标志Error Message Summary,与Python原生报错格式对齐。
  • 优化部分static模块下API在非静态图模式下使用报错提示,包括static.append_backward, static.gradients, static.scope_guard, static.Print, static.nn.embedding, static.nn.data_norm, static.nn.multi_box_head, static.nn.nce, static.nn.py_func共9个API。
  • 优化了动态图模型下传入Tensor为None时的报错信息。
  • 优化了Layer的打印信息,支持打印Layer中的各个层次结构关系。

推理部署

模型量化

  • 动态图训练时量化功能增强,新增`ImperativeQu...
Read more

PaddlePaddle 2.0.0-rc1

18 Dec 09:06
d82d59e
Compare
Choose a tag to compare

Release Note

重要更新

飞桨框架2.0-RC1版本有如下重要更新:

  • 安装环境 官方发布支持CUDA11的安装包(experimental);官方发布支持百度昆仑芯片的安装包(experimental)
  • API功能 支持numpy兼容的paddle.Tensor 索引和切片操作(基本索引);去除部分API中的axis参数,支持numpy兼容的广播语义;新增了部分API,完善了部分API的功能,修复了部分API的bug
  • 动静转换 支持动态图转静态图的更多python语法,并支持通过 paddle.jit.not_to_static 标识不进行动转静的函数
  • 框架功能 支持多次调用paddle.Tensor.backward() 进行累计梯度,效果等同于增加batch size后计算的梯度;默认隐藏了C++报错栈,并优化了报错格式;分布式训练支持heterbox异构训练
  • 框架性能 混合精度训练支持纯FP16模式,ResNet50模型V100单卡训练性能达1400+ samples/sec;分布式训练做了性能优化

前瞻性预告

  • 飞桨框架计划在未来的某个版本起,放弃对python2和python3.5的支持,建议您升级python到3.8版本来使用飞桨
  • 飞桨框架计划在未来的某个版本起,放弃对CUDA9.0的支持,建议您升级CUDA版本来使用飞桨

训练框架

基础API(含分布式)

新增API

  • 新增paddle.log2
  • 新增paddle.log10
  • 新增paddle.nn.initializer.set_global_initializer
  • 新增paddle.median
  • 新增paddle.broadcast_shape,可以计算两个tensor shape经过broadcast计算后的shape
  • 新增paddle.vision.ops.deform_conv2d, paddle.vision.ops.DeformConv2d
  • 新增paddle.subtract
  • 新增paddle.optimizer.lamb
  • 新增Tensor相关API,Tensor.cpu、Tensor.cuda(idx)、Tensor.pin_memory、Tensor.is_leaf、Tensor.clone

修复和完善API

  • paddle.multiply 去掉axis
  • paddle.pow 去掉 type promotion
  • paddle.add, paddle.subtract, paddle.multiply, paddle.divide, paddle.matmul, paddle.reshape, paddle.transpose, paddle.kron, paddle.trace, paddle.sum 支持complex64 和complex128 数据类型
  • 移除paddle.maximum, paddle.minimum的axis参数
  • multiplex支持动态图
  • CrossEntropyLoss增加soft_label and axis,修改形状,并提升性能
  • paddle.nn.functional.interpolate size参数支持Tensor格式输入
  • paddle.nn.functional.pad添加在constant模式时,对N和C维度的padding
  • paddle.optimizer.momentum支持恢复训练
  • 修复转换前对BatchNorm指定weight_param名字,再使用paddle.nn.SyncBatchNorm.convert_sync_batchnorm 转换成SyncBatchNorm时报错
  • paddle.to_tensor选择设备时,支持直接输入其他Tensor的place
  • 优化Tensor.detach的性能,与原Tensor共享内存,减少1次内存拷贝,并且不保留在原计算图中
  • 静态图模式下,新增支持通过paddle.optimizer.get_lr()获取学习率
  • 修复paddle.Embedding在GPU下使用超范围ID报错异常

移除API(包括别名)

  • 移除complex module下的api: paddle.complex.matmul, paddle.complex.reshape, paddle.complex.transpose, paddle.complex.kron, paddle.complex.trace, paddle.complex.sum, paddle.complex.elementwise_add, paddle.complex.elementwise_sub, paddle.complex.elementwise_mul, paddle.complex.elementwise_div
  • 移除paddle.nn.functional下的sigmoid_cross_entropy_with_logits

高层API

  • 新增api paddle.callbacks.ReduceLROnPlateau
  • 新增api paddle.callbacks.LRScheduler
  • 新增api paddle.vision.datasets.FashionMnist
  • paddle.io.DataLoader中places参数变更为可选参数,当为默认值None时,自动选择paddle.CPUPlace()或paddle.CUDAPlace(0),places参数将在后续版本删除
  • paddle.io.DataLoader支持通过设置batch_size=None来禁用DataLoader自动组batch功能
  • 新增api paddle.io.ComposeDataset 用于将多个数据集按字段拼接为一个数据集
  • 新增api paddle.io.ChainDataset 用于将多个数据集按sample整合为一个数据集
  • 新增api paddle.io.WeightedRadnomSampler 用于通过指定权重进行随机采样
  • 新增api paddle.vison.ops.yolo_loss和paddle.vision.ops.yolo_box
  • 新增api paddle.flops
  • 新增api paddle.callbacks.EarlyStopping
  • 更新api model.save,保存文件格式与底层保持一致
  • 修复api 修复动态图input dtype为非float32且Model初始化不提供inputs时,保存预测模型报错的bug
  • paddle.metric.Accuracy支持输入多维Tensor,支持rank为1的label和one-hot表示的label

功能优化(含分布式)

动态图基础功能

  • 支持Tensor和Scalar在使用运算符运算时进行正确的类型提升
  • 修复了多个模型train/eval模型切换互相干扰的问题。动态图Layer.eval()与no_grad解耦,改动前调用Layer.eval()后Tracer不会自动记录反向,改动后调用Layer.eval()仍会自动记录反向,如果需要反向,可以使用paddle.no_grad
  • 支持通过索引或切片修改 Tensor数据
  • 增加 inplace 反向检测模块,检测是否前向inplace 操作会影响梯度计算的正确性
  • 新增Tensor.backward()自动求导时,梯度会累加在之前的梯度上,可以实现变相扩大“batch_size”
  • 支持了 SE-ResNext oneDNN 动态图训练

动态图转静态图

新增语法

  • 增加在动转静循环中使用isinstance语法的支持
  • 添加对赋值shape给tuple的动转静语法支持,如a, b, c, d = tensor.shape
  • python的 and/or 语句的左右操作数的执行是有先后顺序的,若左操作数的结果能够确定逻辑值,将不执行右操作数。过去动转静图中的logical_and/logical_or对这种情况处理有问题。增加了这种支持。
  • 增加支持了函数 signature中含有**kwargs的情况
  • 支持使用 jit.not_to_static 装饰函数,在动转静过程中,不转化该函数
  • 支持python字典语法 dict.pop()

bug修复

  • 修复动转静存储lstm接口时一个表示drop_state的变量没有初始化导致模型存储失败的问题
  • 修复嵌套循环在变量分析上的问题
  • 修复return在一些特殊情况的问题
  • 修复if-else中处理列表生成式及变量分析上的问题
  • 修复迭代变量在一些特殊情况的问题
  • 修复transpose API 在动态图和静态图行为不一致问题,使之支持动转静
  • 修复concat API 在动态图和静态图行为不一致问题,使之支持动转静
  • 优化部分动转静报错信息,使报错位置更准确
  • 修复convert_call在特殊情况下会重复递归调用问题
  • 修复由于2.0 API对out.dtype判断不同导致的动转静问题
  • 修复了x.shape == y.shape在动态图是判断list相等,返回True/False,但静态图下会被重载成elementwise的问题,这种转为静态图后对elementwise结果进行reduce。
  • 修复了param_guard覆盖不到hook的问题。
  • 修复了init运行动态图一些参数变量在静态图因为类型不是静态图变量不能赋值的问题
  • 修复了用户在__init__函数中定义的非参数类型变量值无法正确修改和更新的问题
  • 修复了动转静过程中错误转化第三方库logging的问题
  • 修复了for-enumerate语法AST转写有误的问题
  • 修复了部分warning信息循环显示多次的问题

混合精度训练

  • 支持更为激进的FP16训练模式(即纯FP16训练)。为保证模型的收敛性在Momentum优化器中新增multi_precisionrescale_grad属性,multi_precision主要指示优化器需要维护一份master weights
  • 使用纯FP16训练,ResNet50模型在配有16GB显存的V100上单卡训练性能可达1400+ samples / sec

模型量化

  • 动态图量化支持skip指定Layer
  • 动态图量化支持2.0 API Conv 以及Linear

分布式训练优化

  • 支持使用paddle.distibuted.spawn接口启动all_gather等分布式低阶API
  • 支持heterbox异构训练
  • 流水线并行支持Executor.run接口,提升易用性
  • Launch接口升级,支持指定单节点的进程数
  • Sharding支持百亿参数模型多卡训练

模型保存与载入

  • 支持有多个方法声明由paddle.jit.to_static转写的Layer在使用paddle.jit.save存储后,仍然能够通过paddle.jit.load载入,并且由paddle.jit.to_static转写的多个方法仍然能够使用
  • 支持由paddle.jit.load载入的Layer在fine-tune或者作为其他Layer的子Layer使用之后,仍然能够通过paddle.jit.save正确存储
  • 拓展paddle.jit.save支持存储paddle.DataParallel模型
  • 优化paddle.static.load_program_state接口使用体验,在不指定载入var_list的使用场景中,载入目录存在干扰文件时仅警告而不报错
  • 支持paddle.jit.save处理dict类型的InputSpec
  • 支持paddle.onnx.export将动态图模型导出为ONNX文件格式

性能优化(含分布式)

  • 提升RNN类OP在CPU上的性能(LSTM,GRU,SimpleRNN),对比2.0-rc版本,LSTM、GRU、SimpleRNN前向性能与后向性能均有显著提升
  • 优化FastThreadedSSAGraphExecutor调度,修复通信同步场景下,通信计算不重叠的情况,4机32卡resnet50提升约0.3%
  • 优化paddle.fleet amp分布式性能,修复最后一个通信和计算不重叠的情况,fp16 4机32卡性能提升约0.5%
  • 优化分布式通信组件Communicator性能。GEO-400模式下,W2V模型吞吐率、Simnet-Bow模型性能均有显著提升。Async模式下,相较于飞桨框架1.8按本,W2V模型吞吐率提升11%,CTR-DNN模型性能提升14%
  • 优化参数服务器模式下Worker为GPU设备时的性能,降低Embedding查表的拷贝耗时,在CTR-DNN模型中,训练吞吐率有显著提升
  • 分布式GPU动态图实现计算和通信overlap,并支持用户细粒度配置梯度fuse的group大小等选项。在ResNet152、Bert两个模型上,多节点性能提升在5%以上。在ResNet50也有3%以上的提升
  • 提升cumsum在GPU上的性能。
  • 提高了Resnet50 oneDNN 动态图训练的性能。目前Resnet50 oneDNN drgraph训练比CPU训练快 6.4 倍
  • 新增GRU和SimpleRNN的cudnn支持

调试分析

  • 优化Paddle Python端报错异常类型与Python原生报错类型对齐
  • 默认隐藏C++报错栈,优化隐藏C++栈之后的报错格式,去掉分界标志Error Message Summary,与Python原生报错格式对齐
  • 优化部分static模块下API在非静态图模式下使用报错提示,包括static.append_backward, static.gradients, static.scope_guard, static.Print, static.nn.embedding, static.nn.data_norm, static.nn.multi_box_head, static.nn.nce, static.nn.py_func共9个API
  • 优化了动态图模型下传入Tensor为None时的报错信息
  • 动态图print tensor的格式进一步优化

编译安装

新增支持

  • (experimental)发布支持cuda11的安装包
  • 将cuda10.1及以上的Paddle镜像以及CI系统镜像中的NCCL版本到2.7.8
  • 发布支持xpu的安装包
  • 发布支持jetpack的安装包,以及支持nv_jetson的C++预测库。

体验优化

  • 修复联编策略,单独发布包含tensorrt的gpu包,避免用户在安装其他GPU版本的包出现没有tensorrt的报错
  • 删除安装依赖包:scipy、rarfile、prettytable、pathlib
  • 安装文档优化

Bug修复

  • 修复多卡训练时0号GPU卡显存占用多于其他卡的Bug
  • 修复了tile op计算时shape推导错误的问题
  • 修复了使用paddle时出现的大量invalid escape sequence的warning信息
  • 修复了paddle.full设置INF、NAN、NINF等时的bug
  • 修复paddle.fleet多nccl comm设置不生效的问题,添加同步模式下多nccl comm通信不重叠的警告
  • 修复paddle.framework.seed在TruncatedNormal初始化不符合预期的问题
  • 修复AvgPool 相关 API动转静exclusive参数行为不一致问题;修复MaxPool 相关 API ceil_mode传参问题
  • 修复paddle.topk在GPU下结果不正确的bug
  • 修复 fluid.layers.nn.gather 动态图API,缺少了 overwrite 选项 bug
  • 修复Windows下终端不识别CUDA_VISIBLE_DEVICES为空字符的bug,通过设置空字符串可以使框架以CPU模式执行
  • 修复当LinearLrWarmup中递归包含Learning Rate Scheduler时,optimizer.state_dict/set_dict时的无法递归保存加载的Bug
  • 修复了ptb lm模型单机训练性能下降的问题
  • 修复了softmax_with_cross_entropy使用ignore_index时梯度计算的bug
  • 修复了AdamW第一次执行后再次获取要进行decay的参数为空的bug

推理

Paddle Inference

功能升级

  • Paddle 在 2.0 中新增或升级了部分算子。从本版本起,对前向算子版本规则进行定义与兼容约束。通过框架间算子版本的对齐,确保不同框架中同一算子版本的定义和行为一致,从而增强框架整体的健壮性
  • 新增TryShrinkMemory接口,通过释放临时tensor的方式减少应用显/内存占用,demo示例可参考Paddle-Inference-Demo
  • Paddle-TRT支持clip op,支持分类模型GhostNet在Paddle-TRT下运行
  • Paddle-TRT int8预测支持含有channelwise量化的mul op的模型,支持PaddleOCR检测和识别的PaddleSlim量化模型在Paddle-TRT int8下运行
  • load_inference_modelsave_inference_model 两个API迁移到 paddle.static 下,提升了易用性,兼容旧接口。
  • 新增 serialize_program, deserialize_program, serialize_persistables, deserialize_persistables, save_to_file, load_from_file 六个API,用来满足用户执行序列化/反序列化 program,序列化/反序列化 params,以及将模型/参数保存到文件,或从文件中加载模型/参数的需求。
  • 支持部分模型的BF16预测。目前支持resnet50,googlenet,mobilenetv1和mobilenetv2模型的BF16预测
  • 添加了一些oneDNN 算子的版本兼容性支持

性能优化

  • ERNIE模型在开启TenorRT时增加变长输入的支持,带来性能提升147%。在软件版本cuda10.1、cudnn 7.6、tensorrt 6.0、OSS 7.2.1,模型ernie-base-2.0,数据集QNLI,输入BatchSize = 32时,Nvidia Telsa T4上的性能从905 sentences/s提升到2237 sentences/s。示例代码:Paddle-Inference-Demo/c++
  • 提高了oneDNN INT8 GRU性能。GRU INT8 模型的预测速度是原Paddle NativeConfig float32 模型的 1.65倍(线程= 1,batch_size = 50)
  • 添加了oneDNN batchnorem + activation的fuse支持,pvanet_ocr模型性能因此提高了2.8%

Bug修复

  • 修复含有avg pooling或global pooling的模型在jetson设备上出现计算结果错误、报错跳出或hang住的问题
  • 修复使用TensorRT动态shape推理时,TensorRT子图输出Tensor的shape结尾是x1时会被错误的删除的问题
  • 修复当使用TensorRT推理时,config.pass_builder()->DeletePass()不生效的问题
  • 解决了某些模型的性能取决于 matmul 算子的 weights 数值的问题
  • 修复了当CPU oneDNN加载多个模型预测时性能变慢的问题

模型升级

PaddleDetection

  • 升级动态图模型:
    • Faster RCNN, Faster FPN, Mask RCNN, Mask FPN, Cascade RCNN, Cascade Mask, YOLOv3模型精度打平静态图
      • 支持动转静功能,并打通Paddle Inference,精度速度打平静态图
  • 发布实时实例分割模型SOLOv2,相较竞品精度提升2.4个点,预测速度提升31.2%, 训练速度为竞品2.4倍
  • 新增Android移动端检测demo,包括SSD、YOLO系列模型
  • 新增PACT新量化策略,YOLOv3-Mobilenetv3在COCO数据集上比普通量化相比提升0.7%。

PaddleSlim

  • 动态图压缩功能支持
    • 新增动态图剪裁、量化训练功能
    • 剪裁新增通道数对齐功能,使产出模型更容易被预测库加速
    • PACT量化训练方法改为内置方法,方便用户直接调用
  • 新增OFA模型压缩技术,TinyERNIE经压缩后加速40%,精度无损

PaddleSeg

  • 全新发布2.0-rc版本,全面升级至动态图,支持15+分割模型,4个骨干网络,3个数据集,4种Loss:
    • 分割模型:ANN, BiSeNetV2, DANet, DeeplabV3, DeeplabV3+, FCN, FastSCNN, Gated-scnn, GCNet, HarDNet, OCRNet, PSPNet, UNet, UNet++, U^2Net, Attention UNet
    • 骨干网络:ResNet, HRNet, MobileNetV3, Xception
    • 数据集:Cityscapes, ADE20K, Pascal VOC
    • Loss:CrossEntropy Loss、BootstrappedCrossEntropy...
Read more

PaddlePaddle 2.0.0-rc0

30 Oct 03:37
97227e6
Compare
Choose a tag to compare

2.0-rc0 Release Note

重要更新

相对2.0-beta版,本版本在如下方面进一步完善:

  • 默认模式:paddle2.0-rc后将默认开启动态图模式;如果需要使用静态图编程模式,可以通过paddle.enable_static()来切换到静态图模式。
  • 框架API:修改50个常用API名称,新增8个基础API实现,移除220个API(包含别名移除),8个API增加二阶导数计算,更多API增加了对昆仑芯片的支持,分布式FleetAPI正式化,高层API进行了功能增强。
  • 框架功能:优化动静转换用法,优化模型读取和载入,优化混合精度训练和量化策略,优化分布式训练策略。删除了nltk等6项编译依赖;安装包增加对Python 3.8、CUDA 10.1/10.2的支持。
  • 推理引擎:增强int8量化能力,增加算子版本信息,oneDNN相关的功能强化和性能优化。

训练框架

基础API(含分布式)

新增API

  • 新增 paddle.emtpy API,返回未初始化的内存
  • 新增 paddle.emtpy_like API,返回未初始化的内存
  • 新增 paddle.mv API,返回矩阵-向量乘的结果
  • 新增paddle.multinomial多项分布API
  • 新增paddle.nn.LocalResponseNorm和paddle.nn.functional.local_response_norm
  • 新增paddle.nn.Pad1D/Pad2D/Pad3D api,支持constant,reflect,replicate和circular模式
  • 新增paddle.add_n
  • 新增动态图混合精度训练API,paddle.amp.auto_cast和paddle.amp.GradScaler

修复和完善API

  • paddle.reshape API支持bool类型输入
  • paddle.distribution.Categorical API添加sample和log_prob方法
  • BatchNorm1D, BatchNorm2D, BatchNorm3D 添加了 channel last 数据布局支持
  • paddle.optimzier.Adam和paddle.optimizer.AdamaW参数顺序修改
  • yolo_box支持输入特征图H,W不相等,用于完成长宽不相等的图像预测
  • paddle.nn.function.interpolate 支持 scale_factor 输入类型为 list
  • 添加了adaptive pool2d运算符的oneDNN支持 @intel
  • 添加了dilated conv和dilated conv_transpose的oneDNN支持 @intel
  • unique支持GPU设备计算
  • paddle.multiply 支持非variable 和 tensor 数据类型 输入
  • paddle.nn.AdaptiveMaxPool1D/2D/3D 和paddle.nn.functional.adaptivemaxpool1d/2d/3d,重构python端PoolAPI的实现
  • paddle.set_printoptions支持设置动态图Tensor的显示选项
  • paddle.assign API,支持数组/张量到张量的赋值
  • paddle.nn.functional.swish/paddle.nn.Swish,删除beta参数
  • paddle.nn.functional.thresholded_relu/paddle.nn.ThresholdedReLU,threshold参数默认值为1.0
  • paddle.norm,升级后支持fro、inf、-inf、0、1、2,和任何正实数p对应的p范数
  • paddle.nn.AdaptiveMaxPool1D/2D/3D 和paddle.nn.functional.adaptivemaxpool1d/2d/3d,重构python端PoolAPI的实现
  • RNN类(SimpleRNN、LSTM、GRU)优化参数顺序和基类RNNBase实现,集成cudnn lstm
  • 修复adaptive_pool op在特殊输出情况下GPU梯度异常的问题
  • 新增支持二阶求导功能:batch_norm、abs、log、expand、tile、squeeze、unsqueeze、matmul
  • 新增50余个算子对昆仑(XPU)训练的支持

API名称变化

  • 对2.0-beta的50个API名称进行了修改,详见 链接

移除API(包括别名)

  • 移除220个API(包括别名),详见 链接

多设备/分布式训练API

  • Fleet API正式化,统一到paddle.distributed.fleet作为Paddle通用分布式训练统一入口
  • paddle.distributed.fleet.DistributedStrategy作为Paddle统一并行策略定义入口暴露
  • 增加paddle.distributed.fleet.meta_optimizer.RecomputeOptimizer API,支持分布式下的重计算机制
  • 增加paddle.distributed.fleet.meta_optimizer.GradientMergeOptimizer API,支持分布式下的梯度累加机制
  • 增加paddle.distributed.fleet.meta_optimizer.PipelineOptimizer API,支持分布式下的流水线并行机制
  • paddle.distributed.fleet.DistributedStrategy新增amp优化策略,支持分布式下自动混合精度机制的开启
  • paddle.distributed.fleet.DistributedStrategy新增dgc优化策略,支持分布式下深度梯度压缩机制的开启
  • paddle.distributed.fleet.DistributedStrategy新增fp16_allreduce优化策略,支持分布式下fp16 allreduce通信机制的开启
  • paddle.distributed.fleet.DistributedStrategy新增lars优化策略,支持分布式下大batch size 训练使用 lars 优化器
  • paddle.distributed.fleet.DistributedStrategy新增lamb优化策略,支持分布式下大batch size 训练使用 lamb 优化器
  • paddle.distributed.fleet支持多优化策略组合,支持包括amp+recompute, dgc+recompute, amp+recompute+lars等十余种策略的组合
  • paddle.distributed.fleet.DistributedStrategy新增a_sync优化策略,支持分布式下使用参数服务器进行同步、异步、GeoSGD以及异构参数服务器优化训练
  • paddle.distributed.fleet.DistributedStrategy新增auto实验性优化策略,支持分布式下多策略最优化自动并行
  • 增加fleetrun启动分布式训练任务,支持Collective模式在单机单卡,单机多卡和多机多卡下启动,支持参数服务器模式在CPU集群、GPU集群、异构集群下启动,支持直接提交PaddleCloud集群
  • paddle.distributed.fleet支持动态图执行,支持GPU模式下动态图单机单机、单机多卡和多机多卡训练
  • paddle.distributed.fleet 新增通信集合功能,支持all_reduce,all_gather及 barrier功能
  • paddle.distributed.fleet 新增分布式指标计算功能,包括auc,rmse, mae,acc 等
  • paddle.distributed.fleet下废弃原fleet.main_program和fleet.startup_program,替换为paddle.static.default_main_program() 和 paddle.static.default_startup_program()
  • paddle.distributed.fleet支持异构参数服务器模式,可通过fleetAPI配合用户组网实现异构计算设备训练,跨设备协作进行分布式训练
  • 分布式集合通信API支持CPU设备
  • paddle.distributed.fleet.DistributedStrategy新增localsgd优化策略
  • paddle.distributed.fleet.DistributedStrategy新增adaptivelocalsgd优化策略,支持分布式下自动计算step步长的localsgd策略
  • 新增paddle.distributed添加InMemoryDataset和QueueDataset支持使用Dataset进行分布式训练

高层API

  • 新增IterableDataset基类支持流式数据集,DataLoader支持对IterableDataset进行多进程加速,并支持通过paddle.io.get_worker_info()获取子进程状态并进行进程间数据划分
  • paddle.io.DataLoader的places参数更新为可选,不指定places使用默认的places
  • 新增CIFAR10, CIFAR100, Conll05st等10个map-style数据集,支持数据集自动下载并以map-style方式获取数据
  • DIstributedBatchSampler接口新增num_replicas和rank参数用于指定卡数和当前卡逻辑序号
  • 新增paddle.io.TensorDataset支持tensor数据集读取
  • 新增paddle.io.Sampler基类,并新增SequenceSampler,RandomSampler用于在BatchSampler中顺序或乱序获取数据
  • paddle.io.BatchSampler支持Sampler作为输入,删除原输入参数indices
  • 下线paddle.reader下原有API
  • paddle.vision.transforms中的图像变换算子添加处理PIL的后端
  • paddle.summary支持多个输入与多个输出的Layer
  • model.save升级,在动态图保存预测模型时,用户不需要调用paddle.jit_to_static或者为layer函数增加装饰器(动转静的功能)。并且如果用户在Model初始化时如果传入了inputs,则可以保存正确的输入shape,否则模型的输入shape会按照运行模型时传入的输入shape保存

功能优化(含分布式)

动态图基础功能

  • 新增Tensor的clone接口,会拷贝一个完全相同的Tensor,同时clone后的Tensor继续保留在计算图中,并支持梯度回传
  • 支持通过索引或切片原地(inplace) 修改 Tensor
  • 动态图Tensor打印和显示优化,高维tensor数据显示方式对齐numpy,支持缩略形式
  • 优化了initializer类的__call__方法,不再需要传入block,避免用户在动态图中感知到静态图block概念
  • 隐藏动态图多卡API DataParallel的scale_loss和apply_collective_grads方法,编写多卡模型代码时不再需要调用这两个方法,简化写法,提升易用性
  • 添加oneDNN 动态图支持,支持了 Resnet50模型训练和推理。@intel

动态图转静态图

  • 动态图转静态图相关API接口迁移2.0,简化了import 路经
  • 动转静装饰器 to_static 新增支持直接装饰 model 实例,如 to_static(model, input_spec)
  • 新增InputSpec中name参数的默认值解析机制,若未指定name,则使用被装饰函数参数名作为name
  • StaticLayer重命名为StaticFunction
  • 优化了动转静Debug log
  • 修复了一些场景下动转静的bug

混合精度训练

  • 重构静态图混合精度训练中的梯度有效性检查和动态loss scaling逻辑,去除一些condition block逻辑

模型量化

  • 新增动态图分channel量化功能,支持对Conv2D和Linear等layer的权重进行分channel求取量化参数
  • 新增动态图量化训练过程中对模型layer求取output scale参数功能,供Server端量化推理部署使用

分布式训练优化

  • 支持流水线并行训练
  • 支持参数服务器模式下异构分布式训练,支持PS+GPU,PS+昆仑, PS+CPU,PS+CPU+GPU(昆仑)等多种设备进行训练,单台GPU/昆仑机器+10台cpu机器上,完成千万数据千亿参数点击率模型分钟级训练
  • 大规模稀疏功能进行了升级,支持int64范围内的稀疏ID,支持稀疏表自增长、配置准入条件及增量模型保存功能
  • 分布式支持控制流多任务,性能较instag多任务提升50%以上

模型保存与载入

  • 支持paddle.jit.save接口存储未经paddle.jit.to_static转写的Layer对象,扩大接口使用场景
  • 规范Layer、Optimzier等API的set_dict方法名,统一改为set_state_dict,规范接口名
  • 支持paddle.load从fluid.io.save_inference_model接口存储的结果中载入Layer的state_dict,打通接口体系,提升易用性
  • 支持paddle.load从fluid.io.save_params/persistables接口默认存储结果中载入Layer的state_dict,打通接口体系,提升易用性
  • 修改paddle.save/load接口行为,paddle.save不再为存储结果添加后缀,paddle.load每次载入仅返回一个结果,规范接口语义
  • 为paddle.jit.TransLatedLayer新增program方法,用于获取paddle.jit.load载入模型的program,便于了解模型结构
  • 移除paddle.SaveLoadConfig,对于paddle.jit.save, paddle.jit.load, paddle.load等接口兼容载入的场景,使用**kwargs传入额外的配置,简化接口的使用
  • 更新paddle.jit.save, paddle.jit.load接口参数model_path的含义,用户输入的字符串作为存储文件前缀而非目录
  • 原静态图API paddle.io.save, paddle.io.load, paddle.io.save_inference_model, paddle.io.load_inference_model移动到paddle.static模块下

性能优化(含分布式)

  • 提升Argsort OP当输入Tensor的元素个数等于其axis维长度时的性能,前向速度提升34倍,反向速度提升10倍
  • 优化lars策略, ResNet50 分布式多卡训练 16k batch size 的 time2train 指标小于 10 分钟
  • 新增fused_bn_add_act OP,融合batch_norm、elementwise_add和activation OP
  • 新增梯度聚合的inplace addto策略,支持原位梯度累加,在ResNet-50混合精度训练中性能提升6.3%

调试分析

  • 继续完善paddle中约1500条报错检查的提示文案,提升框架调试易用性

编译安装

  • 新增安装包对python3.8的支持
  • 删除对matplotlib的安装依赖
  • 删除对graphviz安装依赖
  • 删除对objgraph安装依赖
  • 删除对netifaces的安装依赖
  • 删除对nltk的安装依赖
  • 删除对opencv的安装依赖
  • 新增安装包对cuda10.1、cuda10.2的支持
  • 预测库支持cuda10.2-cudnn8-trt7.1的版本

Bug修复

  • 修复梯度裁剪GradientClipByGlobalNorm在Paddle默认dtype是float64的网络下使用报错的bug
  • 修复Windows的CUDA10.1/10.2版本的无法加载CUDA相关dll的bug
  • 修复Tensor在CUDAPinnedPlace与其他Place之间相互拷贝的bug
  • 修复paddle.jit.load载入无参数Layer出错的bug
  • 修复paddle.diag对于大尺寸输入计算错误的bug,修复paddle.diag在Windows Python3.8环境下内存占用异常的bug
  • 修复paddle.topk在静态图组网时输出的shape不合理的问题
  • 修复paddle.io.DataLoader多进程模式经paddle.distributed.spawn启动时直接报错退出的bug
  • 修复paddle.set_device接口设置运行时设备在部分场景中失效的问题
  • 修复paddle.static.nn.while_loop反向计算中使用前向计算的变量而导致的梯度计算错误的bug
  • 修复fleet不支持paddle.optimizer的bug
  • 修复Adam优化器计算公式与论文有diff的bug
  • 修复logsumexp导致部分机器上编译太慢的问题
  • 修复ParamAttr缺失类型检查的问题
  • 修复AvgPool API ceil_mode=true情况下在CPU上平均池化核计算问题
  • 修复paddle.distributed.fleet.init_server()加载模型时维度不匹配的问题
  • 修复paddle.distributed.fleet参数服务器模式下训练节点不支持GPU的问题
  • 修paddle.allclose在float64数据类型下精度diff问题
  • 修复了反向传播支持分组的conv算子(conv2d grad op with groups)的错误 @intel
  • 修复了动转静to_static装饰模型,直接切换eval模式无法保存模型的bug
  • 修复matmul不支持fp16bug
  • 修复matmul反向计算性能差以及显存占比高的问题
  • 修复paddle.nn.Transformer参数bias_attr和weight_attr指定为bool,list/tuple出错问题
  • 修复dynamic_decode预测解码不能正确提前结束的问题
  • 修复paddle.unsqueeze在axis为Tensor的情况下结果错误的问题
  • 修复了paddle.to_tensor在某些场景下zero_copy带来的问题,暂时禁止了zero_copy行为

推理

Paddle Inference

  • 预测库默认命名从fluid_inference改为paddle_inference

功能升级

  • Paddle-TRT 动态shape功能支持PaddleSlim量化Int8模型
  • Paddle Inference GPU Int8支持conv2d_transpose量化
  • 增加预测模型的算子版本信息
  • 在oneDNN INT8量化策略中增加了对有偏移的scales的量化和反量化的支持 @intel
    • Add support for (de/re) quantization with shiftted scales in INT8 quantization strategy
  • 添加了对oneDNN BF16的支持:支持conv2d bf16运算符和gru bf16 op,启用了resnet50 bf16模型推断 @intel
    • Added CPU BF16 support: support conv2d bf16 operator and gru bf16 op, enabled resnet50 bf16 model inference.

性能优化

  • ERNIE模型在T4上使用Paddle-TRT FP16推理性能提升15%。@NVIDIA
  • 通过支持oneDNN FP32 GRU和oneDNN INT8 GRU,GRU INT8模型的速度与NativeConfig推理相比,提高了约1.49倍(线程= 1,batch_size = 50)@intel
    • Added support for oneDNN FP32 GRU and oneDNN INT8 GRU. The GRU INT8 model has 1.49X speed-up compared with NativeConfig inference (with thread=1, batch_size=50)
  • 通过oneDNN升级到1.6,Ernie Large oneDNN在Skylake上(Intel Core 6148)推理的速度提高了约2.7倍(即单元测试 test_analyzer_ernie_large)@intel
    • Since oneDNN is upgraded to 1.6, Ernie Large (test_analyzer_ernie_large) oneDNN inference has speed up ~2.7x.

Bug修复

  • 修复用户使用Paddle Inference ZeroCopyRun接口,开启MKLDNN时,在变长输入下内存泄露的bug
  • 修复ERNIE模型含有共享参数时预测出错的bug
  • 修复带Paddle-TensorRT功能的预测库在未安装TensorRT的环境下初始化报错的bug
  • 修复softmax op、layer_norm op使用Paddle-TRT预测时维度计算错误的bug
  • 解决了增加cpu_math_library_num_threads_数目,预测性能却无法提高的问题(PaddleOCR repository)@intel
    • Fix the issue that increasing cpu_math_library_num_thr...
Read more

PaddlePaddle 2.0.0-beta0

15 Sep 01:25
264e76c
Compare
Choose a tag to compare

2.0-beta Release Note

重要更新

本版本为飞桨框架v2.0的测试版,最重要的变化为API体系的全面升级以及命令式编程(动态图)能力的全面完善。本版本系统优化了飞桨基础API的目录结构,全面修复了历史遗留的相关问题,并对API做了充分补充,特别是提供了更为完善的高层API功能;同时提供了对动态图的量化训练、混合精度训练的支持,动静转换实现了完备的语法支持,并且易用性大幅提升,动态图相关功能趋于完善,推荐使用动态图模式。此外,推理库的C++接口也做了升级优化,推理库对量化模型的支持以及推理性能都有了全面增强。

训练框架

基础API

兼容性说明

  • Paddle 2.x版本推荐用户使用位于paddle根目录下的API,同时在paddle.fluid目录下保留了所有的Paddle 1.x版本的API。按照设计,Paddle 1.x版本训练的代码,不做任何修改,即可在Paddle 2.x版本上正常运行;Paddle 1.x版本训练保存的模型,可以使用Paddle 2.x版本进行推理。

目录结构调整

  • 在2.0-alpha版本的基础上,本版本对于目录结构进行了一些调整,调整完最新的目录结构如下:
    目录 功能和包含的API
    paddle.* paddle根目录下保留了常用API的别名,当前包括:paddle.tensor和paddle.framework目录下的所有API
    paddle.tensor 跟tensor操作相关的API,比如:创建zeros, 矩阵运算matmul, 变换concat, 计算add, 查找argmax等
    paddle.nn 跟组网相关的API,比如:Linear, 卷积,LSTM等,损失函数,激活函数等
    paddle.static.nn 静态图下组网专用API,比如:输入占位符data, 全连接层fc, 控制流while_loop/cond
    paddle.static 静态图下基础框架相关API,比如:Variable, Program, Executor等
    paddle.framework 框架通用API和imprerative模式的API,比如:to_tensor等
    paddle.optimizer 优化算法相关API,比如:SGD,Adagrad, Adam等
    paddle.optimizer.lr_scheduler 学习率衰减相关API
    paddle.metric 评估指标计算相关的API,比如:accuracy, auc等
    paddle.io 数据输入输出相关API,比如:Dataset, DataLoader等
    paddle.device 设备管理相关API,比如:CPUPlace, CUDAPlace等
    paddle.distributed 分布式相关基础API
    paddle.distributed.fleet 分布式相关高层API
    paddle.vision 视觉领域API,比如,数据集,数据处理,常用基础网络结构,比如resnet
    paddle.text NLP领域API, 比如,数据集,数据处理,常用网络结构,比如transformer

API别名规则

  • 为了方便用户使用,API会在不同的路径下建立别名,比如paddle.add -> paddle.tensor.add,推荐用户优先使用较短的路径paddle.add
  • 所有framework, tensor目录下的API,均在paddle根目录建立别名;除少数特殊API外,其他API在paddle根目录下均没有别名。
  • paddle.nn目录下除functional目录以外的所有API,在paddle.nn目录下均有别名;functional目录中的API,在paddle.nn目录下均没有别名。
  • 以下为一些特殊的别名关系,推荐使用左边的名称:
    • paddle.sigmoid -> paddle.tensor.sigmoid -> paddle.nn.functional.sigmoid
    • paddle.tanh -> paddle.tensor.tanh -> paddle.nn.functional.tanh
    • paddle.remainder -> paddle.mod -> paddle.floor_mod
    • paddle.divide -> paddle.true_divide
    • paddle.rand -> paddle.uniform
    • paddle.randn -> paddle.standard_normal
    • Optimizer.clear_grad -> Optimizer.clear_gradients
    • Optimizer.set_state_dict -> Optimizer.set_dict
    • Optimizer.get_lr -> Optimizer.current_step_lr
    • Layer.clear_grad -> Layer.clear_gradients
    • Layer.set_state_dict -> Layer.set_dict

常用API名称变化

  • 此版本使用Tensor表示数据,创建张量API, paddle.fluid.dygraph.to_variable修改为paddle.to_tensor
  • 加、减、乘、除使用全称,不使用简称
  • 对于当前逐元素操作,不加elementwise前缀
  • 对于按照某一轴操作,不加reduce前缀
  • Conv, Pool, Dropout, BatchNorm, Pad组网类API根据输入数据类型增加1d, 2d, 3d后缀
    Paddle 1.8 Paddle 2.0-beta
    paddle.fluid.layers.elementwise_add paddle.add
    paddle.fluid.layers.elementwise_sub paddle.subtract
    paddle.fluid.layers.elementwise_mul paddle.multiply
    paddle.fluid.layers.elementwise_div paddle.divide
    paddle.fluid.layers.elementwise_max paddle.maximum
    paddle.fluid.layers.elementwise_min paddle.minimum
    paddle.fluid.layers.reduce_sum paddle.sum
    paddle.fluid.layers.reduce_prod paddle.prod
    paddle.fluid.layers.reduce_max paddle.max
    paddle.fluid.layers.reduce_min paddle.min
    paddle.fluid.layers.reduce_all paddle.all
    paddle.fluid.layers.reduce_any paddle.any
    paddle.fluid.dygraph.Conv2D paddle.nn.Conv2d
    paddle.fluid.dygraph.Conv2DTranspose paddle.nn.ConvTranspose2d
    paddle.fluid.dygraph.Pool2D paddle.nn.MaxPool2d, paddle.nn.AvgPool2d

新增API

  • 共计新增140个API,具体参考链接和API文档
    • 新增环境设置API:paddle.set_default_dtype, paddle.get_default_dtype, paddle.set_device, paddle.get_device, paddle.manual_seed
    • 新增Tensor操作API:numel, chunk, masked_select, isfinite, isinf, isnan, sort, topk, Flatten, dim, tile
    • 新增组网API: Linear, Bilinear, Embedding, linear, bilinear, embedding
    • 新增视觉组网类API:Conv1d, ConvTranspose1d, MaxPool1d, MaxPool2d, MaxPool3d, AvgPool1d, AvgPool2d, AvgPool3d, AdaptiveMaxPool1d, AdaptiveMaxPool2d, AdaptiveMaxPool3d, ReflactionPad1d, ReflactionPad2d, ReflactionPad3d, ReplicationPad1d, ReplicationPad2d, ReplicationPad3d, ZeroPad2d, ConstantPad1d, ConstantPad2d, ConstantPad3d, PixelShuffle, Upsample, UpsamplingNearest2d, UpsamplingBilinear2d, conv1d, conv_transpose1d, avg_pool1d, avg_pool2d, avg_pool3d, max_pool1d, max_pool2d, max_pool3d, adaptive_max_pool1d, adaptive_max_pool2d, adaptive_max_pool3d, adaptive_avg_pool1d, adaptive_avg_pool3d
    • 新增文本处理组网类API: SimpleRNN, LSTM, GRU, MultiHeadAttention, Transformer, TransformerEncoder, TransformerEncoderLayer, TransformerDecoder, TransformerDecoderLayer
    • 新增激活类API:ELU, Hardshrink, Hardtanh, PReLU, ReLU6, Tanh, Tanhshrink, Softmax
    • 新增归一化API:BatchNorm1d, BatchNorm2d, BatchNorm3d, SyncBatchNorm, InstanceNorm1d, InstanceNorm2d, InstanceNorm3d, weight_norm, remove_weight_norm, batch_norm, instance_norm, layer_norm, normalize
    • 新增Dropout类API:Dropout2d, Dropout3d, AlphaDropout, dropout, dropout2d, dropout3d
    • 新增相似度、损失函数类API:CosineSimilarity, PairwiseDistance, CTCLoss, KLDivLoss, BCEWithLogitsLoss, MarginRankingLoss, SmoothL1Loss, consine_similarity, binary_cross_entropy, binary_cross_entropy_with_logits, cross_entropy, ctc_loss, l1_loss, mse_loss, margin_ranking_loss, nll_loss, smooth_l1_loss
    • 新增分布式通信类API: broadcast, all_reduce, reduce, all_gather, scatter, barrier
    • 新增概率分布类API: Distribution, normal, bernoulli
    • 新增Optimizer相关API:step, AdamW
    • 新增数据集相关API:Dataset, IterableDataset, TensorDataset, Sampler, RandomSampler, BatchSampler, DistributedBatchSampler

修复和完善API

  • 共计修改和完善155个API,具体参考链接和API文档
  • 修复随机数生成相关的API,包括:种子设置paddle.rand, randn, randint, randperm, dropout, Uniform, Normal等
  • 以下API对应的底层C++ OP进行了代码升级,理论上可以实现兼容,但不排除会出现少量不兼容的情况:linspace, concat, gather, gather_nd, split, squeeze, unsqueeze, clip, argmax, argmin, mean, norm, unique, cumsum, LeakyReLU, leaky_relu, hardshrink, embedding, margin_ranking_loss, grid_sample, affine_grid
  • 增加了relu6和Sigmoid激活函数的 oneDNN支持

多设备/分布式训练API

  • 动态图单机多卡训练

    • 新增paddle.distributed.spawn(func, args=(), nprocs=-1, join=True, daemon=False, **options),用于启动动态图多卡训练。
    • 新增paddle.distributed.init_parallel_env(),用于初始化动态图多卡训练的环境。
    • 新增paddle.distributed.get_rank(),用于获取多卡训练时当前进程的rank。
    • 新增paddle.distributed.get_world_size(),用于获取多卡训练时参与训练的总进程数。
  • 分布式集合通信

    • 新增paddle.distributed.broadcast(tensor, src, group=0),将指定进程上的tensor广播到所有进程。
    • 新增paddle.distributed.all_reduce(tensor, op=ReduceOp.SUM, group=0),对所有进程的指定Tensor执行归约操作,结果返回给所有进程。
    • 新增paddle.distributed.reduce(tensor, dst, op=ReduceOp.SUM, group=0),对所有进程的指定Tensor执行归约操作,结果返回给指定进程。
    • 新增paddle.distributed.all_gather(tensor_list, tensor, group=0),聚合所有进程的指定Tensor,结果返回给所有进程。
    • 新增paddle.distributed.scatter(tensor, tensor_list=None, src=0, group=0),将指定进程Tensor列表中的Tensor分发到所有进程。
    • 新增paddle.distributed.barrier(group=0),同步所有进程。

高层API

  • 新增飞桨高层API,对模型开发过程中常见的组网、训练、评估、预测、存取等操作进行封装,实现低代码开发,MNIST手写数字识别任务对比命令式编程模式实现方式,高层API可减少80%执行类代码。
  • 数据管理
    • 统一数据加载使用方式
      • 数据集定义,继承paddle.io.Dataset进行实现。
      • 多进程数据加载,使用paddle.io.DataLoader
    • 新增paddle.io.IterableDataset用于流式数据集,并在paddle.io.DataLoader中支持对其进行并发加速。
    • 新增paddle.io.get_worker_info用于paddle.io.IterableDataset中划分子进程数据。
  • 模型组网
    • 新增常见Loss接口paddle.nn.loss.*和Metric接口paddle.metric.*的封装
    • 发布基于高层API实现的12个模型
      • Transformer,Seq2seq,LAC,BMN,ResNet,YOLOv3,VGG,MobileNet,TSM,CycleGAN,Bert,OCR
      • 发布于PaddlePaddle/hapi仓库的examples目录
  • 模型执行
    • 新增Model类paddle.Model封装,封装模型开发过程中常用的基础功能,包括:
      • 提供Model.summary接口,用于查看动态图组网的网络结构与参数数量。
      • 提供Model.prepare接口,用于指定损失函数和优化算法。
      • 提供Model.fit接口,实现训练和评估,可通过callback方式实现训练过程中执行自定义功能,比如模型存储等。
      • 提供Model.evaluate接口,实现评估集上的预测和评估指标计算。
      • 提供Model.predict接口,实现特定的测试数据推理预测。
      • 提供Model.train_batch接口,实现单batch数据的训练。
      • 提供Model.eval_batch接口,实现单batch数据的评估。
      • 提供Model.text_batch接口,实现单batch数据的测试。
      • 提供Model.save/Model.load接口,支持动态图训练模式存储推理模型。
    • 新增Callback接口paddle.callbacks.*,用于模型执行接口,进行日志记录、Checkpoint模型存储等,用户可继承paddle.callbacks.Callback进行自定义。
  • 领域API
    • 新增视觉(CV)领域接口paddle.vision
      • 新增Dataset接口paddle.vision.datasets.*,对常用数据集进行封装,支持数据的随机访问
      • 新增Resize, Normalize等24种常见的数据预处理接口paddle.vision.transforms.*
      • 新增图像分类骨干网络和预训练参数
        • paddle.vision.models.lenetpaddle.vision.lenet
        • paddle.vision.models.vggpaddle.vision.vgg
        • paddle.vision.models.resnetpaddle.vision.vgg
        • paddle.vision.models.mobilenetv1paddle.vision.mobilenetv1
        • paddle.vision.models.mobilenetv2paddle.vision.mobilenetv2
    • 新增自然语言处理(NLP)领域接口paddle.text
      • 新增Dataset接口paddle.text.datasets.*,对常用数据集进行封装,支持数据的随机访问
      • 新增领域组网接口paddle.text.*
  • 自动断点重启
    • 新增接口 train_epoch_range:可以在静态图上实现基于epoch粒度的 checkpoint 自动保存和自动加载功能,支持自动断点重启。

功能优化(含分布式)

动态图转静态图

  • ProgramTranslator新增语法支持
    • 新增对return语法动转静支持,使得动转静时可以在if-elif-else或者循环条件中提前return,也能return不同类型的tensor或None。
    • 新增对print语法动转静支持,使得print(tensor)也能在动转静中打印出tensor。
    • 新增对for遍历Tensor,for enumerate遍历Tensor,for遍历TensorList,for enumerate遍历TensorList几种语法的动转静支持,使得循环处理Tensor的相关操作在动转静中能够灵活使用。
    • 新增对assert语法动转静支持,使得assert tensor也能在动转静中保证tensor为True(bool类型)或者非0(其他数据类型)。
    • 新增对数据类型cast的转写支持,使得float(tensor), int(tensor) 等类似的动态图类型转化语句也能在静态图中进行类型转化。
  • ProgramTranslator易用性优化功能
    • 将动转静的返回类型从callable函数改为class StaticLayer,这个class可以调用.cod...
Read more

PaddlePaddle 1.8.4

04 Sep 09:23
1e01335
Compare
Choose a tag to compare

新增功能

  • 简化动态图C++报错栈,栈信息缩减50%上且无有效信息丢失。
  • 在动态图执行报错时添加Op提示,提升调试体验。
  • 量化训练模块支持用户自定义量化训练策略,提升量化功能的灵活性。

性能优化

  • 优化DataLoader set_batch_generator接口在输入为ndarray时的性能,减少数据拷贝,351MB耗时从400ms降至80ms。

Bug修复

  • 修复使用CPU DNNL预测OCR模型时,多次运行的预测结果不同的问题。
  • 修复预测GRU模型时使用FC+GRU fuse报错的问题。
  • 修复多处CUDA Kernel在Tensor数据较大时循环索引越界导致非法内存访问的问题。
  • 修复错误配置DataLoader.from_generator时产生的非法内存访问问题,并增加报错提示。
  • 修复paddle安装时找不到默认路径cudnn库的问题,并完善报错提示。
  • 修复使用Paddle-TensorRT部署ERNIE模型时序列化和反序列化出core的问题。
  • 修复在Jetson平台上编译报错的问题。
    • cpuid.h not found/no member named ‘dynamicRangeIsSet’/‘kHARD_SIGMOID’ is not a member of ‘nvinfer1::ActivationType’
  • 修复concat组网时维度判断问题。
  • 修复fluid.dygraph.grad在多个分支时依赖关系分析存在的bug。

PaddlePaddle 1.8.3

06 Aug 02:51
a44085b
Compare
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
Compare
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
Compare
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
Compare
Choose a tag to compare

Release Note

功能升级

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

PaddlePaddle 1.8.0

19 May 10:16
0231f58
Compare
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