Ilmu Data

Pemrograman GPU dengan Python

Pemrograman GPU dengan Python

Pada artikel ini, kita akan menyelami pemrograman GPU dengan Python. Menggunakan kemudahan Python, Anda dapat membuka kekuatan komputasi yang luar biasa dari GPU kartu video Anda (unit pemrosesan grafis). Dalam contoh ini, kami akan bekerja dengan perpustakaan CUDA NVIDIA.

Persyaratan

Untuk latihan ini, Anda memerlukan mesin fisik dengan Linux dan GPU berbasis NVIDIA, atau meluncurkan instans berbasis GPU di Amazon Web Services. Keduanya harus berfungsi dengan baik, tetapi jika Anda memilih untuk menggunakan mesin fisik, Anda harus memastikan bahwa Anda telah menginstal driver berpemilik NVIDIA, lihat instruksi: https://linuxhint.com/install-nvidia-drivers-linux

Anda juga perlu menginstal CUDA Toolkit. Contoh ini menggunakan Ubuntu 16.04 LTS secara khusus, tetapi ada unduhan yang tersedia untuk sebagian besar distribusi Linux utama di URL berikut: https://developer.nvidia.com/cuda-downloads

Saya lebih suka .unduhan berbasis deb, dan contoh-contoh ini akan menganggap Anda memilih rute itu. File yang Anda unduh adalah .paket deb tetapi tidak memiliki .ekstensi deb, jadi ganti namanya menjadi a .deb pada akhirnya membantu. Kemudian Anda menginstalnya dengan:

sudo dpkg -i nama paket.deb

Jika Anda diminta untuk menginstal kunci GPG, ikuti petunjuk yang diberikan untuk melakukannya.

Sekarang Anda harus menginstal paket cuda itu sendiri. Untuk melakukannya, jalankan:

sudo apt-get update sudo apt-get install cuda -y 

Bagian ini bisa memakan waktu cukup lama, jadi Anda mungkin ingin minum secangkir kopi. Setelah selesai, saya sarankan untuk me-reboot untuk memastikan semua modul dimuat ulang dengan benar.

Selanjutnya, Anda memerlukan distribusi Anaconda Python. Anda dapat mengunduhnya di sini:  https://www.anakonda.com/download/#linux

Ambil versi 64-bit dan instal seperti ini:

sh Anaconda*.SH

(bintang pada perintah di atas akan memastikan bahwa perintah dijalankan terlepas dari versi minornya)

Lokasi pemasangan default seharusnya baik-baik saja, dan dalam tutorial ini, kami akan menggunakannya. Secara default, ia menginstal ke ~/anaconda3

Di akhir penginstalan, Anda akan diminta untuk memutuskan apakah Anda ingin menambahkan Anaconda ke jalur Anda. Jawab ya di sini untuk mempermudah menjalankan perintah yang diperlukan. Untuk memastikan perubahan ini terjadi, setelah penginstal selesai sepenuhnya, logout lalu login kembali ke akun Anda.

Info lebih lanjut tentang Menginstal Anaconda: https://linuxhint.com/install-anaconda-python-on-ubuntu/

Akhirnya kita harus menginstal Numba. Numba menggunakan kompiler LLVM untuk mengkompilasi Python ke kode mesin. Ini tidak hanya meningkatkan kinerja kode Python biasa tetapi juga menyediakan lem yang diperlukan untuk mengirim instruksi ke GPU dalam bentuk biner. Untuk melakukan ini, jalankan:

conda install numba

Keterbatasan dan Manfaat Pemrograman GPU

Sangat menggoda untuk berpikir bahwa kita dapat mengonversi program Python apa pun menjadi program berbasis GPU, yang secara dramatis mempercepat kinerjanya. Namun, GPU pada kartu video bekerja sangat berbeda dari CPU standar di komputer.

CPU menangani banyak input dan output yang berbeda dan memiliki berbagai macam instruksi untuk menangani situasi ini. Mereka juga bertanggung jawab untuk mengakses memori, menangani bus sistem, menangani cincin perlindungan, segmentasi, dan fungsionalitas input/output. Mereka adalah multitasker ekstrim tanpa fokus khusus.

