CycleCloud GridEngine Kümesi

CycleCloud GridEngine Kümesi Projesi README

Open Grid Scheduler (Kılavuz Altyapısı), küme tanımındaki "run_list" değiştirilerek Azure CycleCloud kümesinde kolayca etkinleştirilebilir. Bir Grid Engine kümesi iki birincil bileşenden oluşur. Birincisi, Kılavuz Altyapısı yazılımının çalıştığı paylaşılan bir dosya sistemi sağlayan 'ana' düğümdür. İkincisi, paylaşılan dosya sistemini bağlayıp gönderilen işleri çalıştıran konaklar olan 'execute' düğümleri kümesidir. Örneğin, basit bir Kılavuz Altyapısı küme şablonu parçacığı şöyle görünebilir:

[cluster grid-engine]

[[node master]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4 # 8 cores

    [[[configuration]]]
    run_list = role[sge_master_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A1  # 1 core

    [[[configuration]]]
    run_list = role[sge_execute_role]

Uyarı

Rol adları eski nedenlerle 'sge' içeriyor: Grid Engine, Sun Microsystems'ın bir ürünüdür.

CycleCloud'da bir tanımı olan bir kümeyi içeri aktarma ve başlatma işlemi tek bir 'ana' düğüme neden olur. 'execute' düğümleri, cyclecloud add_node komutuyla kümeye eklenebilir. Örneğin, 10 'yürütme' düğümü daha eklemek için:

cyclecloud add_node grid-engine -t execute -c 10

Kılavuz Altyapısı Otomatik Ölçeklendirme

Azure CycleCloud, Kılavuz Altyapısı için otomatik ölçeklendirmeyi destekler. Bu davranış, yazılımın kuyruğunuzun durumunu sürekli izlediği ve iş yükünü hem zaman hem de maliyet açısından verimli bir şekilde tamamlamak için gerektiğinde düğümleri otomatik olarak açıp kapattığı anlamına gelir. Küme tanımınıza ekleyerek Autoscale = true Kılavuz Altyapısı için otomatik ölçeklendirmeyi etkinleştirebilirsiniz:

[cluster grid-engine]
Autoscale = True

Varsayılan olarak, Kılavuz Altyapısı kuyruğuna gönderilen tüm işler 'execute' türündeki makinelerde çalışır. 'execute' adlı düğüm dizisiyle tanımlanan makineler bunlar. 'execute' adıyla veya işleri çalıştırmak ve otomatik ölçeklendirmek için tek bir makine yapılandırması türüyle sınırlı değilsiniz.

Örneğin, yaygın bir senaryo iki farklı düğüm tanımına sahip bir kümeyi içerir. Biri, standart CPU'ları kullanan 'normal' işleri çalıştırmak için tasarlanmıştır. Diğeri ise GPU özellikli makineler gerektiren işlere yöneliktir. Bu durumda, iş kuyruğunun kullanacağı her makine için uygun miktarda makineye sahip olduğunuzdan emin olmak için kuyruğunuzu hem normal işlere hem de GPU işlerine göre bağımsız olarak ölçeklendirmek istersiniz. Örnek bir tanım şöyle olabilir:

[cluster grid-engine]
Autoscale = True

[[node master]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A3  # 4 cores

    [[[configuration]]]
    run_list = role[sge_master_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4  # 8 cores

    [[[configuration]]]
    run_list = role[sge_execute_role]

[[nodearray gpu]]
    MachineType = Standard_NV12 # 2 GPUs
    ImageName = cycle.image.centos7

    # Set the number of cores to the number of GPUs for autoscaling purposes
    CoreCount = 2  

    [[[configuration]]]
    run_list = role[sge_execute_role]
    gridengine.slot_type = gpu
    gridengine.slots = 2

Gösterilen örnekte artık iki düğüm dizisi vardır: Biri 'standart' 'yürütme' düğüm dizisi, ikincisi ise iki NVIDIA GPU'sunun (Azure'da Standard_NV12) bulunduğu bir MachineType sağlayan 'gpu' olarak adlandırılır. Ayrıca yapılandırma bölümünde 'csge:sgeexec' tarifinin yanında iki yeni öğe olduğunu da unutmayın. gridengine.slot_type = gpu ekleme, Kılavuz Altyapısı zamanlayıcıya bu düğümlerin 'gpu' düğümleri olarak adlandırılması gerektiğini ve yalnızca 'gpu' işleri çalıştırması gerektiğini bildirir. 'gpu' adı rastgeledir, ancak düğümü açıklayan bir ad en kullanışlı olan addır. Ayarı gridengine.slots = 2, yazılıma bu düğüm türünün aynı anda yalnızca iki iş çalıştıradığından emin olmasını söyler (Standard_NV12 yalnızca 2 GPU vardır).

Varsayılan olarak Kılavuz Altyapısı, sistemin CPU sayısına göre düğüm başına yuva sayısını atar. Bu durumda, bu varsayılan davranış tek bir düğümde eşzamanlı olarak çalışan çok fazla iş olmasına neden olabilir. Gösterilen örnekte nodearray'de CoreCount=2 MachineType'da bulunan GPU sayısıyla eşleşecek şekilde ayarlanmıştır ve CycleCloud'un bu diziyi GPU ile CPU sayısı arasında doğru ölçeklendirmesine olanak sağlar.

Komutunu çalıştırarak makinelerinizin yuva sayısını ve slot_type doğrulayabilirsiniz:

    -bash-4.1# qstat -F slot_type
    queuename                      qtype resv/used/tot. load_avg arch          states
    ---------------------------------------------------------------------------------
    all.q@ip-0A000404              BIP   0/0/4          0.17     linux-x64
        hf:slot_type=execute
    ---------------------------------------------------------------------------------
    all.q@ip-0A000405              BIP   0/0/2          2.18     linux-x64
        hf:slot_type=gpu
    ---------------------------------------------------------------------------------
    all.q@ip-0A000406              BIP   0/0/4          0.25     linux-x64

Her bir 'slot_type' olarak belirtilenin 'execute' ve 'gpu' olduğuna dikkat edin. Yuva türleri tek tek yapılandırılır ve 'yürütme' yuvasının sayısı makinedeki CPU sayısı olan 4'tür. Küme yapılandırma şablonumuzda belirttiğimiz 'gpu' yuva türü için yuva sayısı 2'dir. Üçüncü makine, işleri çalıştırmayan ana düğümdür.

Kılavuz Altyapısı Gelişmiş Kullanımı

Bu yapılandırma ayarları, düğümlerin ve düğüm dizilerinin gelişmiş özelleştirmesini sağlar. Örneğin, işler her biri 10 GB gibi belirli bir miktarda belleğe ihtiyaç duyuyorsa, 60 GB belleğe sahip makineleri başlatan bir 'execute' nodearray tanımlayabilir ve ardından bu düğüm türünde yalnızca 6 işin eşzamanlı olarak çalıştırılabilmesini sağlamak için yapılandırma seçeneklerini gridengine.slots = 6 ekleyebilirsiniz (her işin çalışmak için en az 10 GB belleğe sahip olduğundan emin olun).

Kılavuz Altyapısında Gruplandırılmış Düğümler

Paralel bir iş kılavuz altyapısına gönderildiğinde, CycleCloud'un her MPI işini bir grup düğüm isteği olarak ele almak için kullandığı varsayılan otomatik ölçeklendirme davranışı devreye girer. Gruplandırılmış düğümler sıkı bir şekilde eşleştirilir ve MPI iş akışları için idealdir.

Gruplandırılmış düğüm kümesi bir Kılavuz Altyapısı kümesine katıldığında, her düğümün grup kimliği karmaşık değerinin affinity_groupdeğeri olarak kullanılır. İşler için bir affinity_group belirtilmesini gerektirerek, Grid Motoru zamanlayıcısı işlerin yalnızca aynı gruptaki makinelere atanmasını sağlar.

CycleCloud'un otomasyonu otomatik olarak gruplandırılmış düğümler isteğinde bulunur ve paralel işlerle karşılaşıldığında bunları kullanılabilir benşim gruplarına atar.

İşleri Grid Motoruna Gönderme

İşleri Kılavuz Altyapısı zamanlayıcısına göndermenin en genel yolu şu komuttır:

qsub my_job.sh

Bu komut, "execute" nodearray'i tarafından tanımlanmış "execute" türünde bir düğümde çalışan bir iş gönderir. bir işin farklı türde bir nodearray üzerinde çalıştırılmasını sağlamak için (örneğin, gösterilen 'gpu' düğüm türü) gönderimimizi değiştiririz:

qsub -l slot_type=gpu my_gpu_job.sh

Bu komut, işin yalnızca 'gpu' slot_type üzerinde çalışmasını sağlar.

slot_type atlandığında, 'execute' otomatik olarak göreve atanır. Kullanıcı, slot_type'leri işlere otomatik olarak atayan mekanizmayı değiştirebilir. /opt/cycle/jetpack/config/autoscale.py konumunda bulunan ve tek bir "sge_job_handler" işlevi tanımlaması gereken bir python betiği oluşturulabilir. Bu işlev, bir komutun çıkışına qstat -j JOB_ID benzer şekilde işin sözlük gösterimini alır ve iş için güncelleştirilmesi gereken sabit kaynaklardan oluşan bir sözlük döndürmelidir.

Örneğin, iş adında 'gpu' harfleri yer alıyorsa, aşağıdaki betik işi 'gpu' slot_type'a atar. Kullanıcıların iş parametrelerini değiştirmeden işlerini otomatik olarak göndermelerine izin verilirken, işlerin doğru düğümlerde çalıştığından ve otomatik olarak ölçeklendiğinden emin olunur.

#!/usr/env python
#
# File: /opt/cycle/jetpack/config/autoscale.py
#
def sge_job_handler(job):
  # The 'job' parameter is a dictionary containing the data present in a 'qstat -j JOB_ID':
    hard_resources = {'slot_type': 'execute', 'affinity_group' : 'default' }

  # Don't modify anything if the job already has a slot type
  # You could modify the slot type at runtime by not checking this
  if 'hard_resources' in job and 'slot_type' in job['hard_resources']:
      return hard_resources

  # If the job's script name contains the string 'gpu' then it's assumed to be a GPU job.
  # Return a dictionary containing the new job_slot requirement to be updated.
  # For example: 'big_data_gpu.sh' would be run on a 'gpu' node.
  if job['job_name'].find('gpu') != -1:
      hard_resources {'slot_type': 'gpu'}
  else:
      return hard_resources

Aktarılan 'job' parametresi, bir qstat -j JOB_ID çağrısındaki verileri içeren bir sözlüktür.

{
    "job_number": 5,
    "job_name": "test.sh",
    "script_file": "test.sh",
    "account": "sge",
    "owner": "cluster.user",
    "uid": 100,
    "group": "cluster.user",
    "gid": 200,
    "submission_time": "2013-10-09T09:09:09",
    "job_args": ['arg1', 'arg2', 'arg3'],
    "hard_resources": {
       'mem_free': '15G',
       'slot_type': 'execute'
    }
}

Bağımsız değişkenler, bellek gibi kaynak gereksinimleri veya gönderen kullanıcı gibi tanımlanan herhangi bir iş parametresine göre slot_type'leri otomatik olarak atamak için bu betik işlevini kullanabilirsiniz.

Her 'slot_type' için 5 iş gönderdiğinizi varsayalım:

qsub -t 1:5 gpu_job.sh
qsub -t 1:5 normal_job.sh

Şimdi kuyrukta 10 iş olacaktır. Tanımlanan betik nedeniyle, adında 'gpu' bulunan beş iş otomatik olarak yalnızca 'slot_type=gpu' düğümlerinde çalışacak şekilde yapılandırılır. CycleCloud otomatik ölçeklendirme mekanizması 5 'gpu' işi ve 5 'yürütme' işi olduğunu algılar. 'gpu' düğüm dizisi düğüm başına 2 yuvaya sahip olarak tanımlandığından, CycleCloud bu düğümlerden 3'ünü başlatır (5/2=2,5 yukarı yuvarlanarak 3 olur).

'Execute' nodearray için makine türü her biri 4 CPU'ya sahip olduğundan 5 normal iş vardır. Bu işleri işlemek için CycleCloud, bu düğümlerden 2'sini başlatır (5/4=1,25 yukarı yuvarlanır ve sonuç 2 olur). Kısa bir başlangıç döneminden sonra, yeni başlatılan düğümler kendilerini başlatır ve yapılandırır. Hazır olduklarında, 10 işin tamamı tamamlanır. Ardından 5 düğüm, bulut sağlayıcısıyla başka bir faturalama döngüsü başlamadan önce otomatik olarak kapatılır.

İşlerin süresi bir saat olduğu varsayılır. İş çalışma zamanı biliniyorsa, otomatik ölçeklendirme algoritması bu bilgilerden yararlanabilir. İşin beklenen çalışma süresini otomatik ölçeklendirmeye bildirmek için, bunu iş bağlamına ekleyin. Aşağıdaki örnek, otomatik ölçeklendirme için iş çalışma zamanını 10 dakikaya ayarlar:

qsub -ac average_runtime=10 job_with_duration_of_10m.sh

Izgara Motoru Yapılandırma Referansı

İşlevleri özelleştirmek için değiştirebileceğiniz Kılavuz Altyapısı'na özgü yapılandırma seçenekleri şunlardır:

SGE-Specific Yapılandırma Seçenekleri Açıklama
gridengine.slots Belirli bir düğümün Grid Engine'e bildireceği yuva sayısı. Yuva sayısı, bir düğümün yürütebileceği eşzamanlı iş sayısıdır; bu değer varsayılan olarak belirli bir makinedeki CPU sayısıdır. CPU'ya göre değil bellek, GPU'lar vb. temelinde iş çalıştırmadığınız durumlarda bu değeri geçersiz kılabilirsiniz.
gridengine.slot_type Bir düğümün sağladığı 'yuva' türünün adı. Varsayılan değer :'execute'. bir iş 'slot_type=' sabit kaynağıyla etiketlendiğinde, bu iş yalnızca aynı yuva türündeki bir makinede çalışır. Bu etiketleme, düğüm başına farklı yazılım ve donanım yapılandırmaları oluşturmanıza ve uygun bir işin her zaman doğru düğüm türünde zamanlandığından emin olmanıza olanak tanır.
gridengine.ignore_fqdn Varsayılan: doğru. Kümenizdeki tüm düğümler tek bir DNS etki alanının parçası değilse false olarak ayarlayın.
gridengine.version Varsayılan: '2011.11'. Bu yapılandırma seçeneği, yüklenecek ve çalıştırılacak Kılavuz Altyapısı sürümünü belirtir. Şu anda varsayılan ve tek kullanılabilir seçenektir. Grid Engine yazılımının diğer sürümleri gelecekte desteklenebilir.
gridengine.root Varsayılan: '/sched/sge/sge-2011.11' Bu konum, Grid Motoru'nun sistemdeki her bir düğüme kurulduğu ve bağlandığı yerdir. Bu değeri değişmeden tutmak en iyisidir. Ancak, değiştirirseniz kümedeki her düğümde aynı değeri ayarladığınızdan emin olun.

CycleCloud, zamanlayıcılar arasında standart bir otomatik durdurma öznitelikleri kümesini destekler:

Öznitelik Açıklama
cyclecloud.cluster.autoscale.durdur_etkin Bu düğümde otomatik durdurmayı etkinleştirir. [doğru/yanlış]
cyclecloud.cluster.autoscale.iş_tamamlandıktan_sonra_bekleme_süresi Bir düğümün işleri tamamladıktan sonra otomatik olarak durdurulmadan önce boşta kalma süresi (saniye cinsinden).
cyclecloud.cluster.otomatik_ölçekleme.işler_öncesi_boşta_kalma_süresi Otomatik olarak durdurulmadan önce bir düğümün işler tamamlanıp tamamlanmadığına bakılmaksızın boşta kalacağı süre (saniye cinsinden).

Bilinen Sorunlar

  • qsh komutu, interaktif oturum için çalışmıyor. Alternatif olarak kullanın qrsh .
  • Otomatik ölçeklendirme exclusive=1 kompleksi dikkate almıyor, bu da beklenenden daha az düğümün başlatılmasına neden olabilir.

Uyarı

Windows resmi olarak desteklenen bir GridEngine platformu olsa da CycleCloud şu anda Windows üzerinde GridEngine çalıştırmayı desteklemez.

Bu sayfa, CycleCloud ile (Altair) GridEngine kullanma olanakları ve yapılandırmasıyla ilgilidir.

Kaynakları Yapılandırma

Cyclecloud-gridengine uygulaması, zengin otomatik ölçeklendirme ve küme yapılandırma araçları sağlamak için sge kaynaklarını Azure bulut kaynaklarıyla eşleştirir. Uygulama CycleCloud kullanıcı arabirimi aracılığıyla oluşturulan kümeler için otomatik olarak dağıtılır veya mevcut bir kümedeki herhangi bir GridEngine yönetici konağına yüklenebilir.

CycleCloud-GridEngine kurulumu veya güncellenmesi

Cyclecloud-gridengine paketi GitHub'da yayın yapıtı olarak kullanılabilir. Yükleme ve yükseltme aynı işlemi izler. Uygulama virtualenv ile python3 gerektirir.

tar xzf cyclecloud-gridengine-pkg-*.tar.gz
cd cyclecloud-gridengine
./install.sh

Önemli Dosyalar

Uygulama her çalıştığında sge yapılandırmasını ayrıştırıyor - işler, kuyruklar, karmaşıklıklar. Bilgiler, komutun stderr ve stdout çıktılarında ve ayrıca yapılandırılabilir düzeyde bir günlük dosyasına kaydedilir. Bağımsız değişkenler içeren tüm GridEngine yönetim komutları da dosyaya kaydedilir.

Açıklama Yer
Otomatik Ölçeklendirme Yapılandırması /opt/cycle/gridengine/autoscale.json
Otomatik Ölçeklendirme Güncesi /opt/cycle/jetpack/logs/autoscale.log
qconf iz günlüğü /opt/cycle/jetpack/logs/qcmd.log

SGE kuyrukları, sunucu grupları ve paralel ortamlar

cyclecloud-gridengine otomatik ölçeklendirme yardımcı programı, azgeküme yapılandırmasına göre kümeye konaklar ekler. Otomatik ölçeklendirme işlemleri aşağıdaki eylemleri gerçekleştirir.

  1. İş kaynağı isteğini okuyun ve başlamak için uygun bir VM bulun
  2. VM'yi başlatın ve hazır olmasını bekleyin
  3. Kuyruğu ve paralel ortamı işten oku
  4. Kuyruğa/pe'ye bağlı olarak ana bilgisayarı uygun bir ana bilgisayar grubuna atayın
  5. Konağı kümeye ve konak grubunu içeren başka bir kuyruğa ekleyin

short.q adlı bir kuyruk için aşağıdaki kuyruk tanımını göz önünde bulundurun

hostlist              @allhosts @mpihg01 @mpihg02 @lowprio 
...
seq_no                10000,[@lowprio=10],[@mpihg01=100],[@mpihg02=200]
pe_list               NONE,[@mpihg01=mpi01], \
                      [@mpihg02=mpi02]

qsub -q short.q -pe mpi02 12 my-script.sh bir iş gönderildiğinde en az bir VM başlatılır. Küme eklendiğinde, hem kuyruğa hem de paralel ortama uygun olan konak grubu @mpihg02'ye katılır. @allhosts, özel bir konak grubuna da katılır.

qsub -q short.q my-script.sh ile bir iş gönderir ve bir paralel ortam pe belirtmezseniz, elde edilen VM @allhosts ve @lowpriority konak gruplarına katılır, bu gruplar pes atanmamış bir kuyruğa bağlıdır.

Son olarak, qsub -q short.q -pe mpi0* 12 my-script.sh ile gönderilmiş bir iş, CycleCloud ayırma tahminlerine bağlı olarak @mpihg01 veya @mpihg02'ye bir VM eklenmesi sonucunu doğurur.

Paralel ortamlar, CycleCloud yerleştirme grubuna örtük olarak eşittir. PE'deki VM'ler aynı ağ içinde olacak şekilde kısıtlanır. Yerleştirme grubunu tutmayan bir PE kullanmak istiyorsanız autoscale.json kullanarak çıkış yapın.

Burada make pe için yerleştirme gruplarından vazgeçiyoruz.

"gridengine": {
    "pes": {
      "make": {
        "requires_placement_groups": false
      }
    },

CycleCloud Yerleştirme Grupları

CycleCloud yerleştirme grupları, SinglePlacementGroup ile Azure VMSS ile birebir eşleşir - Bir yerleştirme grubundaki VM'ler bir Infiniband ağını paylaşır ve yalnızca kendi yerleştirme grubundaki VM'lerle paylaşır. Bu siloların sezgisel olarak korunmasını sağlamak için, yerleştirme grupları GridEngine paralel ortamıyla 1:1 oranında eşleştirilir.

Bir iş için paralel bir ortam belirtmek, işin akıllı bir konak grubu atama mantığı kullanarak bir yerleştirme grubunda çalıştırılmasını kısıtlar. bu davranışı autoscale.jsoniçindeki ilgili yapılandırma aracılığıyla devre dışı bırakabilirsiniz: "required_placement_groups" : false.

Otomatik ölçeklendirme yapılandırması

Bu eklenti, iş yükünün taleplerini karşılamak için ızgarayı otomatik olarak ölçeklendirir. autoscale.json yapılandırma dosyası, Kılavuz Altyapısı otomatik ölçeklendiricisinin davranışını belirler.

  • Cyclecloud bağlantı ayrıntılarını ayarlama
  • Boşta düğümler için sonlandırma zamanlayıcısını ayarlama
  • Çok boyutlu otomatik ölçeklendirme desteklenir. İş paketlemesinde hangi özniteliklerin kullanılacağını yapılandırabilirsiniz, örneğin yuvalar veya bellek
  • Yönetilecek kuyrukları, paralel ortamları ve konak gruplarını kaydetme
Konfigürasyon Türü Açıklama
URL Dize Creative Commons URL'si
kullanıcı adı/parola Dize CC Bağlantı Ayrıntıları
küme_adı Dize CC Küme Adı
varsayılan_kaynaklar Harita Otomatik ölçeklendirme için düğüm kaynağını Kılavuz Altyapısı konak kaynağına bağlama
boşta kalma süresi Int Boşta düğümleri sonlandırmadan önce bekleme süresi (saniye cinsinden)
başlatma_zaman_aşımı Int Uzun yapılandırma aşamaları (lar) sırasında düğümleri sonlandırmadan önce bekleme süresi
gridengine.relevant_complexes Liste (Dize) Otomatik ölçeklendirmede göz önünde bulundurulacak grid motoru bileşenleri, örneğin yuvalar, mem_free
gridengine.logging Dosya Günlük yapılandırma dosyasının konumu
gridengine.pes Yapı PE'lerin davranışını belirtin, örneğin requires_placement_group = false

Otomatik ölçeklendirme programı yalnızca İlgili Kaynağı dikkate alır

Başka bir otomatik ölçeklendirme kaynağı

Varsayılan olarak, işler birçok slot talep eder ve küme bu talepler doğrultusunda ölçeklendirilir.

m_mem_free için iş kaynağı isteğine göre otomatik ölçeklendirme yapmak istediğimizi düşünelim.

  1. m_mem_free öğesini gridengine.relevant_resources'e autoscale.json içine ekle
  2. m_mem_freeautoscale.json düğüm düzeyinde bellek kaynağına bağlayın.

Bu öznitelikler, _default/node.* içinde değer olarak ile referans alınabilir.

Düğüm Türü Açıklama
nodearray Dize Cyclecloud nodearray adı
yerleşim_grubu Dize Nodearray içindeki cyclecloud yerleştirme grubunun adı
vm_size Dize VM ürün adı, örneğin, "Standard_F2s_v2"
vcpu_count Int Tek tek ürün sayfalarında gösterildiği gibi düğümde kullanılabilen sanal CPU'lar
pcpu_count Int Düğümde kullanılabilen fiziksel CPU'lar
hafıza Dize VM'de birim göstergesiyle yaklaşık fiziksel bellek miktarı, örneğin "8,0g"

Diğer öznitelikler ad alanındadır node.resources.* , örneğin, 'node.resources.

Düğüm Türü Açıklama
ncpus Dize VM'de kullanılabilir CPU sayısı
pcpus Dize VM'de kullanılabilen fiziksel CPU sayısı
ngpus Tam sayı VM'de kullanılabilen GPU sayısı
üye Dize VM'deki birim göstergesiyle yaklaşık fiziksel bellek miktarı, örneğin "8,0b"
memkb Dize VM'de birim göstergesiyle mevcut yaklaşık fiziksel bellek, örneğin "8,0k"
memmb Dize VM'de yaklaşık olarak birim göstergesiyle mevcut fiziksel bellek, örneğin, "8,0m"
memgb Dize VM'de birim göstergesiyle yaklaşık fiziksel bellek miktarı, örneğin "8,0g"
memtb Dize Vm'de birim göstergesiyle yaklaşık fiziksel bellek kullanılabilir; örneğin, "8,0t"
Slotlar Tam sayı Ncpus ile aynı
slot_türü Dize Uzantılar için ek etiket. Kullanılmadı.
m_mem_free Dize Yürütme ana bilgisayarında boş bellek bekleniyor, örneğin, "3.0g"
mfree Dize _m/_mem/ücretsiz ile aynı

Kaynak Eşleme

ayrıca default_resources için kullanılabilen matematik işlemleri de vardır. Belirli bir düğüm dizisinde yuvaları ikiye düşürün ve docker kaynağını tüm düğümlere ekleyin:

    "default_resources": [
    {
      "select": {"node.nodearray": "beegfs"},
      "name": "slots",
      "value": "node.vcpu_count",
      "subtract": 2
    },
    {
      "select": {},
      "name": "docker",
      "value": true
    },

Düğüm vCPU'larını slot kompleksine ve memmb'dan mem_free'e eşleme, yaygın olarak kullanılan varsayılan değerlerdir. İlk ilişkilendirme gereklidir.

    "default_resources": [
    {
      "select": {},
      "name": "slots",
      "value": "node.vcpu_count"
    },
    {
      "select": {},
      "name": "mem_free",
      "value": "node.resources.memmb"
    }
 ],

Bir karmaşık değerin tamamına eşit olmayan bir kısayola sahipse, her ikisini de default_resources içinde tanımlayın; burada physical_cpu karmaşık ad:

"default_resources": [
    {
      "select": {},
      "name": "physical_cpu",
      "value": "node.pcpu_count"
    },
    {
      "select": {},
      "name": "pcpu",
      "value": "node.resources.physical_cpu"
    }
]

Belirli bir öznitelik için belirli bir davranış istediğinizde sıralama önemlidir. Diğer tüm nodearray'ler için varsayılan yuva sayısını korurken belirli bir nodearray için tek bir yuva ayırmak için:

    "default_resources": [
    {
      "select": {"node.nodearray": "FPGA"},
      "name": "slots",
      "value": "1",
    },
    {
      "select": {},
      "name": "slots",
      "value": "node.vcpu_count"
    },
]

Konak grupları

CycleCloud otomatik ölçeklendiricisi, iş gereksinimlerini karşılamaya çalışırken düğümleri uygun konak grubuna eşler. Kuyruklar, paralel ortamlar ve karmaşıklıklar dikkate alınır. Mantığın büyük kısmı uygun cyclecloud demetini (ve düğüm miktarını) uygun sge konak grubuyla eşleştirmektir.

Şu şekilde gönderilen bir iş için: qsub -q "cloud.q" -l "m_mem_free=4g" -pe "mpi*" 48 ./myjob.sh

CycleCloud aşağıdaki konak gruplarının kesişimini bulur:

  1. cloud.q için pe_list içerir ve pe adıyla eşleşir, örneğin, pe_list [@allhosts=mpislots],[@hpc1=mpi].
  2. Tüm iş kaynaklarını sağlamak için yeterli kaynaklara ve abonelik kotasına sahip olun.
  3. Konak grubu kısıtlamaları yapılandırması bunları filtrelemez.

Birden çok konak grubu bu gereksinimleri karşılayabilir. Bu durumda, hangisinin kullanılacağına sistem karar vermelidir. Konak grubu üyeliği çakışmalarını çözmenin üç yolu vardır:

  1. Belirsizlikleri önlemek için kuyrukları yapılandırın.
  2. autoscale.jsonkısıtlamaları ekleyin.
  3. CycleCloud'un eşleşen konak gruplarını ad sıralı bir şekilde seçmesine imkan tanımak için zamanlayıcı yapılandırmasında weight_queue_host_sort < weight_queue_seqno ayarlayın.
  4. Bir konak grubu tercihini belirtmek için kuyruk yapılandırmasında ayarlayın seq_no 10000,[@hostgroup1=100],[@hostgroup2=200] .

Konak grubu kısıtlamaları

Bir kuyruk veya xproject birden çok konak grubunu tanımladığında, bu grupların herhangi biri potansiyel olarak yeni konaklar alabilir. Hangi konakların hangi kuyruklar için uygun olduğunu denetlemek için düğüm özelliklerine göre konak grubu kısıtlamaları uygulayabilirsiniz.

"gridengine": {
    "hostgroups": {
      "@mpi": {
        "constraints": {
          "node.vm_size": "Standard_H44rs"
        }
      },
      "@amd-mem": {
        "constraints" : { 
            "node.vm_size": "Standard_D2_v3",
            "node.nodearray": "hpc" 
            }
        },
    }
  }

İpucu: Tüm kullanılabilir düğüm özelliklerini azge buckets inceleyin.

azge

Bu paket , azge adlı bir komut satırıyla birlikte gelir. Bu program otomatik ölçeklendirme gerçekleştirmek için kullanılır ve otomatik ölçeklendirme altındaki tüm alt işlemleri ayrı bileşenlere böler. Bu komutlar, GridEngine ortam değişkenlerinin ayarlanmasını gerektirir. Aynı profilden qconf çağırabildiğiniz şekilde, qsub ve azge de çağırabilmelisiniz.

azge komutları Açıklama
Doğrulamak Otomatik ölçeklendiricide veya GridEngine'de bilinen yapılandırma hatalarını denetler
Işleri Kuyruktaki tüm işleri gösterir
Kovalar Otomatik ölçeklendirme için kullanılabilir kaynak havuzlarını gösterir
düğümler Küme konaklarını ve özelliklerini gösterir
talep Cyclecloud kapanlarıyla iş gereksinimlerini eşleştirir ve otomatik ölçeklendirme neticesi sağlar.
otomatik ölçeklendirme Düğümleri yapılandırmalara göre başlatıp kaldırarak tam otomatik ölçeklendirme gerçekleştirir

Zamanlayıcı yapılandırmalarını (qconf) veya otomatik ölçeklendirme yapılandırmalarını (autoscale.json) değiştirirken veya hatta ilk kez ayarlarken, otomatik ölçeklendirme davranışının beklentileri karşılayıp eşleştirmeyebileceğini denetlemek için azge kullanılabilir. Kök kullanıcı olarak, aşağıdaki işlemleri çalıştırabilirsiniz. Otomatik ölçeklendirmenin nasıl çalıştığını anlamak için bu kavramlara alışmak önemlidir.

  1. Bilinen sorunların yapılandırmalarını doğrulamak için komutunu çalıştırın azge validate .
  2. CycleCloud kümesi tarafından sunulan kaynakları denetlemek için komutunu çalıştırın azge buckets .
  3. Kuyruğa alınan iş ayrıntılarını incelemek için komutunu çalıştırın azge jobs .
  4. Komutunu çalıştırarak azge demand demet eşleştirme işini gerçekleştirin. Ardından hangi işlerin hangi kovalar ve host grupları ile eşleştiklerini inceleyin.
  5. Düğüm ayırma işlemini başlatmak veya birleştirmeye hazır düğümler eklemek için komutunu çalıştırın azge autoscale .

Komutlar beklendiği gibi çalıştıktan sonra, komutu kök crontab'a ekleyerek azge autoscale devam eden otomatik ölçeklendirmeyi etkinleştirin. GridEngine ortam değişkenlerini önceden kaynak olarak sağladığından emin olun.

* * * * * . $SGE_ROOT/common/settings.sh && /usr/local/bin/azge autoscale -c /opt/cycle/gridengine/autoscale.json

Karma küme oluşturma

CycleCloud, bulutta ani artış senaryolarını destekler. Temel yapılandırma, $SGE_ROOT dizininin bulut düğümleri tarafından erişilebilir olduğunu varsayar. Bu varsayım, gridengine.shared.spool = false, gridengine.shared.bin = false ayarlanarak ve GridEngine yerel olarak yüklenerek gevşetilebilir.

Basit bir durum için , 'execute' düğümlerinin bağlanabileceği bir dosya sistemi sağlamanız gerekir. Bu dosya sistemi, ... içermelidir. dizinini seçin ve bağlamayı isteğe bağlı ayarlarda yapılandırabilirsiniz. Sched ve paylaşılan dizinlerin bağımlılıkları serbest bırakıldığında, kümenin parçası olan zamanlayıcı düğümünü varsayılan olarak kapatabilir ve dış dosya sisteminden yapılandırmaları kullanabilirsiniz.

  1. Yeni bir gridengine kümesi oluşturun.
  2. Dönüş proxy'sini devre dışı bırakın.
  3. /sched ve /shared değerlerini dış dosya sistemleriyle değiştirin.
  4. Kümeyi kaydedin.
  5. Zamanlayıcı düğümünü kullanıcı arabiriminde eylem olarak kaldırın.
  6. Kümeyi başlatın, ancak başlangıçta hiçbir düğüm başlamaz.
  7. Yeni kümeyi kullanmak için cyclecloud-gridengine ile yapılandırma

CycleCloud'da Univa Grid Altyapısını Kullanma

GridEngine için CycleCloud projesi varsayılan olarak sge-2011.11 kullanır. Altair lisans sözleşmenize göre kendi Altair GridEngine yükleyicilerinizi kullanabilirsiniz. Bu bölümde CycleCloud GridEngine projesiyle Altair GridEngine'in nasıl kullanılacağı belgelenmektedir.

Önkoşullar

Bu örnek 8.6.1-demo sürümünü kullanır, ancak 8.4.0'dan büyük tüm GE sürümleri desteklenir.

  1. Kullanıcıların UGE ikili dosyaları sağlaması gerekir
  • ge-8.6.x-bin-lx-amd64.tar.gz
  • ge-8.6.x-common.tar.gz
  1. CycleCloud CLI yapılandırılmalıdır. Belgelere buradan ulaşabilirsiniz

İkili dosyaları bulut dolabına kopyalayın

AGE'nin tamamlayıcı bir sürümü (8.6.7-demo) CycleCloud ile dağıtılır. Başka bir sürüm kullanmak için ikili dosyaları CycleCloud'un kullandığı depolama hesabına yükleyin.


$ azcopy cp ge-8.6.12-bin-lx-amd64.tar.gz https://<storage-account-name>.blob.core.windows.net/cyclecloud/gridengine/blobs/
$ azcopy cp ge-8.6.12-common.tar.gz https://<storage-account-name>.blob.core.windows.net/cyclecloud/gridengine/blobs/

Küme şablonunda yapılandırmaları değiştirme

GridEngine şablonunun yerel bir kopyasını alın ve bunu varsayılan yerine UGE yükleyicilerini kullanacak şekilde değiştirin.

wget https://raw.githubusercontent.com/Azure/cyclecloud-gridengine/master/templates/gridengine.txt

gridengine.txt dosyasında ilk geçtiği yeri [[[configuration]]] bulun ve aşağıdaki kod parçacığıyla eşleşecek şekilde metin ekleyin. Dosya girintiye duyarlı değil.

Uyarı

Yapılandırmadaki ayrıntılar, özellikle sürüm, yükleyici dosya adıyla eşleşmelidir.

[[[configuration gridengine]]]
    make = ge
    version = 8.6.12-demo
    root = /sched/ge/ge-8.6.12-demo
    cell = "default"
    sge_qmaster_port = "537"
    sge_execd_port = "538"
    sge_cluster_name = "grid1"
    gid_range = "20000-20100"
    qmaster_spool_dir = "/sched/ge/ge-8.6.12-demo/default/spool/qmaster" 
    execd_spool_dir = "/sched/ge/ge-8.6.12-demo/default/spool"
    spooling_method = "berkeleydb"
    shadow_host = ""
    admin_mail = ""
    idle_timeout = 300

    managed_fs = true
    shared.bin = true

    ignore_fqdn = true
    group.name = "sgeadmin"
    group.gid = 536
    user.name = "sgeadmin"
    user.uid = 536
    user.gid = 536
    user.description = "SGE admin user"
    user.home = "/shared/home/sgeadmin"
    user.shell = "/bin/bash"

Bu GridEngine yapılandırmaları, küme başlatıldığında varsayılan GridEngine sürümünü ve yükleme konumunu geçersiz kılar. Paylaşılan bir NFS konumu olduğu için kümedeki /sched üzerinden taşınmak güvenli değildir.