tvm logo
Хоча для вивчення машинного навчання зазвичай зручніше використовувати Linux, я все ж хочу продовжити працювати у Windows, як і в усіх своїх попередніх історіях.
Оскільки в моїх попередніх розповідях я використовував C для запуску ONNX графів самостійно, зараз я думаю про перехід до "AI компілятора". Якщо бути лаконічним, я повинен вивчити "TVM", "XLA", "GLOW" і, можливо, з'ясувати, як працює LLVM. І незважаючи на популярність інших варіантів, я вважаю, що Apache TVM — це хороший початок, але згодом виявляється, що навіть його збірка досить складна.
У цій історії я спробував побудувати Apache TVM з LLVM на самому початку. Однак, зрештою, це працює лише частково. Хоча я зміг змусити працювати TVM relay, частина autoTVM, яка є "вишенькою на торті", не працює і зависає.
Traceback (most recent call last):
File "d:\libraries\tvm\python\tvm\autotvm\measure\measure_methods.py", line 624, in run_through_rpc
with module_loader(remote_kwargs, build_result) as (remote, mod):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python312\Lib\contextlib.py", line 137, in __enterautotvm\measure\measure_methods.py", line 692, in __call__
yield remote, remote.load_module(os.path.split(build_result.filename)[1])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^client.py", line 178, in load_module
return _ffi_api.LoadRemoteModule(self._sess, path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "d:\libraries\tvm\python\tvm_ffi_ctypes\packed_func.py", line 245, in __call__
raise_last_ffi_error()
File "d:\libraries\tvm\python\tvm_ffi\base.py", line 481, in raise_last_ffi_error
raise py_err
tvm._ffi.base.TVMError: Traceback (most recent call last):
File "D:\libraries\tvm\src\runtime\rpc\rpc_endpoint.cc", line 439
RPCError: Error caught from RPC call:
Traceback (most recent call last):
File "D:\libraries\tvm\src\runtime\rpc\rpc_endpoint.cc", line 439
RPCError: Error caught from RPC call:
Отже, можу сказати, що для вивчення TVM на Windows це того не варте.
Проте, я напишу про зібрані команди для побудови як LLVM, так і Apache TVM, якщо мені доведеться це зробити пізніше, і якщо це комусь буде цікаво.
Побудова LLVM
Посилання: https://llvm.org/docs/GettingStartedVS.html
Загалом, слідуючи офіційним інструкціям, все має працювати, але я побудував LLVM у C:\Program Files (x86), що зробило його непридатним! Простір у шляху буде ламати встановлення TVM.
Отже, ось переглянуті команди, де тільки одна річ відрізняється.
Використовуйте VS 2019 або пізнішу версію (я використовую 2022) з правами адміністратора.
Перейдіть (cd) до директорії, куди хочете завантажити git файли.
regsvr32 "%VSINSTALLDIR%\DIA SDK\binDIA SDK\bin\amd64\msdia140.dll"
pip install psutil
git clone https://github.com/llvm/llvm-project.git llvm
cmake -S llvm\llvm -B build -DLLVM_ENABLE_PROJECTS=clang -DLLVM_TARGETS_TO_BUILD=X86 -Thost=x64 -DCMAKE_INSTALL_PREFIX=c:\libraries\llvm
exit
Не забудьте відкрити Visual Studio з правами адміністратора для побудови рішення.
Найважливіше — чітко вказати місце встановлення. Потім додайте встановлену директорію bin у змінну середовища, це зробить побудову TVM трохи легшою.
Побудова TVM
Я припускаю, що у вас вже є готові cmake і Python.
Особисто я люблю використовувати cmake-gui для додаткової допомоги.
Спочатку отримуємо вихідні файли
git clone --recursive https://github.com/apache/tvm tvm
cd tvm
mkdir build
cmake --build build --config Release -- /m
Потім переходимо до директорії build і використовуємо cmake для зміни деяких налаштувань.
Встановлюємо "CMAKEINSTALLPREFIX" у директорію, куди хочемо встановити, можливо, поруч з llvm.
Оскільки ми додали llvm у шлях до середовища, ми можемо встановити
USE_LLVM llvm-config — link-static
Потім натискаємо configure і генеруємо.
Раніше (https://discuss.tvm.apache.org/t/unofficial-autotvm-on-windows-guide/4711) говорилося, що зміна “USE_OPENMP” на gnu допоможе з циклічними операціями TVM, що стало проблемою, з якою я зіткнувся, але у моєму випадку це не працює.
Далі натискаємо Configure і генеруємо. Нарешті, будуємо за допомогою Visual Studio з правами "admin".
Перейдемо до кореневої директорії TVM і виконуємо
pip install -e /tvm/python
Щоб встановити Python модуль.
Тестування
Тестуємо за допомогою
[
Компіляція та оптимізація моделі за допомогою Python інтерфейсу (AutoTVM) - tvm 0.19.dev0 документація
Автор: Chris Hoge У TVMC посібнику ми розглядали, як компілювати, запускати та налаштовувати попередньо навчану модель для комп'ютерного зору, ResNet-50…
tvm.apache.org
](https://tvm.apache.org/docs/tutorial/autotvmrelayx86.html?source=post_page-----2e3e6d157f32--------------------------------)
І ви зможете запустити модель і зазнати невдачі на частині autoTVM.
Це те, що я знайшов, і я рекомендую використовувати wsl для експериментів, але, можливо, не будувати Apache TVM, оскільки збірка llvm займає величезну кількість часу на віртуальній машині, і оптимізація працюватиме не так добре.
Дякую за прочитання цієї історії!
Перекладено з: Getting started(or not). TVM on Windows.