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.

Ray: Koneoppimiskehys pilveen

Johdanto

Kun koneoppimisen (ML) työkuormat kasvavat mittakaavaltaan ja monimutkaisuudeltaan, laskentaresurssien tehokas hyödyntäminen on olennaista. Olipa kyseessä yksi suorituskykyinen virtuaalikone (VM) tai klusteri, hajautetun laskennan ja rinnakkaisen prosessoinnin hallinta voi olla haastavaa.

Ray vastaa näihin haasteisiin tarjoamalla yhtenäisen kehyksen, joka yksinkertaistaa ML-työkuormien skaalaamista CPU:iden, GPU:iden ja usean noodin VM-klustereiden välillä.

Mitä Ray on

Ray on avoimen lähdekoodin hajautetun laskennan kehys, joka on rakennettu helpottamaan Python- ja koneoppimis- (ML) työkuormien skaalaamista. Rayn avulla voit suorittaa laskentaa saumattomasti useilla CPU:illa, GPU:illa tai virtuaalikoneilla (VM) — riippumatta siitä, sijaitsevatko ne paikallisesti tai pilvessä.

Rayta kehittää Anyscale, ja siitä on tulossa suosittu valinta datatieteilijöille ja ML-insinööreille, jotka haluavat skaalata koulutus-, viritys- ja palvelutyökuormia ilman monimutkaisen hajautetun infrastruktuurin hallintaa.

Suorittamalla Rayta Pouta-virtuaalikoneilla voit hyödyntää skaalautuvaa laskentatehoa ja samalla pitää työnkulkusi joustavina.

Lisätietoja löytyy täältä

Ray-kehys

Ray-kehys koostuu kolmesta kerroksesta:

Ray Core

Ray Core on Ray-kehyksen perusta. Sen avulla Python-ohjelmasi voivat käyttää kaikkea saatavilla olevaa laskentatehoa riippumatta siitä, työskenteletkö yhdellä VM:llä vai usean VM:n klusterissa. Sen sijaan, että tehtävät suoritettaisiin yksi toisensa jälkeen, Ray Core voi suorittaa monta tehtävää samanaikaisesti. Voit kirjoittaa tavallisen Python-funktion, ja Ray hoitaa rinnakkaisen suorituksen automaattisesti. Tämä tarkoittaa, että sinun ei tarvitse hallita säikeitä, prosesseja tai klusterin välistä viestintää manuaalisesti. Jos jokin tehtävä epäonnistuu, Ray voi yrittää sitä uudelleen, mikä parantaa ohjelmasi luotettavuutta. Lyhyesti sanottuna Ray Core auttaa käyttämään laitteistoasi tehokkaammin ja nopeuttaa työtäsi ilman, että se vaatii monimutkaista ohjelmointia.

Rayn AI-kirjastot

Ray tarjoaa joukon avoimen lähdekoodin, Python-pohjaisia, käyttötarkoituskohtaisia kirjastoja. Jokainen kirjasto on tarkoitettu tiettyyn tehtävään.

Ray Data

Ray Data auttaa suurten aineistojen valmistelussa ja käsittelyssä ennen koulutusta. Sen sijaan, että kaikki kuormitus kohdistuisi yhteen koneeseen, Ray Data jakaa työn useille CPU-ytimille tai useille VM:ille sen mukaan, mitä resursseja on käytettävissä. Tämä tarkoittaa, että data voidaan ladata, puhdistaa ja muuntaa paljon nopeammin. Se myös suoratoistaa käsitellyn datan suoraan Ray Trainiin koulutuksen aikana, jotta mallin ei tarvitse odottaa dataa. Tämä välttää pullonkauloja ja pitää koulutuksen sujuvana ja tehokkaana. Tässä on joitakin esimerkkejä

Ray Train

Ray Train auttaa kouluttamaan koneoppimismalleja nopeammin jakamalla koulutustyökuorman käytettävissä oleville CPU:ille ja GPU:ille. Olipa ympäristösi yksi VM, jossa on useita GPU-kortteja, tai monta toisiinsa yhdistettyä VM:ää, Ray Train voi käyttää kaikkia näitä resursseja samanaikaisesti. Se tukee suosittuja ML-kehyksiä, kuten PyTorchia, TensorFlow’ta ja XGBoostia, joten sinun ei tarvitse muuttaa olemassa olevaa mallikoodiasi. Jos kone tai GPU vikaantuu koulutuksen aikana, Ray Train voi jatkaa siitä ilman edistymisen menetystä. Tämä tekee suurten mallien kouluttamisesta nopeampaa, vakaampaa ja helpommin hallittavaa. Tässä on joitakin esimerkkejä

