tensorflow menyimpan data pelatihan pada memori GPU

Saya cukup baru mengenal tensorflow. Saya biasa menggunakan theano untuk pengembangan pembelajaran mendalam. Saya melihat perbedaan antara keduanya, di situlah data masukan dapat disimpan.

Di Theano, mendukung variabel bersama untuk menyimpan data input pada memori GPU untuk mengurangi transfer data antara CPU dan GPU.

Di tensorflow, kita perlu memasukkan data ke placeholder, dan data tersebut bisa berasal dari memori CPU atau file.

Pertanyaan saya adalah: apakah mungkin menyimpan data input pada memori GPU untuk tensorflow? atau apakah ia sudah melakukannya dengan cara yang ajaib?

Terima kasih.


person xyd    schedule 02.06.2016    source sumber
comment
Berikut contoh lengkapnya -- mnist full_connected_preloaded .py   -  person Yaroslav Bulatov    schedule 02.06.2016
comment
@YaroslavBulatov Terima kasih!   -  person xyd    schedule 04.06.2016
comment
@YaroslavBulatov tidak yakin Anda menyadarinya atau tidak, tetapi kode yang Anda berikan melakukan satu periode dalam 28 detik dan itu sangat buruk. (Ngomong-ngomong, itu ada di GPU). Selain itu, saya tidak dapat menemukan satu pun contoh tensorflow berperforma bagus di internet yang sangat aneh dibandingkan dengan kerangka pembelajaran mendalam lainnya seperti theano dan torch. Apakah karena tensorflow lebih lambat dari yang lain? Jika tidak, mengapa tidak ada pembuat yang mencoba memecahkan masalah ini sementara semua pengguna tensorflow baru mengeluhkan hal ini?   -  person zwlayer    schedule 03.10.2016
comment
Soumith Chintala memiliki tolok ukur dengan kode yang membandingkan tf dengan caffe/torch, Anda bisa mulai dengan model tersebut   -  person Yaroslav Bulatov    schedule 03.10.2016
comment
@zwlayer -- inilah tautan ke tolok ukur convnets -- github.com/soumith/convnet-benchmarks . Selain itu, saya mem-porting skrip contoh Torch lbfgs.lua ke TensorFlow, dan membuatnya berjalan lebih cepat dengan batch ukuran penuh, berikut perbandingannya -- github.com/yaroslavvb/lbfgs . Mencocokkan performa pada batch yang lebih kecil lebih sulit -- karena TensorFlow dirancang untuk menskalakan sistem terdistribusi/chip perangkat keras masa depan, terdapat beberapa tingkat tipuan dengan sejumlah overhead konstan yang mendominasi dalam komputasi kecil. Yaitu, skrip yang mengalikan 2 angka 1000 kali lebih lambat di TF daripada numpy   -  person Yaroslav Bulatov    schedule 03.10.2016
comment
@YaroslavBulatov terima kasih atas semua informasi berharga yang Anda berikan.   -  person zwlayer    schedule 03.10.2016
comment
@YaroslavBulatov Saya tahu ini adalah pertanyaan lama, tetapi mengaktifkan log_device_placement pada contoh pertama yang Anda tautkan menunjukkan bahwa operasi antrian yang dihasilkan oleh tf.train.slice_producer berada di CPU. Mengantri irisan pada CPU tampaknya meniadakan keuntungan menyimpan data pada GPU karena irisan akan ditransfer ke CPU dan sebaliknya. Apakah saya melewatkan sesuatu?   -  person Tobias Hagge    schedule 19.10.2017
comment
Anda benar, antrian tidak memiliki dukungan GPU. Untuk kinerja GPU yang lebih baik, gunakan tf.data daripada antrian   -  person Yaroslav Bulatov    schedule 19.10.2017
comment
@YaroslavBulatov Menurut pesan kesalahan saya, tf.data.Dataset.from_tensor_slices dan beberapa fungsi Iterator saat ini juga tidak memiliki kernel GPU. Begitulah cara saya berakhir di sini.   -  person Tobias Hagge    schedule 19.10.2017
comment
Jadi begitu. Hal ini sepertinya merupakan kasus yang jarang terjadi, biasanya pembacaan data tidak menjadi hambatan sehingga data tetap berada di CPU   -  person Yaroslav Bulatov    schedule 19.10.2017


Jawaban (2)


Jika data Anda sesuai dengan GPU, Anda dapat memuatnya ke dalam konstanta di GPU misalnya. array numpy:

with tf.device('/gpu:0'):
  tensorflow_dataset = tf.constant(numpy_dataset)

Salah satu cara untuk mengekstrak minibatch adalah dengan mengiris array tersebut di setiap langkah, alih-alih memasukkannya menggunakan tf.slice< /a>:

  batch = tf.slice(tensorflow_dataset, [index, 0], [batch_size, -1])

Ada banyak kemungkinan variasi seputar tema tersebut, termasuk penggunaan antrean untuk mengambil data terlebih dahulu ke GPU secara dinamis.

person Vincent Vanhoucke    schedule 02.06.2016
comment
Terima kasih banyak! Saya akan memeriksanya. - person xyd; 04.06.2016

Hal ini mungkin saja terjadi, seperti yang telah ditunjukkan, namun pastikan bahwa hal tersebut benar-benar berguna sebelum melakukan terlalu banyak upaya untuk hal tersebut. Setidaknya saat ini, tidak semua operasi memiliki dukungan GPU, dan daftar operasi tanpa dukungan tersebut mencakup beberapa operasi pengelompokan dan pengocokan yang umum. Mungkin tidak ada keuntungan meletakkan data Anda di GPU jika tahap pemrosesan pertama adalah memindahkannya ke CPU.

Sebelum mencoba memfaktorkan ulang kode untuk menggunakan penyimpanan pada GPU, cobalah setidaknya salah satu hal berikut:

1) Mulai sesi Anda dengan pencatatan penempatan perangkat untuk mencatat operasi mana yang dijalankan pada perangkat mana:

config = tf.ConfigProto(log_device_placement=True)
sess = tf.Session(config=config)

2) Coba letakkan grafik Anda secara manual di GPU dengan meletakkan definisinya di blok with tf.device('/gpu:0'):. Ini akan memberikan pengecualian jika operasi tidak didukung GPU.

person Tobias Hagge    schedule 19.10.2017