VPS virtual private server bisa kita gunakan untuk menjalankan sebuah deep learning. Walapun hal ini tidak direkomendasikan mengingat ketersediaan GPU nya tidak ada. Tapi mari kita coba saja, saya telah menggunakan VPS untuk iseng2 melakukan training walaupun banyak sekali kendala karena RAM nya selalu habis. Sehingga dikurangi dataset nya sebagai solusi awal.
Untuk VPS yang saya gunakan dengan spek sebagai berikut
(base) root@upbeat-turing:~# screenfetch ./+o+- root@upbeat-turing.202-10-41-225.plesk.page yyyyy- -yyyyyy+ OS: Ubuntu 22.04 jammy ://+//////-yyyyyyo Kernel: x86_64 Linux 5.15.0-46-generic .++ .:/++++++/-.+sss/` Uptime: 4h 54m .:++o: /++++++++/:--:/- Packages: 1162 o:+o+:++.`..```.-/oo+++++/ Shell: bash 5.1.16 .:+o:+o/. `+sssoo+/ Disk: 33G / 158G (22%) .++/+:+oo+o:` /sssooo. CPU: Intel Xeon E5-2680 v3 @ 4x 2.5GHz /+++//+:`oo+o /::--:. GPU: Cirrus Logic GD 5446 \+/+o+++`o++o ++////. RAM: 7770MiB / 7949MiB .++.o+++oo+:` /dddhhh. .+.o+oo:. `oddhhhh+ \+.++o+o``-````.:ohdhhhhh+ `:o+++ `ohhhhhhhhyo++os: .o:`.syhhhhhhh/.oo++o` /osyyyyyyo++ooo+++/ ````` +oo+++o\: `oo++.
berdasarkan cpuinfo sebagai berikut
Python Version: 3.11.5.final.0 (64 bit) Cpuinfo Version: 8.0.0 Vendor ID Raw: GenuineIntel Hardware Raw: Brand Raw: Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz Hz Advertised Friendly: 2.5000 GHz Hz Actual Friendly: 2.5000 GHz Hz Advertised: (2500000000, 0) Hz Actual: (2499996000, 0) Arch: X86_64 Bits: 64 Count: 4 Arch String Raw: x86_64 L1 Data Cache Size: 64 KiB (2 instances) L1 Instruction Cache Size: 64 KiB (2 instances) L2 Cache Size: 512 KiB (2 instances) L2 Cache Line Size: 256 L2 Cache Associativity: 6 L3 Cache Size: 31457280 Stepping: 2 Model: 63 Family: 6 Processor Type:
tentu langkah awal yang saya lakukan setelah login via ssh yaitu
- menambah kapasitas SWAP
- nambah user buat akses FTP
- nambah session timeout login SSH
kemudian langkah selanjutnya adalah install anaconda3 via CLI dengan mengikuti langkah sesuai link https://docs.anaconda.com/anaconda/install/linux/yaitu
install package pendahuluan sebagai kebutuhan awal
apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6
kemudian menggunakan wget untuk download anaconda nya
curl -O https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
kemudian menggunakan bash untuk lakukan install, pada langkah dibawah ini saya letakan *.sh nya di folder /home/bejo
bash /home/bejo/Anaconda3-2023.09-0-Linux-x86_64.sh
nanti biasanya akan terinstall secara default di /root/Anaconda3. Kemudian kita akan buat virtual environment nya
source /root/anaconda3/bin/activate conda init
biar nanti python yang digunakan menggunakan anaconda secara otomatis, kita panggil script berikut
conda config --set auto_activate_base True
karena linux/ubuntu secara bawaan sudah mempunyai python3
Setting time Out SSH
Contents
Ketikan perintah berikut
nano /etc/ssh/sshd_config
Cari baris perintah berikut
#ssh timeout ClientAliveInterval 120 ClientAliveCountMax 720
Kalau sudah, restart
service sshd restart Penjelasan pada tambahan baris itu ialah – Pada baris pertama ialah agar server mengirimkan
null packets
ke clients (dalam hal ini software PuTTy) setiap 120 detik (2 menit), dan
– Pada baris kedua ialah agar server menutup koneksi SSH client yang inactive untuk interval ke 720 (720*120 = 86400 seconds = 24 hours)
ref: https://kb.kencengsolusindo.co.id/article/cara-menambahkan-ssh-connection-timeout/
Upload file via FTP
Saya sengaja tidak menggunakan plesk atau control cpanel karena boros memory sehingga saya lebih suka menggunakan FTP sebagai sarana untuk upload. Untuk FTP bisa menggunakan Filezilla karena lebih bagus dari coreftp/cyberduck. Cara install FTP https://kb.biznetgio.com/id_ID/instalasi/cara-install-ftp-server-di-ubuntu,-centos,-debian-9
https://www.rumahweb.com/journal/cara-membuat-ftp-server-di-vps-ubuntu/
Cara setting VPS
Install FTP Server di VPS
Langkah pertama, Anda perlu memperbarui repositori menjadi latest package dan dilanjutkan dengan install ftp server menggunakan perintah dibawah:
$ sudo apt update
$ sudo apt install vsftpd
Konfigurasi Firewall FTP Server
Pada langkah kedua, silahkan sesuaikan konfigurasi firewall untuk mengijinkan proses koneksi dan transfer data pada protokol tcp dengan port 20 dan 21 menggunakan perintah dibawah:
$ sudo ufw allow 20:21/tcp
$ sudo ufw status
Status: active 20:21/tcp ALLOW Anywhere
*Note:
Port 20 adalah FTP data transfer,
Port 21 adalah FTP C2 (command and control) .
Setelah konfigurasi firewall diatas selesai, langkah selanjutnya yaitu konfigurasi vsftpd
Konfigurasi VSFPTD FTP Server
Pada langkah ketiga, Anda harus memperhatikan setiap rules yang akan digunakan pada settingan vsftpd dengan cermat, agar dapat digunakan dengan baik.
Berikut daftar rules yang akan diaktifkan:
- Akses FTP:
anonymous_enable=NO
local_enable=YES
local_umask=022 - File Uploads:
write_enable=YES - Chroot Jail:
chroot_local_user=YES
allow_writeable_chroot=YES
Silahkan langsung lakukan penyetingan vsftpd dengan perintah dibawah:
$ sudo nano /etc/vsftpd.conf
Pada file konfig vsftpd, apabila tidak menemukan rules sesuai daftar diatas, maka Anda perlu menambahkannya secara manual dan pastikan simbol # dihapus agar rules dapat aktif.
Restart vsftpd untuk mengaktifkan konfigurasi:
$ sudo systemctl enable vsftpd
$ sudo systemctl restart vsftpd
$ sudo systemctl status vsftpd
Menggunakan Service
Setelah kalian upload file yang diperlukan dan install package deep learning menggunakan pip via terminal – ssh. Langkah selanjutnya kalian bisa langsung
- menggunakan python untuk memanggil script.py nya
- atau menggunakan service
Untuk pilihan no 1 tidak saya gunakan karena ssh nya akan terputus secara otomatis walaupun masih running, sudah pernah saya coba naikan batas limit session nya agar tidak otomatis terputus namun tetap saja off. Kalian bisa baca how to increase SSH connection time out https://www.tecmint.com/increase-ssh-connection-timeout/
sehingga solusi point 2 yang kita akan gunakan, bisa kalian gunakan tutorial https://medium.com/codex/setup-a-python-script-as-a-service-through-systemctl-systemd-f0cc55a42267
langkah yang kita gunakan yaitu install systemd
apt-get install -y systemd
misalkan kita berikan nama test.service
nano /etc/systemd/system/test.service
saya isi dengan kode berikut
[Unit] Description=My test service After=multi-user.target [Service] Type=simple Restart=always ExecStart= /root/anaconda3/bin/python "/home/bejo/Model Stardist/train.py" [Install] WantedBy=multi-user.target
jangan lupa save ya
lalu kita ketikan perintah berikut
systemctl daemon-reload
systemctl enable test.service
bila sudah Ok semua, kita jalankan service nya
systemctl start test.service
sedangkan untuk perintah yang lainnya bisa kalian gunakan yaitu
systemctl stop name_of_your_service
systemctl restart name_of_your_service
Cek status service
Untuk mengecek status service cukup mudah kok
systemctl status test.service
hasilnya service tersebut dimulai dari time 05:58:08.
(base) root@upbeat-turing:~# systemctl status test.service ● test.service - My test service Loaded: loaded (/etc/systemd/system/test.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2024-07-17 05:58:08 WIB; 4h 15min ago Main PID: 1454 (pt_main_thread) Tasks: 13 (limit: 9405) Memory: 7.4G CPU: 2h 22min 13.006s CGroup: /system.slice/test.service └─1454 /root/anaconda3/bin/python "/home/bejo/Model Stardist/train.py" Jul 17 05:58:08 upbeat-turing.202-10-41-225.plesk.page systemd[1]: Started My test service. Jul 17 06:06:01 upbeat-turing.202-10-41-225.plesk.page python[1454]: cpu Jul 17 06:06:01 upbeat-turing.202-10-41-225.plesk.page python[1454]: /home/bejo/Model Stardist/dataset/raw/C1.jpg Jul 17 06:06:01 upbeat-turing.202-10-41-225.plesk.page python[1454]: 3 Jul 17 06:06:01 upbeat-turing.202-10-41-225.plesk.page python[1454]: cpu
itu sudah berjalan 4 jam 15 menit. Kalian bisa cek no PID nya yaitu 1454 Kita panggil perintah top pada terminal akan nampak sedang proses berjalan
karena merupakan service tentu akan jalan terus menerus walaupun koneksi SSh kita terputus!
Sehingga kalian harus bisa melakukan saving checkpoint tiap epoch. Saya biasanya menggunakan 2 algoritma yaitu
- akan simpan epoch current dan
- epoch yang terbaik dari sisi nilai loss nya
Nah biasanya akan saya cek via FTP saja untuk melihat progress nya
kalian bisa melihat ada 2 model yaitu model.pt dan model_current.pt yaitu
- model.pt untuk menyimpan the best model berdasarkan loss terkecil
- model_current.pt untuk menyimpan model saat ini
Kondisi Ideal
Seperti yang sudah pernah saya jelaskan diatas VPS berbasis CPU saja tidak akan cocok untuk training deep learning karena akan memakan waktu yang lama. Tapi tutorial ini hanya mencoba menggunakan VPS apakah bisa buat training atau tidak dan tentu VPS seperti ini sangat murah harganya! alias sama saja kalian menggunakan PC desktop dirumah hanya saja ini versi online.
Tapi bila kalian punya PC Desktop yang mumpuni dan ingin bisa diakses online via TCP SSH kalian bisa langganan ngrok. Membuat Server dirumah untuk diakses Secara Online
SWAP
Apa yang terjadi ketika loading dataset melebihi kapasitas RAM! tentu memory akan di SWAP kan tapi ini rawan sekali restart service nya sehingga percuma dibuat service karena script yang kita jalankan akan restart terus menerus yang ditandai dengan time start service nya. Berikut cara membuat swap file, misalkan dengan ukuran 1GB, kalian pastikan sedang di root directory dengan nama swapfile
sudo fallocate -l 1G /swapfile
kemudian kita ubah permission nya
sudo chmod 600 /swapfile
kemudian kita tandai swapfile diatas sebagai swap
sudo mkswap /swapfile
Lanjut dengan perintah berikut
sudo swapon /swapfile
Kalian bisa cek dengan mengetikan perintah berikut
sudo swapon --show
Agar perubahan tersebut bersifat permanent, kalian bisa mengetikan perintah berikut
sudo cp /etc/fstab /etc/fstab.bak
pengaturan lebih lanjut bisa kalian pelajari di https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04
https://kb.biznetgio.com/id_ID/neo-virtual-compute/konfigurasi-swap-memory-pada-ubuntu
Sedangkan untuk delete swapfile bila tidak diperlukan lagi atau mau nambah, bisa menggunakan perintah berikut
sudo swapoff -a -v sudo rm /swapfile #back up /etc/fstab: sudo cp /etc/fstab /etc/fstab.bak sudo sed -i '/\/swapfile/d' /etc/fstab
Lebih jelasnya bisa baca https://askubuntu.com/questions/969296/how-to-delete-a-swap-file-in-ubuntu
Menggunakan Jupyterlab
Selain menggunakan service diatas, bisa kok pakai jupyterlab yang dibuat service server. Caranya cukup mudah. Kita buat script *.sh dulu saja saya simpan di /home/bejo/script.sh dengan isi sebagai berikut
/root/anaconda3/bin/jupyter notebook --ip='*' --port=8080 --no-browser --NotebookApp.token='111222' --allow-root
argument –NotebookApp.token=’111222′ bebas kalian menggunakan isinya, karena untuk akses token
kemudian seperti biasa, kita akan menggunakan service untuk memanggil script diatas dengan membuat test4.service
dengan mengetikan kode berikut
nano /etc/systemd/system/test4.service
dengan isi sebagai berikut
[Unit] Description=coba notebook After=multi-user.target [Service] Type=simple WorkingDirectory=/home/bejo ExecStart=/bin/bash /home/bejo/script.sh [Install] WantedBy=multi-user.target
jangan lupa simpan dan panggil
systemctl daemon-reload
dan seterusnya
jangan lupa kalau sudah cek status servicenya, kalian bisa panggil kok no ip:port nya untuk kasus diatas saya menggunakan port 8080
dan ketika close pun browser akan senantiasa running terus menerus jadi nggak usah kuatir kalau tiba2 close session!