當前位置:
首頁 > 知識 > 雲端深度學習框架TensorFlow讀取數據IO的高效方式

雲端深度學習框架TensorFlow讀取數據IO的高效方式

低效的IO方式

最近通過觀察PAI平台上TensoFlow用戶的運行情況,發現大家在數據IO這方面還是有比較大的困惑,主要是因為很多同學沒有很好的理解本地執行TensorFlow代碼和分布式雲端執行TensorFlow的區別。本地讀取數據是server端直接從client端獲得graph進行計算,而雲端服務server在獲得graph之後還需要將計算下發到各個worker處理(具體原理可以參考視頻教程-Tensorflow高級篇:https://tianchi.aliyun.com/competition/new_articleDetail.html)。

雲端深度學習框架TensorFlow讀取數據IO的高效方式

本文通過讀取一個簡單的CSV文件為例,幫助大家快速了解如何使用TensorFlow高效的讀取數據。CSV文件如下:

1,1,1,1,12,2,2,2,23,3,3,3,3

首先我們來看下大家容易產生問題的幾個地方。

1.不建議用python本地讀取文件的方式

PAI支持python的自帶IO方式,但是需要將數據源和代碼打包上傳的方式使用,這種讀取方式是將數據寫入內存之後再計算,效率比較低,不建議使用。範例代碼如下:

import csv

2.盡量不要用第三方庫的讀取文件方法

很多同學使用第三方庫的一些數據IO的方式進行數據讀取,比如TFLearn、Panda的數據IO方式,這些方法很多都是通過封裝PYTHON的讀取方式實現的,所以在PAI平台使用的時候也會造成效率低下問題。

3.盡量不要用preload的方式讀取文件

很多人在用PAI的服務的時候表示GPU並沒有比本地的CPU速度快的明顯,主要問題可能就出在數據IO這塊。preload的方式是先把數據全部都讀到內存中,然後再通過session計算,比如feed的讀取方式。這樣要先進行數據讀取,再計算,不同步造成性能浪費,同時因為內存限制也無法支持大數據量的計算。舉個例子:假設我們的硬碟中有一個圖片數據集0001.jpg,0002.jpg,0003.jpg……我們只需要把它們讀取到內存中,然後提供給GPU或是CPU進行計算就可以了。這聽起來很容易,但事實遠沒有那麼簡單。事實上,我們必須要把數據先讀入後才能進行計算,假設讀入用時0.1s,計算用時0.9s,那麼就意味著每過1s,GPU都會有0.1s無事可做,這就大大降低了運算的效率。

雲端深度學習框架TensorFlow讀取數據IO的高效方式

下面我們看下高效的讀取方式。


高效的IO方式

高效的TensorFlow讀取方式是將數據讀取轉換成OP,通過session run的方式拉去數據。另外,讀取線程源源不斷地將文件系統中的圖片讀入到一個內存的隊列中,而負責計算的是另一個線程,計算需要數據時,直接從內存隊列中取就可以了。這樣就可以解決GPU因為IO而空閑的問題!

雲端深度學習框架TensorFlow讀取數據IO的高效方式

下面我們看下代碼,如何在PAI平台通過OP的方式讀取數據:

import argparse

  • dirname:OSS文件路徑,可以是數組,方便下一階段shuffle

  • reader:TF內置各種reader API,可以根據需求選用

  • tf.train.string_input_producer:將文件生成隊列

  • tf.decode_csv:是一個splite功能的OP,可以拿到每一行的特定參數

  • 通過OP獲取數據,在session中需要tf.train.Coordinator()和tf.train.start_queue_runners(sess=sess,coord=coord)

在代碼中,我們的輸入是3行5個欄位:

1,1,1,1,12,2,2,2,23,3,3,3,3

我們循環輸出4次,列印出第2個欄位。結果如圖:

雲端深度學習框架TensorFlow讀取數據IO的高效方式

輸出結果也證明了數據結構是成隊列。


其它

  • PAI notebook功能上線,支持在線修改代碼並且內置各種深度學習框架,歡迎使用:https://data.aliyun.com/product/learn

  • 強烈推薦視頻教程:https://tianchi.aliyun.com/competition/new_articleDetail.html

  • 本文參考了互聯網上《十圖詳解TensorFlow數據讀取機制(附代碼)》一文,關於圖片的讀取方式也可以參考這篇文章,感謝原作者。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雲棲社區 的精彩文章:

阿里云:遊戲行業DDoS態勢報告(2017年上半年)
詳解阿里雲RDS金融資料庫(三節點版):背景篇
在篩選試管受精胚胎方面,AI比胚胎學家更靠譜
Kaggle首席技術官發布——(Kaggle)NIPS 2017對抗學習挑戰賽起步指南
大神手把手教你:(Python)序列數據的One Hot編碼

TAG:雲棲社區 |

您可能感興趣

阿里深度學習框架開源了!無縫對接TensorFlow、PyTorch
類Keras的PyTorch 深度學習框架——PyToune
最新TensorFlow能碾壓PyTorch?兩大深度學習框架最全比拼
TensorFlow與PyTorch之爭,哪個框架最適合深度學習
TensorFlow、MXNet、Keras如何取捨?常用深度學習框架對比
從 Google Trends,看各大深度學習框架使用熱度
深度學習框架排行榜:找工作學TensorFlow,PyTorch搜索量逼近Keras
《Tensorflow:實戰Google深度學習框架》
Keras還是TensorFlow?深度學習框架選型實操分享
TensorFlow框架初印象
Google 跨平台 UI 框架-Flutter
第55期:Python機器學習實踐指南、Tensorflow 實戰Google深度學習框架
用PyTorch做深度學習實驗!Facebook新框架Ax和BoTorch雙雙開源
基於 Unity/OpenAI Gym/PyTorch/TF 的深度強化學習研究框架
ArXiv最火深度學習框架:TensorFlow第一,PyTorch第二!
Facebook又放大招!開源框架Pythia讓深度學習更高效
機器學習框架王座之爭:PyTorch直逼Tensorflow
位元組跳動開源高性能分散式訓練框架BytePS,支持PyTorch、TensorFlow等
圍觀丨Google 的 Mobile UI 框架 Flutter Preview 1 發布!
TensorFlow、Keras、CNTK……到底哪種深度學習框架更好用?