tvm自动售票机内部结构图(tvm的功能有哪些)
关注我最近想法的同学应该知道我最近都在把玩 TVM,今天终于使用 TVM 得到了非常满意的结果,而专栏也很长时间没更新了,于是来安利 。
简单介绍下 Auto-TVM 的调优终端设备的用法
- 你可以有很多手机平板设备,安装好 TVM RPC 这个 App 之后,可以在 App 里输入 Tracker 的 IP 和端口,进行设备注册 。(我遇到的最坑的问题其实是公司网络各种 IP 禁止访问,封端口,使得 android 机和开发服务器一直连不上, 最终还是在自己的电脑上装了虚拟机,自建了一个小 LAN 才解决的这个问题)
1.编译 tvm4j-core 出错: cannot find symbol [ERROR] symbol: class SharedSecrets
JDK11 会遇到这个问题,因为 JDK11 已经把 sun.misc.SharedSecrets 换到别的地方了,建议不要尝试修改 TVM 源代码来 fix 这个问题,因为你会遇到其他更多问题,请下载 JDK8,把 JAVA_HOME 设为 JDK8 的,一切就会很顺利
2.Android TVM RPC 编译出错: #error "Unable to determine endianness of your machine; use CMake to compile"
Android RPC server fails to build(http://link.zhihu.com/?target=https%3A//discuss.tvm.ai/t/android-rpc-server-fails-to-build/1461)
按上边 link 里的修改 endian.h 文件即可,参见我下边的修改
5.LLVM only Large Small are allowd on AArch64
https://github.com/dmlc/tvm/issues/2005 可解(http://link.zhihu.com/?target=https%3A//github.com/dmlc/tvm/issues/2005)。
6.Auto-TVM 自动优化时出错:Cannot find config for target=cuda
这个(http://link.zhihu.com/?target=https%3A//discuss.tvm.ai/t/what-does-this-warning-cannot-find-config-for-target-cuda-mean/798/3)不是什么大问题,某 operator 不能调,对我来说其他的可以调就行了。。。。
7.Auto-TVM 自动优化 OpenCL 时出错: No OpenCL platform matched given existing options
No OpenCL platform matched given existing options
(http://link.zhihu.com/?target=https%3A//discuss.tvm.ai/t/no-opencl-platform-matched-given-existing-options/1848/6)
也是自己问最终自己解决的,很反直觉,编译 TVM 的时候,选择 OpenCL=OFF,就没有这个问题,选择 OpenCL=ON,为终端 Cross Compile OpenCL 就不 work 了... 应该是 bug.
8.Auto-TVM 自动优化 OpenCL 时出错: CL_INVALID_WORK_GROUP_SIZE
CL_INVALID_WORK_GROUP_SIZE error after auto-tuning for OpenCL on Android Device
(http://link.zhihu.com/?target=https%3A//discuss.tvm.ai/t/cl-invalid-work-group-size-error-after-auto-tuning-for-opencl-on-android-device/1858/10)
应该是我 trial number 设的太小了,以至于 TVM 找不到一个 valid 的 kernel,顺着这个问题,发现了 CL_INVALID_WORK_GROUP_SIZE 的一个 undocumented 的错误源,即 OpenCL kernel 使用过多的 register file 也会造成 CL_INVALID_WORK_GROUP_SIZE 错误,这一点在查 OpenCL 文档的时候是查不到的, 有点 tricky。
9.Auto-TVM 自动优化时 Android TVM RPC Crush,一切白调。。。
目前 TVM 还不支持 checkpoint,不过我们可以很简单的魔改 measure_methods.py 这个文件,把 190 行 set_task(): 这个函数里的 check remote 失败直接 raise RuntimeError 退出程序,改成循环多次 check 即可,这样使得 Auto-TVM 一方持续等待 Android 程序上线,比一点网络问题,或者终端问题,就废掉之前 n 多个小时的 auto-tuning 成果要好的多。
最后感谢
@ 陈天奇
大神为我们带来了这么方便的工具。
好了,今天就到这里,我继续修仙炼丹去了~