PaddleNLP icon indicating copy to clipboard operation
PaddleNLP copied to clipboard

Add model compression API

Open LiuChiachi opened this issue 3 years ago • 0 comments

PR types

Function optimization

PR changes

APIs

Description

Update compression API

Done:

  • 根据paddleslim更新,更新了API接口(TODO:试验adaground是否优于round)
  • 避免patch的冲突,避免import了paddleslim中的nlp_utils.py文件,并且把改文件内容搬至 PaddleNLP,增加ofa_utils.py文件
  • compress API 移至 Library
  • 增加了CompressionArguments,用户可以直接通过--的形式传参,或者用Yaml文件传,不需要区分training和compression,直接把要传的参数传进去即可。
  • 目前支持dynabert+ptq,dynabert,ptq,三种策略,默认第一个。

TODO:

  • [ ] 通用性1:electra等还不支持,需要单测的测试(动转静不支持的模型没法使用压缩API(涉及动转静),不支持的列表:https://github.com/PaddlePaddle/PaddleNLP/issues/2793);
  • [ ] 通用性2:是否对任何class和forward都可以支持
  • [ ] 压缩API 文档修改
  • [ ] 更新eval.py脚本和backend,以提供示例,帮助开发者快速搭建预测脚本

Usage: 如果使用conf.yaml,需要把

    strategy:  "dynabert+ptq"
    algo_list: ["hist", "mse"]
    batch_num_list: [1]
    batch_size_list: [4, 8, 16]
    width_mult_list: [0.75]

配进去,也可以使用命令行的形式:

    # Supports 'dynabert+ptq', 'dynabert' and 'ptq' now.
    python compress_seq_cls.py \
    --dataset   "clue cluewsc2020"   \
    --model_name_or_path best_models/CLUEWSC2020/  \
    --output_dir ./  \
    --strategy "dynabert+ptq" \
    --algo_list "hist" "mse" \
    --width_mult_list 0.75 \
    --batch_size_list 4 8 16 \
    --batch_num_list 1 \
    --per_device_train_batch_size 32 \
    --per_device_eval_batch_size 32 \

LiuChiachi avatar Jul 11 '22 12:07 LiuChiachi