Saya telah melihat diskusi tentang 'overhead' GPU, dan untuk jaringan 'kecil', mungkin sebenarnya lebih cepat untuk berlatih menggunakan CPU (atau jaringan CPU) daripada GPU.
Apa yang dimaksud dengan 'kecil'?
Misalnya, apakah MLP satu-lapis dengan 100 unit tersembunyi akan 'kecil'?
Apakah definisi kami tentang 'kecil' berubah untuk arsitektur berulang?
Apakah ada kriteria lain yang harus dipertimbangkan ketika memutuskan apakah akan berlatih pada CPU atau GPU?
EDIT 1:
Saya baru saja menemukan posting blog (mungkin kedaluwarsa? Ini dari 2014):
"... Sebagian besar kartu jaringan hanya bekerja dengan memori yang terdaftar pada CPU dan dengan demikian transfer GPU ke GPU antara dua node akan seperti ini: GPU 1 ke CPU 1 ke Kartu Jaringan 1 ke Kartu Jaringan 2 ke CPU 2 hingga GPU 2. Artinya, jika seseorang memilih kartu jaringan yang lambat maka mungkin tidak ada speedup di satu komputer. Bahkan dengan kartu jaringan yang cepat, jika cluster besar, seseorang bahkan tidak mendapatkan speedup dari GPU jika dibandingkan ke CPU karena GPU hanya bekerja terlalu cepat untuk kartu jaringan untuk mengikutinya.
Ini adalah alasan mengapa banyak perusahaan besar seperti Google dan Microsoft menggunakan CPU daripada cluster GPU untuk melatih jaringan saraf besar mereka. "
Jadi pada titik tertentu, menurut posting ini, bisa lebih cepat menggunakan CPU. Apakah ini masih terjadi?
EDIT 2: Ya, posting blog itu mungkin sudah usang karena:
Sekarang tampaknya GPU dalam sebuah node terhubung melalui PCIe bus, sehingga komunikasi dapat terjadi pada sekitar 6GiB / s. (Misalnya: https://www.youtube.com/watch?v=el1iSlP1uOs , sekitar 35 menit dalam). Pembicara menyiratkan bahwa ini lebih cepat daripada pergi dari GPU1 ke CPU ke GPU2. Itu berarti kartu jaringan tidak lagi menjadi hambatan.
sumber
Jawaban:
Tidak seperti beberapa jawaban lain, saya akan sangat menyarankan agar tidak selalu berlatih GPU tanpa berpikir panjang. Ini didorong oleh penggunaan metode pembelajaran mendalam pada gambar dan teks, di mana data sangat kaya (misalnya banyak piksel = banyak variabel) dan model yang sama memiliki jutaan parameter. Untuk domain lain, ini mungkin bukan masalahnya.
Ya, itu pasti sangat kecil menurut standar modern. Kecuali Anda memiliki GPU yang sangat cocok untuk pelatihan (mis. NVIDIA 1080 atau NVIDIA Titan), saya tidak akan terkejut mendapati bahwa CPU Anda lebih cepat.
Perhatikan bahwa kompleksitas jaringan saraf Anda juga tergantung pada jumlah fitur input Anda, bukan hanya jumlah unit di lapisan tersembunyi Anda. Jika lapisan tersembunyi Anda memiliki 100 unit dan setiap pengamatan dalam dataset Anda memiliki 4 fitur input, maka jaringan Anda kecil (~ 400 parameter). Jika setiap observasi memiliki fitur input 1M seperti dalam beberapa konteks medis / biotek, maka jaringan Anda cukup besar dalam hal jumlah parameter. Untuk sisa jawaban saya, saya berasumsi Anda memiliki beberapa fitur input pr. pengamatan.
Satu contoh bagus yang saya temukan untuk membandingkan kinerja CPU vs GPU adalah ketika saya melatih bot poker menggunakan pembelajaran penguatan. Untuk pembelajaran penguatan Anda sering tidak ingin banyak lapisan dalam jaringan saraf Anda dan kami menemukan bahwa kami hanya membutuhkan beberapa lapisan dengan beberapa parameter. Apalagi jumlah fitur inputnya cukup rendah. Awalnya saya berlatih menggunakan GPU (NVIDIA Titan), tetapi butuh waktu lama karena pembelajaran penguatan membutuhkan banyak iterasi. Untungnya, saya menemukan bahwa pelatihan pada CPU saya malah membuat pelatihan saya menjadi 10x lebih cepat! Ini hanya untuk mengatakan bahwa CPU terkadang lebih baik untuk pelatihan.
Penting untuk dicatat bahwa pada GPU Anda selalu ingin mengisi seluruh memori GPU dengan meningkatkan ukuran batch Anda, itu tidak terjadi pada CPU. Pada CPU peningkatan ukuran batch akan meningkatkan waktu pr. batch Karena itu, jika penting bagi Anda untuk memiliki ukuran bets yang sangat besar (misalnya karena sinyal yang sangat bising), dapat bermanfaat untuk menggunakan GPU. Saya belum mengalami ini dalam prakteknya dan biasanya ukuran batch kecil lebih disukai.
sumber
CPU adalah manajer cabang, ia dapat melakukan sedikit dari segalanya, tetapi ia tidak hebat dalam banyak hal kecuali mendelegasikan tugas. Namun, GPU adalah ahli matematika khusus yang bersembunyi di mesin Anda. Jika Anda melakukan proses matematika yang berat maka Anda harus menggunakan GPU Anda. Selalu.
Jika Anda menggunakan bahasa pemrograman populer untuk pembelajaran mesin seperti python atau MATLAB, itu adalah kode satu baris untuk memberi tahu komputer Anda bahwa Anda ingin operasi dijalankan pada GPU Anda.
Anda juga harus memastikan untuk menggunakan semua inti mesin Anda. Ini berarti memanfaatkan komputasi paralel. Khusus untuk jaringan saraf di mana operasi dapat dilakukan secara independen, ini akan meningkatkan kecepatan Anda.
sumber
Pertama saya akan referensi beberapa kutipan dari pertanyaan serupa:
Jadi jika Anda membaca pertanyaan-pertanyaan ini, Anda akan melihat bahwa mereka menyarankan untuk menggunakan GPU terlepas dari kasusnya; itu akan selalu memberikan beberapa perbaikan.
Alasan Anda mungkin telah membaca bahwa jaringan 'kecil' harus dilatih dengan CPU, adalah karena menerapkan pelatihan GPU hanya untuk jaringan kecil mungkin membutuhkan waktu lebih lama daripada hanya pelatihan dengan CPU - itu tidak berarti GPU akan lebih lambat.
Jaringan unit 100-tersembunyi agak kecil , saya akan menyebutnya jaringan kecil relatif terhadap jaringan besar dalam di luar sana. Arsitektur berulang (kebanyakan) memiliki lebih banyak sinapsis dari jaringan umpan maju, sehingga unit 100-tersembunyi RNN 'lebih besar' daripada unit FFN 100-tersembunyi.
sumber