# app.py import lightning as L import time class TrainComponent(L.LightningWork): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.last_checkpoint_path = None def run(self): # pretend to train and save a checkpoint every 10 steps for step in (range(1000)): time.sleep(1.0) fake_loss = round(1/(step + 0.00001), 4) print(f'{step=}: {fake_loss=} ') if step % 10 == 0: self.last_checkpoint_path = f'/some/path/{step=}_{fake_loss=}' print(f'TRAIN COMPONENT: saved new checkpoint: {self.last_checkpoint_path}') class ModelDeploymentComponent(L.LightningWork): def run(self, new_checkpoint): print(f'DEPLOY COMPONENT: load new model from checkpoint: {new_checkpoint}') class ContinuousDeployment(L.LightningFlow): def __init__(self) -> None: super().__init__() self.train = TrainComponent(parallel=True) self.model_deployment = ModelDeploymentComponent(parallel=True) def run(self): self.train.run() if self.train.last_checkpoint_path: self.model_deployment.run(self.train.last_checkpoint_path) app = L.LightningApp(ContinuousDeployment())