ラップトップにGPUカードがないため、クラウド(Google Cloud ML)でCNNを実行しようとしています。クラウドMLでTensorflowのデキューが非常に遅い
Google Cloud Storageにデータをアップロードしました。次のような1500エントリの.csvファイル。
| label | img_path |
| label_1| /img_1.jpg |
| label_2| /img_2.jpg |
と対応する1500 jpgs。
マイinput_fnはそうのようになります。ここでは
def input_fn(filename,
batch_size,
num_epochs=None,
skip_header_lines=1,
shuffle=False):
filename_queue = tf.train.string_input_producer(filename, num_epochs=num_epochs)
reader = tf.TextLineReader(skip_header_lines=skip_header_lines)
_, row = reader.read(filename_queue)
row = parse_csv(row)
pt = row.pop(-1)
pth = filename.rpartition('/')[0] + pt
img = tf.image.decode_jpeg(tf.read_file(tf.squeeze(pth)), 1)
img = tf.to_float(img)/255.
img = tf.reshape(img, [IMG_SIZE, IMG_SIZE, 1])
row = tf.concat(row, 0)
if shuffle:
return tf.train.shuffle_batch(
[img, row],
batch_size,
capacity=2000,
min_after_dequeue=2 * batch_size + 1,
num_threads=multiprocessing.cpu_count(),
)
else:
return tf.train.batch([img, row],
batch_size,
allow_smaller_final_batch=True,
num_threads=multiprocessing.cpu_count())
は、完全なグラフが(確かに非常に簡単なCNN)次のようになります。
はその後、ほとんどの、200のバッチサイズでトレーニングを実行しますラップトップの計算時間(私のラップトップでは、データはローカルに保存されています)は、私が期待しているグラデーションノードに費やされます。バッチ・ノードの計算時間は約12msです。
私がクラウド上で実行すると(スケール層はBASIC)、バッチノードは20秒以上かかります。そして、ボトルネックはtensorboardに応じQueueDequeueUpToV2サブノードから来ているようだ:
誰もが、これはなぜ起こるか任意の手掛かりを持っていますか?私はここで間違っていると確信していますので、私は喜んで学ぶでしょう。
いくつかの注意点: - 異なるmin_after_dequeueを持つバッチ/シャッフルバッチ間のマージは影響しません。 - BASIC_GPUを使用している場合、バッチノードもCPU上にあります。これは、読んだことで正常ですが、およそ13秒かかります。 - キューが開始された後にstar.saveを追加すると、スタベーションがないことも保証されません。 - 計算時間は実際にはbatch_sizeでは直線的です。したがって、batch_sizeが50の場合、計算時間はbatch_sizeの200よりも4倍小さくなります。
誰もが必要な場合はお読みいただきありがとうございます。
ベスト、 アル
更新:
-Cloud MLインスタンスとバケットは、同じ領域に改善結果4倍にそれらを作る、同じ領域ではありませんでした。
- .tfrecordsファイルを作成するとバッチ処理に70msかかることがありました。私はそれを学ぶための出発点として、このblogポストを使用しました、私はそれをお勧めします。
これは、他の人が高速データ入力パイプラインを作成するのに役立つことを願っています。
を使用して
あなたはより多くの並列処理やファイル間の例のシャッフルが必要な場合には、複数のリーダーのインスタンスを使用します。Tensorflowドキュメントで
最初? –クラウドストレージからクラウドmlインスタンスまでを意味しますか? –
Yaroslavのコメントを拡大すると、ラップトップでコードを実行してみることができますが、GCSからファイルを読み込むことができます。それはあなたが雲の中で見るものともっとインラインでなければなりません。たくさんのデータがない場合は、Yaroの言うことを行い、スクリプトの初めにファイルをローカルにコピーしてください。 – rhaertel80