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

相關文章
相關標籤/搜索