class_docstr: This component is a DAG.
class_docstr_tok: ["This","component","is","a","DAG","."]
code: def run(self):
      # Step 1 and 2: Download and process the data.
      self.data_collector.run()
      self.processing.run(
          df_data=self.data_collector.df_data,
          df_target=self.data_collector.df_target,
      )
  
      # Step 3: Launch n models training in parallel.
      for model, work in self.dict.items():
          work.run(
              X_train=self.processing.X_train,
              X_test=self.processing.X_test,
              y_train=self.processing.y_train,
              y_test=self.processing.y_test,
          )
          if (
              work.test_rmse
          ):  # Use the state to control when to collect and stop.
              self.metrics[model] = work.test_rmse
              work.stop()  # Stop the model work to reduce cost
  
      # Step 4: Print the score of each model when they are all finished.
      if len(self.metrics) == len(self.dict):
          print(self.metrics)
          self.has_completed = True
  
imports: import os
  from importlib import import_module
  import numpy
  import pandas
  from lightning.app import LightningApp, LightningFlow, LightningWork
  from lightning.app.components import TracerPythonScript
  from lightning.app.storage import Payload
  from lightning.app.structures import Dict, List
  from sklearn import datasets
  from sklearn.metrics import mean_squared_error
label_desc: Use image node_id 2 for calling the DAG obj's underlying member method code with example usage: obj.run() without return types