wangzy0327 commented on issue #13666:
URL: https://github.com/apache/tvm/issues/13666#issuecomment-1413100409

   > Tried this with the following docker image I built from latest ROCm:
   > 
   > ```
   > docker pull mevermeulen/rocm-tvm:5.4.2
   > ```
   > 
   > I didn't have OpenCL built in that so I compared with CPU execution and I 
don't see an issue:
   > 
   > ```
   > root@chilecito:/src/rocm-tvm/qa# python3 /home/mev/onnx_rocm.py 
   > [0.5488135  0.71518934 0.60276335 0.5448832  0.4236548  0.6458941
   >  0.4375872  0.891773   0.96366274 0.3834415 ]
   > [-0.22859086 -0.25806987 -0.43340546  0.4846983  -0.6018106   0.22698797
   >   0.85465795 -0.9607101   0.5279621  -1.1830723 ]
   > [-0.22859041 -0.25806972 -0.43340546  0.4846975  -0.6018108   0.2269876
   >   0.8546581  -0.9607104   0.527962   -1.1830723 ]
   > ```
   > 
   > To compare against the CPU, I modified the last part of the program as 
follows:
   > 
   > ```
   >     np.random.seed(0)
   >     I_np = np.random.uniform(size = input_size).astype(dtype)
   >     print(I_np[0][0][0][:10])
   >     onnx_model = onnx.load("/home/mev/mnist-7.onnx")
   >     mod,params = relay.frontend.from_onnx(onnx_model,{"Input3":I_np.shape})
   >     rocm_output = build("rocm",mod = mod,params = params,input_name = 
input_name,input_data = I_np, input = I_np.shape, output = output_size)
   >     cpu_output = build("llvm",mod = mod,params = params,input_name = 
input_name,input_data = I_np, input = I_np.shape, output = output_size)    
   > #    opencl_output = build("opencl",mod = mod,params = params,input_name = 
input_name,input_data = I_np, input = I_np.shape, output = output_size)
   >     print(rocm_output[0][:10])
   >     print(cpu_output[0][:10])    
   > #    print(opencl_output[0][:10])
   > ```
   > 
   > @wangzy0327 does my docker work for you? If so, a spot you can use for 
comparison.
   > 
   > Also can you cross check that your ROCm installation and driver is 
properly installed. For example you can try:
   > 
   > ```
   > prompt% rocminfo
   > 
   > prompt% cd /opt/rocm/share/hip/samples/0_Intro/square
   > prompt% make
   > prompt% cat square.out
   > ```
   
   @mvermeulen 
   
   I compare two platform `rocm` and `rocm -libs=miopen` on tvm v0.10.0 version 
to run the code as follow.
   
   <details>
   <summary>onnx_rocm.py</summary>
   ```
   from pyexpat import model
   import onnx
   #from tvm.driver import tvmc
   import numpy as np
   import tvm
   import tvm.relay as relay
   from tvm.contrib import graph_executor
   import tvm.testing
   import numpy as np
   
   
   dtype="float32"
   common_prefix_str = "onnx-model/vision/classification/"
   tol_paras = [1e-7,1e-6,1e-5,1e-4,1e-3,1e-2]
   input_name = "Input3"
   input_size = (1,1,28,28)
   output_size = (1,10)
   
   import logging
   logging.basicConfig(level=logging.ERROR)
   
   import warnings
   warnings.filterwarnings('ignore')
   
   
   def build(target:str,mod:tvm.IRModule, params:dict, input_name:str, 
input_data:np.ndarray, input:tuple, output: tuple) -> np.ndarray:
       tgt = tvm.target.Target(target=target, host="llvm")
       with tvm.transform.PassContext(opt_level=3):
           lib = relay.build(mod, target=target, params=params)
       dev = tvm.device(str(target), 0)
       module = graph_executor.GraphModule(lib["default"](dev))
       module.set_input(input_name, input_data)
       module.run()
       output_shape = output
       tvm_output = module.get_output(0, tvm.nd.empty(output_shape)).numpy()
       return tvm_output
   
   def main():
       np.random.seed(0)
       I_np = np.random.uniform(size = input_size).astype(dtype)
       print(I_np[0][0][0][:10])
       onnx_model = 
onnx.load("onnx-model/vision/classification/mnist/model/mnist-7.onnx")
       mod,params = relay.frontend.from_onnx(onnx_model,{"Input3":I_np.shape})
       rocm_lib_output = build("rocm -libs=miopen",mod = mod,params = 
params,input_name = input_name,input_data = I_np, input = I_np.shape, output = 
output_size)
       rocm_output = build("rocm",mod = mod,params = params,input_name = 
input_name,input_data = I_np, input = I_np.shape, output = output_size)
       opencl_output = build("opencl",mod = mod,params = params,input_name = 
input_name,input_data = I_np, input = I_np.shape, output = output_size)
       print(rocm_output[0][:10])
       print(rocm_lib_output[0][:10])
       print(opencl_output[0][:10])
   
   main()
   
   
   
   ```
   </details>
   
   
![image](https://user-images.githubusercontent.com/22990858/216224311-04f5fa56-f038-4015-b578-8d6ae8fc7bdd.png)
   
   I get the error on AMD gfx908 device . The error is `ValueError:Cannot find 
global function tvm.contrib.miopen.conv2d.setup` .
    How to fix it ?


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

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to