Panduan Penggunaan AI Server + NVIDIA Tesla A100

Universitas Negeri Semarang/UNNES ICT Center/Kabar/Panduan Penggunaan AI Server + NVIDIA Tesla A100

Universitas Negeri Semarang saat ini memiliki High-performance Computing yang ditenagai oleh GPU Processor generasi terbaru, NVIDIA DGX Tesla A100. Berikut adalah panduan penggunaan AI Server dan NVIDIA Tesla A100 untuk civitas akademika Universitas Negeri Semarang.

Batasan

  • Pengguna fasilitas AI Server + NVIDIA Tesla A100 adalah dosen, staff, mahasiswa Universitas Negeri Semarang dan peneliti ataupun masyarakat umum
  • Penggunaan fasilitas tunduk pada peraturan penggunaan peralatan dan standar tarif layanan Universitas Negeri Semarang, jika dibutuhkan dan dipergunakan untuk kepentingan komersial
  • Penggunaan fasilitas dibatasi menurut kebutuhan komputasi, review atas rencana penggunaan/flowchart aplikasi, dan ketersediaan server/gpu
  • Penggunaan fasilitas tunduk pada UU yang berlaku di Indonesia, khususnya UU tentang Informatika dan Transaksi Elektronik, UU tentang Sistem Nasional Ilmu Pengetahuan dan Teknologi, UU tentang Perlindungan Data Pribadi, UU tentang Hak Cipta, UU tentang Pornografi.

Spesifikasi

  • 3 buah xFusion Server 2288H v5 @ 40 Core CPU
  • 6 node NVIDIA Tesla A100 80GB PCIe, with 9.7 Teraflops FP64, 80GB HBM2e Memory, 1,935 GB/s Bandwith

Pengajuan Akun

Pengajuan akun dan kerjasama penggunaan fasilitas AI Server ini dapat dilakukan menggunakan fasilitas layanan terpadu UNNES di ALT (unnes.ac.id/helpdesk) atau lewat aplikasi MyUNNES (Android/iOS) dengan subjek “Permohonan Fasilitas Penelitian AI Server”.

Prosedur Penggunaan

  • Pengguna mendapatkan akun Portainer dan akun VPN untuk dapat mengakses AI Server dengan batasan yang ditetapkan oleh Subdit Sistem Informasi,
  • Pengguna melakukan pembuatan container dengan kemampuan GPU menggunakan akun Portainer masing-masing sesuai dengan kebijakan dari Subdit Sistem Informasi,
  • Pengguna melakukan koneksi ke server lewat jaringan VPN dan login menggunakan akun SSH untuk melakukan proses unggah/unduh file artefak/video/model atau file lainnya jika dibutuhkan,
  • Pengguna melakukan eksekusi program/aplikasi dalam lingkungan terbatas di Docker Container yang ditentukan dan disediakan oleh Subdit Sistem Informasi atau image yang sudah diperiksa dan disetujui penggunaannya oleh Subdit Sistem Informasi,
  • Pengguna mengunduh hasil program/aplikasi yang dieksekusi oleh Docker Container sesuai kebutuhan

Docker Image yang Telah Disediakan

  • NVIDIA Cuda nvidia/cuda:12.0.1-base-ubuntu22.04
  • TensorFlow GPU tensorflow/tensorflow:latest-gpu
  • Ubuntu 22.04 with Python 3: infraunnes/ai-server:ubuntu22.04-python3
  • TensorFlow Ubuntu 22.04 Python 3: infraunnes/ai-server:ubuntu22.04-python3-tensorflow
  • OpenCV Ubuntu 22.04 Python 3: infraunnes/ai-server:ubuntu22.04-python3-tensorflow

Contoh Penggunaan AI Server

Mengetahui Driver GPU yang terpasang di Server

Jalankan docker container dengan mengeksekusi perintah berikut:

docker run --rm --gpus all dockerhub.myunnes.app/infraunnes/cuda:12.0.1-ubuntu22.04-cudnn nvidia-smi

keterangan: perintah diatas akan menggunakan semua GPU yang ada sebagai referensi, dan dieksekusi dalam environment image bawaan dari NVIDIA CUDA yaitu cuda:12.0.1-ubuntu22.04-cudnn, dan aplikasi/tool yang dieksekusi adalah nvidia-smi.

contoh hasil eksekusi:

Wed Mar  1 10:34:11 2023  	 
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.30.02          	Driver Version: 530.30.02	CUDA Version: 12.1 	|
|-----------------------------------------+----------------------+----------------------+
| GPU  Name              	Persistence-M| Bus-Id    	Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf        	Pwr:Usage/Cap|     	Memory-Usage | GPU-Util  Compute M. |
|                                     	|                  	|           	MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA A100 80GB PCIe       	Off| 00000000:3B:00.0 Off |                	0 |
| N/A   68C	P0           	78W / 300W|  	0MiB / 81920MiB |  	0%  	Default |
|                                     	|                  	|         	Disabled |
+-----------------------------------------+----------------------+----------------------+
|   1  NVIDIA A100 80GB PCIe       	Off| 00000000:86:00.0 Off |                	0 |
| N/A   72C	P0           	97W / 300W|  	0MiB / 81920MiB | 	22%  	Default |
|                                     	|                  	|         	Disabled |
+-----------------------------------------+----------------------+----------------------+
                                                                                    	 
