Truba — Slurm İş Paketi Hazırlama ve İş Kuyruğuna Ekleme
TRUBA REHBERİ
Truba Rehberi Serisi
- TRUBA OpenVPN ile Bağlantı
- Truba — SSH Bağlantısı
- Truba — Pyton Script için Slurm İş Paketi Nasıl Hazırlanır ve Kuyruğa Eklenir?
Bu serinin devam etmesi için yaşadığınız sorunları veya merak ettiklerinizi yorumda sorabilirsiniz böylece amaca yönelik ilerlemiş oluruz. Bu örnekte bir python uygulamasını TRUBA üzerinde izole bir proje geliştirme ortamı oluşturarak slurm iş paketinde tanımlayacağız ve iş kuyruğına ekleyeceğiz, devamında çıktılarımızı elde edeceğiz.
Truba üzerinde kullanabileceğiniz dizinler
Sisteme girişinizi yaptıktan sonra burada ilgilenmemiz gereken iki tane dizin var bunlardan bir tanesi sizin kullanıcınız için oluşturulmuş Ev Dizini, diğeri ise Scratch Dizini (performans dizini).
Ev Dizini
Bu dizini;
$ /truba/home/kullanici_adi
dosya yoluyla gösterebiliriz veya
$ cd $HOME
ile yönlendirebiliriz. Bu dizin ile ilgili bilinmesi gerekenleri kısaca listelersek;
- Kullanıcıların bu ev dizinlerinin yedekleri alınmamaktadır.
- Kullanıcı buradaki verilerini düzenli olarak kendisi yedeklemesi, önemsiz verilerin de yine kullanıcı tarafından silinmesi beklenmektedir.
- Yani sistem sizin bu klasördeki verilerinize karışmaz fakat; uzun vadeli bir depolama alanı değildir. 1000GB kadar bir alan tahsis edilir.
- Daha önemli bir nokta kullanıcı dizini, hesaplama sunucuları tarafından salt okunur (read-only) erişilebilir durumdadır. Bu da şu demek hesaplama sunucusuna dizininizdeki dosya ve verileri kullanmasını sağlayabilirsiniz fakat çıktılarınızı ev dizinine yazdıramazsınız. Bunu performans alanında (scratch dizininde) yapacağız.
- Bu noktada bir uyarı niteliğinde kullanıcı dizini erişim ayarlarını bilerek/bilmeyerek değiştirmeniz salt okunur durumdan çıkmanız durumunda verinizin güvenliğinden de kendiniz sorumlusunuz.
Scratch Dizini
$ /truba_scratch/kullanici_adi
- Burası daha hızlı çalışması amaçlanmış bir dizindir.
- İş paketlerini bu dosya üzerinde çalıştırmanız sağlıklı olacaktır.
- Sonuçlarınız için oluşacak dosya boyutu kestirelemediği için bir kota uygulanmamakta, fakat 30 gün boyunca erişilmemiş dosyalar sistem yöneticisi tarafından siliniyor. Yani sonuçlarınızı alıp burayı temizlemeniz bekleniyor aslında, kalıcı bir depolama alanı asla değildir.
Slurm İş Paketi Gönderimi — Python Script Örneği
Bir python uygulamasını slurm iş paketi halinde tanımlayıp nasıl çalıştırabileceğimizi görelim. Uygulamanızı github a yükleyip sonrasında scratch dizininde klonlayabilirsiniz, projenizi kolayca taşımış olursunuz. Benim kullandığım örnek için;
Truba Rehberi örnek uygulamalarını bu kaynaktan inceleyebilirsiniz.
https://github.com/maliozer/trubarehberi
Scratch dizinine uygulamamızı klonlayalım.
$ git clone https://github.com/maliozer/trubarehberi.git
helloworld_python uygulama dizinine ulaşalım.
$ cd trubarehberi/example_jobs/helloworld_python
helloworld_python.slurm dosyasında #SBATCH -A kullanici_adi satırını kendi kullanıcı adınızla güncelleyiniz.
Ayrıca kullanacağımız modül python olduğu için
module load centos7.3/comp/python/3.6.5-gcc
satırını ekliyoruz. Mümkün olan modülleri;
module avail
komutu ile listeleyebilirsiniz. Slurm dosyamıza bakacak olursak;
$ vim helloworld_python.slurm
helloworld_python.slurm
#!/bin/bash
#SBATCH -A kullanici_adi #your_user_account
#SBATCH -J yeditepe_uby_hellopy #job_name
#SBATCH -N 1 #number of nodes to be used
#SBATCH -n 14 # number of tasks (mpi) to be lunched
#SBATCH -c 1 #number of cores per task.. Not mandatory
#SBATCH -p sardalya #name of the job queue#all modules can be listed with > module avail
#for this job python/3.6.5-gcc is used
module load centos7.3/comp/python/3.6.5-gcc#run virtualenv under the $HOME directory and activate it
virtualenv --no-download $HOME/virtualspace/venv
source $HOME/virtualspace/venv/bin/activate#install packages
pip install -r ./requirements.txtpython ./main.pyexit
Bu örnekte uygulamamız için izole bir geliştirme ortamı yaratıyoruz. Ben kendi $HOME dizinimde bunu virtualspace klasörü açarak belli bir yerde olmasına özen gösterdim. Slurm iş paketine bu virtualenv için aktive etmesini söylüyoruz ( source $HOME/virtualspace/venv/bin/activate), devamında requirements.txt içerisindeki kütüphaneleri pip ile kurmasını sağlıyoruz.
Burada her iş için bunu yapmak istemeyebilirsiniz, yani siz $HOME dizininizde zaten bir virtualenv kurmuşsunuzdur o zaman sadece
source $HOME/virtualspace/venv_adi/bin/activate
kısmını kullanabilirsiniz.
Burada ben sizin uygulamayı sorunsuz kullanmanız için sanal geliştirme ortamını oluşturma komutlarını da slurm paketine eklemiş oldum.
son olarak python ./script_name.py
python ./main.py
komutunu da slurm dosyamıza ekliyoruz böylece iş paketimiz ne yapacağını biliyor. Kısaca main.py dosyamıza bakalım.
main.py
import sysimport pandas as pd
import numpy as np
from tqdm import tqdmprint("Yeditepe_UBY", "hello truba, python version : ")
print(sys.version, __name__)numbers = np.array([1, 2, 3])
print(numbers)for x in tqdm(range(100000)):
passprint("END OF JOB!")
requirements.txt
numpy==1.19.1
pandas==1.1.1
python-dateutil==2.8.1
pytz==2020.1
six==1.15.0
tqdm==4.48.2
Slurm İş Paketini Kuyruğa Ekleme
helloworld_python.slurm dosyasını sbatch komutuyla iş kuyruğuna ekleyebilirsiniz.
$ sbatch helloworld_python.slurm
İş kuyruğundaki paketleri takip etmek için;
$ squeue
komutunu kulanabilirsiniz.
İş paketiniz tamamlandığında slurm[jobid].out dosyasından çıktıları kontrol edebilirsiniz.
$ cat slurm-3737453.out
Böylece bir python scripti için slurm iş paketi hazırlayıp truba üzerinde sonuçlarınızı alabilirsiniz.