kostyl-toolkit 0.1.14__py3-none-any.whl → 0.1.16__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,7 +15,10 @@ from kostyl.ml.lightning.extenstions.pretrained_model import (
15
15
 
16
16
 
17
17
  def get_tokenizer_from_clearml(
18
- model_id: str, task: Task | None = None, ignore_remote_overrides: bool = True
18
+ model_id: str,
19
+ task: Task | None = None,
20
+ ignore_remote_overrides: bool = True,
21
+ name: str | None = None,
19
22
  ) -> PreTrainedTokenizerBase:
20
23
  """
21
24
  Retrieve a Hugging Face tokenizer stored in a ClearML.
@@ -26,6 +29,8 @@ def get_tokenizer_from_clearml(
26
29
  the model. Defaults to None.
27
30
  ignore_remote_overrides (bool, optional): Whether to ignore remote hyperparameter
28
31
  overrides when connecting the ClearML task. Defaults to True.
32
+ name: The model name to be stored on the Task
33
+ (default to filename of the model weights, without the file extension, or to Input Model if that is not found)
29
34
 
30
35
  Returns:
31
36
  PreTrainedTokenizerBase: The instantiated tokenizer loaded from the local copy
@@ -34,7 +39,9 @@ def get_tokenizer_from_clearml(
34
39
  """
35
40
  clearml_tokenizer = InputModel(model_id=model_id)
36
41
  if task is not None:
37
- clearml_tokenizer.connect(task, ignore_remote_overrides=ignore_remote_overrides)
42
+ clearml_tokenizer.connect(
43
+ task, ignore_remote_overrides=ignore_remote_overrides, name=name
44
+ )
38
45
 
39
46
  tokenizer = AutoTokenizer.from_pretrained(
40
47
  clearml_tokenizer.get_local_copy(raise_on_error=True)
@@ -49,6 +56,7 @@ def get_model_from_clearml[
49
56
  model: type[TModel],
50
57
  task: Task | None = None,
51
58
  ignore_remote_overrides: bool = True,
59
+ name: str | None = None,
52
60
  **kwargs: Any,
53
61
  ) -> TModel:
54
62
  """
@@ -59,8 +67,11 @@ def get_model_from_clearml[
59
67
  model: The model class that implements either PreTrainedModel or LightningCheckpointLoaderMixin.
60
68
  task: Optional ClearML task used to resolve the input model reference. If provided, the input model
61
69
  will be connected to this task, with remote overrides optionally ignored.
62
- ignore_remote_overrides: When connecting the input model to the provided task, determines whether
70
+ ignore_remote_overrides: When connecting the input model to the provided task,
71
+ determines whether
63
72
  remote configuration overrides should be ignored.
73
+ name: The model name to be stored on the Task
74
+ (default to filename of the model weights, without the file extension, or to Input Model if that is not found)
64
75
  **kwargs: Additional keyword arguments to pass to the model loading method.
65
76
 
66
77
  Returns:
@@ -70,7 +81,11 @@ def get_model_from_clearml[
70
81
  input_model = InputModel(model_id=model_id)
71
82
 
72
83
  if task is not None:
73
- input_model.connect(task, ignore_remote_overrides=ignore_remote_overrides)
84
+ input_model.connect(
85
+ task,
86
+ ignore_remote_overrides=ignore_remote_overrides,
87
+ name=name,
88
+ )
74
89
 
75
90
  local_path = Path(input_model.get_local_copy(raise_on_error=True))
76
91
 
@@ -100,5 +100,5 @@ class TrainingSettings(KostylBaseModel):
100
100
 
101
101
  trainer: LightningTrainerParameters
102
102
  early_stopping: EarlyStoppingConfig | None = None
103
- checkpoint: CheckpointConfig
103
+ checkpoint: CheckpointConfig = CheckpointConfig()
104
104
  data: DataConfig
@@ -78,49 +78,41 @@ class ClearMLRegistryUploaderCallback(Callback):
78
78
  )
79
79
  return output_model
80
80
 
81
- @override
82
- def on_validation_epoch_end(
83
- self, trainer: Trainer, pl_module: KostylLightningModule
84
- ) -> None:
85
- if (not trainer.is_global_zero) or (
86
- self.uploading_frequency != "after-every-eval"
87
- ):
88
- return
81
+ def _upload_best_checkpoint(self, pl_module: KostylLightningModule) -> None:
89
82
  if self._output_model is None:
90
83
  self._output_model = self._create_output_model(pl_module)
91
84
 
92
- if self.ckpt_callback.best_model_path != self._last_best_model_path:
85
+ if self.ckpt_callback.best_model_path == self._last_best_model_path:
86
+ if self.verbose and (self._last_best_model_path != ""):
87
+ logger.info("Best model unchanged since last upload")
88
+ elif self.verbose:
89
+ logger.info("No best model found yet to upload")
90
+ else:
93
91
  if self.verbose:
94
- logger.info(f"Best model path: {self.ckpt_callback.best_model_path}")
92
+ logger.info(
93
+ f"Uploading best model from {self.ckpt_callback.best_model_path}"
94
+ )
95
95
  self._output_model.update_weights(
96
96
  self.ckpt_callback.best_model_path,
97
97
  auto_delete_file=False,
98
- async_enable=True,
98
+ async_enable=False,
99
99
  )
100
- self._last_best_model_path = self.ckpt_callback.best_model_path
101
- elif self.verbose:
102
- logger.info("Best model path: unchanged since last upload, skipping...")
100
+ return
101
+
102
+ @override
103
+ def on_validation_epoch_end(
104
+ self, trainer: Trainer, pl_module: KostylLightningModule
105
+ ) -> None:
106
+ if (not trainer.is_global_zero) or (
107
+ self.uploading_frequency != "after-every-eval"
108
+ ):
109
+ return
110
+ self._upload_best_checkpoint(pl_module)
103
111
  return
104
112
 
105
113
  @override
106
114
  def on_train_end(self, trainer: Trainer, pl_module: KostylLightningModule) -> None:
107
115
  if not trainer.is_global_zero:
108
116
  return
109
- if self._output_model is None:
110
- self._output_model = self._create_output_model(pl_module)
111
-
112
- if self.ckpt_callback.best_model_path != self._last_best_model_path:
113
- if self.verbose:
114
- logger.info(
115
- f"Best model path at the end of training: {self.ckpt_callback.best_model_path}"
116
- )
117
- self._output_model.update_weights(
118
- self.ckpt_callback.best_model_path,
119
- auto_delete_file=False,
120
- async_enable=False,
121
- )
122
- elif self.verbose:
123
- logger.info(
124
- "Best model path at the end of training: unchanged since last upload, skipping..."
125
- )
117
+ self._upload_best_checkpoint(pl_module)
126
118
  return
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: kostyl-toolkit
3
- Version: 0.1.14
3
+ Version: 0.1.16
4
4
  Summary: Kickass Orchestration System for Training, Yielding & Logging
5
5
  Requires-Dist: case-converter>=1.2.0
6
6
  Requires-Dist: loguru>=0.7.3
@@ -3,17 +3,17 @@ kostyl/ml/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  kostyl/ml/clearml/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  kostyl/ml/clearml/dataset_utils.py,sha256=eij_sr2KDhm8GxEbVbK8aBjPsuVvLl9-PIGGaKVgXLA,1729
5
5
  kostyl/ml/clearml/logging_utils.py,sha256=GBjIIZbH_itd5sj7XpvxjkyZwxxGOpEcQ3BiWaJTyq8,1210
6
- kostyl/ml/clearml/pulling_utils.py,sha256=-9EIMUu3daWLj99s_G5rJ_omykz1nPLqxBzBJ8Am8aU,3520
6
+ kostyl/ml/clearml/pulling_utils.py,sha256=zw3HuBdBc6F3VpQ3StaHGUurl9Hqy5cAcjCWqzo7r6I,4040
7
7
  kostyl/ml/configs/__init__.py,sha256=IetcivbqYGutowLqxdKp7QR4tkXKBr4m8t4Zkk9jHZU,911
8
8
  kostyl/ml/configs/base_model.py,sha256=Eofn14J9RsjpVx_J4rp6C19pDDCANU4hr3JtX-d0FpQ,4820
9
9
  kostyl/ml/configs/hyperparams.py,sha256=CaVNEvpW4LvlHhLsbe2FockIGI1mJufCqjH298nYgKE,2971
10
- kostyl/ml/configs/training_settings.py,sha256=CZBwVVmkpCUtXCnfC1RFGQGUemht5xbOI43rgg7cNeg,2535
10
+ kostyl/ml/configs/training_settings.py,sha256=0cyKF6EuTv6KgXC1g0Oy9zbwnMkDP4uXTJJO1TRQ0aY,2556
11
11
  kostyl/ml/dist_utils.py,sha256=G8atjzkRbXZZiZh9rdEYBmeXqX26rJdDDovft2n6xiU,3201
12
12
  kostyl/ml/lightning/__init__.py,sha256=-F3JAyq8KU1d-nACWryGu8d1CbvWbQ1rXFdeRwfE2X8,175
13
13
  kostyl/ml/lightning/callbacks/__init__.py,sha256=Vd-rozY4T9Prr3IMqbliXxj6sC6y9XsovHQqRwzc2HI,297
14
14
  kostyl/ml/lightning/callbacks/checkpoint.py,sha256=FooGeeUz6TtoXQglpcK16NWAmSX3fbu6wntRtK3a_Io,1936
15
15
  kostyl/ml/lightning/callbacks/early_stopping.py,sha256=D5nyjktCJ9XYAf28-kgXG8jORvXLl1N3nbDQnvValPM,615
16
- kostyl/ml/lightning/callbacks/registry_uploading.py,sha256=um-fHQUp-TSD_76rVZoNV2IMi05RFjKajGvMV7SAb6s,4691
16
+ kostyl/ml/lightning/callbacks/registry_uploading.py,sha256=AAohqTGigWMGLHt-yITAznIVsaDVXR_jisLDzFNzlu8,4275
17
17
  kostyl/ml/lightning/extenstions/__init__.py,sha256=OY6QGv1agYgqqKf1xJBrxgp_i8FunVfPzYezfaRrGXU,182
18
18
  kostyl/ml/lightning/extenstions/custom_module.py,sha256=nB5jW7cqRD1tyh-q5LD2EtiFQwFkLXpnS9Yu6c5xMRg,5987
19
19
  kostyl/ml/lightning/extenstions/pretrained_model.py,sha256=ZOKtrVl095cwvI43wAz-Xdzu4l0v0lHH2mfh4WXwxKQ,5059
@@ -30,6 +30,6 @@ kostyl/utils/__init__.py,sha256=hkpmB6c5pr4Ti5BshOROebb7cvjDZfNCw83qZ_FFKMM,240
30
30
  kostyl/utils/dict_manipulations.py,sha256=e3vBicID74nYP8lHkVTQc4-IQwoJimrbFELy5uSF6Gk,1073
31
31
  kostyl/utils/fs.py,sha256=gAQNIU4R_2DhwjgzOS8BOMe0gZymtY1eZwmdgOdDgqo,510
32
32
  kostyl/utils/logging.py,sha256=3MvfDPArZhwakHu5nMlp_LpOsWg0E0SP26y41clsBtA,5232
33
- kostyl_toolkit-0.1.14.dist-info/WHEEL,sha256=3id4o64OvRm9dUknh3mMJNcfoTRK08ua5cU6DFyVy-4,79
34
- kostyl_toolkit-0.1.14.dist-info/METADATA,sha256=lOiHm_Bd3uf2eHv7unCgagPABhJUF793ZO3FtX5PWNc,4269
35
- kostyl_toolkit-0.1.14.dist-info/RECORD,,
33
+ kostyl_toolkit-0.1.16.dist-info/WHEEL,sha256=3id4o64OvRm9dUknh3mMJNcfoTRK08ua5cU6DFyVy-4,79
34
+ kostyl_toolkit-0.1.16.dist-info/METADATA,sha256=4KfwL5yViKVIG1ezvaCifG3Soo7PcdS6kYUD_Yl6ZSY,4269
35
+ kostyl_toolkit-0.1.16.dist-info/RECORD,,