mxnet的並行計算為什麼這麼牛,是什麼原理?


簡單來說是當計算開銷大於通訊開銷時,通過並行兩者可以達到將近線性的加速。

具體可參見 Sec 4.4 和 4.5 http://www.cs.cmu.edu/~muli/mu-thesis.pdf

ps: 這裡有新的在256塊GPU上的加速,和10台機器vs單機的收斂:

詳細見:dmlc/mxnet


個人理解

通過執行引擎來達到計算和收發的並行,例如後向時算完某一個參數的梯度後,執行引擎會立刻提交到發送隊列中開始發送,這時候其他的後向計算還在進行中。

此外發送與接收的隊列有優先順序,時刻保證最高優先順序參數的接收與發送

上述機制保證了對於較深的網路能夠達到了很好的線性加速比,不過對於淺層網路,比如只有兩層lstm的 encoder decoder這種方法的並行效果欠佳。

總的來說還是灰常牛逼滴!


Mxnet 最近怎麼天天發軟文?是不是錢多了?錢多了趕緊去把文檔寫了。


1. 單機里先對你的網路建一個Computation Graph, 建法大概是算出每個forward/backward的依賴, 然後這個圖的執行可以在不影響拓撲序的情況下並行

2. 多機是通過利用Data Parallelism, 可以看做是並行執行mini batch. 系統上差不多算個kv存儲, key是參數index, value是參數具體值, 然後每個client在算gradient的時候拿最新的參數去算, 算完讓server去update. 模型上要處理的是非同步的情況下client提交的gradient可能不是針對當前的參數算出來的, 不過這跟效率沒多大關係了..


我用了多GPU訓練,反而變慢了

有人趟過這個坑么

用python里的例子,2個GPU比單個GPU慢200倍

還有啊,運行cifar10例子時,啟動也很慢


推薦閱讀:

現在tensorflow和mxnet很火,是否還有必要學習scikit-learn等框架?
為什麼在數據量較小的時候CPU計算會快於GPU?
PyTorch 有哪些坑/bug?
PyTorch提取中間層特徵?
如何評價 2017 年 12 月 5 日發布的 PyTorch 0.3.0?

TAG:機器學習 | 深度學習DeepLearning | TensorFlow | mxnet | 大規模機器學習 |