Backend Deep Learning dengan MPS GPU Apple M1

By | December 21, 2023
Print Friendly, PDF & Email
389 Views

GPU acceleration on Apple’s M1 chips – Yup, Pelatihan GPU yang dipercepat diaktifkan dengan menggunakan Metal Performance Shaders (MPS) dari Apple sebagai backend untuk PyTorch. Backend MPS memperluas kerangka kerja PyTorch, menyediakan skrip dan kemampuan untuk mengatur dan menjalankan operasi di Mac. MPS mengoptimalkan kinerja komputasi dengan kernel yang disesuaikan secara detail untuk karakteristik unik dari setiap keluarga GPU Metal. Perangkat baru memetakan grafik komputasi dan primitif pembelajaran mesin pada kerangka kerja MPS Graph dan kernel yang disesuaikan yang disediakan oleh MPS.

Dengan kemajuan teknologi semakin pesat, para pengembang dan peneliti di dunia kecerdasan buatan terus berusaha meningkatkan kinerja algoritma pembelajaran mesin. Salah satu langkah besar dalam hal ini adalah pemanfaatan GPU untuk melatih model dengan lebih cepat. Baru-baru ini, PyTorch memperkenalkan dukungan untuk GPU M1 dengan backend Metal Performance Shaders (MPS), membawa perubahan signifikan dalam kecepatan dan efisiensi.

PyTorch, salah satu kerangka kerja pembelajaran mesin terkemuka, telah menjadi pilihan utama para peneliti dan pengembang. Dengan mengintegrasikan dukungan untuk GPU M1, PyTorch membuka pintu untuk memaksimalkan kinerja perangkat keras terbaru dari Apple

Metal Performance Shaders

Perangkat MPS memungkinkan pelatihan berkinerja tinggi pada GPU untuk perangkat MacOS dengan kerangka pemrograman Metal. Ini memperkenalkan perangkat baru untuk memetakan grafik komputasi dan primitif pembelajaran mesin pada kerangka kerja Grafik Metal Performance Shaders yang sangat efisien, beserta kernel yang disesuaikan yang disediakan oleh kerangka kerja Metal Performance Shaders masing-masing.

Metal Performance Shaders (MPS) Sebagai Backend

MPS adalah backend yang memungkinkan pelatihan GPU yang dipercepat menggunakan kerangka kerja PyTorch. Dengan memanfaatkan MPS, PyTorch dapat mengoptimalkan performa komputasi dengan kernel-kernel yang disesuaikan secara khusus untuk karakteristik unik dari GPU Metal.

See also  Hasil Training Pytorch Backend MPS GPU M1 tidak akurat dan solusinya

Percobaan Pytorch dengan GPU M1

Mari kita coba kehandalan GPU M1 dengan spek macbook air seperti berikut

dengan pytorch versi Torch 2.1.2 dengan GPU Cuda tidak ada! namun menggunakan backend MPS

Berikut salah satu contoh running VGG16 dengan hasil waktu konsumsi yang turun drastis

 

dari semula tanpa MPS butuh waktu 1.800 detik tapi dengan MPS hanya menjadi 159 detik saja! berkurang sangat drastis. Sempat saja coba dengan Laptop Windows 11 dengan AMD Ryzen 3 dengan GPU built in nya (tentu Pytorch nya masih pakai CPU) membutuhkan waktu 2.000 detik.

print('Torch', torch.__version__, 'CUDA', torch.version.cuda)
device = torch.device("mps" if torch.backends.mps.is_available() else "cpu")
print("running dengan ",device)


maks_epoch = 500
#sesi pelatihan
total_loss = 0
for epoch in tqdm(range(epoch_current,maks_epoch+1)):
    model.train()
    for i,batch in enumerate(train_dl):
        images,labels = batch
        images = images.to(device)
        labels = labels.to(device)
        out = model(images)           # Generate predictions
        loss = criterion(out, labels) # Calculate loss
        # Backward and optimize
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    total_loss = total_loss+loss.item()
    loss_list.append(total_loss/epoch)    
    print("epoch: ",epoch," loss: ",total_loss/epoch)
    #writer.add_scalar("Loss/train", total_loss/epoch, epoch)
    if(epoch%10)==0: #akan simpan checkpoint
        if(os.path.exists(folder)==False):
            os.mkdir(folder)
        torch.save({
            'epoch': epoch,
            'model_state_dict': model.state_dict(),
            'optimizer_state_dict': optimizer.state_dict(),
            'loss': loss.item(),
            },folder+'/model.pt')
        #simpan juga lost 
        np.savetxt(folder+'/loss.csv',np.array(loss_list), delimiter=',')
        # break
    if os.path.exists('stop.txt'):
        print("stop by user")
        if(os.path.exists(folder)==False):
            os.mkdir(folder)
        torch.save({
            'epoch': epoch,
            'model_state_dict': model.state_dict(),
            'optimizer_state_dict': optimizer.state_dict(),
            'loss': loss.item(),
            },folder+'/model.pt')

        #simpan juga lost 
        np.savetxt(folder+'/loss.csv',np.array(loss_list), delimiter=',')
        # break
        break

 

Padahal sebelumnya sempat berpikir mau beli PC Desktop dengan GPU NVidia dengan spesifikasi berikut

  • INTEL CORE i5 11400F BOX
  • MB GIGABYTE H510M-K
  • MEMORY DDR4 16GB 3200 RGB
  • SSD M.2 NVMe 256GB 2280
  • VGA NVIDIA RTX 3050 8GB D6
  • CASE VENOM RX VANGHAR
  • PSU FSP HV-PRO 550W 80+
  • LED 22″ LENOVO D22 FHD 1080P
  • KEY M LOGITECH MK 120

Menjadi diurungkan karena menggunakan Macbook air saja sudah sangat cukup sekali!

See also  Pengertian inbalance dataset dan Solusinya SMOTE Synthetic Minority Oversampling Technique

Keuntungan dari Penggunaan Backend MPS

  • Optimasi Kinerja: Backend MPS memperluas fungsionalitas PyTorch, memberikan skrip dan kemampuan untuk menjalankan operasi dengan efisien pada perangkat MacOS. Dengan demikian, kinerja GPU M1 dapat dioptimalkan secara signifikan.
  • Pemetaan Grafik Komputasi: Perangkat baru yang diperkenalkan dengan backend MPS memetakan grafik komputasi dan primitif pembelajaran mesin pada MPS Graph framework. Hal ini memungkinkan pengguna untuk merancang dan melaksanakan operasi ML dengan lebih baik.
  • Kernels Tersesuaikan: Backend MPS menyediakan kernel-kernel yang disesuaikan dengan baik, dioptimalkan untuk karakteristik unik dari setiap keluarga GPU Metal. Ini berarti bahwa setiap operasi dapat dijalankan dengan efisiensi maksimal

Leave a Reply