Aura
Server aura.fi.muni.cz
je dostupný zaměstnancům a PhD studentům FI pro
dlouhodobější, náročnější nebo GPU výpočty. Pro studijní nebo výzkumné
účely můžou zaměstnanci FI požádat o přidělení přístupu dalším osobám přes
unixYQknL6hqo@figlE=V4rF2.muni3RIiV_J3L.cz
.
Hardwarová konfigurace
Server Aura
je postaven na platformě Asus RS720A-E11-RS24U v konfiguraci:
- dva 64-jádrové procesory AMD EPYC 7713 2.0 GHz (celkem 128 fyzických jader a 256 vláken).
- 2 TiB DDR4 RAM 3200 MHz
- 10 Gbps ethernetové připojení
- 2 SATA SSD o kapacitě 960 GB v RAID 1
- 2 NVMe disky o kapacitě 6 TB zapojené v RAID 1
- 2 GPU karty NVIDIA A100 80 GB PCIe s NVLink
Viz také blogový příspěvek představující tento server.
Způsob práce na výpočetních serverech
Dlouhodobě běžící procesy (hodina a více) spouštějte se
sníženou prioritou (v rozsahu 10–19, 19 je nejnižší), například
nice ./your_program
nebo nice -n 15 ./your_program
.
Pro změnu priority už běžícího procesu lze použít příkaz
renice
,
ale pozor na to, že proces může běžet ve
více vláknech a změna priority pro jeden proces může změnit prioritu
jenom jednoho vlákna. Výpis všech vláken svých procesů včetně priority
můžete získat například takto:
ps x -Lo pgid,pid,tid,user,nice,tty,time,args
Krátkodobé procesy nebo interaktivní ladění vašich programů můžete provádět s normální prioritou.
V případě, že váš proces nebude dodržovat omezení na prioritu a bude využívat velké množství výpočetního výkonu, bude v rámci předcházení omezování ostatních uživatelů všem vašim procesům nastavena nejnižší priorita 19. U opakovaného nebo vážnějšího porušování tohoto pravidla vám může být dočasně zablokován fakultní účet.
Omezení paměti pomocí systemd
Horní limit využití paměti v systému lze zjistit pomocí příkazu níže. Po překročení tohoto limitu se spustí mechanizmus OOM, který se pokusí ukončit vhodný proces.
systemctl show -p MemoryMax user-$UID.slice
Můžete si však vytvořit vlastní systemd scope, ve kterém lze nastavit přísnější (nižší) limit využitelné paměti:
systemd-run --user --scope -p MemoryMax=9G program
Programem může být i příkazový řádek (např. bash
). Limit na paměť se bude
uplatňovat na něj i všechny jeho potomky dohromady.
V tom je rozdíl oproti mechanizmu ulimit
, kde omezení platí pro každý proces zvlášť.
Užitečné může být monitorování jak vytvořeného scope, tak i uživatelského scope:
# monitoring of the memory and CPU usage of your processes
systemd-cgtop /user.slice/user-$UID.slice
Omezení zdrojů pomocí ulimit
Příkazy limitování využití prostředků:
# limit available resources
help ulimit
# cap the size of virtual memory to 20000 kB
ulimit -v 20000
# cap the amount of total CPU time to 3600 seconds
ulimit -t 3600
# cap the number of concurrently running threads/processes
ulimit -u 100
Výše uvedené příkazy omezí zdroje shellu a všech jeho potomků na
uvedené hodnoty. Tyto nelze navýšit zpět; pro obnovu prostředí bez
nastavených omezení bude nutno spustit další separátní shell. Pozor ale
na to, že zdroje nastavené pomocí ulimit
platí pro každý proces
zvlášť. Pokud tedy nastavíte limit na 20 MB paměti a spustíte v takovém prostředí 10 procesů, mohou v součtu alokovat 200 MB paměti.
Pokud chcete jen omezit celkovou paměť na 20 MB, využijte systemd-run
.
Specifický software
Pokud pro svou práci potřebujete doinstalovat knihovny nebo nástroje, máte (kromě lokální kompilace) několik možností:
- pokud jsou součástí distribuce (
dnf search software-name
), můžete požádat správce o instalaci, - můžete si vyrobit modul,
- pokud jde o balíček pro Python, můžete požádat správce o jeho instalaci
do modulu
python3
. Můžete jej instalovat i lokálně pomocípip/pip3 install --user
. Při využitívirtualenv, conda
apod. doporučujeme instalovat prostředí do/var/tmp/login
(pozor na životnost souborů viz níže).
Diskové kapacity
Pro dočasná data, která by měla být rychle lokálně dostupná, jsou na serveru Aura k dispozici dva adresáře.
- Adresář
/tmp
je typu tmpfs. Díky umístění v RAM je přístup velmi rychlý, avšak data mezi rebooty serveru nejsou perzistentní a kapacita je velmi malá. - Adresář
/var/tmp
se nachází na rychlém NVMe RAID 1 svazku.
Chcete-li využívat tento prostor, ukládejte si svá data
do adresáře se svým loginem. Data, ke kterým se nepřistupuje (dle atime
), jsou
automaticky promazávána, u /tmp
při stáří v řádu dnů, u /var/tmp
v řádu měsíců (přesné nastavení najdete v souboru
/etc/tmpfiles.d/tmp.conf
). Diskové kvóty se zde neuplatňují; buďte
však ve využívání místa ohleduplní k ostatním.
GPU výpočty
Server Aura disponuje dvěma GPU kartami, jmenovitě NVIDIA A100 80 GB PCIe.
Upozornění: Aura je první server ve správě CVT, který je osazený i GPU kartami, a tedy není vyloučené, že vše nebude fungovat hladce už ze začátku. Pokud tedy máte nějaké připomínky nebo rady, neváhejte nám napsat.
GPU výpočty na Auře nejsou v současné době nijak systémově omezeny, a je tedy nutné se chovat ohleduplně k ostatním.
GPU karty jsou rozdělené pomocí technologie MIG (Multi-Instance GPU), díky čemuž je možné mít několik neovlivňujících se virtuálních GPU (instancí).
Před zahájením výpočtu si musíme zvolit volnou MIG instanci. Pomocí výpisu z nvidia-smi
si zjistíme, které ID instancí existují a na kterých probíhají výpočty.
V příkladu níže vidíme, že existuje 1 MIG instance na GPU0 a 3 MIG instance na GPU1.
Při pohledu do Processes:
vidíme, že výpočty jsou spuštěny na jedné z instanci
na GPU0 (GI ID 0). Na GPU1 probíhají výpočty na instanci 3 a tedy instance
s GI ID 2 a 4 jsou volné.
Zvolíme tedy pro naše výpočty GPU1 s GI CI 4, které má v našem případě MIG Dev 2.
[user@aura ~]$ nvidia-smi
Mon Mar 21 15:34:36 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.47.03 Driver Version: 510.47.03 CUDA Version: 11.6 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA A100 80G... Off | 00000000:21:00.0 Off | On |
| N/A 43C P0 65W / 300W | 0MiB / 81920MiB | N/A Default |
| | | Enabled |
+-------------------------------+----------------------+----------------------+
| 1 NVIDIA A100 80G... Off | 00000000:61:00.0 Off | On |
| N/A 41C P0 70W / 300W | 45MiB / 81920MiB | N/A Default |
| | | Enabled |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| MIG devices: |
+------------------+----------------------+-----------+-----------------------+
| GPU GI CI MIG | Memory-Usage | Vol| Shared |
| ID ID Dev | BAR1-Usage | SM Unc| CE ENC DEC OFA JPG|
| | | ECC| |
|==================+======================+===========+=======================|
| 0 0 0 0 | 2406MiB / 81069MiB | 98 0 | 7 0 5 1 1 |
| | 5MiB / 13107... | | |
+------------------+----------------------+-----------+-----------------------+
| 1 2 0 0 | 19MiB / 40192MiB | 42 0 | 3 0 2 0 0 |
| | 0MiB / 65535MiB | | |
+------------------+----------------------+-----------+-----------------------+
| 1 3 0 1 | 2080MiB / 19968MiB | 28 0 | 2 0 1 0 0 |
| | 2MiB / 32767MiB | | |
+------------------+----------------------+-----------+-----------------------+
| 1 4 0 2 | 13MiB / 19968MiB | 28 0 | 2 0 1 0 0 |
| | 0MiB / 32767MiB | | |
+------------------+----------------------+-----------+-----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 0 0 235532 C python3 2403MiB |
| 1 3 0 235740 C python3 2061MiB |
+-----------------------------------------------------------------------------+
Nyní si pomocí příkazu nvidia-smi -L
zjistíme UUID. Chceme GPU 1 s MIG Dev 2,
tedy MIG-64f11db9-b10b-5dd9-97d1-3c46450b9388
:
[user@aura ~]$ nvidia-smi -L
GPU 0: NVIDIA A100 80GB PCIe (UUID: GPU-309d72fd-b4f8-d6e8-6a66-e3f2253e8540)
MIG 7g.80gb Device 0: (UUID: MIG-a5459e6a-b26d-5985-874c-528458a7728b)
GPU 1: NVIDIA A100 80GB PCIe (UUID: GPU-04712e69-7356-4de5-f983-84083131460e)
MIG 3g.40gb Device 0: (UUID: MIG-4f7fbfb7-a8a2-553d-875a-d9d56baf97a5)
MIG 2g.20gb Device 1: (UUID: MIG-bad562c5-744a-5742-be1a-c735195c52d0)
MIG 2g.20gb Device 2: (UUID: MIG-64f11db9-b10b-5dd9-97d1-3c46450b9388)
Nyní si nastavíme proměnnou prostředí CUDA_VISIBLE_DEVICES
a můžeme počítat.
[user@aura ~]$ export CUDA_VISIBLE_DEVICES=MIG-64f11db9-b10b-5dd9-97d1-3c46450b9388
[user@aura ~]$ python main.py
Monitorovat náš výpočet můžeme buď pomocí příkazu nvidia-smi
nebo pomocí grafického
nástroje nvitop
(doporučujeme mít větší okno terminálu než 80x24). Kvůli využití
MIG nejsou monitorovací nástroje schopné zobrazit využití GPU (N/A
), ale jen využitou paměť.
Pokud by pro vás existující konfigurace instancí MIGu nebyla vyhovující,
po dohodě na unixyP3RR_LK-@fia7XmwwJ7L.munipsLDUeA8S.cz
ji lze změnit, pokud to tedy
okolnosti (jiné běžící výpočty) rozumně dovolí.