Saya telah melihat beberapa paket dari Tinggi Perf tugas tampilan berurusan dengan perhitungan GPU, dan mengingat bahwa sebagian besar GPU tampaknya menjadi urutan besarnya lebih kuat dalam melakukan presisi aritmatika tunggal dari DP yang , saya bertanya-tanya:
- Mengapa tidak ada paket yang memberikan lebih banyak kontrol kepada pengguna pada jenis presisi yang dibutuhkan? Saya dapat melihat banyak aplikasi dalam statistik di mana aritmatika SP (yaitu angka berkode dengan 7 digit akurasi) cukup baik untuk penggunaan praktis (jika saya melebih-lebihkan keuntungan yang terlibat, beri tahu saya).
- Apakah python lebih fleksibel dalam hal ini? Jika demikian mengapa? Saya tidak melihat mengapa tidak adanya tipe 'tunggal' dalam R akan membuat menyertakan opsi seperti itu (bersama dengan peringatan) di katakanlah GPUtools atau magma tidak mungkin (meskipun saya akan senang ditampilkan salah).
NB: Saya secara khusus memikirkan aplikasi-aplikasi karena angkanya sudah berdasarkan dimensi dan terpusat (sehingga ketidaksetaraan Chebychev mengikat) berdasarkan dimensi.
Jawaban:
Dari file bantuan GPUtools , tampaknya itu
useSingle=TRUE
adalah fungsi default.sumber
sumber
Saya kira dengan pemrograman GPU, maksud Anda pemrograman kartu nvidia? Dalam hal ini panggilan kode yang mendasarinya dari R dan python adalah ke C / CUDA .
Alasan sederhana bahwa hanya presisi tunggal yang ditawarkan adalah karena itulah yang didukung oleh sebagian besar kartu GPU.
Namun, arsitektur nvidia Fermi yang baru mendukung ketepatan ganda. Jika Anda membeli kartu grafis nvidia tahun ini, maka itu mungkin Fermi. Bahkan di sini segalanya tidak sederhana:
Untuk menjawab pertanyaan dalam judul Anda, "Apakah presisi tunggal OK?", Itu tergantung pada aplikasi Anda (maaf omong kosong jawaban!). Saya kira semua orang sekarang menggunakan presisi ganda karena tidak lagi memberikan kinerja yang baik.
Ketika saya mencoba-coba GPU, pemrograman tiba-tiba menjadi jauh lebih rumit. Anda harus khawatir tentang hal-hal seperti:
sumber
useSingle=TRUE
adalah fungsi default. Apakah saya melewatkan sesuatu di sini?Sebagian besar GPU yang beredar hanya mendukung floating point presisi tunggal.
Sejauh pertanyaan judul, Anda perlu melihat data yang akan Anda tangani untuk menentukan apakah presisi tunggal cukup untuk Anda. Seringkali, Anda akan menemukan bahwa lajang dapat diterima dengan baik untuk> 90% dari data yang Anda tangani, tetapi akan gagal secara spektakuler untuk 10% terakhir; kecuali Anda memiliki cara mudah untuk menentukan apakah kumpulan data Anda akan gagal atau tidak, Anda terjebak menggunakan presisi ganda untuk semuanya.
sumber
OK, jawaban baru untuk pertanyaan lama tetapi bahkan lebih relevan sekarang. Pertanyaan yang Anda ajukan berkaitan dengan ketepatan terbatas, biasanya bidang analisis sinyal dan matematika eksperimental.
Double precision (DP) float, mari kita berpura-pura bahwa masalah presisi hingga tidak ada, sama seperti yang kita lakukan pada kebanyakan masalah matematika dunia nyata. Dalam matematika eksperimental tidak ada yang pura-pura.
Pelampung presisi tunggal (SP) memaksa kita untuk mempertimbangkan derau kuantisasi. Jika model pembelajaran mesin kami secara inheren menolak kebisingan, seperti jaring saraf (NN), jaring konvolusional (CNN), jaring residual (ResN), dll, maka SP paling sering memberikan hasil yang mirip dengan DP.
Float setengah presisi (HP) (sekarang didukung dalam cuda toolkit 7.5) mensyaratkan agar efek kuantisasi (kebisingan dan pembulatan) dipertimbangkan. Kemungkinan besar kita akan segera melihat HP mengapung di toolkit pembelajaran mesin umum.
Ada pekerjaan baru-baru ini untuk membuat perhitungan presisi yang lebih rendah di float serta angka presisi tetap. Pembulatan stokastik telah memungkinkan konvergensi untuk melanjutkan dengan CNN sedangkan solusinya berbeda tanpa itu. Makalah ini akan membantu Anda meningkatkan pemahaman Anda tentang masalah dengan penggunaan angka presisi hingga dalam pembelajaran mesin.
Untuk menjawab pertanyaan Anda:
SP tidak terlalu buruk. Saat Anda menunjukkannya dua kali lebih cepat, tetapi juga memungkinkan Anda untuk menempatkan lebih banyak lapisan ke dalam memori. Bonus ada dalam menghemat overhead mendapatkan data dan mematikan GPU. Komputasi yang lebih cepat dan overhead yang lebih rendah menghasilkan waktu konvergensi yang lebih rendah. Konon, HP, untuk beberapa masalah, akan lebih baik di beberapa bagian jaringan dan tidak di yang lain.
Perhatikan bahwa tren dalam jaringan saraf sekarang adalah untuk pergi dengan lapisan yang sangat dalam, dengan berjalan lebih dari beberapa hari umum pada kelompok GPU tercepat.
sumber