深度學習環境

硬體

  • CPU
  • GPU (NVIDIA 為主)
  • FPGA
  • 客製化晶片 (Google 的 TPU)

GPU 適合平行處理,像如矩陣乘法

  • CUDA - 很難寫出高效能的 code

    • 函式庫
      • cuBLAS - 矩陣操作
      • cuFFT
      • cuDNN - 深度學習 (跟手寫 CUDA 效能差三倍)
  • OpenCL

    • 效能不比 CUDA 好
    • 但跨平台

硬碟讀取資料會是限制速度的瓶頸

解決方案

  1. 一口氣讀進 GPU RAM
  2. 用 SSD 取代 HDD
  3. 先放入 CPU 的 RAM 再放入 GPU

深度學習函式庫

使用函式庫的理由

  1. 更容易建立複雜的計算圖(Computational graphs)
  2. 更容易計算出梯度
  3. 能在 GPU 上跑

Tensorflow

執行步驟

  1. 定義計算圖
  2. 執行

GPU 計算

Keras

Tensorflow or Theano 的包裝

Pytorch

  • Tensor - 類似 numpy
  • Variable 節點
  • Module 神經網路

手寫

使用函式庫

自訂 function

自定模組

Dataloader

Visdom

GPU 計算

if torch.cuda.is_available():
    device = torch.device('cuda:0')
else:
    device = torch.device('cpu')

net = Net(0, 1, embed_list).to(device=device)

動態圖 vs 靜態圖

比較表

動態圖 靜態圖
程式碼簡單 效率比較高
程式碼靈活 可以被序列化

動態圖的優勢

RNN

Recursive Networks(NLP)

Neural Modular Network

Caffe

  1. 轉換資料格式
  2. 用 prototxt 畫計算圖
  3. 定義參數
  4. 執行

很好產品化,但近年研究人員用的不多

優點

  • python 支援不錯
  • 執行時不需要 python

缺點

  • 可能需要重寫 GPU 支援
  • RNN 支援不好
  • 大型網路寫起來很麻煩

Caffe 2

  • 更好的 python 支援
  • 能在不同裝置上執行
  • 靜態圖
  • 執行時不需要依賴 python
  • 多 GPU 支援

選擇適合的框架

  • Tensorflow - 多用途
  • Pytorch - 研究用
  • Caffe 2 - 產品化用