如何進行優化tensorflow 將極大得加速機器學習模型的訓練的時間,下面是一下tensorflow性能調優相關的閱讀鏈接:
- tensorflow 性能調優:http://d0evi1.com/tensorflow/performance/ (概括的較為完整)
- tensorflow:input pipeline性能指南:http://d0evi1.com/tensorflow/datasets_performance/ (https://www.tensorflow.org/guide/data_performance ,該文章是對此文章的中文翻譯)
閱讀摘要:
- input pipeline 優化:
- 使用 nvidia-smi -l 2 確認一個GPU是否被充分利用;通過gpu 利用率查看瓶頸是否在 input pipeline;
- 生成一個 timeline, 觀察等待狀態。判斷每一階段的耗時;
- 預估當前訓練所需要的吞吐,驗證所使用的磁盤,能否支持該吞吐量;
- CPU 預處理:
- 在CPU上面,進行處理 input pipeline 操作。來進行釋放GPU;
- 使用Dataset API:
- dataset api 會使用C++多線程機制,會比基於python的queue_runner的開銷更低;使用 feed_dict 來進行裝載數據將會存在性能問題;
- 針對於數據集進行融合和裁剪,也能已經程度上加快tensorflow 的處理速度,在盡量少損失數據的情況下,減少整個數據集的大小,以提高處理速度;
- 使用大文件:
- 讀取大量小文件可以極大影響I/O性能。獲取最大的I/O吞吐量的其中一種方法是,將數據預取處理成更大的文件(TFRecord文件)。對於更小數據集,最好的方法是加載整個數據集到內存中。
- fused Ops:
-
Fused Ops會將多個Op結合成單個kernel來提升性能。在Tensorflow中有許多fused Ops,當可能時XLA會創建fused Ops來自動提升性能。下面的示例會使用fused Ops,可以極大提升性能。
-
- Fused batch norm: 沒看懂,之前沒有使用過,所以不知道如何來進行使用;
- 編譯安裝:缺省的TensorFLow二進制包面向大多數的硬件,以便TensorFlow能為所有人所使用。如果使用CPU進行training或inference,推薦使用CPU的所有優化來編譯TensorFlow。開啟當前適合於當前CPU的優化;
- GPU優化:數據並行於模型並行,以及考慮GPU之間來進行共享數據;以及CPU 與 GPU 之間的模型共享;
- CPU優化:Intel® 已經添加了Intel® Math Kernel Library for Deep Neural Networks (Intel® MKL-DNN) 支持;
保持更新,內容來源於網絡。更多內容請關注 cnblogs.com/xuyaowen;