学点深度学习

最近尝试入门点深度学习的内容,首先来个框架试试嘛,tensorflow2.0的GPU要求已经是nvida算力3.5以上的设备,当然,如果你能过G F W,tesla据说可以白嫖。想用自己的设备咋办呢,只有单纯CPU上了,那这速度就无语了,慢上几十倍,毕竟再差的GPU的核心数,也是cpu的几十倍,所以使用opencl,苹果metal等的框架是个不错的选择,在知乎上发现了一个答主推荐plaidml这个框架,这家公司18年已经被intel收购了,虽然intel最近流年不利,至少也是个财大气粗的大厂,自己的Xe独显也已经推出。尽管比起tensorflow是难以相提并论,特别是社区,但是至少也是个github上星标3.9K+的,我们国家百度的paddlepaddle的星标是多少呢?13.5K好吧,可能中国人多的原因。tensorflow 151K,数量级的差别,whatever,能干活就行。

安装遇到的问题

按照各个系统的官网教程安装,基本是没有问题的,毕竟python的跨平台是不错的,除了测试会报错,报错如下:

# 这里是mac
#新建个虚拟环境
python3 -m venv plaidml-venv
#激活环境
source plaidml-venv/bin/activate
#安装框架
pip install -U plaidml-keras
# 配置,mac上gpu有两个opencl和metal,前者是几家大厂当前一起搞的,
# 现在苹果已经放弃了,但是还未移除,metal是自立门户搞的,发现
# opencl只能使用50%左右的gpu,而metal可以上100%,显然偏心
plaidml-setup #选择experimental模式,可以使用GPU
# 安装跑分软件
pip install plaidml-keras plaidbench
# 跑分
plaidbench keras mobilenet

我的报错就出在最后一步啦,提示可以用下面命令debug,

# -v 表示“哆嗦”模式,不停跑命令行的模式,可选 
plaidbench --print-stacktraces -v keras mobilenet

然后就报如下的错误:

AttributeError: 'str' object has no attribute 'decode

搜索发现解决方式是https://blog.csdn.net/qq_38890412/article/details/86591294

把*.decode('utf-8') //错误

改为

*.encode('utf-8').decode('utf-8') //正确

于是就修改下:

#我的在这个文件夹,一般来说应该是这个:plaidml-venv/lib/python3.7/site-packages/keras/engine/saving.py
/Volumes/MacOS/Documents/plaidml-venv/lib/python3.7/site-packages/keras/engine/saving.py

修改注意,要把非n.decode.decode('utf-8')改为encode('utf-8').decode('utf-8')就可以了。然后就可以愉快地跑个分啦!
看看结果:

   llvm_cpu.0 : CPU (via LLVM)
   opencl_intel_hd_graphics_4000.0 : Intel HD Graphics 4000 (OpenCL)
   metal_intel_hd_graphics_4000.0 : Intel HD Graphics 4000 (Metal)

修改设备在 ~/.plaidml这个配置文件的PLAIDML_DEVICE_IDS

vi ~/.plaidml
Default Config Devices:
{
    "PLAIDML_DEVICE_IDS":[
        "llvm_cpu.0"
    ],
    "PLAIDML_EXPERIMENTAL":true
}

CPU 黑苹果i3-3120M 2*2.5GHz,双核四线程,一台落后的thinkpad e431笔记本,虽然有geforce 740M,但是黑苹果没法驱动,win没有装在固态上,开机两分钟,只有放弃了,ubuntu可以nvida cuda,下次试试。

# HD4000 metal
Example finished, elapsed: 4.668s (compile), 31.818s (execution)
# HD4000 opencl
Example finished, elapsed: 6.994s (compile), 36.685s (execution)
# 单纯CPU
Example finished, elapsed: 6.601s (compile), 236.735s (execution)

显然结果很明显,metal第一,opencl结果类似,cpu慢了几倍,应该是hd4000核心数并不多,查了下是16核心?那么8倍左右的差别是正常的,因为CPU双核。

附-简介:
使深度学习无处不在的平台。
PlaidML 是一种高级便携式张量编译器,用于在笔记本电脑、嵌入式设备或其他设备上进行深度学习,这些设备没有很好地支持可用的计算硬件或可用的软件堆栈包含令人不快的许可证限制。

PlaidML 位于通用机器学习框架的下方,使用户能够访问 PlaidML 支持的任何硬件。PlaidML 支持Keras、ONNX和nGraph。

作为nGraph 编译器堆栈中的组件,PlaidML 进一步扩展了专用深度学习硬件(尤其是 GPU)的功能,并使得访问或使用子图级别的优化变得更容易和更快,否则这些优化将受设备的计算限制的限制。

作为Keras下的组件,PlaidML 可以通过自定义或自动生成的 Tile 代码加快训练工作负载。它在 GPU 上特别有效,并且不需要在 Nvidia 硬件上使用 CUDA/cuDNN,同时实现可比性能。

PlaidML 适用于所有主要操作系统:Linux、macOS 和 Windows。

你可能感兴趣的:(IT,深度学习,tensorflow)