GPU memangkas waktu pelatihan model dari hitungan hari menjadi hitungan jam, sehingga hampir semua proyek deep learning serius berakhir di GPU. Meski demikian, GPU tidak bekerja begitu saja setelah dipasang ke papan induk: di atasnya berdiri tumpukan perangkat lunak — driver, CUDA, dan cuDNN — yang semuanya harus saling mengenal. Kegagalan yang paling sering terjadi justru tidak tampak seperti kegagalan: program berjalan tanpa pesan galat, tetapi seluruh komputasi tetap berlangsung di CPU sehingga pelatihan terasa lambat. Chapter ini membedah tumpukan CUDA, lalu menunjukkan cara memeriksa GPU dari PyTorch dan TensorFlow. Seluruh contoh diuji nyata pada mesin CPU sehingga kita juga melihat seperti apa keluaran yang jujur saat GPU tidak tersedia.
Tumpukan Perangkat Lunak di Atas GPU #
Komputasi deep learning di GPU NVIDIA melewati empat lapisan perangkat lunak sebelum menyentuh perangkat fisik. Diagram berikut memperlihatkan urutannya dari kode kita sampai GPU:
Peran setiap lapisan adalah sebagai berikut:
- Driver NVIDIA — perangkat lunak sistem yang membuat GPU dapat diakses oleh sistem operasi; satu-satunya lapisan yang wajib terpasang terpisah.
- CUDA Toolkit — platform komputasi paralel dari NVIDIA; berisi runtime, pustaka, dan compiler
nvccuntuk menulis kode yang berjalan di GPU. - cuDNN — pustaka primitif deep learning (convolution, activation, pooling) yang dibangun di atas CUDA dan dipakai framework untuk mempercepat operasi inti.
- Framework — PyTorch dan TensorFlow memanggil cuDNN dan runtime CUDA untuk menjalankan tensor di GPU.
Memeriksa Ketersediaan GPU #
Kedua framework menyediakan fungsi pemeriksaan yang hasilnya langsung menjelaskan situasi perangkat. Tabel berikut merangkum tiga pemeriksaan utama beserta keluaran nyata dari mesin uji Course (CPU saja):
| Pemeriksaan | Framework | Hasil di mesin CPU | Arti |
|---|---|---|---|
torch.cuda.is_available() | PyTorch | False | wheel tanpa CUDA atau GPU tidak ditemukan |
torch.cuda.device_count() | PyTorch | 0 | tidak ada GPU yang dikenali driver |
tf.config.list_physical_devices("GPU") | TensorFlow | [] | tidak ada GPU yang dikenali driver |
Pemeriksaan ini penting dijalankan setiap kali lingkungan berubah — setelah memasang wheel baru, memperbarui driver, atau membuka sesi di komputer lain — karena hasilnya menentukan apakah pelatihan akan berjalan di GPU atau CPU.
Pola Kode yang Berlaku di CPU dan GPU #
Menulis kode yang hanya berjalan di GPU membuat program gagal di mesin tanpa GPU. Pola yang benar adalah memilih perangkat secara dinamis berdasarkan hasil pemeriksaan. Skrip PyTorch berikut menerapkan pola tersebut:
import torch
print("CUDA tersedia :", torch.cuda.is_available())
print("Jumlah GPU :", torch.cuda.device_count())
perangkat = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print("Perangkat terpilih :", perangkat)
tensor = torch.tensor([[1.0, 2.0], [3.0, 4.0]], device=perangkat)
print("Tensor berada di :", tensor.device)
print("Hasil perkalian matriks:")
print(tensor @ tensor)Output yang Dihasilkan:
CUDA tersedia : False
Jumlah GPU : 0
Perangkat terpilih : cpu
Tensor berada di : cpu
Hasil perkalian matriks:
tensor([[ 7., 10.],
[15., 22.]])Mari kita telaah kode di atas baris per baris:
- Baris 3-4 (
torch.cuda.is_available()dandevice_count()): dua pemeriksaan dari tabel sebelumnya dijalankan langsung agar situasi perangkat tercetak jelas. - Baris 6 (
torch.device("cuda" if ... else "cpu")): inti pola device-agnostic. Mesin ber-GPU memilih"cuda", mesin CPU otomatis jatuh ke"cpu"tanpa mengubah satu baris kode pun. - Baris 9 (
torch.tensor(..., device=perangkat)): tensor langsung dibuat di perangkat terpilih. Alternatifnya, tensor yang sudah ada dapat dipindahkan dengantensor.to(perangkat). - Baris 10-12 (
tensor.devicedantensor @ tensor): atributdevicemembuktikan lokasi penyimpanan tensor, sedangkan operator@menghitung perkalian matriks di perangkat tersebut. Pada mesin GPU, keluaran yang tampil adalahcuda:0, bukancpu.
Pemeriksaan setara di TensorFlow tampak seperti berikut:
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2"
import tensorflow as tf
print("Versi TensorFlow :", tf.__version__)
gpu = tf.config.list_physical_devices("GPU")
cpu = tf.config.list_physical_devices("CPU")
print("Jumlah GPU terdeteksi :", len(gpu))
print("Jumlah CPU terdeteksi :", len(cpu))
print("Perangkat CPU pertama :", cpu[0])Output yang Dihasilkan:
Versi TensorFlow : 2.21.0
Jumlah GPU terdeteksi : 0
Jumlah CPU terdeteksi : 1
Perangkat CPU pertama : PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU')Alur skrip TensorFlow ini: setelah log diredam (baris 1-3, sesuai Chapter Instalasi TensorFlow), fungsi list_physical_devices dipanggil dua kali — sekali untuk GPU dan sekali untuk CPU — lalu hasilnya dihitung dengan len() dan perangkat CPU pertama ditampilkan. TensorFlow memetakan penempatan operasi ke perangkat secara otomatis, jadi cukup memastikan GPU muncul dalam daftar; tidak ada pemindahan tensor manual seperti to(device) di PyTorch.
Praktik Umum Konfigurasi GPU #
Urutan penyiapan yang sehat di komputer GPU NVIDIA adalah sebagai berikut:
- Pasang driver NVIDIA terbaru dari situs resmi NVIDIA, lalu nyalakan ulang komputer.
- Pasang wheel framework sesuai panduan resmi — index CUDA PyTorch atau
pip install tensorflowversi GPU. - Jalankan skrip pemeriksaan dari Chapter ini dan pastikan hasilnya sesuai harapan sebelum mulai pelatihan panjang.
- Selama pelatihan, pantau pemakaian memori GPU dengan perintah
nvidia-smi— pada mesin tanpa GPU, perintah tersebut tidak tersedia, sehingga pantau proses Python biasa sebagai gantinya.
Ringkasan #
Pada Chapter ini kita membedah tumpukan driver, CUDA Toolkit, dan cuDNN yang menghubungkan framework dengan GPU, kemudian menjalankan pemeriksaan nyata di dua framework: torch.cuda.is_available() dan tf.config.list_physical_devices("GPU"). Pola pemilihan perangkat dinamis memastikan kode yang sama berjalan di CPU hari ini dan di GPU besok tanpa perombakan. Dengan framework terpasang dan perangkat terverifikasi, satu disiplin terakhir yang menentukan keberhasilan jangka panjang adalah mengelola daftar dependensi secara sadar — topik Chapter penutup section ini.