Coder Social home page Coder Social logo

使用CPU执行时报错 about ppq HOT 18 CLOSED

openppl-public avatar openppl-public commented on August 29, 2024
使用CPU执行时报错

from ppq.

Comments (18)

ZhangZhiPku avatar ZhangZhiPku commented on August 29, 2024 2

我也是cpu跑的,不过你这个情况是不是需要换一个公司

https://www.sensetime.com/cn/join-us

from ppq.

ZhangZhiPku avatar ZhangZhiPku commented on August 29, 2024

不会吧不会吧,2022年了该不会还有人还没有gpu吧

你可以使用云服务器上的gpu,毕竟它便宜的就好像免费的一样
https://www.bilibili.com/video/BV1WS4y1N7Kn

关于这个错误,容我debug一下看看,这好像是不应该发生的错误。refine的第582行执行了强制联合定点,对于concat, add这样的算子,合并定点信息自然要求算子的输入和输出都已经被正确量化了,报错则说明前面的量化流程存在问题。所以你可能不能手动修改refine.py的代码来跑通...

from ppq.

ZhangZhiPku avatar ZhangZhiPku commented on August 29, 2024

完了兄弟,在我这里这个网络咋跑都可以...

from ppq import *
from ppq.api import *

d = [torch.rand(1, 224, 224, 3) for _ in range(32)]
setting = QuantizationSetting()
setting.quantize_parameter_setting.calib_algorithm = 'minmax'
setting.quantize_activation_setting.calib_algorithm = 'kl'

ir = quantize_onnx_model(
onnx_import_file='Models/cls_model/efficientnet-lite4-11.onnx',
calib_dataloader=d,
calib_steps=32,
input_shape=[1,224,224,3],
collate_fn=lambda x: x.to('cpu'),
do_quantize=True,
setting=setting,
device='cpu',
platform=TargetPlatform.PPL_CUDA_INT8
)

甚至跑percentile都可以,你之前的错误是因为torch不能处理过多的数据量,你可以把batchsize改成1,这样它就不会有16777216个数了

from ppq.

Menace-Dragon avatar Menace-Dragon commented on August 29, 2024

OHHHHH,忘记说了,我跑的是Extension,就是自定义的MyQuantizer。量化策略很存粹,默认就是Symmetric、POT Scale、Linear、PerTensor、8bit、-128~127、Round_half_up

from ppq.

ZhangZhiPku avatar ZhangZhiPku commented on August 29, 2024

你可能是盗版量化器的受害者,你这个策略我还是跑的很开心...

附件是我修改的Myquantier代码
myquantizer.txt

在默认的流程中,TensorQuantizationConfig的状态由Quantizer初始化为Inital, 由CalibrationPass调用Observer将状态激活为ACTIVATE, 由refine.py执行联合定点将部分Config状态转换为slave。

你的报错似乎指向CalibrationPass调用Observer的过程存在问题,或者Quantizer初始化错误。

from ppq.

Menace-Dragon avatar Menace-Dragon commented on August 29, 2024

我的情况有点复杂,目前能用的就是CPU...
由于我是实习生,权限不够接触公司服务器(GPU集群),自己的办公电脑只有集显(跑不了CUDA)... 😞

from ppq.

Menace-Dragon avatar Menace-Dragon commented on August 29, 2024

hahaha😱

from ppq.

ZhangZhiPku avatar ZhangZhiPku commented on August 29, 2024

