ScaleMP
Metacentrum wiki is deprecated after March 2023
Dear users, due to integration of Metacentrum into https://www.e-infra.cz/en (e-INFRA CZ service), the documentation for users will change format and site. The current wiki pages won't be updated after end of March 2023. They will, however, be kept for a few months for backwards reference. The new documentation resides at https://docs.metacentrum.cz. |
ScaleMP je SW vrstva (hypervizor), která spojuje několik běžných x86 serverů do jednoho SMP stroje. Smyslem takové agregace je zpřístupnit na jednom virtuálním stroji agregované zdroje (CPU, RAM) z mnoha serverů. Je to v podstatě opak klasické virtualizace, kdy na jednom serveru provozujeme několik virtuálních strojů. Firma ScaleMP označuje takovou architekturu jako versatile SMP či vSMP a její implementaci jako vSMP Foundation, lidově též ScaleMP.
V Metacentru je od roku 2015 zapojený stroj alfrid.meta.zcu.cz, což je vSMP systém pořízený z prostředků NTIS (ECE OP VaVpI, ZČU).
Pro koho je a není stroj vhodný
Výhody ScaleMP:
- uživatelská aplikace má k dispozici veškerou agregovanou paměť a CPU, odpadá nutnost dodatečné paralelizace úlohy
- systém je sestavený z běžně dostupného HW, je tedy o něco levnější než řešení implementující SMP na úrovni HW
- systém může přinést výrazné finanční úspory u SW s licencí vázanou na fyzické uzly (ikdyž právní výklad by mohl být asi sporný)
Nevýhody ScaleMP:
- systém ve své obecnosti často nedosahuje takového zrychlení aplikace, jakou by přinesla důsledná manuální paralelizace
- pokud chceme dosáhnout přijatelných výsledků v rychlosti běhu aplikace, je třeba i zde počítat z jistým úsilím při přípravě běhu úlohy
Z výše uvedeného vyplývá i vhodnost stroje pro konkrétní úlohy. Obecně lze říci, že stroj je vhodný zejména pro samostatně běžící úlohy, které potřebují velké množství procesorů a/nebo paměti, jejichž paralelizace je obtížná a přípravě jejich běhu je uživatel ochoten věnovat jisté netriviální usilí. Systém není příliš vhodný pro souběžný provoz menších neupravených úloh, u kterých se často projevuje výrazné zpomalení doby běhu proti běžnému nevirtualizovanému HW.
Z čeho se stroj skládá
Technicky se stroj alfrid skládá z 16 serverů (IBM x3550 M4) propojených 2xFDR infinibandem (SX6036), které maji v součtu 256 jader a 4TB paměti. Jako scratch slouží diskové pole IBM V3700 (24x 10k 600gb disky, propojené přes SAS do masternodu). Cluster má 2x10Gb/s uplink (z master nodu) do sítě Metacentra na ZČU. Součástí instalace je i 17. server, sloužící jako licenční a image server ScaleMP a dále pak lokální ethernetový switch (SG500-52) na agregaci IPMI a bootovaní po síti.
Jak na stroj získám přístup
Pro přístup ke stroji alfrid je třeba být členem Metacentra (podmínky a přiláška zde). Automatický přístup mají členové uživatelských skupin iti nebo kky, o individuální přístup je třeba požádat vlastníky HW, nejlépe emailem na meta@cesnet.cz s kopii na honzas@ntis.zcu.cz. Pokud máte afiliaci k výzkumnému centru NTIS, o členství ve zmíněných skupinách je možné požádat zástupce jednotlivých skupin (KKY - Jan Švec|Flídr Miroslav, KMA - Jan Nejedlý, KFY - Jiří Houška, KIV - Ladislav Pešička, KME - Miroslav Horák), kteří mají práva nové uživatele přidávat ( návod zde).
Členství ve skupině lze ověřit náhledem do /etc/group na libovolném stroji Metacentra nebo na stránkách Metacentra v sekci Můj účet -> Osobní údaje, na kartě VO setting se vybere VO Metacentrum a v pravé dolní části stránky se zobrazí seznam skupin.
Jak na stroji pustím úlohu
Přístup ke stroji řídí dávkový systém. Pokud s tímto systémem nemáte žádné zkušenosti nebo jste v prostředí Metacentra nováčkem, doporučujeme přečíst si alespoň základní informace v tutoriálu Průvodce pro začátečníky.
Úlohy musí na stroj alfrid přistupovat přes speciální frontu scalemp a je třeba specifikovat konkrétní skupinu, kterou k přístupu používáte. Vlastní příkaz pro spuštění by tedy vypadal např. takto:
qsub -q scalemp -W group_list=iti .....
V případě, že potřebujete celý stroj pro sebe, je možné při submitování buď požádat o všechny procesory (-l nodes=1:ppn=256) nebo použádat o stroj exkluzivně (-l nodes=1#excl). Pokud dáváte přednost interaktivnímu přístupu, přidejte k příkazu qsub volbu -I.
Pozn: Na stroj alfrid, tak jako na všechny ostatní stroje, je možné přihlásit se pomocí ssh, nicméně pro spouštění úloh je, z důvodů vyloučení kolize výpočtů, třeba používat výhradně systém PBS.
Jak upravit úlohu plně využila předností stroje
Hlavní příčinou pomalého běhu aplikací na vSMP systému je fyzická vzdálenost většiny paměti od procesoru, který zpracovává data (viz NUMA; zjednodušeně - místo aby si procesor došel po rychlé systémové sběrnici do lokální RAM, musí do PCI karty, dále po drátech do switche, odtud do sousedního uzlu, tam do paměti a pak zase celou trasu zpět. Celý proces komplikuje např. i udržování koherence keší mezi procesory). Přístup do nelokální paměti může být o jeden i více řádů pomalejší než přístup do lokální paměti. Proto je pro uspokojivý běh aplikace třeba zaměřit se zejména na zajištění lokality zpracovávaných dat, případně omezení souběžného přepisu konkrétní paměťové stránky v keši.
Na stránkách ScaleMP je po registraci k dispozici dokumnetace obsahující mimo jiné např. Best practices či návody pro úspešné zprovoznění nejpoužívanějšího SW (Ansys, Matlab, Fluent, VASP apod.).
Další doporučení, příklady a postupy, určené spíše pro optimalizaci vlastních aplikací, jsou ve formě příkladů k dispozici též na alfrid:/opt/ScaleMP/examples
V praxi se nám osvědčil následující postup:
- pročíst si alespoň základní dokumentaci ke ScaleMP
- podívat se, zda po váš SW není k dispozici podrobnější návod
- připravit si základní zadání úlohy, které bude počítat zhruba hodinu
- vyzkoušet pustit úlohu se všemi doporučeními na _prázném_ stroji
- zhodnotit jaké zrychlení jste dosáhli proti běžnému HW
- v případě neuspokojivých výsledků se obrátit na podporu Metacentra (meta@cesnet.cz) či podporu ScaleMP (Support@ScaleMP.com)
Jak těžké je upravit si aplikaci - modelový příklad: nejjednodušší úprava
Jako úplně první pokus o optimalizaci běhu aplikace lze vyzkouset před jejím spuštěním (např. do spoustěcího scriptu) přidat následující úpravu:
.... # najdi $NCPU procesoru, ktere jsou 'nejprihodnejsi' CPULIST=`/opt/ScaleMP/numabind/bin/numabind --offset $NCPU --flags=best 2>/dev/null` # svaz tento proces a jeho potomky s temito konkretnimi procesory taskset -pc $CPULIST $$ # pust vypocet ....
Pravděpodobně lze dosáhnout dalšího zlepšení použitím dalších optimalizačních nastavení či upravených knihoven dodávaných firmou ScaleMP, viz odkazy na dokumentaci v odstavci výse.
Jak těžké je upravit si aplikaci - modelový příklad: vynásobení dvou matic v MATLABu
Základem je obyčejný script pro MATLAB, který vynásobí dvě náhodné matice:
nproc=str2num(getenv('NPROC')); maxNumCompThreads(nproc); % Enable multithreading setenv('MKL_NUM_THREADS', getenv('NPROC')); % Set parameters numRuns = 1; % Number of runs to average over % dataSize = 100000; % Data size to test dataSize = str2num(getenv('DATASIZE')); x=rand(dataSize,dataSize); % Random square matrix % Matrix multiplication for i = 1:numRuns y=x * x; end quit
To co je specifické pro ScaleMP je nastavení prostředí na fixace procesů na konkrétní procesory před vlastním spuštěním výpočtu:
#! /bin/bash # Make MATLAB accessible export PATH=$PATH:/software/matlab-8.5/bin # # Get arguments export NPROC=16 [ "_$1" != "_" ] && NPROC=$1 export DATASIZE=10000 [ "_$2" != "_" ] && DATASIZE=$2 # # ScaleMP specific stuff # # Intel OpenMP and MKL environment variables export KMP_AFFINITY=compact,granularity=fine export KMP_LIBRARY=turnaround export MKL_DYNAMIC=FALSE export MKL_VSMP=1 # # Find which CPUs to run MATLAB on CPULIST=`/opt/ScaleMP/numabind/bin/numabind --offset $NPROC --flags=best 2>/dev/null` export NUMBIND_RESERVED=$CPULIST taskset -pc $CPULIST $$ # # Run MATLAB echo "Running with $NPROC threads on $DATASIZE x $DATASIZE matrices" matlab -nodisplay -nojvm -r matmul 2>&1