package Ġedu . wpi . in nd ie . ui Ċ Ċ import Ġarrow . core . None Ċ import Ġarrow . core . Option Ċ import Ġarrow . core . Some Ċ import Ġarrow . fx . IO Ċ import Ġedu . wpi . in nd ie . aws . EC 2 Manager Ċ import Ġedu . wpi . in nd ie . aws . EC 2 Training Result Supplier Ċ import Ġedu . wpi . in nd ie . aws . EC 2 Training Script C ancell er Ċ import Ġedu . wpi . in nd ie . aws . EC 2 Training Script Progress Reporter Ċ import Ġedu . wpi . in nd ie . aws . EC 2 Training Script Runner Ċ import Ġedu . wpi . in nd ie . aws . Local Training Result Supplier Ċ import Ġedu . wpi . in nd ie . aws . Local Training Script C ancell er Ċ import Ġedu . wpi . in nd ie . aws . Local Training Script Progress Reporter Ċ import Ġedu . wpi . in nd ie . aws . Local Training Script Runner Ċ import Ġedu . wpi . in nd ie . aws . Run Training Script Configuration Ċ import Ġedu . wpi . in nd ie . aws . S 3 Manager Ċ import Ġedu . wpi . in nd ie . aws . Training Result Supplier Ċ import Ġedu . wpi . in nd ie . aws . Training Script C ancell er Ċ import Ġedu . wpi . in nd ie . aws . Training Script Progress Reporter Ċ import Ġedu . wpi . in nd ie . aws . Training Script Runner Ċ import Ġedu . wpi . in nd ie . aws . preferences . Preferences Manager Ċ import Ġedu . wpi . in nd ie . db . Job Db Ċ import Ġedu . wpi . in nd ie . db . data . Desired Job Training Method Ċ import Ġedu . wpi . in nd ie . db . data . Internal Job Training Method Ċ import Ġedu . wpi . in nd ie . db . data . Job Ċ import Ġedu . wpi . in nd ie . db . data . Model Source Ċ import Ġedu . wpi . in nd ie . db . data . Training Script Progress Ċ import Ġedu . wpi . in nd ie . tf data . Model Ċ import Ġedu . wpi . in nd ie . training . Train General Model Script Generator Ċ import Ġedu . wpi . in nd ie . training . Train Sequential Model Script Generator Ċ import Ġedu . wpi . in nd ie . training . Train State Ċ import Ġedu . wpi . in nd ie . util . FilePath Ċ import Ġedu . wpi . in nd ie . util . getLocal Training Script Runner Working Dir Ċ import Ġedu . wpi . in nd ie . util . in nd ie Bucket Name Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġkotlinx . coroutines . delay Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . k oin . core . K oin Component Ċ import Ġorg . k oin . core . get Ċ import Ġorg . k oin . core . inject Ċ import Ġorg . k oin . core . qual ifier . named Ċ Ċ /** Ċ Ġ* ĠHandles Ġrunning , Ġcancell ing , Ġand Ġprogress Ġpolling Ġfor ĠJobs . Ċ Ġ*/ Ċ internal Ġclass ĠJob Runner Ġ: ĠK oin Component Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrun ners Ġ= Ġmutable Map Of < Int , ĠTraining Script Runner >() ĊĠĠĠ Ġprivate Ġval Ġprogress Report ers Ġ= Ġmutable Map Of < Int , ĠTraining Script Progress Reporter >() ĊĠĠĠ Ġprivate Ġval Ġcancell ers Ġ= Ġmutable Map Of < Int , ĠTraining Script C ancell er >() ĊĠĠĠ Ġprivate Ġval Ġresult Supp liers Ġ= Ġmutable Map Of < Int , ĠTraining Result Supplier >() ĊĠĠĠ Ġprivate Ġval Ġbucket Name Ġby Ġinject < Option < String >>( named ( in nd ie Bucket Name )) ĊĠĠĠ Ġprivate Ġval Ġmodel Manager Ġby Ġinject < Model Manager >() ĊĠĠĠ Ġprivate Ġval Ġjob Db Ġby Ġinject < Job Db >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerates Ġthe Ġcode Ġfor Ġa Ġjob Ġand Ġstarts Ġit . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġjob ĠThe Ġ[ Job ] Ġto Ġrun . ĊĠĠĠĠ Ġ* Ġ@ return ĠAn Ġ[ IO ] Ġfor Ġcontinuation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġstart Job ( ĊĠĠĠĠĠĠĠ Ġjob : ĠJob , ĊĠĠĠĠĠĠĠ Ġdesired Job Training Method : ĠDes ired Job Training Method ĊĠĠĠ Ġ): ĠInternal Job Training Method Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġwe Ġcan Ġstart Ġthe Ġjob . ĠNo Ġsense Ġin Ġstarting Ġa ĠJob Ġthat Ġis Ġalready Ġrunning . ĊĠĠĠĠĠĠĠ Ġrequire ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob . status Ġ== ĠTraining Script Progress . Not Started Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob . status Ġ== ĠTraining Script Progress . Completed Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob . status Ġis ĠTraining Script Progress . Error ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" The ĠJob Ġto Ġstart Ġmust Ġnot Ġbe Ġrunning . ĠGot Ġa ĠJob Ġwith Ġstate : Ġ${ job . status }" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( desired Job Training Method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDes ired Job Training Method . LOCAL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal File Ġ= Ġmodel Manager . download Model ( job . user Old Model Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Local Job ( job . copy ( user Old Model Path Ġ= ĠModel Source . FromFile ( local File ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInternal Job Training Method . Local ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠDes ired Job Training Method . EC 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( bucketName Ġis ĠSome ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs 3 File Ġ= Ġmodel Manager . upload Model ( job . user Old Model Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart EC 2 Job ( job . copy ( user Old Model Path Ġ= ĠModel Source . FromFile ( s 3 File ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Local Job ( job : ĠJob ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġworking Dir Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Local Training Script Runner Working Dir ( job . id ) ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= Ġgenerate Script And Create Config ( job , Ġworking Dir ) ĊĊĠĠĠĠĠĠĠ Ġval Ġscript Runner Ġ= ĠLocal Training Script Runner (). apply Ġ{ Ġstart Script ( config ) Ġ} ĊĠĠĠĠĠĠĠ Ġset Script Runner ( job . id , Ġscript Runner ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart EC 2 Job ( job : ĠJob ): ĠInternal Job Training Method . EC 2 Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe ĠEC 2 Ġrunner Ġneeds Ġto Ġoutput Ġto Ġa Ġrelative Ġdirectory Ġ( and ĠNOT Ġjust Ġthe Ġcurrent ĊĠĠĠĠĠĠĠ Ġ// Ġdirectory ) Ġbecause Ġit Ġruns Ġthe Ġtraining Ġscript Ġin Ġa ĠDocker Ġcontainer Ġand Ġmaps Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġcurrent Ġdirectory Ġwith Ġ`- v `. ĊĠĠĠĠĠĠĠ Ġval Ġworking Dir Ġ= ĠPaths . get (". "). resolve (" output ") ĊĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= Ġgenerate Script And Create Config ( job , Ġworking Dir ) ĊĊĠĠĠĠĠĠĠ Ġval Ġscript Runner Ġ= ĠEC 2 Training Script Runner ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠAllow Ġoverriding Ġthe Ġdefault Ġnode Ġtype Ġin Ġthe ĠJob Ġeditor Ġform ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget < Preferences Manager >(). get (). default EC 2 NodeType , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEC 2 Manager (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS 3 Manager ( get Bucket ()) ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġstart Script ( config ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Script Runner ( job . id , Ġscript Runner ) ĊĠĠĠĠĠĠĠ Ġreturn ĠInternal Job Training Method . EC 2 ( script Runner . getInstance Id ( config . id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Script Runner ( jobId : ĠInt , Ġscript Runner : ĠTraining Script Runner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun ners [ jobId ] Ġ= Ġscript Runner ĊĠĠĠĠĠĠĠ Ġprogress Report ers [ jobId ] Ġ= Ġscript Runner ĊĠĠĠĠĠĠĠ Ġcancell ers [ jobId ] Ġ= Ġscript Runner ĊĠĠĠĠĠĠĠ Ġresult Supp liers [ jobId ] Ġ= Ġscript Runner ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Script And Create Config ( ĊĠĠĠĠĠĠĠ Ġjob : ĠJob , ĊĠĠĠĠĠĠĠ Ġworking Dir : ĠPath ĊĠĠĠ Ġ): ĠRun Training Script Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( job . user Old Model Path Ġis ĠModel Source . FromFile ) ĊĠĠĠĠĠĠĠ Ġval Ġmodel Path Ġ= Ġ( job . user Old Model Path Ġas ĠModel Source . FromFile ). filePath ĊĠĠĠĠĠĠĠ Ġval Ġold Model Ġ= Ġmodel Manager . load Model ( job . user Old Model Path ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtrain Model Script Generator Ġ= Ġwhen Ġ( job . user New Model ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠModel . Sequential Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( old Model Ġis ĠModel . Sequential ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrain Sequential Model Script Generator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Train State ( job , Ġmodel Path , Ġworking Dir ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Model ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠModel . General Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( old Model Ġis ĠModel . General ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrain General Model Script Generator ( to Train State ( job , Ġmodel Path , Ġworking Dir ), Ġold Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġscript Ġ= Ġtrain Model Script Generator . generate Script (). fold ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIO . raise Error < String >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Got Ġerrors Ġwhen Ġgenerating Ġscript : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ it . all . join ToString ("\ n ")} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠIO . just ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ). unsafe Run Sync () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Run Training Script Configuration ( job , Ġmodel Path , Ġscript , Ġworking Dir ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCancel s Ġthe ĠJob . ĠIf Ġthe ĠJob Ġis Ġcurrently Ġrunning , Ġit Ġis Ġinterrupted . ĠIf Ġthe ĠJob Ġis Ġnot ĊĠĠĠĠ Ġ* Ġrunning , Ġthis Ġmethod Ġdoes Ġnothing . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġid ĠThe Ġid Ġof Ġthe ĠJob Ġto Ġcancel . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġcancel Job ( id : ĠInt ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġcancell ers [ id ]?. let Ġ{ Ġit . cancel Script ( id ); Ġtrue Ġ} Ġ?: Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġpreviously Ġset ĠTraining Result Supplier Ġor Ġtry Ġto Ġcreate Ġa Ġnew Ġone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Result Supplier ( id : ĠInt ): ĠTraining Result Supplier ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsupplier Ġ= Ġresult Supp liers [ id ] ĊĠĠĠĠĠĠĠ Ġif Ġ( supplier Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsupplier ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= Ġjob Db . getById ( id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( job Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Supplier Ġ= Ġwhen Ġ( job . internal Training Method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInternal Job Training Method . EC 2 Ġ-> ĠEC 2 Training Result Supplier ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS 3 Manager ( get Bucket ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInternal Job Training Method . Local Ġ-> ĠLocal Training Result Supplier (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Job ( id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Local Training Script Runner Working Dir ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Supplier ?. let Ġ{ Ġresult Supp liers [ id ] Ġ= Ġit Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Supplier ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġlist Results ( id : ĠInt ) Ġ= Ġget Result Supplier ( id )?. list Results ( id ) Ġ?: Ġempty List () ĊĊĠĠĠ Ġinternal Ġfun Ġget Result ( id : ĠInt , Ġfilename : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġget Result Supplier ( id ) !!. getResult ( id , Ġfilename ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠW aits Ġuntil Ġthe Ġ[ Training Script Progress ] Ġstate Ġis Ġeither Ġcompleted Ġor Ġerror . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġid ĠThe ĠJob Ġid . ĊĠĠĠĠ Ġ* Ġ@ param Ġprogress Update ĠA Ġcallback Ġthat Ġis Ġgiven Ġthe Ġcurrent Ġ[ Training Script Progress ] Ġstate ĊĠĠĠĠ Ġ* Ġevery Ġtime Ġit Ġis Ġpol led . ĊĠĠĠĠ Ġ* Ġ@ return ĠAn Ġ[ IO ] Ġfor Ġcontinuation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġsuspend Ġfun ĠwaitFor Finish ( id : ĠInt , Ġprogress Update : Ġ( Training Script Progress ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġlatest Ġstatus Polling Delay Ġin Ġcase Ġthe Ġuser Ġchanged Ġit ĊĠĠĠĠĠĠĠ Ġval Ġstatus Polling Delay Ġ= Ġget < Preferences Manager >(). get (). status Polling Delay ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġaccess Ġ` progress Report ers ` Ġin Ġhere , Ġnot Ġ` runners ` ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress Ġ= Ġprogress Report ers [ id ] !!. get Training Progress ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Update ( progress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( progress Ġ== ĠTraining Script Progress . Completed Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġis ĠTraining Script Progress . Error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( status Polling Delay ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarts Ġprogress Ġreporting Ġafter ĠIN N Di E Ġhas Ġbeen Ġrestarted . ĠAfter Ġcalling Ġthis , Ġit 's Ġsafe Ġto ĊĠĠĠĠ Ġ* Ġcall Ġ[ waitFor Finish ] Ġto Ġresume Ġtracking Ġprogress Ġupdates Ġfor Ġa ĠJob . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġjob ĠThe ĠJob . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġstart Progress Reporting ( job : ĠJob ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( runners [ job . id ] Ġ== Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġtraining Method Ġ= Ġjob . internal Training Method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInternal Job Training Method . EC 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġec 2 Manager Ġ= ĠEC 2 Manager () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs 3 Manager Ġ= ĠS 3 Manager ( get Bucket ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Report ers [ job . id ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEC 2 Training Script Progress Reporter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġec 2 Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs 3 Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Job ( job . id , Ġtraining Method . instanceId , Ġjob . user Epoch s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancell ers [ job . id ] Ġ= ĠEC 2 Training Script C ancell er ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġec 2 Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Job ( job . id , Ġtraining Method . instanceId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Supp liers [ job . id ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEC 2 Training Result Supplier ( s 3 Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInternal Job Training Method . Local Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġscript Ġcontents Ġdon 't Ġmatter Ġto Ġthe Ġprogress Ġreporter . ĠSet Ġan Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstring Ġto Ġavoid Ġhaving Ġto Ġre generate Ġthe Ġscript . ĠThe Ġmodel Ġpath Ġdoesn 't Ġmatter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġeither . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= Ġcreate Run Training Script Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilePath . Local (""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Local Training Script Runner Working Dir ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Report ers [ job . id ] Ġ= ĠLocal Training Script Progress Reporter (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Job After Restart ( config ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancell ers [ job . id ] Ġ= ĠLocal Training Script C ancell er (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Job After Restart ( job . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Report ers [ job . id ] !!. override Training Progress ( job . id , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Supp liers [ job . id ] Ġ= ĠLocal Training Result Supplier (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Job ( job . id , Ġconfig . working Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInternal Job Training Method . Un trained Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Cannot Ġresume Ġtraining Ġfor Ġa ĠJob Ġthat Ġhas Ġnot Ġstarted Ġtraining .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bucket (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbucket Ġ= Ġget < Option < String >>( named ( in nd ie Bucket Name )) ĊĠĠĠĠĠĠĠ Ġcheck ( bucket Ġis ĠSome ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Tri ed Ġto Ġcreate Ġan ĠEC 2 Training Script Runner Ġbut Ġdid Ġnot Ġhave Ġa Ġbucket Ġconfigured ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbucket . t ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Run Training Script Configuration ( ĊĠĠĠĠĠĠĠ Ġjob : ĠJob , ĊĠĠĠĠĠĠĠ Ġmodel Path : ĠFilePath , ĊĠĠĠĠĠĠĠ Ġscript : ĠString , ĊĠĠĠĠĠĠĠ Ġworking Dir : ĠPath ĊĠĠĠ Ġ) Ġ= ĠRun Training Script Configuration ( ĊĠĠĠĠĠĠĠ Ġold ModelName Ġ= Ġmodel Path , ĊĠĠĠĠĠĠĠ Ġdataset Ġ= Ġjob . user Dataset , ĊĠĠĠĠĠĠĠ Ġscript Contents Ġ= Ġscript , ĊĠĠĠĠĠĠĠ Ġepochs Ġ= Ġjob . user Epoch s , ĊĠĠĠĠĠĠĠ Ġworking Dir Ġ= Ġworking Dir , ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġjob . id ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠModel > Ġto Train State ( ĊĠĠĠĠĠĠĠ Ġjob : ĠJob , ĊĠĠĠĠĠĠĠ Ġmodel Path : ĠFilePath , ĊĠĠĠĠĠĠĠ Ġworking Dir : ĠPath ĊĠĠĠ Ġ): ĠTrain State < T > Ġ= ĊĠĠĠĠĠĠĠ ĠTrain State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Old Model Path Ġ= Ġmodel Path , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Dataset Ġ= Ġjob . user Dataset , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Optimizer Ġ= Ġjob . user Optimizer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Loss Ġ= Ġjob . user Loss , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Metrics Ġ= Ġjob . user Metrics , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Epoch s Ġ= Ġjob . user Epoch s , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠAdd Ġuser Validation Split Ġto ĠJob Ġand Ġpull Ġit Ġfrom Ġthere Ġso Ġthat Ġthe Ġuser Ġcan ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġconfigure Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Validation Split Ġ= ĠNone , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser New Model Ġ= Ġjob . user New Model Ġas ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Debug Comments Ġ= Ġjob . generate Debug Comments , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= Ġjob . target , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworking Dir Ġ= Ġworking Dir , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdataset Plugin Ġ= Ġjob . dataset Plugin , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob . id ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĠKotlin Logging . logger Ġ{ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