好友
阅读权限10
听众
最后登录1970-1-1
|
.·.·.
发表于 2019-7-31 05:11
350吾爱币
我把这个问题同时送去了知乎https://www.zhihu.com/question/337047143跟相关的MXNet论坛https://discuss.mxnet.io/t/anywa ... libmxnet-dll/4548/2
至今为止只有浏览数没有回复数
想了想如果这里也找不到答案,大约是真的找不到了
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
问题的背景是这样的
我有一个炼丹用的python包mxnet,每次import mxnet as mx的时候都需要十几秒的时间
理论上……我是知道如何加速mxnet的加载的,比如mxnet加载缓慢的原因是libmxnet.dll里面包含了太多无用的CUDA_ARCH。只要github上拿下源代码,从源代码直接编译一份,保证import在一秒内结束
然而问题是,mxnet会升级,而我不可能每次升级都去mxnet那里下好源代码重新编译。
于是我去nvidia论坛提问,如何去掉.dll里面不需要的ARCH
他们给了一个解决方案,nvprune
然而nvprune是单文件版,不能同时输入两个文件,并且nvprune需要输入的文件是relocatable的——我能拿到的.dll都是被删掉了符号表导致不能relocate的版本,于是nvprune自然而然地失败了。
幸运地是,除了libmxnet.dll,下载的mxnet自带一个应当是包含了全部libmxnet.dll符号表内容的libmxnet.lib——然而问题是,我并不知道如何把这样的.dll跟.lib文件正确地结合起来,生成一个relocatable的.dll文件
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我真正关心的问题是,应该如何削减libmxnet.dll中无用的cuda_arch(对windows以及对linux,因为我不确定日后会不会专门弄个机子装linux来炼丹)
目前能找到的路径是,只要我们能把.lib文件的符号信息正确地送进.dll,我们就能使用nvprune修剪.dll文件,去掉所有无用的结构
最后这个应当是论坛里的大牛所熟悉的范畴,也是我悬赏的内容
希望有大神看到这个悬赏帖子吧……
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
如果你回答这个问题,你的答案很可能会因为我的转载被包括且不限于全世界每一个用MXNet炼丹的人看见
我会注明究竟是谁完成了这个工作(并把链接指向这里(如果他们真的点过来看的话……))
因此你应当理解,不要只送一个来源未知的.exe上来告诉我这玩意works fine...
我能接受的答案格式应该是
(1)mingw-w64工具(反正我安装mingw64版本的gcc是毫不吃力的,这个移植去Linux也最方便)
或者(2) C语言代码(同时解决.dll/.so的问题)
或者(3) C语言代码(解决.dll问题)
或者(4) 告诉我应当如何用一些高知名度的工具进行操作
优先级(1)>(2)>(3)>(4)
这里的优先级指的是,在一个属于第(j)类的解决方案发布24*(k-j)小时内有人发布了第(k)类方案,则认为发布第(k)类方案的人活得悬赏
也就是说如果X给出了一系列复杂的OD操作告诉我如何恢复符号表,而23小时之后Y给出了一个针对.dll文件的C代码,又过了23小时Z把这个代码扩展到了针对.so的情形,而又过了25小时之后终于有大神给出了mingw-w64工具的脚本
……悬赏属于Z(所以……如果针对.so引入相对应的.a文件记录的符号表没那么复杂,最好在给出windows版本的同时给出linux版本),然而解决这个问题的荣誉属于大家
测试:
我会使用如下命令进行测试:
nvprune -arch sm_61 libmxnet.dll -o 1.dll
(如果不进行修改,nvidia会提示nvprune fatal : Input file 'libmxnet.dll' not relocatable)
(但如果修改失败,nvidia或许会给出另一个提示:nvprune warning : No device code that matched architecture, so stripped out all device code)
linux的话,我会用我的gentoo linux进行测试
曾经用gentoo编译mxnet,大概编译了一两天&&两三遍的样子
反正……整个五一,都奉献给了gentoo...然后我就把gentoo彻底封印了
(现在我的电脑,没有E盘……)
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|