Spark的GPU支持方法研究

本文持续更新中,转载请注明来源:http://www.javashuo.com/article/p-devapfwj-ec.htmlpython

为了使用Spark进行机器学习,支持GPU是必须的,上层再运行神经网络引擎。目前AWS\GCP和Databricks的云都已经支持GPU的机器学习,AliYun也在实验之中。git

这包括几个层次:github

  • GPU直接支持Spark。由于Spark是多线程的,而GPU每每只能起一个单例,致使线程会竞争GPU资源,须要进行管理、加锁和调度。方法包括:
    • 原生代码内置编译支持。
    • 引入cuDNN等NVidia库进行调用。
    • 经过Tensorflow等间接进行支持。
    • JIT方式即时编译调用方式支持。
  • GPU支持的Docker中运行Spark。若是将Spark节点放入Docker容器中运行,则须要使用NVidia提供的特殊版本Docker,并且须要安装NVidai提供的cuDNN等软件支持库。因为这些库调用了系统驱动,并且是C++编写,所以Spark要可以进行系统库的调用。
  • GPU支持的Kubernetes之上运行Spark。

只有同时知足上面的条件,才能经过Kubernetes的集群管理对Docker中Spark进行GPU操做。shell

下面是已经作的一些研究。apache

  • IBMSparkGPU的方案能够将GPU用于RDD和DataFrame,支持通用计算,重点支持机器学习;
  • deeplearning4j是基于Java的,包含数值计算和神经网络,支持GPU;
  • NUMBA的方案经过PySpark即时编译产生GPU的调用代码,兼容性好;
  • Tensorflow/Caffe/MXNet等与Spark整合主要是节点调度,GPU由深度学习引擎调度,RDD须要数据交换,主要用于存储中间超参数数据。如TensorFrame的实现-https://github.com/databricks/tensorframes

具体的资源包括:api

相关文章
相关标签/搜索