Экспорт кода ядра OpenGL с Apache TVM в Colab (ошибка, связанная с X11) - PullRequest
1 голос
/ 29 июня 2019

У меня проблема с экспортом кода ядра OpenGL с Apache TVM - открытый стек компиляторов глубокого обучения для процессоров, графических процессоров и специализированных ускорителей в Google Colab Laboratory.

Может воспроизводиться на Сборка TVM.ipynb .Чтобы включить Xvrf, я установил PyVirtualDisplay .

%%bash
sudo apt-get update
sudo apt-get install -y -qq llvm-6.0 libglfw3-dev libtinfo-dev libffi-dev zlib1g-dev xvfb x11-utils
pip install pyvirtualdisplay
git clone --recursive https://github.com/dmlc/tvm
cd tvm
mkdir -p build
cp cmake/config.cmake build
sed -i -e 's/USE_OPENGL OFF/USE_OPENGL ON/g' build/config.cmake
sed -i -e 's/USE_CUDA OFF/USE_CUDA ON/g' build/config.cmake
sed -i -e 's/USE_CUDNN OFF/USE_CUDNN ON/g' build/config.cmake
sed -i -e 's/USE_LLVM OFF/USE_LLVM ON/g' build/config.cmake
cd build
cmake ..
make -j4
cd ..
cd python; python setup.py install; cd ..
cd topi/python; python setup.py install; cd ../..
cd nnvm/python; python setup.py install; cd ../..
# Start virtual display
from pyvirtualdisplay import Display
display = Display(visible=0, size=(1024, 768))
display.start()
import os
os.environ["DISPLAY"] = ":" + str(display.display) + "." + str(display.screen)

import tvm 
import numpy as np

nn = 1024
n = tvm.var('n')
n = tvm.convert(nn)
m = n
l = n
A = tvm.placeholder((n, l), name='A', dtype='int32')
B = tvm.placeholder((m, l), name='B', dtype='int32')
k = tvm.reduce_axis((0, l), name='k')
C = tvm.compute((n, m), lambda ii, jj: tvm.sum(A[ii, k] * B[jj, k], axis=k),
                name='CC')

s = tvm.create_schedule(C.op)
s[C].opengl()
print(tvm.lower(s, [A, B, C], simple_mode=True))

f = tvm.build(s, [A, B, C], "opengl", name="gemm")
print("------opengl code------")
print(f.imported_modules[0].get_source(fmt="gl"))

ctx = tvm.opengl()
n, m, l = nn, nn, nn
a_np = np.random.uniform(low=0, high=10, size=(n, l)).astype(A.dtype)
b_np = np.random.uniform(low=0, high=10, size=(m, l)).astype(B.dtype)
a = tvm.nd.array(a_np, ctx)
b = tvm.nd.array(b_np, ctx)
c = tvm.nd.array(np.zeros((n, m), dtype=C.dtype), ctx)
f(a, b, c)

tvm.testing.assert_allclose(c.asnumpy(), np.dot(a_np, b_np.T))

Я ожидаю код OpenGL с f.imported_modules[0].get_source(fmt="gl"), но он не выполнен из-за следующей ошибки, связанной с X11.

// attr [compute(CC, 0x4768580)] opengl_stage_scope = ""
produce CC {
  // attr [iter_var(threadIdx.x, , threadIdx.x)] thread_extent = 1048576
  glsl_texture_store(CC, 0)
  for (k, 0, 1024) {
    glsl_texture_store(CC, (CC[threadIdx.x] + (A[(((threadIdx.x/1024)*1024) + k)]*B[(((threadIdx.x % 1024)*1024) + k)])))
  }
}

---------------------------------------------------------------------------
TVMError                                  Traceback (most recent call last)
<ipython-input-2-3a202d10b787> in <module>()
     23 print(tvm.lower(s, [A, B, C], simple_mode=True))
     24 
---> 25 f = tvm.build(s, [A, B, C], "opengl", name="gemm")
     26 print("------opengl code------")
     27 print(f.imported_modules[0].get_source(fmt="gl"))

6 frames
/usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/_ffi/_cython/base.pxi in tvm._ffi._cy3.core.CALL()

TVMError: Traceback (most recent call last):
  [bt] (8) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(tvm::codegen::BuildOpenGL(tvm::Array<tvm::LoweredFunc, void>)+0x1c3) [0x7f3742ec4573]
  [bt] (7) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(tvm::runtime::OpenGLModuleCreate(std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, tvm::runtime::OpenGLShader, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, tvm::runtime::OpenGLShader> > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, tvm::runtime::FunctionInfo, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, tvm::runtime::FunctionInfo> > >)+0xeb) [0x7f374364b7fb]
  [bt] (6) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(tvm::runtime::OpenGLModuleNode::OpenGLModuleNode(std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, tvm::runtime::OpenGLShader, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, tvm::runtime::OpenGLShader> > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, tvm::runtime::FunctionInfo, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, tvm::runtime::FunctionInfo> > >)+0x92) [0x7f374364b1d2]
  [bt] (5) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(tvm::runtime::gl::OpenGLWorkspace::Global()+0x55) [0x7f37436438d5]
  [bt] (4) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(tvm::runtime::gl::OpenGLWorkspace::OpenGLWorkspace()+0x4d) [0x7f3743640b7d]
  [bt] (3) /usr/lib/x86_64-linux-gnu/libglfw.so.3(glfwInit+0x2d) [0x7f3725a7ab3d]
  [bt] (2) /usr/lib/x86_64-linux-gnu/libglfw.so.3(+0xb858) [0x7f3725a80858]
  [bt] (1) /usr/lib/x86_64-linux-gnu/libglfw.so.3(+0x59f7) [0x7f3725a7a9f7]
  [bt] (0) /usr/local/lib/python3.6/dist-packages/tvm-0.6.dev0-py3.6-linux-x86_64.egg/tvm/libtvm.so(tvm::runtime::gl::GlfwErrorCallback(int, char const*)+0x2f9) [0x7f374363b7c9]
  File "/content/tvm/src/runtime/opengl/opengl_device_api.cc", line 82
Error: [65544] X11: RandR gamma ramp support seems broken

1 Ответ

0 голосов
/ 05 июля 2019

Я частично решил эту проблему, используя FCRC 2019 для двоичных файлов TVM .

...