雲端TensorFlow讀取資料IO的高效方式

2021-08-06 08:32:53 字數 1456 閱讀 1925

1,1,1,1,1

2,2,2,2,2

3,3,3,3,3

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

pai支援python的自帶io方式,但是需要將資料來源和**打包上傳的方式使用,這種讀取方式是將資料寫入記憶體之後再計算,效率比較低,不建議使用。範例**如下:

import csv

csv_reader=csv.reader(open('csvtest.csv'))

for row in csv_reader:

print(row)

很多同學使用第三方庫的一些資料io的方式進行資料讀取,比如tflearn、panda的資料io方式,這些方法很多都是通過封裝python的讀取方式實現的,所以在pai平台使用的時候也會造成效率低下問題。

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

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

高效的tensorflow讀取方式是將資料讀取轉換成op,通過session run的方式拉去資料。另外,讀取執行緒源源不斷地將檔案系統中的讀入到乙個記憶體的佇列中,而負責計算的是另乙個執行緒,計算需要資料時,直接從記憶體佇列中取就可以了。這樣就可以解決gpu因為io而空閒的問題!

下面我們看下**,如何在pai平台通過op的方式讀取資料:

import argparse

import tensorflow as tf

import os

在**中,我們的輸入是3行5個字段:

1,1,1,1,1

2,2,2,2,2

3,3,3,3,3

我們迴圈輸出4次,列印出第2個字段。結果如圖:

輸出結果也證明了資料結構是成佇列。

雲端TensorFlow讀取資料IO的高效方式

1,1,1,1,1 2,2,2,2,2 3,3,3,3,3 首先我們來看下大家容易產生問題的幾個地方。pai支援python的自帶io方式,但是需要將資料來源和 打包上傳的方式使用,這種讀取方式是將資料寫入記憶體之後再計算,效率比較低,不建議使用。範例 如下 import csv csv reade...

Tensorflow讀取資料

關於tensorflow讀取資料,官網給出了三種方法 對於資料量較小而言,可能一般選擇直接將資料載入進記憶體,然後再分batch輸入網路進行訓練 tip 使用這種方法時,結合yield使用更為簡潔,大家自己嘗試一下吧,我就不贅述了 但是,如果資料量較大,這樣的方法就不適用了,因為太耗記憶體,所以這時...

Tensorflow檔案讀取

tensorflow讀取檔案的特點 讀取檔案資料量特別大 需要在樣本集中隨機讀取n個樣本,每批次讀取的物件不一樣 隨機,分批次 需要讀取的快 使用tensorflow的執行緒,不使用python的執行緒 全域性直譯器鎖 tensorflow檔案讀取的步驟 將要讀取的檔案放入檔名佇列中 因為用執行緒來...