I met this error when trying to compile a mxnet model. The docker image is built based on nvidia/cuda:11.0-cudnn8-devel-ubuntu18.04
.
- driver: 465.31
- CUDA: 11.0
- GPU: RTX3090
- tvm commit: 34570f27e
The test script is as below:
import tvm
from tvm import relay
import mxnet as mx
from mxnet.gluon.model_zoo.vision import get_model
block = get_model("resnet18_v2", pretrained=True)
shape_dict = {"data": (1, 3, 224, 224)}
mod, params = relay.frontend.from_mxnet(block, shape_dict)
target = 'cuda'
# target = 'cuda -arch=sm_80'
with tvm.transform.PassContext(opt_level=3):
lib = relay.build(mod, target, params=params)
The error is like
.....
inverse[(3)] = (inverse[(3)] + (bgemm[((((((int)blockIdx.x) * 128) + ((int)threadIdx.x)) + 57344))] * -1.000000e+00f));
inverse[(3)] = (inverse[(3)] + (bgemm[((((((int)blockIdx.x) * 128) + ((int)threadIdx.x)) + 73728))] * -1.000000e+00f));
inverse[(3)] = (inverse[(3)] + bgemm[((((((int)blockIdx.x) * 128) + ((int)threadIdx.x)) + 81920))]);
inverse[(3)] = (inverse[(3)] + bgemm[((((((int)blockIdx.x) * 128) + ((int)threadIdx.x)) + 90112))]);
inverse[(3)] = (inverse[(3)] + (bgemm[((((((int)blockIdx.x) * 128) + ((int)threadIdx.x)) + 106496))] * -1.000000e+00f));
inverse[(3)] = (inverse[(3)] + bgemm[((((((int)blockIdx.x) * 128) + ((int)threadIdx.x)) + 114688))]);
inverse[(3)] = (inverse[(3)] + bgemm[((((((int)blockIdx.x) * 128) + ((int)threadIdx.x)) + 122880))]);
for (int ax2_inner = 0; ax2_inner < 2; ++ax2_inner) {
for (int ax3_inner = 0; ax3_inner < 2; ++ax3_inner) {
if (((((((int)threadIdx.x) & 15) >> 2) * 2) + ax2_inner) < 7) {
if ((((((int)threadIdx.x) & 3) * 2) + ax3_inner) < 7) {
T_relu[(((((((((int)blockIdx.x) * 392) + ((((int)threadIdx.x) >> 4) * 49)) + (((((int)threadIdx.x) & 15) >> 2) * 14)) + (ax2_inner * 7)) + ((((int)threadIdx.x) & 3) * 2)) + ax3_inner))] = max((inverse[(((ax2_inner * 2) + ax3_inner))] + placeholder[(((((int)blockIdx.x) * 8) + (((int)threadIdx.x) >> 4)))]), 0.000000e+00f);
}
}
}
}
}
Compilation error:
nvcc fatal : Value 'sm_86' is not defined for option 'gpu-architecture'
BTW, Setting target to “cuda -arch=sm_80” doesn’t help.
I have 2 problems here,
- Why tvm specify
sm_86
instead ofsm_80
? If I remembered correctly,sm_86
is supported from CUDA 11.1 ? - Setting cuda arch by
target = 'cuda -arch=sm_80'
doesn’t help at all. The error is stillValue 'sm_86' is not defined for option 'gpu-architecture'
. Did I misunderstood the usage oftarget
here ?