Skapa kostnadseffektiv ML-utbildningsinfrastruktur

en översikt över lösningsprocessen


Våra ML-utbildningskostnader var ohållbara

Allt detta b√∂rjade p√• grund av en utmaning jag stod inf√∂r p√• mitt f√∂retag. V√•r produkt drivs av AI-teknik inom GAN-omr√•det, och v√•rt team best√•r av ML-forskare och ingenj√∂rer. Under v√•r resa f√∂r att etablera k√§rnteknologin b√∂rjade vi k√∂ra m√•nga ML-tr√§ningsexperiment av flera forskare parallellt. Snart b√∂rjade vi se en enorm √∂kning i v√•ra molnkostnader. Det var inte h√•llbart ‚Äď vi var tvungna att g√∂ra n√•got, och det snabbt. Men innan jag kommer till den kostnadseffektiva ML-tr√§ningsl√∂sningen, l√•t oss f√∂rst√• varf√∂r utbildningskostnaderna var s√• h√∂ga.

Vi började använda ett mycket populärt GAN-nätverk som heter stylegan.

Tabellen ovan visar hur l√•ng tid det tar att tr√§na detta n√§tverk beroende p√• antalet GPU:er och √∂nskad utdatauppl√∂sning. L√•t oss anta att vi har √•tta grafikprocessorer och vill ha en utg√•ngsuppl√∂sning p√• 512√ó512; vi beh√∂ver en EC2 av typen “p3.16xlarge” som kostar $24,48 per timme, s√• vi betalar $6 120 f√∂r detta experiment. Men det finns mer innan vi kan g√∂ra det h√§r experimentet. Forskare m√•ste upprepa flera cykler med att k√∂ra kortare experiment, utv√§rdera resultaten, √§ndra parametrarna och b√∂rja om fr√•n b√∂rjan.

S√• nu kan utbildningskostnaden f√∂r endast en forskare vara allt fr√•n $8‚Äď12k per m√•nad. Multiplicera detta med N forskare, och v√•r m√•natliga f√∂rbr√§nningshastighet ligger utanf√∂r diagrammet.

Vi var tvungna att göra något

Att br√§nna dessa summor varje m√•nad √§r inte h√•llbart f√∂r en liten startup, s√• vi var tvungna att hitta en l√∂sning som dramatiskt skulle minska kostnaderna ‚Äď men ocks√• f√∂rb√§ttra utvecklarhastigheten och skala snabbt.

Här är en översikt över vår lösning:

Forskare: kommer att utlösa träningsjobb via ett Python-skript (skriptet kommer att vara deklarativa instruktioner för att bygga ett ML-experiment).

Utbildningsjobb: kommer att schemaläggas på AWS ovanpå Spot-instansen och kommer att hanteras helt av vår infrastruktur.

Spårbarhet: under träning kommer mätvärden som GPU-statistik/framsteg att skickas till forskaren via Slack, och modellkontrollpunkter kommer automatiskt att laddas upp för att ses via Tensorboard.

Att utveckla infrastrukturen

Låt oss först se över den minsta enheten i infrastrukturen, docker-bilden.

Bilden √§r konstruerad av tre steg som upprepar varje tr√§ningspass och har ett Python-gr√§nssnitt f√∂r abstraktion. F√∂r en integration kommer Algo-forskaren att l√§gga till ett anrop till n√•gon tr√§ningskod i “Tr√§na-funktionen”; sedan, n√§r denna docker-bild kompileras, h√§mtar den tr√§ningsdata fr√•n en S3-hink och sparar den p√• den lokala maskinen ‚Üí Anropa en tr√§ningsfunktion ‚Üí Spara resultaten tillbaka till S3.

Denna logik ovan är faktiskt en klass som anropas när dockaren startar. Allt användaren behöver göra är att åsidosätta tågfunktionen. För det gav vi en enkel abstraktion:

from resarch.some_algo import train_my_alg
from algo.training.session import TrainingSession


