Ssd_mobilenet_512 compilation fails for intel_graphics


#1

ssd_mobilenet_512 compilation works fine for target: opencl, target_host: llvm

but it fails for target = tvm.target.intel_graphics()
which is
target: opencl -device=intel_graphics -model=unknown, target_host: llvm

I used TVM version from March 7th with PR 2747

Error:

ValueError: missing register for topi.nn.depthwise_conv2d_NCHWc

py3.6.egg/topi/nn/depthwise_conv2d.py", line 322, in depthwise_conv2d_NCHWc
    raise ValueError("missing register for topi.nn.depthwise_conv2d_NCHWc")

Full stack trace:

$ ./compile.py 
mx.sym.load: deploy_ssd_mobilenet_512/deploy_ssd_mobilenet_512-symbol.json
[16:57:10] src/nnvm/legacy_json_util.cc:209: Loading symbol saved by previous version v0.12.0. Attempting to upgrade...
[16:57:10] src/nnvm/legacy_json_util.cc:217: Symbol successfully upgraded!
load_checkpoint: deploy_ssd_mobilenet_512/deploy_ssd_mobilenet_512
[16:57:10] src/nnvm/legacy_json_util.cc:209: Loading symbol saved by previous version v0.12.0. Attempting to upgrade...
[16:57:10] src/nnvm/legacy_json_util.cc:217: Symbol successfully upgraded!
Traceback (most recent call last):
  File "./compile.py", line 75, in <module>
    net, target, {"data": dshape}, params=params, target_host=target_host)
  File "/usr/local/lib/python3.6/dist-packages/nnvm-0.8.0-py3.6.egg/nnvm/compiler/build_module.py", line 305, in build
    graph = graph.apply("GraphCompile")
  File "/usr/local/lib/python3.6/dist-packages/nnvm-0.8.0-py3.6.egg/nnvm/graph.py", line 234, in apply
    check_call(_LIB.NNGraphApplyPasses(self.handle, npass, cpass, ctypes.byref(ghandle)))
  File "/usr/local/lib/python3.6/dist-packages/nnvm-0.8.0-py3.6.egg/nnvm/_base.py", line 75, in check_call
    raise NNVMError(py_str(_LIB.NNGetLastError()))
nnvm._base.NNVMError: TVMCall CFunc Error:
Traceback (most recent call last):
  File "tvm/_ffi/_cython/./function.pxi", line 38, in tvm._ffi._cy3.core.tvm_callback
  File "/usr/local/lib/python3.6/dist-packages/nnvm-0.8.0-py3.6.egg/nnvm/top/nn.py", line 203, in compute_contrib_conv2d_NCHWc
    dilation, layout, out_layout, out_dtype)
  File "</usr/local/lib/python3.6/dist-packages/decorator.py:decorator-gen-25>", line 2, in depthwise_conv2d_NCHWc
  File "/usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/target.py", line 357, in dispatch_func
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/topi-0.6.dev0-py3.6.egg/topi/nn/depthwise_conv2d.py", line 322, in depthwise_conv2d_NCHWc
    raise ValueError("missing register for topi.nn.depthwise_conv2d_NCHWc")
ValueError: missing register for topi.nn.depthwise_conv2d_NCHWc

The following github repo contains python code and ssd_mobilenet_512 model files to reproduce the issue


clone my mxnet-ssd-tvm repo

clone git@github.com:apivovarov/mxnet-ssd-tvm.git

Compile ssd_mobilenet_512 model on main computer (having tvm + nnvm + topi)

python3 compile.py

# it will give the error

#2

there’s no depthwise convolution for intel graphics yet.
Need to use opencl without -device=intel_graphics to solve it.
But performance will be terrible