Legendární český superpočítač Salomon odešel do křemíkového nebe a byl prodán do bazaru

26. 6. 2024
Doba čtení: 4 minuty

Sdílet

Ostravský stroj pojmenovaný pro Rothschildovi měl největší instalaci akcelerátorů Intel Xeon Phi v Evropě. Uvnitř: GALERIE.

Legendární český superpočítač Salomon definitivně odchází do křemíkového nebe. Nizozemská společnost Qualified Networks si ho v nejbližší době odveze v několika kamionech, rozebere ho, jednotlivé součásti repasuje a bude je prodávat z druhé ruky například jako servery pro běh webových stránek a aplikací.

Superpočítače jsou velké sálové stroje s vysokým výkonem sloužící pro vědecké a průmyslové výpočty, například chemické simulace při vývoji léků či počítání aerodynamiky při návrhu automobilů. Moderní superpočítače také slouží k trénování umělé inteligence typu modely GPT od OpenAI.

Salomon byl druhý superpočítač pořízený do dnes asi deset let fungujícího národního superpočítačového centra IT4Innovations při VŠB-TUO v Ostravě. Prvním strojem byl Anselm, který ještě běžel v kontejnerové podobě a který je po vyřazení umístěn v muzeu v Dolních Vítkovicích.

Rothschildův odkaz

Salomon byl výrazně větší instalací. Šlo o vůbec první supestroj běžící v České republice, který se dostal do globálního žebříčku TOP500, což je seznam nejrychlejších superpočítačů planety. Salomon měl teoretický výkon až dva petaflopy, což v létě roku 2015 stačilo na čtyřicáté místo. Pro srovnání, superpočítač Karolina, který je nástupcem Salomonu, dosahuje na 15,7 petaflopu, a i Karolina se pomalu začne chystat do důchodu. Nejrychlejší mašina planety dává 1,2 exaflopu.

Dodavatelem Salomona byla společnost SGI, která je dnes součástí Hewlett Packard Enterprise, což je i dodavatel Karoliny. HPE později pohltila také firmu Cray, dalšího dodavatele superpočítačů. Podle zástupců HPE byl tehdy Salomon pro SGI první příležitostí, jak v Česku postavit něco tak velkého, navíc vodou chlazeného. Do té doby se dělaly spíše clustery než rozsáhlé superpočítače.

Jak vypadá již rozebraný Salomon:

Salomon dostal jméno pod baronovi Salomonu Mayer von Rothschildovi, který žil v letech 1774 až 1855. Šlo o globálního investora z Vídně a zakladatele vídeňské větve rodiny Rothschildů, který v Ostravě založil hlubinný černouhelný Důl Šalomoun. Ten uhlím zásoboval Vítkovické a Třinecké železárny.

Na Rothschilda odkazují také další ostravské superpočítače. Aktuální Karolina má název po Rothschildově manželce, stejně se jmenoval i jiný ostravský důl. Anselm byl zase Rothschildovým synem.

Největší instalace Xeon Phi v Evropě

Salomon byl vypnutý už v prosinci roku 2021, dosud ale v ostravském datovém sále přebýval. IT4Innovations systém pořídila jako celek a musí se chovat podle pravidel veřejné instituce. Stroj tedy nešlo jednoduše prodat po dílech. Bylo nutné udělat odhady cen komponent a vše účetně pořešit. Salomon poté zamířil do veřejného prodeje. Přihlásili se tři zájemci. Prodejní cena činila 40 tisíc eur, necelý milion korun, což bylo asi dvakrát tolik, co říkal odhad. Pořizovací cena přitom v roce 2015 činila 270 milionů. To ukazuje, jak výpočetní technika rychle zastarává.

„Salomona bychom možná používali dodnes, kdyby byla zadarmo elektřina,“ řekl Lupě s odkazem na z dnešního pohledu nízkou energetickou účinnost vyřazeného stroje Branislav Jansík, ředitel superpočítačových služeb IT4Innovations. Problémem jsou také náhradní díly a servis. V Ostravě si alespoň nechali pár uzlů na akceptaci jiného hardwaru, zbyly také nějaké switche a racky.

Akcelerátor Xeon Phi použitý v Salomonovi:

Salomon byl poměrně unikátní. V dobách, kdy ještě Nvidia nebyla cool pro běžné lidi a investory, se jí společnost Intel pokoušela konkurovat se svými akcelerátory Xeon Phi. Šlo o takové „počítače v počítači“ označované jako MIC. Intel se tak moc snažil držet s Nvidií krok, až to s Xeony Phi zabalil a dnes to zkouší s AI čipy Gaudi. Salomon každopádně měl největší instalaci těchto akcelerátorů v Evropě. S těmito kartami operovalo 432 výpočetních uzlů, přičemž každý měl dvě karty Xeon Phi 7120P.

„Když se dobře optimalizovaly algoritmy, Xeon Phi oproti klasickému procesoru dal až osminásobný výkon,“ popsal ředitel IT4Innovations Vít Vondrák. Technologie ale už v pozdější fázi neměla podporu a software, takže odešla do zapomnění.

Posloužil vědě nebo Škodě Auto

Salomon měl celkově 1008 výpočetních uzlů. Kromě těch s Xeon Phi šlo o standardní neakcelerované části, kterých bylo 576. Každý uzel používal dva procesory Intel Xeon na 2,5 GHz (Haswell, 12 jader, celkově 24 192 jader) a operační paměť 128 GB. Úložiště SCRATCH mělo 1638 TB kapacity (30 GB za sekundu), zálohovaná storage měla 500 TB. Používal se InfiniBand FDR 56 Gb za sekundu.

Salomon podle Vondráka naučil české vědce masivně používat superpočítače. Téměř 1700 z nich na něm uskutečnilo 8,7 milionu výpočetních úloh v rámci 1085 výzkumných projektů. Spotřebovalo se přes miliardu jádrohodin výpočetního času.

WT100_25_SE

Za období provozu Salomona uživatelé registrovali 979 vědeckých publikací. Výpočetní kapacity využily prakticky všechny zdejší univerzity a dále Akademie věd ČR a podobně. Služeb využily i firmy jako DHI, AstraZeneca, Škoda Auto, Sotio, Intel nebo Johnson&Johnson. Největší podíl (67 procent) připadl na materiálové vědy.

Jak vypadá superpočítač Karolina, nástupce Salomona:

  • Chcete mít Lupu bez bannerů?
  • Chcete dostávat speciální týdenní newsletter o zákulisí českého internetu?
  • Chcete mít k dispozici strojové přepisy podcastů?
  • Chcete získat slevu 1 000 Kč na jednu z našich konferencí?

Staňte se naším podporovatelem

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).