class Session(TrainingSession):
    def __init__(self):
        super().__init__(path_to_training_res_folder="/...")

    def train(self):
        super().train()
        train_my_alg(restore=self.training_env_var.resume_needed)

Att √§rva fr√•n TrainingSession inneb√§r att alla tunga lyft g√∂rs f√∂r anv√§ndaren. Importera samtalet till tr√§ningsfunktionen (rad 1). L√§gg till s√∂kv√§gen d√§r kontrollpunkterna sparas (rad 7). Denna v√§g kommer att backas upp av infrastrukturen till s3 under tr√§ning. √Ösidos√§tt “tr√§na”-funktionen och anrop n√•gon algotr√§ningskod (rad 9‚Äď11).

Startar a mer kostnadseffektivt ML-utbildningsjobb

För att starta ett utbildningsjobb tillhandahöll vi ett enkelt deklarativt skript via Python SDK:

from algo.training.helpers import run
from algo.training.env_var import TrainingEnvVar, DataSourceEnvVar

env_vars = TrainingEnvVar(...)

run(env_vars=env_vars)

TrainingEnvVar ‚Äď Deklarativa instruktioner f√∂r experimentet. k√∂r ‚Äď Kommer att avfyra SNS-√§mne som kommer att starta ett fl√∂de f√∂r att k√∂ra ett tr√§ningsjobb p√• AWS.

Utlöser ett experimentjobb

SNS-meddelande med all träningsmetadata skickad (3). Detta är samma meddelande som används av infra om vi behöver återuppta jobbet på en annan plats. Meddelandet konsumeras av SQS för att bevara staten och lambda som avfyrar en punktförfrågan. Spot-förfrågningar är asynkrona, vilket innebär att uppfyllandet kan ta tid. När en spot-instans är igång skickas en CloudWatch-händelse. Spotuppfyllelsehändelsen utlöser en Lambda (4) som är ansvarig för att dra ett meddelande från SQS(5) med alla instruktioner för träningsjobbet.

Svara på avbrott i kostnadseffektiva ML-utbildningsjobb

Innan AWS-spotinstansen kommer att tas från oss får vi ett CloudWatch-meddelande. För det här fallet lade vi till en Lambda-trigger som ansluter till instansen och kör en återställningsfunktion inuti docker-bilden (1) som startar ovanstående flöde igen från toppen.

Starta kostnadseffektiv ML-utbildning

Lambda (6) utlöses av en CloudWatch-händelse:

{
  "source": ["aws.ec2"],
  "detail-type": ["EC2 Spot Instance Request Fulfillment"]
}

Den ansluter sedan till den nya punktinstansen för att starta ett träningsjobb från den sista punkten där det slutade eller starta ett nytt jobb om SNS (3)-meddelandet skickades av forskaren.

Efter sex månader i produktion var resultaten dramatiska

Ovanstående mätvärden visar utvecklingsfasen när vi tillbringade två veckor med att bygga ovanstående kostnadseffektiva ML-träningsinfrastruktur, följt av utvecklingsanvändningen av vårt team.

Låt oss zooma in på en forskare med vår plattform. I juli och augusti använde de inte infra och körde K små experiment som kostade ~$650. I september körde de samma K-experiment++ men vi halverade kostnaden. I oktober mer än fördubblade de sina experiment och kostnaden var bara runt 600 dollar.

Idag använder alla Bria-forskare vår interna infra samtidigt som de drar fördel av dramatiskt minskade kostnader och en avsevärt förbättrad forskningshastighet.

Den här historien dök ursprungligen upp på Medium.com. Copyright 2021

DataDecisionMakers

Välkommen till VentureBeat-communityt!

DataDecisionMakers är där experter, inklusive tekniska personer som arbetar med data, kan dela datarelaterade insikter och innovation.

Om du vill l√§sa om banbrytande id√©er och aktuell information, b√§sta praxis och framtiden f√∂r data- och datateknik, g√• med oss ‚Äč‚Äčp√• DataDecisionMakers.

Du kan till och med överväga att bidra med en egen artikel!

Läs mer från DataDecisionMakers