+---------------------------------------------------------------------------------------+
| Processes:                                                                        	|
|  GPU   GI   CI    	PID   Type   Process name                        	GPU Memory |
|    	ID   ID                                                         	Usage  	|
|=======================================================================================|
|  No running processes found                                                       	|
+---------------------------------------------------------------------------------------+

Contoh Menjalankan Code Python dengan kebutuhan Library TensorFlow

Upload source code python yang telah diuji di komputer lokal ke server menggunakan FileZilla ke folder masing-masing. Kemudian eksekusi dalam container seperti berikut:

docker run -u $(id -u):$(id -g) --gpus all -v /home/namauser/nama_aplikasi.py:/tmp/nama_aplikasi.py -w /tmp -it tensorflow/tensorflow:latest-gpu python /tmp/nama_aplikasi.py

Keterangan:

  • -u $(id -u):$(id -g): menjalankan sebagai user dan group yang sama saat login,
  • –gpus all: menggunakan seluruh GPU yang terpasang di server,
  • -v $PWD:/tmp: mounting/mengaitkan folder aktif (saat eksekusi aplikasi) ke folder /tmp container
  • -it tensorflow/tensorflow:latest-gpu: menjalankan image tensorflow/tensorflow:latest-gpu
  • python nama_aplikasi.py: mengeksekusi file nama_aplikasi.py dengan program python

Output yang dihasilkan sesuai dengan aplikasi nama_aplikasi.py

Komputasi Sederhana dengan GPU

Silakan tulis sourcecode contoh berikut kemudian eksekusi dalam container TensorFlow:

docker run -u $(id -u):$(id -g) --gpus all -v /home/emka/basic_computation.py:/tmp/basic_computation.py -w /tmp -it tensorflow/tensorflow:latest-gpu python /tmp/basic_computation.py

sourcecode:

from __future__ import print_function
'''
Basic Multi GPU computation example using TensorFlow library.

Author: Aymeric Damien
Project: https://github.com/aymericdamien/TensorFlow-Examples/
'''

'''
This tutorial requires your machine to have 2 GPUs
"/cpu:0": The CPU of your machine.
"/gpu:0": The first GPU of your machine
"/gpu:1": The second GPU of your machine
'''



import numpy as np
#import tensorflow as tf
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
import datetime

# Processing Units logs
log_device_placement = True

# Num of multiplications to perform
n = 10

'''
Example: compute A^n + B^n on 2 GPUs
Results on 8 cores with 2 GTX-980:
 * Single GPU computation time: 0:00:11.277449
 * Multi GPU computation time: 0:00:07.131701
'''
# Create random large matrix
A = np.random.rand(10000, 10000).astype('float32')
B = np.random.rand(10000, 10000).astype('float32')

# Create a graph to store results
c1 = []
c2 = []

def matpow(M, n):
    if n < 1: #Abstract cases where n < 1
        return M
    else:
        return tf.matmul(M, matpow(M, n-1))

'''
Single GPU computing
'''
with tf.device('/gpu:0'):
    a = tf.placeholder(tf.float32, [10000, 10000])
    b = tf.placeholder(tf.float32, [10000, 10000])
    # Compute A^n and B^n and store results in c1
    c1.append(matpow(a, n))
    c1.append(matpow(b, n))

with tf.device('/cpu:0'):
  sum = tf.add_n(c1) #Addition of all elements in c1, i.e. A^n + B^n

t1_1 = datetime.datetime.now()
with tf.Session(config=tf.ConfigProto(log_device_placement=log_device_placement)) as sess:
    # Run the op.
    sess.run(sum, {a:A, b:B})
t2_1 = datetime.datetime.now()


'''
Multi GPU computing
'''
# GPU:0 computes A^n
with tf.device('/gpu:0'):
    # Compute A^n and store result in c2
    a = tf.placeholder(tf.float32, [10000, 10000])
    c2.append(matpow(a, n))

# GPU:1 computes B^n
with tf.device('/gpu:1'):
    # Compute B^n and store result in c2
    b = tf.placeholder(tf.float32, [10000, 10000])
    c2.append(matpow(b, n))

with tf.device('/cpu:0'):
  sum = tf.add_n(c2) #Addition of all elements in c2, i.e. A^n + B^n

t1_2 = datetime.datetime.now()
with tf.Session(config=tf.ConfigProto(log_device_placement=log_device_placement)) as sess:
    # Run the op.
    sess.run(sum, {a:A, b:B})
t2_2 = datetime.datetime.now()


print("Single GPU computation time: " + str(t2_1-t1_1))
print("Multi GPU computation time: " + str(t2_2-t1_2))

contoh hasil eksekusi script diatas:

Single GPU computation time: 0:00:03.229350
Multi GPU computation time: 0:00:01.781737