-
Pythonin käyttö CSC:n supertietokoneilla
Pythonin käyttö CSC:n supertietokoneilla
Joitakin tärkeitä Python-ohjelmointikielen käyttöön liittyviä asioita tehdään CSC:n supertietokoneilla huomattavan eri tavalla kuin omalla laitteella tai muissa HPC-ympäristöissä. Jotta saat käytettävissä olevista laskentaresursseista kaiken hyödyn irti, on hyvä tuntea nämä erot.
Katso Python-sovellussivu yleisiä tietoja varten Python-kielestä ja CSC:n supertietokoneille esiasennetuista Python-ympäristöistä.
Python-ympäristöjen luominen ja hallinta
Katso myös UKK-osio yleisistä kysymyksistä, jotka liittyvät Python-ympäristöihin supertietokoneilla.
Python-pakettien asentaminen olemassa oleviin moduuleihin
Jos CSC:n tarjoama moduuli kattaa melkein kaiken tarvitsemasi,
mutta siitä puuttuu muutama Python-paketti, voit yrittää asentaa
ne itse pip-paketinhallinnalla.
Katso pakettilistat Python-sovellussivultamme selvittääksesi, mitkä paketit on asennettu olemassa oleviin moduuleihin. Jos mielestäsi jokin tärkeä paketti pitäisi sisällyttää oletuksena CSC:n tarjoamaan moduuliin, ota rohkeasti yhteyttä asiakastukeemme.
Suositeltu tapa lisätä paketteja olemassa olevan ympäristön päälle on käyttää venv-moduulia, joka on Pythonin vakiomoduuli kevyen "virtuaaliympäristön" luomiseen. Voit käyttää useita virtuaaliympäristöjä, esimerkiksi yhden jokaista projektia varten.
Esimerkiksi paketin nimeltä whatshap asentaminen
CSC:n tarjoaman python-data -moduulin päälle:
cd /projappl/<your_project> # change this to the appropriate path for your project
module load python-data
python3 -m venv --system-site-packages <venv_name>
source <venv_name>/bin/activate
pip install whatshap
Warning
Virtuaaliympäristö täytyy luoda oikea python-moduuli aktivoituna, eli siinä ympäristössä, jossa aiot käyttää uusia paketteja.
Voit tarkistaa, mihin pythoniin venv viittaa komennolla: readlink <venv_name>/bin/python3.
Toisin kuin esimerkiksi Tykky, venv luo ympäristölle uuden hakemiston,
joten sinun ei tarvitse luoda sitä etukäteen.
Muista käyttää --system-site-packages-valitsinta virtuaaliympäristöä luodessa,
muuten ympäristö ei löydä perusmoduulin esiasennettuja paketteja (esimerkiksi numpy-pakettia
python-data-moduulista).
Myöhemmin, kun haluat käyttää virtuaaliympäristöä, sinun tarvitsee vain ladata moduuli ja aktivoida ympäristö:
Samoin virtuaaliympäristöä käyttäessäsi varmista, että perusmoduuli on todella ladattu. Tämä koskee luonnollisesti myös Slurm-työskriptejä.
Ongelmia virtuaaliympäristöjen kanssa
Joissakin erityistapauksissa CSC:n moduulit eivät välttämättä toimi oikein Pythonin virtuaaliympäristöjen kanssa. Kokeile ensin suorittaa export CW_FORCE_CONDA_ACTIVATE=1 ennen venvin aktivointia. Jos siitä ei ole apua, kokeile käyttää pip install --user -tapaa, joka on kuvattu
toisella välilehdellä.
Toinen tapa asentaa lisäpaketteja on tehdä "käyttäjäasennus"
komennolla pip install --user. Tämä tapa on periaatteessa
helppokäyttöinen, koska se ei vaadi virtuaaliympäristön
perustamista. Pakettien mukana tulevat komennot eivät kuitenkaan
välttämättä toimi suoraan (katso tämän osion lopussa oleva tietolaatikko).
Paketit asennetaan oletuksena kotihakemistoosi
polkuun .local/lib/pythonx.y/site-packages (missä x.y on
käytössä olevan Pythonin versio). Huomaa, että jos asennat paljon
paketteja, kotihakemistosi tila voi loppua helposti kesken.
Tämä voidaan välttää vaihtamalla asennuskansiota niin, että
tehdään projektikohtainen asennus henkilökohtaisen asennuksen sijaan.
Tämä tehdään asettamalla PYTHONUSERBASE-ympäristömuuttuja
viittaamaan uuteen asennushakemistoon.
Esimerkiksi paketin whatshap lisääminen python-data-moduulin päälle:
module load python-data
export PYTHONUSERBASE=/projappl/<your_project>/my-python-env
pip install --user whatshap
Yllä olevassa esimerkissä paketti asennetaan nyt
my-python-env-hakemistoon projektin projappl-hakemistossa. Suorita
unset PYTHONUSERBASE, jos haluat asentaa paketteja taas kotihakemistoosi.
Kun käytät kirjastoja myöhemmin, sinun täytyy määrittää PYTHONUSERBASE
uudelleen. Tämä koskee luonnollisesti myös Slurm-työskriptejä. Esimerkiksi:
Paketteja, jotka sisältävät suoritettavia tiedostoja
Useimmat Python-moduuleistamme on toteutettu kontteina. Jos asentamasi paketti sisältää myös suoritettavia tiedostoja, ne eivät välttämättä toimi suoraan, koska suoritettava tiedosto saattaa etsiä Python-tulkkia polusta, joka on kontin sisäinen. Saatat nähdä tällaisen virheilmoituksen:
whatshap: /CSC_CONTAINER/miniconda/envs/env1/bin/python3.9: bad interpreter: No such file or directory
Voit korjata tämän muokkaamalla suoritettavan tiedoston
ensimmäistä riviä (joka esimerkissämme löytyy komennolla which whatshap) osoittamaan
oikeaan Python-tulkkiin (löytyy komennolla which python3).
Esimerkissämme muokkaisimme tiedostoa ~/.local/bin/whatshap
niin, että sen ensimmäinen rivi on seuraava:
Pip-asennukset, jotka vaativat kääntämistä
Lähdekoodista rakennettaessa --no-build-isolation-valitsinta voidaan käyttää paketin kääntämiseen aktiivisen moduulin avulla sen sijaan, että pip loisi eristetyn rakennusympäristön.
Lisäksi voi olla hyödyllistä käyttää laveaa -v-valitsinta nähdäksesi, mitä pip tekee ympäristön sisällä.
Warning
Vaikka asentaisit Python-paketteja projappl- tai scratch-hakemistoon,
pip-komento voi silti täyttää kotihakemistosi, koska se tallentaa
välimuistinsa sinne oletuksena. Katso UKK-ohjeemme siitä, miten pipin
välimuisti määritetään.
Omien Python-ympäristöjen luominen
On myös mahdollista luoda omia Python-ympäristöjä.
Pip on hyvä valinta Python-ympäristöjen hallintaan, kun ne eivät perustu monimutkaisiin riippuvuussuhteisiin.
-
Helpoin tapa luoda mukautettu pip-ympäristö on käyttää
venv-moduulia, josta keskusteltiin edellisessä osiossa, jossa näytetään itse asiassa täsmälleen, miten tämä tehdään. Jos et halua käyttää paketteja jostakin olemassa olevasta moduulista, älä yksinkertaisesti lisää--system-site-packages-valitsinta virtuaaliympäristöä luodessasi. -
Toinen vaihtoehto on luoda pip-ympäristö kontin sisälle. Suoraviivaisin tapa tehdä tämä on käyttää Tykky-konttikäärettä. Jos haluat tietää, miten ympäristösi voidaan helposti kontittaa, katso Tykkyn ohjeet pip-pohjaisiin asennuksiin.
-
Vaihtoehto Tykkyn käytölle on luoda pip-ympäristö mukautetun Apptainer-kontin sisälle. Tämä on käytännöllinen valinta, jos esimerkiksi tiedät sopivan valmiin Apptainer- tai Docker-kontin. Lisätietoja Apptainer-konttien käytöstä löydät aiheeseen liittyvästä dokumentaatiosta:
- Apptainer-konttien ajaminen
- Apptainer-konttien luominen, mukaan lukien Docker-konttien muuntaminen Apptainer-konteiksi.
Conda on helppokäyttöinen ja joustava, mutta se luo yleensä valtavan määrän tiedostoja, mikä ei sovi yhteen jaettujen tiedostojärjestelmien kanssa. Liiallinen tiedostomäärä voi aiheuttaa hyvin hitaita kirjastojen tuonteja ja pahimmassa tapauksessa hidastaa koko tiedostojärjestelmää. Tämän vuoksi CSC on poistanut conda-käytön suosituksista suorissa asennuksissa supertietokoneille. Voit kuitenkin edelleen luoda ja käyttää kontitettuja conda-ympäristöjä.
-
Suoraviivaisin tapa luoda kontitettu conda-ympäristö on käyttää Tykky-konttikäärettä. Jos haluat tietää, miten ympäristösi voidaan helposti kontittaa, katso Tykkyn ohjeet conda-pohjaisiin asennuksiin.
-
Vaihtoehto Tykkyn käytölle on luoda conda-ympäristö mukautetun Apptainer-kontin sisälle. Tämä on käytännöllinen valinta, jos esimerkiksi tiedät sopivan valmiin Apptainer- tai Docker-kontin. Lisätietoja Apptainer-konttien käytöstä löydät aiheeseen liittyvästä dokumentaatiosta:
- Apptainer-konttien ajaminen
- Apptainer-konttien luominen, mukaan lukien Docker-konttien muuntaminen Apptainer-konteiksi.
Python-kehitysympäristöt
Python-skriptejä voidaan muokata suoraan CSC:n supertietokoneella
konsolipohjaisella tekstieditorilla
kuten vim tai emacs. Näiden päätepohjaisten editorien lisäksi
useita graafisia ohjelmointiympäristöjä,
kuten Jupyter Notebookeja, Visual Studio Codea ja Spyderiä,
voidaan käyttää supertietokoneella
selainkäyttöliittymämme kautta.
Sen lisäksi, että koodia muokataan suoraan supertietokoneella, on myös mahdollista kehittää koodia etänä käyttäen joitakin paikallisesti asennettavia editoreja, kuten Visual Studio Codea. Huomaa kuitenkin, että tämä tapa muodostaa yhteys CSC:n supertietokoneisiin on altis ongelmille eikä siksi ole täysin tuettu.
Lopuksi koodia voi tietenkin muokata paikallisella laitteella
ja kopioida sen supertietokoneelle komentorivityökaluilla kuten
scp ja
rsync,
tai käyttämällä
graafisia tiedostonsiirtotyökaluja.
Jupyter
Jupyter Notebookit tarjoavat interaktiivisen ohjelmointiympäristön, jossa voidaan kirjoittaa ja suorittaa Python-koodia yksittäisissä soluissa. Notebookit yhdistävät koodin, yhtälöt, visualisoinnit ja selittävän tekstin yhteen dokumenttiin.
Jupyter-interaktiivinen sovellus
selainkäyttöliittymässämme mahdollistaa Jupyterin käytön CSC:n supertietokoneilla.
Monet Python-ympäristöistämme, mukaan lukien
python-data, geoconda
sekä syväoppimismoduulit kuten pytorch,
sisältävät tärkeimmät Jupyter-paketit, joten niitä voidaan käyttää tässä sovelluksessa.
Sovelluksen dokumentaatiosivu sisältää
listan tuetuista ympäristöistä.
Visual Studio Code
Visual Studio Code (VSCode) on Microsoftin kehittämä laajasti käytetty lähdekoodieditori. Toisin kuin kaksi muuta tässä esiteltyä kehitysympäristöä, se ei ole riippuvainen Python-paketeista, joten sitä voidaan käyttää oletuksena kaikkien CSC:n ja itse tehtyjen Python-ympäristöjen kanssa.
VSCodea voi käyttää CSC:n supertietokoneilla kahdella tavalla:
- Interaktiivisena sovelluksena selainkäyttöliittymässämme
- Etäyhteydellä Remote-SSH-liitännäisen avulla (ei tuettu)
Mukautettujen ympäristöjen käyttö VSCodessa
Koska VSCode-istunnon käynnistyslomakkeessa tarjotaan vain CSC:n moduuleja, mukautettujen Python-ympäristöjen käyttäminen VSCodeen sisäänrakennettujen toimintojen, kuten virheenkorjauksen, kanssa edellyttää Python-tulkin polun muuttamista istunnon käynnistymisen jälkeen. Tämä voidaan tehdä napsauttamalla VSCode-ikkunan oikeassa alakulmassa näkyviä Python-version tietoja.
Spyder
Spyder on tieteellinen Python-kehitysympäristö. python-data- ja geoconda -moduulit sisältävät Spyderin. Paras tapa käyttää sitä on Puhdin selainkäyttöliittymän etätyöpöydän kautta.
Pythonin rinnakkaistyöt
Pythonissa on useita rinnakkaislaskennan kirjastoja. Alla on muutamia ehdotuksia:
- multiprocessing – prosessipohjainen rinnakkaisuus
- joblib – Python-funktioiden ajaminen putkityötehtävinä
- dask – yleiskäyttöinen rinnakkaisohjelmoinnin ratkaisu
- mpi4py – Pythonin MPI-sidonnat
multiprocessing-paketti on todennäköisesti helpoin käyttää. Koska se on osa
Pythonin standardikirjastoa, se sisältyy oletuksena kaikkiin Python-asennuksiin.
joblib tarjoaa tähän verrattuna hieman enemmän joustavuutta. Nämä kaksi pakettia soveltuvat
yksittäisen solmun rinnakkaistamiseen (enintään 40 ydintä).
dask on näistä monipuolisin, ja siinä on useita vaihtoehtoja
rinnakkaistamiseen. Katso CSC:n Dask-opas
esimerkkejä sekä yhden solmun (enintään 40 ydintä) että usean solmun rinnakkaistamisesta.
Lisäksi CSC Trainingin GitHub-organisaatiossa on esimerkkejä
eri rinnakkaistusvaihtoehtojen käytöstä Puhdissa.
Yllä mainituista neljästä paketista esimerkkejä on tarjolla
multiprocessing-, joblib- ja dask-paketeille.
mpi4py-paketti sisältyy PyTorch-ympäristöömme.
Se on yleensä tehokkain vaihtoehto usean solmun töihin, joissa rinnakkaistaminen ei ole triviaalista.
Lyhyt mpi4py-opas sekä muita tapoja parantaa
Python-ohjelmien suorituskykyä löytyy maksuttomalta
Python in High Performance Computing
-verkkokurssilta.