Apa itu CPU
CPU (Central Processing Unit) seperti otak komputer, memproses perangkat lunak dan perangkat keras seperti mouse dan keyboard untuk membuatnya bekerja seperti yang diharapkan. CPU memiliki komponen standar berikut ini
- Unit Komputasi
Melakukan operasi aritmatika dan logika pada data yang disimpan dalam memori utama. - Unit kontrol
Membaca program yang tersimpan dalam memori utama dan mengeksekusi berbagai proses dengan mendekode instruksi dengan decoder. - Jam
Indikator kecepatan sinyal yang dipancarkan oleh CPU saat memproses - Register
Area memori penyimpanan di dalam CPU
Komponen-komponen ini bekerja sama untuk menciptakan lingkungan yang memungkinkan pemrosesan paralel tugas berkecepatan tinggi: saat clock CPU digerakkan, CPU beralih di antara ratusan tugas yang berbeda per detik dengan kecepatan tinggi. Hal ini memungkinkan operasi simultan seperti menampilkan desktop atau menghubungkan ke Internet.
CPU juga memiliki konsep "core". Saat ini, karena kecepatan clock mencapai batasnya, CPU yang disebutkan di atas disebut sebagai "core", dan telah menjadi arus utama untuk memiliki banyak core untuk melakukan banyak proses secara paralel. Beberapa core seperti memiliki beberapa CPU yang dibangun ke dalam satu CPU.
Apa itu GPU
GPU (Graphics Processing Unit) adalah prosesor khusus dengan daya komputasi matematika yang ditingkatkan, cocok untuk tugas-tugas seperti grafik komputer dan pembelajaran mesin. Misalnya, penggambaran gambar membutuhkan matematika yang kompleks untuk dirender dan komputasi paralel agar matematika kompleks tersebut bekerja dengan benar. CPU tidak dibuat untuk menangani beban tersebut. GPU, seperti CPU, memiliki core dan memori, tetapi GPU mengkhususkan diri dalam pemrosesan data paralel dengan banyak core dan digunakan dalam domain grafis. GPU juga memiliki kinerja pemrosesan paralel yang lebih baik daripada CPU dan lebih baik dalam operasi matriks, itulah sebabnya GPU sering digunakan dalam domain pembelajaran mendalam.
Perbedaan antara CPU dan GPU
Berikut ini adalah perbedaan antara CPU dan GPU dalam hal jumlah core dan bidang keahlian.
CPU | GPU | |
---|---|---|
Jumlah core | Beberapa | Ribuan |
Bidang keahlian | Pemrosesan komputasi yang berurutan dan kompleks | Pemrosesan paralel |
Jumlah core
Core adalah tempat pemrosesan komputasi komputer berlangsung, dan semakin banyak core, semakin besar jumlah pemrosesan yang dapat dilakukan sekaligus.
Bidang keahlian
CPU bagus dalam memproses tugas-tugas yang berkelanjutan dan kompleks. Misalnya, CPU pandai melakukan operasi berdasarkan instruksi program dan menjalankan instruksi tersebut sambil mengendalikan memori, layar, mouse, keyboard, dll. CPU bagus dalam memproses tugas-tugas yang berurutan dan kompleks. Instruksi tersebut harus diproses secara berurutan, dan lebih banyak core tidak selalu berarti pemrosesan yang lebih cepat. Sebaliknya, GPU bagus dalam memproses tugas-tugas sederhana. Misalnya, pemrosesan gambar seperti grafik 3D membutuhkan sejumlah besar perhitungan sederhana, membuat GPU cocok untuk tugas ini.
Perbandingan Kinerja
Berikut ini adalah kode yang dipelajari oleh neural network untuk 1563 gambar. Kita akan menjalankan kode ini pada CPU dan GPU di lingkungan Google Colab dan membandingkan kinerjanya.
import numpy as np
import matplotlib.pyplot as plt
import keras
from keras.datasets import cifar10
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.optimizers import Adam
(x_train, t_train), (x_test, t_test) = cifar10.load_data()
batch_size = 32
epochs = 1
n_class = 10
t_train = keras.utils.to_categorical(t_train, n_class)
t_test = keras.utils.to_categorical(t_test, n_class)
model = Sequential()
model.add(Conv2D(32, (3, 3), padding='same', input_shape=x_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(n_class))
model.add(Activation('softmax'))
model.compile(optimizer=Adam(), loss='categorical_crossentropy', metrics=['accuracy'])
x_train = x_train / 255
x_test = x_test / 255
model.fit(x_train, t_train, epochs=epochs, batch_size=batch_size, validation_data=(x_test, t_test))
Langkah pertama adalah menjalankannya pada CPU, yang menghasilkan hasil 255 detik.
1563/1563 [==============================] - 255s 163ms/step - loss: 1.4949 - accuracy: 0.4569 - val_loss: 1.0942 - val_accuracy: 0.6151
Selanjutnya, kita menjalankannya di GPU. Hasilnya adalah 9 detik.
1563/1563 [==============================] - 9s 5ms/step - loss: 1.5829 - accuracy: 0.4223 - val_loss: 1.2229 - val_accuracy: 0.5606
Dengan demikian, pilihan GPU dapat sangat mengurangi waktu pembelajaran.
Referensi