You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mxnet.apache.org by GitBox <gi...@apache.org> on 2019/03/19 12:20:37 UTC

[GitHub] [incubator-mxnet] Amagong commented on issue #14467: MKL-DNN QuantizedFullyConnectedOp Error

Amagong commented on issue #14467: MKL-DNN QuantizedFullyConnectedOp Error
URL: https://github.com/apache/incubator-mxnet/issues/14467#issuecomment-474338997
 
 
   Hi.
   I have tried the same problem. using "mxnet-cu90mkl 1.5.0b20190314"
   
   First, I converted and saved a trained fused-rnn model.
   
   ```
   import argparse
   import os
   import logging
   import mxnet as mx
   import gluoncv
   from mxnet import gluon, nd, image
   from gluoncv import utils
   from gluoncv.model_zoo import get_model
   from mxnet.contrib.quantization import *
   from mxnet.base import SymbolHandle, check_call, _LIB, mx_uint, c_str_array
   import ctypes
   
   
   def save_symbol(fname, sym, logger=None):
       if logger is not None:
           logger.info('Saving symbol into file at %s' % fname)
       sym.save(fname)
   
   
   def save_params(fname, arg_params, aux_params, logger=None):
       if logger is not None:
           logger.info('Saving params into file at %s' % fname)
       save_dict = {('arg:%s' % k): v.as_in_context(cpu()) for k, v in arg_params.items()}
       save_dict.update({('aux:%s' % k): v.as_in_context(cpu()) for k, v in aux_params.items()})
       mx.nd.save(fname, save_dict)
   	
   	
   logging.basicConfig()
   logger = logging.getLogger('logger')
   logger.setLevel(logging.INFO)
   
   
   prefix = 'fused_rnn'
   dir_path = './checkpoints/'
   prefix = os.path.join(dir_path, prefix)
   epoch = 173
   batch_size = 900
   
   ctx = mx.cpu(0)
   
   # load and convert
   sym, arg_params, aux_params = mx.model.load_checkpoint(prefix, epoch)
   
   sym = sym.get_backend_symbol('MKLDNN')
   sym = sym.get_backend_symbol('MKLDNN_FC')
   
   excluded_sym_names = []
   excluded_sym_names += ['conv0']
   
   
   logger.info('Quantizing FP32 model %s' % prefix)
   qsym, qarg_params, aux_params = quantize_model(sym=sym, arg_params=arg_params, aux_params=aux_params, excluded_sym_names=excluded_sym_names, 
                                                   ctx=ctx, calib_mode='none', quantized_dtype='uint8', logger=logger)
   												
   qsym = qsym.get_backend_symbol('MKLDNN_POST_QUANTIZE')
   qsym = qsym.get_backend_symbol('MKLDNN_POST_FC_QUANTIZE')
   
   sym_name = '%s-symbol.json' % (prefix + '-quantized')
   param_name = '%s-%04d.params' % (prefix + '-quantized', epoch)
   
   save_symbol(sym_name, qsym, logger)
   save_params(param_name, qarg_params, aux_params, logger)
   ```
   And, I loaded the converted symbols and the params file.
   
   ```
   import numpy as np
   import mxnet as mx
   import os
   
   q_prefix = 'fused_rnn-quantized'
   dir_path = './checkpints/'
   q_prefix = os.path.join(dir_path, q_prefix)
   epoch = 173
   batch_size = 900
   
   contexts = [mx.context.Context('cpu')]
   
   q_symbol_file = q_prefix + '-symbol.json'
   
   q_symbol = mx.sym.load(q_symbol_file)
   
   q_symbol.simple_bind(ctx=mx.cpu(), data=(900, 137, 9), category=(900, 2))
   
   ```
   
   When tried simple_bind, it leads to the simple_bind error like below,
   
   RuntimeError: simple_bind error. Arguments:
   category: (900, 2)
   data: (900, 137, 9)
   [20:25:39] src/executor/../common/exec_utils.h:392: InferShape pass cannot decide shapes for the following arguments (0s means unknown dimensions). Please consider providing them as inputs:
   
   
   Stack trace returned 10 entries:
   [bt] (0) /home/ubuntu/anaconda2/envs/mxnet_1_4/lib/python2.7/site-packages/mxnet/libmxnet.so(+0x421cd2) [0x7ff6c90dfcd2]
   [bt] (1) /home/ubuntu/anaconda2/envs/mxnet_1_4/lib/python2.7/site-packages/mxnet/libmxnet.so(+0x4222b8) [0x7ff6c90e02b8]
   [bt] (2) /home/ubuntu/anaconda2/envs/mxnet_1_4/lib/python2.7/site-packages/mxnet/libmxnet.so(+0x31a10f1) [0x7ff6cbe5f0f1]
   [bt] (3) /home/ubuntu/anaconda2/envs/mxnet_1_4/lib/python2.7/site-packages/mxnet/libmxnet.so(mxnet::exec::GraphExecutor::Init(nnvm::Symbol, mxnet::Context const&, std::map<std::string, mxnet::Context, std::less<std::string>, std::allocator<std::pair<std::string const, mxnet::Context> > > const&, std::vector<mxnet::Context, std::allocator<mxnet::Context> > const&, std::vector<mxnet::Context, std::allocator<mxnet::Context> > const&, std::vector<mxnet::Context, std::allocator<mxnet::Context> > const&, std::unordered_map<std::string, mxnet::TShape, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::pair<std::string const, mxnet::TShape> > > const&, std::unordered_map<std::string, int, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::pair<std::string const, int> > > const&, std::unordered_map<std::string, int, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::pair<std::string const, int> > > const&, std::vector<mxnet::OpReqType, std::allocator<mxnet::OpReqType> > const&, std::unordered_set<std::string, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::string> > const&, std::vector<mxnet::NDArray, std::allocator<mxnet::NDArray> >*, std::vector<mxnet::NDArray, std::allocator<mxnet::NDArray> >*, std::vector<mxnet::NDArray, std::allocator<mxnet::NDArray> >*, std::unordered_map<std::string, mxnet::NDArray, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::pair<std::string const, mxnet::NDArray> > >*, mxnet::Executor*, std::unordered_map<nnvm::NodeEntry, mxnet::NDArray, nnvm::NodeEntryHash, nnvm::NodeEntryEqual, std::allocator<std::pair<nnvm::NodeEntry const, mxnet::NDArray> > > const&)+0x481) [0x7ff6cbe83101]
   [bt] (4) /home/ubuntu/anaconda2/envs/mxnet_1_4/lib/python2.7/site-packages/mxnet/libmxnet.so(mxnet::Executor::SimpleBind(nnvm::Symbol, mxnet::Context const&, std::map<std::string, mxnet::Context, std::less<std::string>, std::allocator<std::pair<std::string const, mxnet::Context> > > const&, std::vector<mxnet::Context, std::allocator<mxnet::Context> > const&, std::vector<mxnet::Context, std::allocator<mxnet::Context> > const&, std::vector<mxnet::Context, std::allocator<mxnet::Context> > const&, std::unordered_map<std::string, mxnet::TShape, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::pair<std::string const, mxnet::TShape> > > const&, std::unordered_map<std::string, int, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::pair<std::string const, int> > > const&, std::unordered_map<std::string, int, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::pair<std::string const, int> > > const&, std::vector<mxnet::OpReqType, std::allocator<mxnet::OpReqType> > const&, std::unordered_set<std::string, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::string> > const&, std::vector<mxnet::NDArray, std::allocator<mxnet::NDArray> >*, std::vector<mxnet::NDArray, std::allocator<mxnet::NDArray> >*, std::vector<mxnet::NDArray, std::allocator<mxnet::NDArray> >*, std::unordered_map<std::string, mxnet::NDArray, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::pair<std::string const, mxnet::NDArray> > >*, mxnet::Executor*)+0x1d5) [0x7ff6cbe85835]
   [bt] (5) /home/ubuntu/anaconda2/envs/mxnet_1_4/lib/python2.7/site-packages/mxnet/libmxnet.so(MXExecutorSimpleBind+0x2260) [0x7ff6cbdd42f0]
   [bt] (6) /home/ubuntu/anaconda2/envs/mxnet_1_4/lib/python2.7/lib-dynload/../../libffi.so.6(ffi_call_unix64+0x4c) [0x7ff736c98ec0]
   [bt] (7) /home/ubuntu/anaconda2/envs/mxnet_1_4/lib/python2.7/lib-dynload/../../libffi.so.6(ffi_call+0x22d) [0x7ff736c9887d]
   [bt] (8) /home/ubuntu/anaconda2/envs/mxnet_1_4/lib/python2.7/lib-dynload/_ctypes.so(_ctypes_callproc+0x4de) [0x7ff736eaf8de]
   [bt] (9) /home/ubuntu/anaconda2/envs/mxnet_1_4/lib/python2.7/lib-dynload/_ctypes.so(+0x9b31) [0x7ff736ea5b31]
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services