或者你可以换几个模型试试
import torchvision
(torchvision.models.alexnet, 'alexnet'),
(torchvision.models.inception_v3, 'inception_v3'),
(torchvision.models.mnasnet0_5, 'mnasnet0_5'),
(torchvision.models.mnasnet1_0, 'mnasnet1_0'),
(torchvision.models.squeezenet1_0, 'squeezenet1_0'),
(torchvision.models.squeezenet1_1, 'squeezenet1_1'),
(torchvision.models.shufflenet_v2_x1_0, 'shufflenet_v2_x1_0'),
(torchvision.models.resnet18, 'resnet18'),
(torchvision.models.resnet34, 'resnet34'),
(torchvision.models.resnet50, 'resnet50'),
(torchvision.models.resnext50_32x4d, 'resnext50_32x4d'),
(torchvision.models.wide_resnet50_2, 'wide_resnet50_2'),
(torchvision.models.googlenet, 'googlenet'),
(torchvision.models.vgg11, 'vgg11'),
(torchvision.models.vgg16, 'vgg16'),
(torchvision.models.mobilenet.mobilenet_v2, 'mobilenet_v2'),

from ppq.

Menace-Dragon avatar Menace-Dragon commented on August 29, 2024

兄弟,我找到问题所在了,问题出在api/setting.py里的per_layer_calibration上。我设为True后,跑漫长的量化就会出问题,,我换了其他onnx模型试的。

然后我设为False后,快速量化,就没有这个问题了。你的Myquantizer 内容和我的几乎一致的

前两天忙别的去了,刚刚才开始调这个issue。基本配置还是CPU,calibration 用的kl

from ppq.

ZhangZhiPku avatar ZhangZhiPku commented on August 29, 2024

哦豁,我去看看这个per_layer_calibration是不是出了什么问题,但是你真的知道这个pass在干嘛吗?

from ppq.

Menace-Dragon avatar Menace-Dragon commented on August 29, 2024

emmm,就是逐层calibration,一层一层确定好量化参数吧,,,

from ppq.

ZhangZhiPku avatar ZhangZhiPku commented on August 29, 2024

这么高端的技巧都被你发现了?
不过我们还没有发现逐层calibration能够提升精度的网络,虽然此前这个pass没出过啥错误。

from ppq.

Menace-Dragon avatar Menace-Dragon commented on August 29, 2024

还好瞄了一眼,我差点下班开溜了hhhh😲

我跑了minmax 的 per_layer_calibration后analysis显示我量化误差更大... per_layer_calibration是根据学术文章复现的吗,或者个人觉得这有点贪心的意味,局部最优取代全局最优?逐层贪心可能表现得不好hhh

emmmm,所以这个per_layer_calibration会导致谬误吗,还是说还是我自己的问题(我可能昨天改了啥不该改的...)

from ppq.

ZhangZhiPku avatar ZhangZhiPku commented on August 29, 2024

如果不打开这个layerwise的calibration,那么每个层会根据浮点结果计算同时得到量化参数,对于网络中的第一层而言,这个估计是合理的;然而对于网络后面的层而言,由于前面的层已经被量化的影响,使用浮点结果估计他们的量化参数是有偏的,layerwise calibration是为了解决这个有偏的问题,它甚至不需要证明,是显而易见的。

至于你设想的全局最优...这两种方法都做不到

from ppq.

Menace-Dragon avatar Menace-Dragon commented on August 29, 2024

ohhhhhhh原来是这样,受教了😀,
再最后叨扰你一下,per_layer_calibration会带来报错吗,我还没解决我的报错,有可能是我自己改动了其他代码导致的

from ppq.

ZhangZhiPku avatar ZhangZhiPku commented on August 29, 2024

还不清楚,还没来得及看...

from ppq.

ZhangZhiPku avatar ZhangZhiPku commented on August 29, 2024

在使用kl作为observer时,perlayer calibration的确会出现这个问题,虽然我还是不知道为什么,min-max似乎没有这个问题。
但是我认为这个per-layer calibration的逻辑存在问题,这个东西会逐层量化并定点,但其逐层量化的过程没有考虑到联合定点策略,因此其执行仍然是有偏的,为此我们需要将这个pass回炉重做一下。

from ppq.

Menace-Dragon avatar Menace-Dragon commented on August 29, 2024

好吧🤝
项目真的很不错👍,我这边正在尝试把PPQ加入到我们的模型部署pipeline里,所以频繁叨扰你们了,还望见谅。

from ppq.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.