/ Blog

HPC İş Kuyruğu Yöneticisi (Scheduler) Nedir?

Job scheduler nedir, nasıl çalışır? SLURM, PBS, LSF gibi sistemlerin temel kavramları.

Yüzlerce kullanıcının onlarca farklı hesaplama işi göndermesini hayal edin; kimi makine öğrenmesi modeli eğitiyor, kimi CFD simülasyonu koşturuyor, kimi genomik veri analizi yapıyor. Bu işleri kim, hangi sırayla, hangi düğüme atayacak? İşte bu sorunun yanıtı iş kuyruğu yöneticisi (job scheduler)‘dır.

Job Scheduler Nedir?

Job scheduler, yüksek başarımlı hesaplama (HPC) kümesinde hesaplama kaynaklarını (işlemci, bellek, GPU, ağ bant genişliği vb.) kullanıcı işleri arasında adil ve verimli biçimde dağıtan yazılım katmanıdır. Temel görevi şudur: kullanıcılar işlerini bir kuyruğa gönderir; scheduler mevcut kaynaklara, önceliklere ve politikalara bakarak her işi doğru zamanda, doğru düğüme atar ve çalıştırır.

Bir scheduler olmadan büyük bir HPC kümesini yönetmek pratikte imkânsızdır. Hangi kullanıcı ne kadar kaynak kullanıyor, işler çakışıyor mu, bir düğüm meşgul mü — bunların hepsini elle takip etmek kaotik bir ortam yaratır. Scheduler bu karmaşıklığı otomatize eder.

Temel Kavramlar

İş (Job) ve Görev (Task)

Bir job, kullanıcının kümeye gönderdiği hesaplama birimidir. Tek bir komut satırı olabileceği gibi, binlerce paralel alt görevden (task) oluşan karmaşık bir iş akışı da olabilir. Scheduler terminolojisinde sıkça karşılaşılan terimler şunlardır:

KavramAçıklama
JobKullanıcının gönderdiği hesaplama birimi
Queue / Partitionİşlerin bekletildiği mantıksal gruplar
NodeKümedeki fiziksel veya sanal sunucu
Core / CPUİşlem yapan hesap birimi
Wall timeİşin izin verilen maksimum çalışma süresi
Priorityİşin kuyrukta ne kadar öne alınacağını belirler
BackfillBoşta kalan kaynakları küçük işlerle doldurma stratejisi

Kuyruk (Queue) ve Partition

Büyük kümelerde farklı türde işler için farklı kuyruklar tanımlanır. Örneğin kısa ve küçük işler için short kuyruğu, uzun ve büyük işler için long kuyruğu, GPU gerektiren işler için gpu kuyruğu ayrı ayrı yapılandırılabilir. Her kuyruğun kendine özgü kaynak sınırları, öncelik katsayıları ve erişim politikaları vardır.

Öncelik ve Adillik (Fairshare)

Scheduler hangi işin öne geçeceğine karar verirken çeşitli faktörleri göz önünde bulundurur: işin bekleme süresi, talep edilen kaynak miktarı, kullanıcının geçmiş kaynak tüketimi ve varsa ödeme planı. Fairshare mekanizması, bir kullanıcının aşırı kaynak tüketmesi durumunda diğer kullanıcıların işlerini öne alarak uzun vadede adil bir dağılım sağlar.

Popüler Job Scheduler Sistemleri

SLURM

Simple Linux Utility for Resource Management (SLURM), günümüzde dünyanın en yaygın kullanılan HPC scheduler’ıdır. Top500 listesindeki süper bilgisayarların büyük çoğunluğu SLURM ile yönetilmektedir. Açık kaynaklı olması, aktif topluluk desteği ve esnek yapılandırma seçenekleri nedeniyle tercih edilir.

PBS ve OpenPBS

Portable Batch System (PBS), özellikle araştırma kurumlarında köklü bir geçmişe sahip scheduler’dır. Altair’in ticari ürünü PBS Professional ve topluluk tarafından sürdürülen OpenPBS olarak iki kola ayrılmıştır.

IBM Spectrum LSF

Load Sharing Facility (LSF), kurumsal ortamlarda ve finans sektöründe yaygın olarak kullanılan ticari bir scheduler’dır. İleri düzey kaynak yönetimi özellikleri ve kurumsal destek seçenekleriyle öne çıkar.

Grid Engine (SGE/OGS)

Sun Grid Engine’den türeyen Open Grid Scheduler ve Univa Grid Engine de üniversite kümelerinde yaygın olarak kullanılmaya devam etmektedir.

SLURM ile İş Gönderme: Temel Kullanım

Scheduler kavramlarını somutlaştırmak için SLURM üzerinde örnek bir iş betiği inceleyelim.

#!/bin/bash
#SBATCH --job-name=cfd_simulasyon     # İş adı
#SBATCH --partition=compute           # Kullanılacak kuyruk/partition
#SBATCH --nodes=4                     # Talep edilen düğüm sayısı
#SBATCH --ntasks-per-node=32          # Düğüm başına MPI görevi
#SBATCH --mem=64G                     # Düğüm başına bellek
#SBATCH --time=12:00:00               # Maksimum çalışma süresi (ss:dd:sn)
#SBATCH --output=cfd_%j.out           # Standart çıktı dosyası (%j = iş ID)
#SBATCH --error=cfd_%j.err            # Standart hata dosyası
#SBATCH --mail-type=END,FAIL          # E-posta bildirimi
#SBATCH --mail-user=kullanici@kurum.edu.tr

