Apa keuntungan menjaga ukuran bets menjadi kekuatan 2?

15

Sementara melatih model dalam pembelajaran mesin, mengapa kadang-kadang menguntungkan untuk menjaga ukuran bets menjadi kekuatan 2? Saya pikir akan lebih baik menggunakan ukuran yang paling pas di memori GPU / RAM Anda.

Jawaban ini mengklaim bahwa untuk beberapa paket, kekuatan 2 lebih baik sebagai ukuran batch. Dapatkah seseorang memberikan penjelasan terperinci / tautan ke penjelasan terperinci untuk ini? Apakah ini berlaku untuk semua algoritme pengoptimalan (gradient descent, backpropagation, dll) atau hanya sebagian saja?

James Bond
sumber

Jawaban:

19

Ini adalah masalah penyelarasan prosesor virtual (VP) ke prosesor fisik (PP) GPU. Karena jumlah PP sering kekuatan 2, menggunakan sejumlah VP berbeda dari kekuatan 2 mengarah pada kinerja yang buruk.
Anda dapat melihat pemetaan VP ke PP sebagai tumpukan irisan ukuran jumlah PP .
Katakanlah Anda sudah mendapatkan 16 PP.
Anda dapat memetakan 16 VP pada mereka: 1 VP dipetakan ke 1 PP.
Anda dapat memetakan 32 VP pada mereka: 2 iris 16 VP, 1 PP akan bertanggung jawab untuk 2 VP.
Dll. Selama eksekusi, masing-masing PP akan melaksanakan pekerjaan Wakil Presiden pertama yang bertanggung jawab, lalu pekerjaan wakil presiden ke-2, dll.
Jika Anda menggunakan 17 VP, setiap PP akan melaksanakan tugas PP 1 mereka, maka 1 PP akan melaksanakan pekerjaan ke-17 DANyang lain tidak akan melakukan apa pun (dijelaskan di bawah).
Ini disebabkan oleh paradigma SIMD (disebut vektor di tahun 70-an) yang digunakan oleh GPU. Ini sering disebut Paralelisme Data: semua PP melakukan hal yang sama pada saat yang sama tetapi pada data yang berbeda. Lihat https://en.wikipedia.org/wiki/SIMD .
Lebih tepatnya, dalam contoh dengan 17 VP, setelah pekerjaan slice 1 dilakukan (oleh semua PP melakukan pekerjaan VP 1 mereka), semua PP akan melakukan pekerjaan yang sama (VP 2), tetapi hanya satu yang memiliki beberapa data untuk dikerjakan .
Tidak ada hubungannya dengan belajar. Ini hanya hal-hal pemrograman.

jcm69
sumber
apakah akan lebih akurat untuk mengatakan bahwa ukuran batch kemudian harus menjadi kelipatan dari jumlah PP? Yaitu, dalam contoh Anda, kami dapat memetakan 16x3 = 48 VP ke 16 PP?
Laut
Iya. baik ... Jika Anda melakukan pemetaan VP -> PP, Anda sendiri, yakin Anda 100% benar. Jika Anda menggunakan perpustakaan, dan minta 80 VP. Saya tidak yakin. Saya tidak mengatakan Anda salah. Jika rasionya adalah kekuatan 2, Anda dapat menggunakan optimisasi yang sangat klasik dan mudah. ​​Pikirkan akses memori. Jika # tetangga tingkat atas dari VP bukan kekuatan 2, katakanlah 5, lib tidak akan dapat menggunakan akses O (log_2 (n)) klasik dengan mudah.
jcm69
@ jcm69 dapatkah Anda menjelaskan atau memberikan tautan untuk waktu akses log_2 (n) untuk akses memori VP
Arayan Singh
Itu hanya pertimbangan umum tentang penanganan objek dalam ilmu komputer. Ketika Anda yakin bahwa objek mengikuti kekuatan 2 aturan, mereka dapat dengan mudah dan aman dikelola oleh pohon pencarian biner, shift biner dll. Ketika Anda tidak yakin, Anda mungkin harus melakukan beberapa tes tambahan dan algo yang lebih rumit. Bagaimanapun, itu agak jauh dari pertanyaan awal;)
jcm69