Truba — Slurm İş Paketi Hazırlama ve İş Kuyruğuna Ekleme

TRUBA REHBERİ

KaVe
Published in
4 min readSep 18, 2020

--

Truba Rehberi Serisi

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
github.com/maliozer/trubarehberi

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.txt
python ./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 tqdm
print("Yeditepe_UBY", "hello truba, python version : ")
print(sys.version, __name__)
numbers = np.array([1, 2, 3])
print(numbers)
for x in tqdm(range(100000)):
pass
print("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.

--

--