# Modülleri yükle
module load openmpi/4.1.5
module load openfoam/v2312

# Çalışma dizinine geç
cd $SLURM_SUBMIT_DIR

# MPI ile uygulamayı başlat
mpirun -np 128 simpleFoam -parallel

Bu betik sbatch iş_betiği.sh komutuyla kuyruğa gönderilir. SLURM, talep edilen 4 düğüm ve 128 çekirdek müsait olduğunda işi otomatik olarak başlatır.

Sık kullanılan SLURM komutları:

sbatch iş_betiği.sh       # İş gönder
squeue -u $USER           # Kendi işlerinizi listele
squeue -p compute         # Belirli kuyruktaki tüm işleri listele
scancel 12345             # İş iptal et
sinfo                     # Düğüm durumunu görüntüle
sacct -j 12345            # Tamamlanan iş istatistikleri

Scheduler Nasıl Karar Verir?

Scheduler’ın kaynak atama kararı basit bir sıra mantığından çok daha karmaşıktır. Modern scheduler’lar şu adımları izler:

1. Kaynak Uygunluk Kontrolü

İş kuyruğa girdiğinde scheduler, talep edilen kaynakların (çekirdek sayısı, bellek, GPU, özel donanım) anlık olarak müsait olup olmadığını kontrol eder. Müsait değilse iş pending (beklemede) durumunda kalır.

2. Öncelik Hesaplama

Her iş için öncelik puanı hesaplanır. SLURM’de bu puan şu faktörlerin ağırlıklı toplamıdır:

  • Age: Kuyruktaki bekleme süresi arttıkça öncelik yükselir
  • Fairshare: Kullanıcının tarihsel kaynak tüketimi
  • JobSize: Büyük işlere puan verme politikası (ayarlanabilir)
  • Partition: Kuyruk bazlı öncelik katsayısı
  • QOS (Quality of Service): Özel servis kalitesi tanımları

3. Backfill Mekanizması

Scheduler yalnızca en yüksek öncelikli işi beklemez. Backfill algoritmasıyla, büyük bir iş için yeterli kaynak açılana kadar geçen sürede başlayıp bitirebileceği küçük işleri boşluklara sıkıştırır. Bu, küme kullanım verimliliğini önemli ölçüde artırır.

İyi Bir Job Bettiği Yazmanın Püf Noktaları

Gerçekçi kaynak talebi belirtin. Çok fazla kaynak talep etmek işinizin kuyruğun gerisinde kalmasına neden olur; çok az talep etmek ise işin yarıda kesilmesine yol açar. Küçük bir test çalıştırması yaparak gerçek kaynak ihtiyacınızı ölçün.

Wall time tahmininizi doğru yapın. Çok düşük bir wall time, iş bitmeden kesilmesine neden olur. Çok yüksek bir wall time, işin kuyruğun gerisinde kalmasına ve tamamlandığında boş kaynak bırakmasına yol açar.

Checkpoint mekanizması kullanın. Uzun süren işler için ara kayıt (checkpoint) noktaları oluşturun. Böylece bir düğüm arızası veya süre aşımı durumunda başa dönmek yerine kaldığınız yerden devam edebilirsiniz.

Çıktı dosyalarını yönetin. İş ID’sini dosya adına ekleyerek (%j direktifi ile) her çalıştırmanın çıktısını ayrı tutun; bu, hata ayıklamayı kolaylaştırır.

Küme Yöneticisi Perspektifinden Scheduler

Sistem yöneticileri açısından scheduler, sadece iş zamanlayıcı değil, aynı zamanda güçlü bir politika uygulama aracıdır. Yöneticiler scheduler aracılığıyla şunları yapılandırabilir:

  • Kullanıcı veya grup başına maksimum çalışma sayısı ve kaynak sınırları
  • Öncelikli kullanıcılar veya projeler için ayrılmış partition’lar
  • Düğüm bakımı için planlı duruş (maintenance window) yönetimi
  • Kaynak kullanım raporları ve faturalandırma altyapısı
  • Lisanslı yazılım kullanımını izleme (örneğin eş zamanlı ANSYS lisans sayısı)

Bu özellikler, scheduler’ı büyük araştırma kurumları ve endüstriyel HPC merkezleri için vazgeçilmez kılar.

Sonuç

Job scheduler, HPC altyapısının bel kemiğidir. Kullanıcıların işlerini verimli biçimde çalıştırmasını, kaynakların adil paylaşılmasını ve kümenin maksimum kapasitede çalışmasını sağlar. SLURM, PBS ve LSF gibi sistemler onlarca yıllık deneyimin ürünü olup akademik araştırmadan endüstriyel simülasyona kadar geniş bir yelpazede güvenle kullanılmaktadır.

Mevasis olarak HPC kümesi kurulumu, scheduler yapılandırması ve optimizasyonu konularında size destek olmaktan memnuniyet duyarız. İletişim için formu doldurun.