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/09/12 16:25:47 UTC

[GitHub] [incubator-mxnet] matteosal edited a comment on issue #16143: Failure of MKL-DNN Convolution from C API

matteosal edited a comment on issue #16143: Failure of MKL-DNN Convolution from C API
URL: https://github.com/apache/incubator-mxnet/issues/16143#issuecomment-530901486
 
 
   I've discovered an example which is not fixed by the above patch. Again, I couldn't reproduce this problem using python:
   ```
   #include <stdio.h>
   
   #include "mxnet/c_api.h"
   #include "nnvm/c_api.h"
   
   int main() {
   
     SymbolHandle sym;
     char json[] = 
     "{\"nodes\":[{\"op\":\"null\",\"name\":\"input\",\"inputs\":[]},{\"op\
   \":\"null\",\"name\":\"w1\",\"inputs\":[]},{\"op\":\"null\",\"name\":\
   \"b1\",\"inputs\":[]},{\"op\":\"Convolution\",\"name\":\"conv1\",\"\
   attrs\":{\"cudnn_off\":\"0\",\"dilate\":\"(1, 1)\",\"kernel\":\"(1, \
   1)\",\"layout\":\"None\",\"no_bias\":\"False\",\"num_filter\":\"1\",\"\
   num_group\":\"1\",\"pad\":\"(0, 0)\",\"stride\":\"(1, \
   1)\"},\"inputs\":[[0,0,0],[1,0,0],[2,0,0]]},{\"op\":\"null\",\"name\":\
   \"w2\",\"inputs\":[]},{\"op\":\"null\",\"name\":\"b2\",\"inputs\":[]},\
   {\"op\":\"Deconvolution\",\"name\":\"deconv\",\"attrs\":{\"dilate\":\"\
   (1, 1)\",\"kernel\":\"(1, \
   1)\",\"no_bias\":\"False\",\"num_filter\":\"8\",\"num_group\":\"1\",\"\
   pad\":\"(0, 0)\",\"stride\":\"(1, \
   1)\"},\"inputs\":[[3,0,0],[4,0,0],[5,0,0]]},{\"op\":\"null\",\"name\":\
   \"w3\",\"inputs\":[]},{\"op\":\"null\",\"name\":\"b3\",\"inputs\":[]},\
   {\"op\":\"Convolution\",\"name\":\"conv2\",\"attrs\":{\"cudnn_off\":\"\
   0\",\"dilate\":\"(1, 1)\",\"kernel\":\"(1, \
   1)\",\"layout\":\"None\",\"no_bias\":\"False\",\"num_filter\":\"8\",\"\
   num_group\":\"1\",\"pad\":\"(0, 0)\",\"stride\":\"(1, \
   1)\"},\"inputs\":[[6,0,0],[7,0,0],[8,0,0]]},{\"op\":\"_copy\",\"name\"\
   :\"out\",\"inputs\":[[9,0,0]]}],\"arg_nodes\":[0,1,2,4,5,7,8],\"node_\
   row_ptr\":[0,1,2,3,4,5,6,7,8,9,10,11],\"heads\":[[10,0,0]],\"attrs\":{\
   \"mxnet_version\":[\"int\",10500]}}";
     
     MXSymbolCreateFromJSON(json, &sym);
     
     /* Create NDArrays for arguments */
     int dev_type = 1;
     int dev_id = 0; 
   
     mx_uint in_shape[4] = {1, 3, 10, 10};
     NDArrayHandle in_arg_arr;
     MXNDArrayCreateEx(in_shape, 4, dev_type, dev_id, 0, 0, &in_arg_arr);
     mx_uint w1_shape[4] = {1, 3, 1, 1};
     NDArrayHandle w1_arg_arr, w1_grad_arr;
     MXNDArrayCreateEx(w1_shape, 4, dev_type, dev_id, 0, 0, &w1_arg_arr);
     MXNDArrayCreateEx(w1_shape, 4, dev_type, dev_id, 0, 0, &w1_grad_arr);
     mx_uint b1_shape[1] = {1};
     NDArrayHandle b1_arg_arr;
     MXNDArrayCreateEx(b1_shape, 1, dev_type, dev_id, 0, 0, &b1_arg_arr);
     mx_uint w2_shape[4] = {1, 8, 1, 1};
     NDArrayHandle w2_arg_arr;
     MXNDArrayCreateEx(w2_shape, 4, dev_type, dev_id, 0, 0, &w2_arg_arr);
     mx_uint b2_shape[1] = {8};
     NDArrayHandle b2_arg_arr;
     MXNDArrayCreateEx(b2_shape, 1, dev_type, dev_id, 0, 0, &b2_arg_arr);
     mx_uint w3_shape[4] = {8, 8, 1, 1};
     NDArrayHandle w3_arg_arr;
     MXNDArrayCreateEx(w3_shape, 4, dev_type, dev_id, 0, 0, &w3_arg_arr);
     mx_uint b3_shape[1] = {8};
     NDArrayHandle b3_arg_arr;
     MXNDArrayCreateEx(b3_shape, 1, dev_type, dev_id, 0, 0, &b3_arg_arr);
   
     mx_uint outgrad_shape[4] = {1, 8, 10, 10};
     NDArrayHandle outgrad_arr;
     MXNDArrayCreateEx(outgrad_shape, 4, dev_type, dev_id, 0, 0, &outgrad_arr);
   
     /* Create and bind executor */
     ExecutorHandle ex;
     NDArrayHandle arg[7] = {in_arg_arr, w1_arg_arr, b1_arg_arr, w2_arg_arr, 
       b2_arg_arr, w3_arg_arr, b3_arg_arr};
     NDArrayHandle grad[7] = {NULL, w1_grad_arr, NULL, NULL, NULL, NULL,NULL};
     NDArrayHandle *aux = NULL;
     mx_uint req[7] = {0, 1, 0, 0, 0, 0, 0};
     MXExecutorBind(sym, dev_type, dev_id, 7, arg, grad, req, 0, aux, &ex);
     
     /* Forward, backward */
     NDArrayHandle outgrad_vec[1] = {outgrad_arr};
     MXExecutorForward(ex, 1);
     MXExecutorBackward(ex, 1, outgrad_vec);
     
     /* Read output */
     void *data;
     if(MXNDArrayWaitToRead(w1_grad_arr) != 0)
       printf("%s\n", MXGetLastError());
     else
       printf("Ok!\n");
     return 0;
   }
   ```
   It fails with the same error, but at `MXNDArrayWaitToRead` instead of `MXNDArrayGetData`. Complete error message:
   ```
   [18:21:33] src/ndarray/ndarray.cc:757: Check failed: !IsMKLDNNData(): We can't generate TBlob for MKLDNN data. Please use Reorder2Default() to generate a new NDArray first
   Stack trace:
     [bt] (0) libmxnet.so(dmlc::LogMessageFatal::~LogMessageFatal()+0x43) [0x7f3feefb6ac3]
     [bt] (1) libmxnet.so(mxnet::NDArray::SetTBlob() const+0x2fc) [0x7f3ff16c9f4c]
     [bt] (2) libmxnet.so(mxnet::op::MKLDNNDeconvolutionBackward(nnvm::NodeAttrs const&, mxnet::OpContext const&, std::vector<mxnet::NDArray, std::allocator<mxnet::NDArray> > const&, std::vector<mxnet::OpReqType, std::allocator<mxnet::OpReqType> > const&, std::vector<mxnet::NDArray, std::allocator<mxnet::NDArray> > const&)+0x5e7) [0x7f3fef0a9b67]
     [bt] (3) libmxnet.so(+0x26f2022) [0x7f3ff10cf022]
     [bt] (4) libmxnet.so(mxnet::exec::FComputeExExecutor::Run(mxnet::RunContext, bool)+0x2d1) [0x7f3ff151f4d1]
     [bt] (5) libmxnet.so(+0x2aff246) [0x7f3ff14dc246]
     [bt] (6) libmxnet.so(+0x2aff33f) [0x7f3ff14dc33f]
     [bt] (7) libmxnet.so(mxnet::engine::ThreadedEngine::ExecuteOprBlock(mxnet::RunContext, mxnet::engine::OprBlock*)+0x585) [0x7f3ff1d8cce5]
     [bt] (8) libmxnet.so(std::_Function_handler<void (std::shared_ptr<dmlc::ManualEvent>), mxnet::engine::ThreadedEnginePerDevice::PushToExecute(mxnet::engine::OprBlock*, bool)::{lambda()#1}::operator()() const::{lambda(std::shared_ptr<dmlc::ManualEvent>)#1}>::_M_invoke(std::_Any_data const&, std::shared_ptr<dmlc::ManualEvent>&&)+0x147) [0x7f3ff1da0117]
   ```

----------------------------------------------------------------
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