GPU di sisi lain dibangun untuk memproses fungsi sederhana dengan kecepatan yang sangat cepat. Untuk mencapai ini, mereka mengharapkan keadaan input dan output yang lebih seragam uniform. Dengan mengkhususkan diri dalam fungsi skalar. Fungsi skalar mengambil satu atau lebih input tetapi hanya mengembalikan satu output. Nilai-nilai ini harus tipe yang telah ditentukan sebelumnya oleh numpy.

Contoh Kode

Dalam contoh ini, kita akan membuat fungsi sederhana yang mengambil daftar nilai, menambahkannya bersama-sama, dan mengembalikan jumlah. Untuk mendemonstrasikan kekuatan GPU, kami akan menjalankan salah satu fungsi ini di CPU dan satu lagi di GPU dan menampilkan waktu. Kode yang didokumentasikan di bawah ini:

import numpy as np from timeit import default_timer as timer from numba import vectorize # Ini seharusnya merupakan nilai yang sangat tinggi. Di mesin uji saya, ini membutuhkan #33 detik untuk dijalankan melalui CPU dan lebih dari 3 detik di GPU. NUM_ELEMENTS = 100000000 # Ini adalah versi CPU. def vector_add_cpu(a, b): c = np.nol(NUM_ELEMENTS, dtype=np.float32) for i in range(NUM_ELEMENTS): c[i] = a[i] + b[i] return c # Ini adalah versi GPU. Perhatikan dekorator @vectorize. Ini memberitahu # numba untuk mengubahnya menjadi fungsi vektor GPU. @vectorize(["float32(float32, float32)"], target="cuda") def vector_add_gpu(a, b): return a + b; def main(): a_source = np.satu(NUM_ELEMENTS, dtype=np.float32) b_source = np.satu(NUM_ELEMENTS, dtype=np.float32) # Waktu fungsi CPU mulai = timer() vector_add_cpu(a_source, b_source) vector_add_cpu_time = timer() - start # Waktu fungsi GPU mulai = timer() vector_add_gpu(a_source, b_source) vector_add_gpu_time = timer() - start # Laporkan times print("Fungsi CPU membutuhkan %f detik." % vector_add_cpu_time) print("Fungsi GPU membutuhkan waktu %f detik." % vector_add_gpu_time) mengembalikan 0 jika __name__ == "__main__": main() 

Untuk menjalankan contoh, ketik:

python gpu-contoh.py

CATATAN: Jika Anda mengalami masalah saat menjalankan program Anda, coba gunakan "conda install mempercepat".

Seperti yang Anda lihat, versi CPU berjalan jauh lebih lambat.

Jika tidak, maka iterasi Anda terlalu kecil. Sesuaikan NUM_ELEMENTS ke nilai yang lebih besar (pada milik saya, titik impas tampaknya sekitar 100 juta). Ini karena penyiapan GPU membutuhkan waktu yang sedikit namun nyata, jadi untuk membuat operasi itu sepadan, diperlukan beban kerja yang lebih tinggi. Setelah Anda menaikkannya di atas ambang batas untuk mesin Anda, Anda akan melihat peningkatan kinerja yang substansial dari versi GPU dibandingkan versi CPU.

Kesimpulan

Saya harap Anda menikmati pengenalan dasar kami tentang Pemrograman GPU dengan Python. Meskipun contoh di atas sepele, ini menyediakan kerangka kerja yang Anda butuhkan untuk mengambil ide Anda lebih jauh dengan memanfaatkan kekuatan GPU Anda.

Game Terbaik untuk Dimainkan dengan Pelacakan Tangan
Oculus Quest baru-baru ini memperkenalkan ide hebat pelacakan tangan tanpa pengontrol. Dengan jumlah permainan dan aktivitas yang terus meningkat yang...
Cara Menampilkan Overlay OSD di Aplikasi dan Game Linux Layar Penuh
Memainkan game layar penuh atau menggunakan aplikasi dalam mode layar penuh bebas gangguan dapat memutus Anda dari informasi sistem yang relevan yang ...
5 Kartu Tangkap Game Teratas
Kita semua telah melihat dan menyukai gameplay streaming di YouTube. PewDiePie, Jakesepticye, dan Markiplier hanyalah beberapa pemain top yang telah m...