Tensorflow编译和CNTK部署到Android失败有感

环境:Windows 10,CUDA 8 & 9,CuDnn 5 & 6 & 7,Visual Studio 2017,Windows 10 SDK 15063 & 16299,VS平台工具集v140 & v141,Anaconda 4.4(x64)

       在Bash on Windows 10上面按照官方教程编译Tensorflow的Linux版本一次成功,编译原因是pip包没有SSE指令集支持。编译出来后可以正常运行。

       Windows下pip安装的包不支持Cuda9,于是编译安装。事实证明Tensorflow 1.3确实不支持Cuda 9(Caffe 支持),今天看了下Tensorflow 1.4已经有支持Cuda 9的whl包了,没必要再花这么大力气了。通过修改环境变量的方式切换到Cuda 8,编译成功。

       本来想把Tensorflow弄Android上跑,但官方资料极少,确实有Apk demo 和 Native Library,但我的手机上只有demo能跑,不知是不是个例。于是想到了微软家的跨平台神器 Xamarin,但Tensorflow的dll太多了,于是想到微软某个儿子CNTK。

       根据原来的Xamarin经验,可以直接在C#终引用某个DLL,然后编译出来在Android上就能跑,于是先下了NuGet包。因为目标版本的问题,CNTKCpuOnly和Uwp.CNTKCpuOnly都不能安装上,只好手动添加。编译成功,有警告,因为CNTK的目标架构是AMD64而不是IL,即很可能无法在Mono下跑。运行后果不其然无法识别CPU。与是git clone下源码后准备将已有的DLL换为编译前的项目文件(有若干Windows库被我用这种方法弄到Android上执行),解决了opencv、boost等库的依赖,还手动添加#undef MPI等不正规手法,最后在Math项目上卡壳。Math项目默认是以来MKL的,根据Intel 官方说法,MKL支持的CPU只有I家那些,Arm下没有找到相关资料。另一个BLAS还没去踩坑,先写到这里,跨平台计划基本上是失败了。

       所以失败原因是路线错误,Tensorflow Lite已经发布,可以部署到移动端运行,据说效果还挺好。Xamarin虽然强大却在底层上不能完美欺骗第三方库(话说Unity不也和Xamarin一样是Mono吗,为什么很多DLL能跑在Xamarin上缺不能跑在Unity上)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值