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 unix@fi.muni.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 unix@fi.muni.cz ji lze změnit, pokud to tedy okolnosti (jiné běžící výpočty) rozumně dovolí.