PaddleSlim
PaddleSlim copied to clipboard
SLIM 量化新pose模型失败!
Hi, 1 请问是否有最新的关于调用cmd命令或者相关py文件的slim使用说明文档或者网页链接? 2 比如要int8量化一个新的模型tinypose 如何调用paddle slim工具实现呢? 3 最新的可用版本是哪个? 具体使用甚至包括编译说明step by step 可以分享下链接吗? 4 PADDLE SLIM 离线量化跟paddle lite里面提供的opt 带量化选项的功能是不是一致,可以不用slim而直接用opt,离线uint8量化的结果也是一样的吗? BR
Hi, Any body here?
@2050airobert 请参考PaddleDetection中的demo进行量化训练:https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.4/configs/slim 可以参考quant/picodet_s_416_lcnet_quant.yml 修改后跑tinypose的量化训练 paddle lite里面提供的opt只能量化weight,对模型预测没有加速,需要使用PaddleSlim来做量化
hello, 1 如果使用lite里面的opt 也是可以进行tinypose全量化的,而且tinypose也可以正确检测到人的姿态,对吗? 2 opt量化的方式跟lite之前模型一样,支持一条命令搞定,然后你们也确认过了,可以这样理解吗? 还是说目前只支持PaddleSlim训练量化,而训练后离线量化精度会很差?具体是? BR
@2050airobert
- 如果使用opt的量化是只能量化weight存储的,模型仍能正常预测,但是预测时还是将int8 weight >> fp32 weight,然后在fp32下计算,没有加速效果
- tinypose模型比较复杂,离线量化精度损失非常大,一般进行量化训练,然后转到paddle lite上进行部署
Hi,yghstill 1、第一条实际上可以在lite上做一定的改动,支持定点的反量化,不知道这是不是一个解决思路呢? 2、tinypose int8量化确实损失会大,但有尝试过离线的int16量化吗? 会不会精度损失跟量化训练差距很小了呢?毕竟离线量化会更节省时间,在有些情况下非常方便。 3、目前支持int16量化模型跑通的板子,lite这边统计过主要有哪些厂商或板子支持吗? 4、是不是可以这么说凡是支持int8量化的板子几乎都支持int16? 除了一些特殊的板子会支持fp16例外的那些?比如海思。。等? BR
hi,
按照文档指示,
python tools/train.py -c configs/picodet/picodet_s_416_coco_lcnet.yml --slim_config configs/slim/quant/picodet_s_416_lcnet_quant.yml
wode我的环境如下,我用了cpu版本 set cfg.usegpu = False

综上,有两个问题 1 win10下cpu跑可以吗,必须在gpu环境跑吗? 2 即使picoDet qat量化正常,可tinypose的qat量化,数据集也跟picoDet的coco所有不同吧?或者说除了更换yaml 和 slim yaml应该还有一些地方有差异吧?如果没有差异,为什么p slim 还没发布出来呢?
BR
综上,有两个问题 1 win10下cpu跑可以吗,必须在gpu环境跑吗? 2 即使picoDet qat量化正常,可tinypose的qat量化,数据集也跟picoDet的coco所有不同吧?或者说除了更换yaml 和 slim yaml应该还有一些地方有差异吧?如果没有差异,为什么p slim 还没发布出来呢?
@2050airobert 1. CPU可以跑,但是训练速度可能会很慢。2. tinypose的量化配置文件还未发布,但是验证过量化训练,你可以参考:
slim: QAT
pretrain_weights: https://bj.bcebos.com/v1/paddledet/models/keypoint/tinypose_128x96.pdparams
QAT:
quant_config: {
'activation_preprocess_type': 'PACT',
'weight_quantize_type': 'channel_wise_abs_max', 'activation_quantize_type': 'moving_average_abs_max',
'weight_bits': 8, 'activation_bits': 8, 'dtype': 'int8', 'window_size': 10000, 'moving_rate': 0.9,
'quantizable_layer_type': ['Conv2D', 'Linear']}
print_model: False
epoch: 50
LearningRate:
base_lr: 0.0005
schedulers:
- !PiecewiseDecay
gamma: 0.1
milestones:
- 30
- 45
- !LinearWarmup
start_factor: 0.
steps: 100
TrainReader:
batch_size: 64
@yghstill
第一个问题,我这边按照文档跑picodet量化训练的时候遇到个奇怪的问题,不管我怎么修改batchsize总是说gpu内存不够,我是双卡,而且可用内存明显都是10GB以上,每个卡都是,而且跑其他的任务都很正常。我还更改 leos.environ[‘FLAGS_eager_delete_tensor_gb’] = “0.9” 都没什么用。具体log如下:
SystemError: (Fatal) Operator elementwise_add raises an paddle::memory::allocation::BadAlloc exception.
The exception content is
:ResourceExhaustedError:
Out of memory error on GPU 0. Cannot allocate 126.562744MB memory on GPU 0, 23.683105GB memory has been allocated and available memory is only 16.812500MB.
Please check whether there is any other process using GPU 0.
- If yes, please stop them, or start PaddlePaddle on another GPU.
- If no, please decrease the batch size of your model.
(at /paddle/paddle/fluid/memory/allocation/cuda_allocator.cc:79) . (at /paddle/paddle/fluid/imperative/tracer.cc:221)
INFO 2022-04-28 02:08:11,083 launch_utils.py:320] terminate process group gid:13002 INFO 2022-04-28 02:08:15,086 launch_utils.py:341] terminate all the procs ERROR 2022-04-28 02:08:15,086 launch_utils.py:602] ABORT!!! Out of all 2 trainers, the trainer process with rank=[1] was aborted. Please check its log. INFO 2022-04-28 02:08:19,090 launch_utils.py:341] terminate all the procs INFO 2022-04-28 02:08:19,090 launch.py:311] Local processes completed. 我理解是不是paddle训练的时候尤其是多gpu,需要独占gpu呢?实际上其他训练任务都可以同时跑几个模型呢。 我就是用的原始代码,按照你的指示,没有任何改动,除了上面提到的。 另外我的环境是 ubuntu20.04 gpu3090双卡,cuda11.4 我采用的paddle-gpu是paddle官方推荐的 ubuntu cuda11.2以上的那个最新的版本安装的。 其他的如下: paddledet 2.4.0 paddlepaddle-gpu 2.2.2.post112 paddleslim 2.1.1
第二,还有个问题就是我记得之前tinypose训练的方式是分两次,一次是训练picodet然后再训练tinypose,现在已经合入一个网络,可以作为一个大模型一起训练一次了吗?
BR
hello anyone here?