# Panduan Menggunakan Sistem DGX-1 pada Tokopedia-UI AI Center **** **Informasi:** Harap untuk menggunakan satu GPU saja dengan cara berikut: - Jupyter (dijalankan sebelum import torch/tensorflow) ``` import os os.environ['CUDA_VISIBLE_DEVICES'] = '1' ``` - Python (command) `CUDA_VISIBLE_DEVICES=1 python ...<command-untuk-running> ...` Dalam hal ini, `1` adalah nomor GPU. Silakan sesuaikan dengan pilihan GPU yang diinstruksikan atau yang masih available. Anda bisa mengecek utilisasi memori GPU dengan command `nvidia-smi`. **** ## Cara mendapat akses ke DGX-1: 1. ~~Isi form pada tautan berikut https://s.id/FormRequestDGX1AIC~~. (Form sedang tidak dapat menerima data baru). Alternatifnya bisa dengan mengirim email ke aicenter-request@cs.ui.ac.id dan **cc** ke email dosen pembimbing dengan mengisi form penelitian dengan contoh sebagai berikut: > INFO DOSEN Nama Dosen Pembimbing: Prof. Albus Dumbledore > INFO MAHASISWA Nama Mahasiswa: Harry Potter NPM: 1234567890 Program Studi: MIK S1/S2/S3: S2 No WhatsApp: 081234567890 \***Catatan**: Jika terdapat lebih dari satu mahasiswa pada penelitian yang sama, harap cantumkan juga info mahasiswa lainnya dalam kelompok tersebut. > INFO PENELITIAN Topik/Deskripsi Singkat Penelitian: Klasifikasi Pneumonia Pada Data Chest X-Ray Images Programming Language: Python Libraries: sklearn, pandas, numpy, keras, tensorflow Ukuran Dataset (berapa MB atau GB): 1.2GB Periode Penggunaan DGX-1: 1 September - 31 December 2020 2. Tim AI Center akan memeriksa form penelitian yang telah dikirimkan ke email AI Center 3. Jika permintaan akses diterima oleh tim AI Center, admin akan mengirimkan file config untuk mengakses DGX1 ## Notes: 1. Mohon hanya menggunakan 1 GPU saja. Jika butuh menggunakan lebih dari 1 GPU harus menghubungi admin terlebih dahulu. 2. Setelah selesai melakukan training, **harap lakukan clear session** atau **shutdown Jupyter Notebook** untuk mengosongkan memory GPU setelah training. 3. **[PENTING]** Jangan lupa untuk melakukan **backup data** secara berkala demi mengantisipasi kehilangan data jika server *down*! 4. Jika melakukan **publikasi ilmiah**, penelitian yang menggunakan DGX-1 wajib mencantumkan **ACKNOWLEDGEMENT Tokopedia-UI AI Center of Excellence**. ## 1. Persiapan ### Pastikan ```kubectl``` telah terinstall pada laptop pengguna. Langkah-langkah instalasi: * (Windows) https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-windows. Anda dapat menggunakan ```curl```, Windows PowerShell, Chocolatey (https://chocolatey.org/), atau Scoop (https://scoop.sh/) * (Linux) https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-linux * (macOS) https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-macos ### Konfigurasi ```kubectl``` untuk mengakses Kubernetes cluster * Pengguna akan mendapatkan sebuah file _kubeconfig_ yang telah dibuat oleh admin. * Pada akhir langkah instalasi, pengguna akan memiliki direktori ```.kube``` dalam direktori ```home``` pada sistem operasi masing-masing. Langkah-langkah berikut bisa disesuaikan dengan sistem operasi masing-masing pengguna 1. Memeriksa versi kubectl ```kubectl version``` 2. Masuk ke direktori ```home``` Windows: ```cd %USERPROFILE%``` Ubuntu: ```cd ~``` 3. Membuat direktori ```.kube``` ```mkdir .kube``` 4. Masuk ke dalam direktori ```.kube``` ```cd .kube``` 5. Masukkan file config yang sudah diberikan di dalam ```.kube```, kemudian _rename_ file jadi ```config``` ## 2. Membuat Pod Baru (setelah Juni 2022) Dalam Kubernetes, Pod adalah satu *execution unit* terkecil dalam suatu *cluster*. Pod bisa dianggap sebagai sebuah *virtual machine* (VM) yang dijalankan pada suatu server berskala besar. Pengguna DGX-1 dapat menjalankan programnya dengan membuat pod terlebih dahulu. Berikut adalah langkah untuk menjalankan pod: 1. Pastikan Anda telah menerima *kubeconfig* dan file contoh *yaml* pod (umumnya dengan penamaan `[nama-anda]-pod.yaml`) dari email AI Center atau dari tim admin. 2. Pada file contoh pod, terdapat potongan kode sebagai berikut. ```yaml ... containers: - image: [url-image] ... ``` Silakan ubah `[url-image]` dengan *framework deep learning* yang akan digunakan. Selengkapnya bisa dilihat pada situs https://catalog.ngc.nvidia.com/. Contoh: * Tensorflow 1 21.08: `nvcr.io/nvidia/tensorflow:21.08-tf1-py3` * Tensorflow 2 21.08: `nvcr.io/nvidia/tensorflow:21.08-tf2-py3` * PyTorch 21.08: `nvcr.io/nvidia/pytorch:21.08-py3` 3. Jalankan command sebagai berikut untuk membuat pod dengan file yaml sebelumnya: ```kubectl apply -f [nama-anda]-pod.yaml``` 4. Cek status pod dengan command `kubectl get pods`. Contoh outputnya adalah sebagai berikut: ``` > kubectl get pods NAME READY STATUS RESTARTS AGE test-pod 1/1 Running 0 50m ``` Jika statusnya sudah *Running*, Anda sudah bisa mulai menggunakan podnya. ## 3. Running Jupyter Notebook Berikut adalah panduan jika Anda menggunakan Jupyter Notebook untuk melakukan eksperimen atau eksekusi program: 1. Masuk ke dalam pod dengan perintah `kubectl exec -it [nama-pod] -- /bin/bash` 2. Setelah masuk ke dalam pod, jalankan command `jupyter notebook` Anda akan memperoleh output seperti berikut: ``` root@test-pod:/workspace# jupyter notebook ... [I 04:47:03.345 NotebookApp] http://hostname:8888/?token=[token-notebook] [I 04:47:03.345 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C 04:47:03.349 NotebookApp] To access the notebook, open this file in a browser: file:///root/.local/share/jupyter/runtime/nbserver-1018-open.html Or copy and paste this URL: http://hostname:8888/?token=[token-notebook] ``` Simpan atau copy `[token-notebook]` yang terdapat dari output tersebut. 3. Untuk meninggalkan proses di background, tekan `Ctrl-Z`, lalu jalankan `bg`. Command ini bertujuan untuk *minimize* Jupyter Notebook di terminal atau *command prompt*. 4. Keluar dari pod dengan perintah `exit` 5. Lakukan *port-forwarding* untuk menghubungkan laptop/komputer Anda dengan Jupyter Notebook di dalam pod demgan perintah berikut: ```kubectl port-forward [nama_pod] [local_port]:[kubernetes_port]``` Notes: * `[kubernetes_port]` untuk Jupyter Notebook umumnya `8888`. * `[local_port]` bebas ditentukan oleh pengguna antara 0-65535. 6. Buka port di dalam browser ```localhost:[local_port]``` 7. Masukkan token yang muncul pada perintah nomor 2 8. Anda sudah bisa mengakses notebook yang ada di server DGX-1. ## 4. Upload/Download File dari Pod Berdasarkan beberapa pengalaman pengguna, kami menganjurkan untuk melakukan *upload*/*download* file melalui Jupyter Notebook karena cenderung lebih stabil. Cara lainnya, Anda bisa mengunduh menggunakan `kubectl` sebagai berikut: * Menyalin file dari local ke pod menggunakan [kubectl cp](https://howchoo.com/kubernetes/kubectl-cp-copy-files-to-from-pods) ```kubectl cp [local_path] [nama_pod]:[remote_path]``` * Menyalin file dari pod ke local ```kubectl cp [nama_pod]:[remote_path] [local_path]``` <!-- ## Perintah-Perintah Dasar ```kubectl``` * Perintah untuk mengetahui pods yang tersedia ```kubectl get pods``` Ketika pertama kali dijalankan, akan ditampilkan bahwa belum ada pods yang dibuat * Membuat pod ```kubectl run -i --tty [nama_pod] --image=[link_image] -- sh``` > Contoh run docker image dengan nama pods **test** dan image **Tensorflow 1 21.08** ```kubectl run -i --tty test --image=nvcr.io/nvidia/tensorflow:21.08-tf1-py3 -- sh``` > Contoh run docker image dengan nama pods **test** dan image **Tensorflow 2 21.08** ```kubectl run -i --tty test --image=nvcr.io/nvidia/tensorflow:21.08-tf2-py3 -- sh``` Contoh run docker image dengan nama pods **test** dan image **PyTorch 21.08** ```kubectl run -i --tty test --image=nvcr.io/nvidia/pytorch:21.08-py3 -- sh``` * Apabila ingin menggunakan image container yang lain, bisa dilihat pada link berikut ``` https://ngc.nvidia.com/catalog/all ``` * Masuk kedalam pods yang sudah dibuat ``` kubectl exec -it [nama_pods] -- /bin/bash ``` Contoh: ``` kubectl exec -it test-7cfb5d8bb8-hh7xz -- /bin/bash ``` * Keluar dari pods ``` exit ``` * Menghapus pod deployment ``` kubectl delete deploy [nama_pods_deployment] ``` Cara melihat pods deployment ``` kubectl get deploy ``` * Menghapus pod ``` kubectl delete pod [nama_pod] ``` Cara melihat pods ``` kubectl get pods ``` * Menyalin file dari local ke pod menggunakan [kubectl cp](https://howchoo.com/kubernetes/kubectl-cp-copy-files-to-from-pods) ```kubectl cp [local_path] [nama_pod]:[remote_path]``` Menyalin file dari pod ke local ```kubectl cp [nama_pod]:[remote_path] [local_path]``` --> <!-- ## Sample Program: Klasifikasi Citra (Mobil vs. Pesawat Terbang) Menggunakan Library Keras Lakukan langkah-langkah ini di dalam pods masing-masing, menggunakan command line: ``` kubectl exec -it [nama_pods] -- /bin/bash ``` 1. Download file tutorial ```wget -O carsplanes.zip "https://drive.google.com/uc?export=download&id=103Vkq3i_h5liqVhuAKCWQs98QLtRUFWS"``` (Bisa dengan menggunakan perintah untuk memindahkan file dari local ke pod atau sebaliknya) 2. Unzip file tutorial ```unzip carsplanes.zip``` 3. Install keras ```pip install keras==2.1.5``` 4. Jalankan jupyter notebook ```jupyter notebook``` 5. Forward port jupyter notebook ke komputer pengguna. **Buka terminal baru** dan lakukan port forward dengan perintah sbb: ```kubectl port-forward [nama_pod] [local_port]:[kubernetes_port]``` Contoh: ```kubectl port-forward test-7cfb5d8bb8-hh7xz 8888:8888``` 6. Buka port di dalam browser ```localhost:[nomor_port]``` 7. Masukkan token yang muncul pada perintah nomor 4 8. Jalankan file ```carsplanes.py``` atau ```carsplanes.ipynb```pada Jupyter Notebook --> ## Pencabutan Akses 1. Jika sudah selesai masa akses sesuai dengan form penelitian yang diisi sebelumnya, maka user harus segera melakukan backup data penelitian yang ada di DGX1 2. Admin akan mengonfirmasi apakah data sudah selesai ter-backup semua 3. Admin akan menghapus akses user dan file config user tidak akan bisa digunakan kembali Pertanyaan lain terkait penggunaan DGX-1 pada Tokopedia-UI AI Center bisa dikirimkan melalui email aicenter-request@cs.ui.ac.id serta CC ke douglas.raevan11@ui.ac.id