Mengapa pelatihan RNN tidak menggunakan 100% GPU?

8

Saya bertanya-tanya mengapa pelatihan RNN biasanya tidak menggunakan 100% GPU.

Misalnya, jika saya menjalankan benchmark RNN ini pada Maxwell Titan X di Ubuntu 14.04.4 LTS x64, utilisasi GPU di bawah 90%:

masukkan deskripsi gambar di sini

Tolok ukur diluncurkan menggunakan perintah:

python rnn.py -n 'fastlstm' -l 1024 -s 30 -b 128

Bagaimana saya bisa mendiagnosis apa hambatannya?

Franck Dernoncourt
sumber

Jawaban:

5

Saya mendapatkan tingkat pemanfaatan yang sama ketika saya melatih model menggunakan Tensorflow. Alasannya cukup jelas dalam kasus saya, saya secara manual memilih batch sampel acak dan memanggil optimasi untuk setiap batch secara terpisah.

Itu berarti bahwa setiap kumpulan data berada dalam memori utama, kemudian disalin ke memori GPU di mana sisa model berada, kemudian perbanyakan maju / mundur dan pembaruan dilakukan dalam-GPU, kemudian eksekusi diserahkan kembali ke kode saya di mana saya ambil batch lain dan panggilan optimalkan di atasnya.

Ada cara yang lebih cepat untuk melakukannya jika Anda menghabiskan beberapa jam menyiapkan Tensorflow untuk melakukan pemuatan batch secara paralel dari catatan TF yang telah disiapkan sebelumnya.

Saya menyadari Anda mungkin atau mungkin tidak menggunakan tensorflow di bawah keras, tetapi karena pengalaman saya cenderung menghasilkan angka pemanfaatan yang sangat mirip, saya pergi mengambil risiko dengan menyarankan bahwa ada hubungan sebab akibat yang cukup mungkin untuk menarik dari korelasi ini. Jika kerangka kerja Anda memuat setiap batch dari memori utama ke dalam GPU tanpa menambah efisiensi / kompleksitas pemuatan asinkron (yang dapat ditangani sendiri oleh GPU), maka ini akan menjadi hasil yang diharapkan.

davidparks21
sumber
Itu juga kecurigaan saya, apakah Anda tahu cara memantau penggunaan bus PCI Express di Linux dengan CLI ?
Franck Dernoncourt
Saya tidak bisa mengatakan saya pernah mempertimbangkan untuk mencoba memonitor itu, tetapi Anda membuat saya penasaran sekarang.
davidparks21
Saya selalu mendapatkan sekitar 90% dengan keras juga. Saya belum pernah memeriksa kode sumbernya, tetapi saya akan mengharapkan kerangka kerja seperti itu untuk memberi makan batch ke GPU secara paralel (setidaknya secara opsional jika Anda mampu membeli memori .. mengapa tidak?).
stmax
1
Keras adalah pembungkus di sekitar Tensorflow atau Theano. Saya hanya punya pengalaman di Tensorflow, jadi berbicara dari perspektif itu proses yang diperlukan untuk mengaktifkan pemuatan data asinkron mengharuskan Anda melakukan pra-proses data ke dalam format biner spesifik Tensorflow. Saya akan berasumsi bahwa Theano memiliki cara yang setara untuk melakukan ini. Sebagian besar model mungkin mulai dengan memuat memori per-batch (membuatnya bekerja sebelum mengoptimalkan kecepatan). Dan karena piagam Keras adalah "tetap sederhana", itu mungkin tidak terduga bahwa mereka akan mengambil pendekatan yang lebih langsung / sederhana untuk hanya kehilangan efisiensi ~ 10%.
davidparks21