Preskočiť na obsah

Kompilácia softvéru na clustri

Na clustri Perun existujú tri hlavné spôsoby kompilácie softvéru. Je potrebné zohľadniť, že cluster používa dve architektúry. Prihlasovacie uzly a CPU uzly používajú architektúru x86, zatiaľ čo GPU uzly používajú architektúru AArch64. Ak sa nepoužíva cross-kompilácia, softvér je preto potrebné zostavovať na strojoch s cieľovou architektúrou.

Na výpočtových uzloch však chýbajú vývojové hlavičkové súbory, takže kompilácia priamo na týchto uzloch môže byť problematická.

1. Kompilácia na prihlasovacom uzle

Pre väčšinu používateľov ide o najjednoduchšiu možnosť.

Prihlasovacie uzly už poskytujú kompilátory, vývojové knižnice a systémové hlavičkové súbory potrebné na zostavenie softvéru.

cmake -S . -B build
cmake --build build -j 4

Túto možnosť je vhodné zvoliť, ak kompilujete softvér iba príležitostne. Na vytvorenie spustiteľných súborov určených pre GPU partition je však potrebné použiť cross-kompiláciu.

Obmedzenia zdrojov

Prihlasovacie uzly sú zdieľané viacerými používateľmi a podliehajú obmedzeniam zdrojov.


2. Použitie testovacej partition

Ďalšou možnosťou je vyžiadať si zdroje z partition testing.

Kompilácia tak môže prebiehať prostredníctvom plánovača úloh a zároveň využívať uzly, ktoré poskytujú štandardné vývojové prostredie a systémové hlavičkové súbory.

Táto možnosť je vhodná pre kompilácie, ktoré vyžadujú viac zdrojov, než je vhodné používať priamo na prihlasovacom uzle.

Nevýhodou je, že v tejto partition je k dispozícii iba obmedzený počet uzlov. Ak ich už používajú iní používatelia, na spustenie úlohy môže byť potrebné čakať.

Aj v tomto prípade platí, že bez použitia cross-kompilácie nie je možné vytvárať zostavenia určené pre GPU partition.


3. Kompilácia na výpočtovom uzle

Pri rozsiahlejších zostaveniach alebo pri kompiláciách za behu (JIT) je možné vyžiadať si štandardný výpočtový uzol.

Táto možnosť poskytuje výrazne viac CPU a pamäťových zdrojov a zároveň zabraňuje zaťažovaniu prihlasovacích uzlov kompiláciou.

Štandardné výpočtové uzly však obsahujú iba runtime prostredie. Vývojové balíky a systémové hlavičkové súbory na nich zámerne nie sú nainštalované.

Na kompiláciu softvéru na výpočtovom uzle je potrebné načítať modul build-tools:

module load build-tools

Modul poskytuje vývojové prostredie založené na Singularity, ktoré obsahuje požadované kompilátory, hlavičkové súbory a vývojové knižnice. Je možné ho použiť na CPU výpočtových uzloch aj na GPU výpočtových uzloch.

Interaktívne prostredie na zostavenie

Interaktívne vývojové prostredie je možné spustiť pomocou:

build-shell

Napríklad:

module load build-tools
build-shell

module load GCC/15.2.0

cmake -S . -B build
cmake --build build -j 320 # alebo 288 na GPU uzloch

Aktuálny adresár, ako aj adresáre /project a /apps, sú dostupné vo vnútri kontajnera. Súbory vytvorené počas zostavenia sa preto zapisujú priamo do štandardného súborového systému clustra.

Vývojové prostredie je možné opustiť pomocou:

exit

Načítanie toolchainu

Obraz kontajnera neobsahuje kompletný toolchain. Požadovaný toolchain je preto stále potrebné načítať z prostredia Environment Modules, napríklad pomocou module load ....

Kompilácia na paralelných súborových systémoch

Kompilácia na paralelných súborových systémoch môže byť pomalá a môže spôsobovať problémy niektorým zostavovacím systémom, najmä pri použití veľkého počtu paralelných úloh a veľkého množstva malých objektových súborov.

Na výpočtových uzloch je možné na dočasné súbory vytvorené počas kompilácie použiť lokálne úložisko /work. Treba však pamätať na to, že po dokončení úlohy je potrebné skompilované súbory skopírovať na trvalé úložisko, pretože obsah adresára /work sa po skončení úlohy odstráni.

mkdir /work/$SLURM_JOB_ID/build
cmake -S . -B /work/$SLURM_JOB_ID/build
cmake --build /work/$SLURM_JOB_ID/build -j 72 # na jednej GPU karte
cp -rf /work/$SLURM_JOB_ID/build/* /project/your-project/

Spustenie jedného príkazu

Namiesto spustenia interaktívneho prostredia je možné jednotlivé príkazy vykonať priamo vo vývojovom prostredí pomocou build-env:

build-env cmake -S . -B build
build-env cmake --build build -j 320

Ktorú možnosť použiť?

Možnosť Vhodné pre Vývojové hlavičkové súbory Zdroje
Prihlasovací uzol Malé a príležitostné zostavenia Áno Obmedzené na 4 CPU jadrá
Testovacia partition Väčšie zostavenia so štandardným prostredím Áno Obmedzená dostupnosť
Výpočtový uzol + build-tools Veľké alebo paralelné zostavenia Štandardne nie, poskytuje ich však build-tools Zdroje pridelené plánovačom úloh

Pri príležitostnej kompilácii je zvyčajne najjednoduchšie použiť prihlasovací uzol.

Pri veľmi rozsiahlych zostaveniach, ktoré trvajú niekoľko hodín, alebo pri JIT kompilácii použite výpočtový uzol spolu s modulom build-tools.

Created by: Marek Štekláč