Ray Tune

Ray Tune tekee hyperparametrien virittämisestä nopeampaa ja tehokkaampaa. Ray Tune on suunniteltu nopeuttamaan parhaiden hyperparametrien löytämistä koneoppimismalleille. Tavallisesti viritys edellyttää monien koulutuskokeiden suorittamista yksi kerrallaan, mikä voi kestää päiviä. Ray Tune voi suorittaa monta koetta rinnakkain kaikilla käytettävissä olevilla CPU- ja GPU-resursseilla, joko yhdellä VM:llä tai klusterissa. Se myös pysäyttää automaattisesti heikosti suoriutuvat kokeet ja kohdistaa laskentaresursseja niihin, jotka toimivat hyvin. Tämä auttaa vähentämään sekä aikaa että kustannuksia ja samalla parantamaan mallin tarkkuutta. Tässä on joitakin esimerkkejä

Ray Serve

Ray Serve tekee koneoppimismallien käyttöönotosta helppoa, jotta niitä voidaan käyttää oikeissa sovelluksissa. Kun mallisi on koulutettu, Ray Serve mahdollistaa sen tarjoamisen web API:n kautta, jotta käyttäjät tai sovellukset voivat lähettää syötteitä ja vastaanottaa ennusteita. Se voi toimia yhdellä VM:llä tai skaalautua useille VM:ille liikenteen määrän mukaan. Jos pyyntöjä tulee enemmän, Ray Serve voi automaattisesti kasvattaa mallireplikoiden määrää ja tasapainottaa pyynnöt niiden kesken. Tämä varmistaa, että palvelusi pysyy nopeana ja luotettavana tuotantoympäristöissä. Tässä on joitakin esimerkkejä

Ray RLlib

Ray RLlib keskittyy vahvistusoppimiseen. Se nopeuttaa RL-agenttien koulutusta suorittamalla monta erilaista ympäristösimulaatiota samanaikaisesti. Sen sijaan, että koulutus tapahtuisi hitaasti yhdessä ympäristössä, RLlib käyttää useita CPU:ita ja GPU:ita yhden tai useamman VM:n välillä kokemuksen keräämiseen ja nopeampaan oppimiseen. Se tukee monia RL-algoritmeja valmiiksi, joten voit aloittaa nopeasti ilman, että kaikkea tarvitsee rakentaa alusta asti. Tämä tekee RLlibistä hyödyllisen esimerkiksi robotiikassa, simulaatiopohjaisessa ohjauksessa ja älykkäissä päätöksentekojärjestelmissä. Tässä on joitakin esimerkkejä

Ray-klusterit

Ray-klusteri on yhden tai useamman VM:n muodostama ryhmä, joka toimii yhdessä kuin yksi suuri kone. Ray-klusterissa on kahdenlaisia noodeja: head node ja yksi tai useampi worker node. Head node hallitsee klusteria, seuraa resursseja (kuten CPU:ita, GPU:ita ja muistia) ja koordinoi työtehtäviä. Worker nodet tekevät varsinaisen laskennan. Kun yhdistät Python-ohjelmasi klusteriin, Ray käyttää automaattisesti kaikkia käytettävissä olevia CPU:ita ja GPU:ita kaikilla koneilla. Tämä tarkoittaa, että jos lisäät klusteriin enemmän VM:iä, ohjelmasi, koulutustyösi ja datankäsittelytehtäväsi voivat skaalautua ilman koodimuutoksia. Ray huolehtii viestinnästä, resurssien ajoituksesta ja työn suorituksesta sisäisesti. Tämä tekee Ray-klustereista erittäin hyödyllisiä koneoppimisen, hajautetun datankäsittelyn tai vahvistusoppimisen tehtävien suorittamiseen Pouta-ympäristössä.

Ray Dashboard

Ray Dashboard on yksinkertainen verkkosivu, joka näyttää, mitä Ray tekee. Sen avulla näet, kuinka monta CPU:ta ja GPU:ta on käytössä, mitkä tehtävät ovat käynnissä ja toimiiko järjestelmä sujuvasti. Tämä on hyödyllistä käytettäessä useita VM:iä, koska voit helposti ymmärtää järjestelmän toimintaa ilman lokien tai terminaalien tarkistamista.

Voit nähdä dashboardin luomalla SSH-tunnelin VM:ltäsi. Jos työskentelet useilla VM:illä, sinun täytyy luoda tunneli head-VM:ltä.

VM:llä, jos olet käynnistänyt Rayn ilman dashboard-yhteyttä, sinun täytyy ensin pysäyttää Ray ja käynnistää se sitten include-dashbord-asetuksella seuraavilla komennoilla:

ray stop --force
ray start --head --include-dashboard true --dashboard-host 0.0.0.0
Tämän jälkeen sinun täytyy luoda SSH-tunneli omalta paikalliselta koneeltasi komennolla:

ssh -L 8265:localhost:8265 username@HEAD_VM_IP
Avaa sitten selain ja siirry osoitteeseen
http://localhost:8265

Miten Ray auttaa koneoppimisessa Poudassa

Ray huolehtii monista haasteista, joita voi ilmetä ajettaessa ML-työkuormia useilla virtuaalikoneilla, kuten hajautettujen prosessien hallinnasta, datan synkronoinnista noodien välillä, laskentakuormien tasapainottamisesta sekä automaattisesta skaalauksesta ja vikasietoisuudesta.

Voit aloittaa yhdellä VM:llä ja skaalata moneen ilman, että muutat koodiasi. Ray käyttää automaattisesti käytettävissä olevia CPU-/GPU-resursseja VM:ien välillä. Se voi lisätä tai poistaa VM:iä dynaamisesti nykyisen tarpeen mukaan.

Rayn käyttö Poudassa

Voit asentaa Rayn VM:illesi komennolla:

pip install -U ray
Lisätietoja asennuksesta on saatavilla täältä

Yhdellä VM:llä

Jos sinulla on yksi VM, jossa on useita ytimiä, esimerkiksi 6 CPU:ta ja 1 GPU, Ray voi käyttää niitä kaikkia automaattisesti. Sinun täytyy asentaa Ray kyseiselle koneelle, ja voit käyttää sitä suoraan Python-koodissasi. Voit tarkistaa koodin suoritusajassa olevan eron, kun sitä ajetaan normaalisti (sarjallinen prosessointi) ja kun käytetään Rayta (rinnakkainen prosessointi).

Kun et käytä Rayta, laskenta suoritetaan sarjallisesti. Kokeile tätä koodia:

import time

def f(x):
    time.sleep(2)
    return x * x

start = time.time()
results = [f(i) for i in range(12)]  # 12 tasks
print(results)
print("Time taken:", time.time() - start)  
Tässä koodissa 12 tehtävälle annetaan 2 sekunnin odotusaika. Siksi suorituksen pitäisi kestää lähes 24 sekuntia.

Kokeile nyt seuraavaa koodia:

import ray
import time

ray.init()  # Ray will detect and use all available cores

@ray.remote
def f(x):
    time.sleep(2)
    return x * x

start = time.time()
results = ray.get([f.remote(i) for i in range(12)])
print(results)
print("Time taken:", time.time() - start)
Tässä koodissa, kun alustat Rayn, se jakaa tehtävät automaattisesti käytettävissä olevien resurssien mukaan. Jos sinulla on 6 CPU-ydintä, se lyhentää ajan lähes kuudesosaan.

Kuten näet molemmissa koodeissa, ainoa ero on se, että toisessa koodissa import Ray -rivin jälkeen lisätään dekorattori @ray.remote ja funktiokutsu tehdään .remote()-muodossa. Tämä kertoo Raylle, että funktion tulee suorittua rinnakkain useilla CPU:illa tai GPU:illa. Funktion sisäistä logiikkaa ei tarvitse muuttaa. Ohjelmasi toimii samalla tavalla — ainoa lisävaihe on, että Ray huolehtii työn jakamisesta käytettävissä oleville resursseille (kuten useille CPU-ytimille tai useille VM:ille). Sen sijaan, että kirjoittaisit koko koodisi uudelleen, teet vain pienen muutoksen siihen, miten kutsut funktioita. Juuri tämä tekee Raysta helppokäyttöisen — saat paremman suorituskyvyn ja skaalautuvuuden lähes ilman koodimuutoksia.

Useilla VM:illä

Kun työskentelet useilla VM:illä, sinun täytyy määrittää Ray-klusteri.

  • Ensiksi asenna Ray kaikille noodeille

  • Head-VM:llä

    ray start --head --port=6379
    

  • Komento tulostaa Ray-klusterin osoitteen, joka voidaan välittää muiden koneiden ray start -komennolle worker nodejen käynnistämiseksi.
ray start --address=<head-node-address:port>
  • Nyt voit käyttää Rayta Python-koodissasi. Ray jakaa työn nyt automaattisesti kaikkien VM:ien kesken.
import ray
import time

ray.init(address="auto")  # Ray will connect to the cluster

@ray.remote
def f(x):
    time.sleep(2)
    return x * x

start = time.time()
results = ray.get([f.remote(i) for i in range(12)])
print(results)
print("Time taken:", time.time() - start)

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta