Hyppää sisältöön

Welcome to our weekly research support coffee hour on Zoom! Click here for more information.

Warning!

Puhti scratch disk is becoming very full (80+ % ) resulting in performance degradation. Everybody is advised to only keep actively processed data on scratch, all other data should be deleted, transferred to host institute or stored in Lumi-O. No new quota will be granted. Click here for a tool for examining your disk usage.

Julia-kieli

Julia-kieli on suorituskykyinen, dynaaminen ohjelmointikieli. Julia soveltuu erinomaisesti tieteelliseen laskentaan, koska se voi kääntää tehokasta natiivikoodia LLVM:n avulla ja sisältää standardikirjastossa matemaattisia funktioita, rinnakkaislaskentaominaisuuksia sekä paketinhallinnan. Lisäksi Julian syntaksi on intuitiivinen ja helppo oppia, monimenetelmävälityksen paradigma mahdollistaa yhdisteltävän koodin kirjoittamisen, mikä lisää olemassa olevan koodin uudelleenkäytettävyyttä, ja ympäristöt mahdollistavat koodin suorittamisen toistettavalla tavalla.

Lisenssi

Julia-kieli on lisensoitu vapaalla ja avoimen lähdekoodin MIT-lisenssillä.

Saatavuus

Julia-kieli on saatavilla Puhdissa, Mahdissa ja LUMIssa komentoriviltä moduulijärjestelmän kautta. Se on saatavilla myös selainkäyttöliittymässä Jupyterin ja VSCoden kautta.

Jos kohtaat ongelmia Julian käytössä klusterissa, sinun kannattaa ottaa yhteyttä servicedeskiin.

Käyttö

Julia-moduulin käyttö

Julia-kieli on saatavilla julia-moduulista.

Puhdissa ja Mahdissa moduuli voidaan ladata seuraavasti:

module load julia

LUMIssa meidän täytyy lisätä CSC:n paikallisen hakemiston moduulitiedostot moduulipolkuun ennen moduulin lataamista.

module use /appl/local/csc/modulefiles
module load julia

Julia-moduulin lataamisen jälkeen Juliaa voidaan käyttää julia-komennolla. Ilman argumentteja se käynnistää interaktiivisen Julia REPL:n.

julia

Saatavilla olevat komentorivivalinnat näet suorittamalla julia --help tai lukemalla manuaalisivun man julia. Jos sinulla on kysymyksiä Julia-kielen ominaisuuksista, suosittelemme tutustumaan viralliseen dokumentaatioon ja Discourse -kanavaan.

Paketinhallinnan käyttö

Julia-pakettien asentamisen vakiotapa on käyttää standardikirjastoon kuuluvaa paketinhallintaa Pkg. Juliassa se voidaan tuoda käyttöön seuraavasti:

import Pkg

Yleisiä käyttämiämme toimintoja ovat Pkg.add pakettien lisäämiseen, Pkg.activate ympäristöjen aktivointiin ja Pkg.instantiate kaikkien aktiivisessa ympäristössä määriteltyjen pakettien asentamiseen. Pdokumentaatio sisältää lisätietoja Julian paketinhallinnan käytöstä.

Julia depot -hakemiston sijoittaminen

Julia depot -polun ensimmäinen hakemisto määrittää, minne Julia tallentaa asennetut paketit, käännetyt tiedostot, lokitiedostot ja muut depotit. Oletusarvoisesti se on $HOME/.julia. Kotihakemistolla on suhteellisen pieni kiintiö Puhdissa, Mahdissa ja LUMIssa. Jos asennat suuria paketteja, suosittelemme sijoittamaan depot-hakemiston Projappliin, jotta kiintiö ei lopu kesken. Depot-hakemistoa voidaan muuttaa lisäämällä uusi hakemisto JULIA_DEPOT_PATH-ympäristömuuttujan alkuun.

Voit esimerkiksi käyttää seuraavaa korvaamalla <project> CSC-projektilla.

export JULIA_DEPOT_PATH="/projappl/<project>/$USER/.julia:$JULIA_DEPOT_PATH"

Tämän jälkeen voit turvallisesti poistaa oletus-depot-hakemiston komennolla rm -r $HOME/.julia. Lisätietoja löytyy depot path -dokumentaatiosta.

Monisäikeisyys

Julia tarjoaa Threads-kirjaston monisäikeisyyteen. Se sisältyy peruskirjastoon ja tuodaan oletuksena käyttöön Julia-istunnossa. Julia voidaan käynnistää usealla säikeellä asettamalla JULIA_NUM_THREADS-ympäristömuuttuja tai käynnistämällä Julia --threads-valinnalla, joka ohittaa ympäristömuuttujan arvon. Jos Julia-moduuli on ladattu Slurm-työssä eikä ympäristömuuttujaa ole asetettu, sen arvoksi asetetaan pyydettyjen CPU-ytimien määrä (--cpus-per-task). Säikeiden oletusmäärä on yksi. Suosittelemme lukemaan lisätietoja Julian manuaalin monisäikeisyys -osiosta.

Moniprosessointi ja hajautettu laskenta

Distributed ja ClusterManagers.jl

Moniprosessointiin ja hajautettuun laskentaan Julia tarjoaa Distributed-standardikirjaston. Käytämme sitä moniprosessointiin paikallisella solmulla. Distributed-kirjastoa voidaan laajentaa asentamalla ClusterManagers.jl-paketti, jonka avulla voidaan lisätä työprosessit useille solmuille Slurmin kautta käyttäen SlurmManager-toimintoa. Suosittelemme lukemaan lisätietoja Julian manuaalin moniprosessointi ja hajautettu laskenta -osiosta.

MPI.jl

MPI:tä voidaan käyttää hajautettuun laskentaan, erityisesti useilla solmuilla, Juliassa Puhdissa, Mahdissa ja LUMIssa MPI.jl-paketin avulla. Se voidaan asentaa paketinhallinnalla seuraavasti:

import Pkg
Pkg.add("MPI")

Voimme ladata julia-mpi-moduulin, joka asettaa ympäristöön globaalit asetukset niin, että MPI.jl käyttää järjestelmän MPI-asennusta ja oikeaa komentoa MPI-prosessien käynnistämiseen.

module load julia-mpi

Lisätietoja löytyy MPI.jl-dokumentaatiosta.

GPU-ohjelmointi

CUDA.jl

Puhdin ja Mahdin GPU-solmut sisältävät NVidia-GPU:ita, joita voidaan ohjelmoida CUDA:lla. CUDA.jl-paketti CUDA-ohjelmointiin Juliassa voidaan asentaa paketinhallinnalla seuraavasti:

import Pkg
Pkg.add("CUDA")

Voimme ladata julia-cuda-moduulin, joka asettaa ympäristöön globaalit asetukset niin, että CUDA.jl käyttää järjestelmän CUDA-asennusta.

module load julia-cuda

Lisätietoja löytyy CUDA.jl-dokumentaatiosta.

AMDGPU.jl

LUMIn GPU-solmut sisältävät AMD-GPU:ita. AMDGPU.jl-paketti AMD-GPU:iden ohjelmointiin Juliassa voidaan asentaa paketinhallinnalla seuraavasti:

import Pkg
Pkg.add("AMDGPU")

Voimme ladata julia-amdgpu-moduulin, joka asettaa ympäristöön globaalit asetukset niin, että AMDGPU.jl käyttää järjestelmän ROCm-asennusta.

module load julia-amdgpu

Lisätietoja löytyy AMDGPU.jl-dokumentaatiosta.

Julia-eräajojen suorittaminen CSC:n klustereissa

Osio Julia-eräajojen suorittaminen CSC:n klustereissa selittää, miten Juliaa käytetään sarja-, rinnakkais- ja GPU-eräajoihin Puhdissa, Mahdissa ja LUMIssa.

Lisälukemista

Jos haluat lukea lisää rinnakkais- ja suorituskykyisestä laskennasta Julialla, suosittelemme ENCCS:n materiaalia Julia for high-performance scientific computing sekä Kjartan Thor Wikfeldtin kirjoitusta A brief tour of Julia for high-performance computing. HLRS:n koulutusmateriaali kurssille Julia for High-Performance Computing tarjoaa syvällisen katsauksen suorituskykyisen koodin ohjelmointiin Julialla. Lopuksi Julia on HPC Clusters sisältää yleisiä huomioita Julian käytöstä ja asentamisesta HPC-klusterissa.

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta