libinephany 1.0.4__tar.gz → 1.1.2__tar.gz
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.
- libinephany-1.1.2/CODE_VERSION.cfg +1 -0
- {libinephany-1.0.4/libinephany.egg-info → libinephany-1.1.2}/PKG-INFO +1 -1
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/local_observers.py +8 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/schemas/inner_task_profile.py +4 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/schemas/tensor_statistics.py +1 -1
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/web_apps/error_logger.py +34 -2
- {libinephany-1.0.4 → libinephany-1.1.2/libinephany.egg-info}/PKG-INFO +1 -1
- libinephany-1.0.4/CODE_VERSION.cfg +0 -1
- {libinephany-1.0.4 → libinephany-1.1.2}/LICENSE +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/MANIFEST.in +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/README.md +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/__init__.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/aws/__init__.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/aws/s3_functions.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/__init__.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observation_utils.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observer_pipeline.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/__init__.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/base_observers.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/global_observers/__init__.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/global_observers/base_classes.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/global_observers/constants.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/global_observers/gradient_observers.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/global_observers/hyperparameter_observers.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/global_observers/loss_observers.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/global_observers/model_observers.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/global_observers/progress_observers.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/observer_containers.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/pipeline_coordinator.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/post_processors/__init__.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/post_processors/postprocessors.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/statistic_manager.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/statistic_trackers.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/__init__.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/configs/__init__.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/configs/hyperparameter_configs.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/configs/observer_config.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/configs/outer_model_config.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/schemas/__init__.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/schemas/agent_info.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/schemas/observation_models.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/schemas/request_schemas.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/schemas/response_schemas.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/states/__init__.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/states/hyperparameter_states.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/__init__.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/agent_utils.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/asyncio_worker.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/backend_statuses.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/constants.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/directory_utils.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/dropout_utils.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/enums.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/error_severities.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/exceptions.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/import_utils.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/optim_utils.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/random_seeds.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/samplers.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/standardizers.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/torch_distributed_utils.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/torch_utils.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/transforms.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/utils/typing.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/web_apps/__init__.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany/web_apps/web_app_utils.py +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany.egg-info/SOURCES.txt +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany.egg-info/dependency_links.txt +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany.egg-info/requires.txt +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/libinephany.egg-info/top_level.txt +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/pyproject.toml +0 -0
- {libinephany-1.0.4 → libinephany-1.1.2}/setup.cfg +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
1.1.2
|
{libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/local_observers.py
RENAMED
@@ -683,6 +683,14 @@ class ModuleTypeOneHot(LocalObserver):
|
|
683
683
|
|
684
684
|
return False
|
685
685
|
|
686
|
+
@property
|
687
|
+
def can_standardize(self) -> bool:
|
688
|
+
"""
|
689
|
+
:return: Whether the observation can be standardized.
|
690
|
+
"""
|
691
|
+
|
692
|
+
return False
|
693
|
+
|
686
694
|
def _get_observation_format(self) -> StatisticStorageTypes:
|
687
695
|
"""
|
688
696
|
:return: Format the observation returns data in. Must be one of the enum attributes in the StatisticStorageTypes
|
{libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/schemas/inner_task_profile.py
RENAMED
@@ -27,6 +27,7 @@ class InnerTaskProfile(BaseModel):
|
|
27
27
|
number_of_parameters: int
|
28
28
|
vram_usage: float
|
29
29
|
idle_vram_usage: float
|
30
|
+
hparam_overrides: dict[str, dict[str, Any]] | None = None
|
30
31
|
|
31
32
|
@field_validator("vram_usage", "idle_vram_usage", mode="before")
|
32
33
|
def replace_non_with_nan(cls, value: None | float) -> float:
|
@@ -244,6 +245,7 @@ class InnerTaskProfiles(BaseModel):
|
|
244
245
|
number_of_parameters: int,
|
245
246
|
vram_usage: float,
|
246
247
|
idle_vram_usage: float,
|
248
|
+
hparam_overrides: dict[str, dict[str, Any]] | None = None,
|
247
249
|
) -> None:
|
248
250
|
"""
|
249
251
|
:param inner_task_name: Name of the inner task to add a profile for.
|
@@ -254,6 +256,7 @@ class InnerTaskProfiles(BaseModel):
|
|
254
256
|
:param vram_usage: VRAM required to perform the inner task. Can be NaN if an OOM was encountered.
|
255
257
|
:param idle_vram_usage: VRAM required for the inner task to sit loaded but not actively being trained. Can be
|
256
258
|
NaN if an OOM was encountered.
|
259
|
+
:param hparam_overrides: Hyperparameter overrides for the inner task.
|
257
260
|
"""
|
258
261
|
|
259
262
|
self.profiles[inner_task_name] = InnerTaskProfile(
|
@@ -265,6 +268,7 @@ class InnerTaskProfiles(BaseModel):
|
|
265
268
|
number_of_parameters=number_of_parameters,
|
266
269
|
vram_usage=vram_usage,
|
267
270
|
idle_vram_usage=idle_vram_usage,
|
271
|
+
hparam_overrides=hparam_overrides,
|
268
272
|
)
|
269
273
|
|
270
274
|
def validate_task_profiles(self, policy_mapping_function: Callable[[str, Any, Any], str]) -> None:
|
{libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/schemas/tensor_statistics.py
RENAMED
@@ -205,7 +205,7 @@ class TensorStatistics(BaseModel):
|
|
205
205
|
for field, field_value in stats.model_dump().items():
|
206
206
|
name = field[:-1] if field.endswith(FIELD_SUFFIX) else field
|
207
207
|
|
208
|
-
if name in include_statistics:
|
208
|
+
if name in include_statistics or field in include_statistics:
|
209
209
|
setattr(stats, name, downsampled_tensor)
|
210
210
|
|
211
211
|
return stats
|
@@ -58,6 +58,8 @@ class ErrorLogger(AsyncioWorker):
|
|
58
58
|
def __init__(
|
59
59
|
self,
|
60
60
|
service_name: str,
|
61
|
+
member_ids_to_mention: list[str] | None = None,
|
62
|
+
custom_error_message: str | None = None,
|
61
63
|
minimum_severity: ErrorSeverities = ErrorSeverities.WARNING,
|
62
64
|
error_classifier: ExceptionSeverityClassifier | None = None,
|
63
65
|
max_time_accumulating_errors: float = 10.0,
|
@@ -66,6 +68,8 @@ class ErrorLogger(AsyncioWorker):
|
|
66
68
|
"""
|
67
69
|
:param service_name: Name of the service deployed on the cloud errors sent to this error logger should be sent
|
68
70
|
to.
|
71
|
+
:param member_ids_to_mention: List of member IDs to mention in the Slack message. If None, no members will be mentioned.
|
72
|
+
:param custom_error_message: Custom error message to include in the Slack message. If None, no custom message will be included.
|
69
73
|
:param minimum_severity: Minimum error severity that can be sent to Slack.
|
70
74
|
:param error_classifier: Optional callable used to alter how errors severities are classified. If this is None
|
71
75
|
all errors are given the 'WARNING' severity.
|
@@ -77,6 +81,8 @@ class ErrorLogger(AsyncioWorker):
|
|
77
81
|
|
78
82
|
self._slack_client, self._channel_id = self._get_slack_client()
|
79
83
|
|
84
|
+
self.member_mentions = self._form_member_mentions(member_ids_to_mention=member_ids_to_mention)
|
85
|
+
self.custom_error_message = custom_error_message
|
80
86
|
self.service_name = service_name
|
81
87
|
self.error_classifier = error_classifier if error_classifier is not None else default_error_classifier
|
82
88
|
self.max_time_accumulating_errors = max_time_accumulating_errors
|
@@ -144,6 +150,7 @@ class ErrorLogger(AsyncioWorker):
|
|
144
150
|
exception: Exception,
|
145
151
|
frequency: int,
|
146
152
|
frequency_time_window: float,
|
153
|
+
custom_error_message: str | None,
|
147
154
|
) -> str:
|
148
155
|
"""
|
149
156
|
:param mention: Mention tag of the entire channel or a particular user ID.
|
@@ -152,19 +159,40 @@ class ErrorLogger(AsyncioWorker):
|
|
152
159
|
:param exception: Exception that occurred.
|
153
160
|
:param frequency: How frequently the exception occurred in the given time window.
|
154
161
|
:param frequency_time_window: Time between the first and last instance of the exception.
|
162
|
+
:param custom_error_message: Custom error message to include in the Slack message. If None, no custom message will be included.
|
155
163
|
:return: Formatted Slack message string.
|
156
164
|
"""
|
157
165
|
|
158
166
|
frequency_line = f"{frequency} in {frequency_time_window}s" if frequency > 1 else f"{frequency}"
|
159
167
|
|
168
|
+
header = f"{notification_emoji} *{service_name} Error* {notification_emoji}\n"
|
169
|
+
|
170
|
+
if mention:
|
171
|
+
header += f"• *Alerting*: {mention}\n"
|
172
|
+
|
173
|
+
if custom_error_message is not None:
|
174
|
+
header += f"• *Custom Message*: {custom_error_message}\n"
|
175
|
+
|
160
176
|
return (
|
161
|
-
f"{
|
177
|
+
f"{header}"
|
162
178
|
f"• *Service*: {service_name}\n"
|
163
179
|
f"• *Error Type*: {exception.__class__.__name__}\n"
|
164
180
|
f"• *Frequency*: {frequency_line}\n"
|
165
181
|
f"• *Traceback*: "
|
166
182
|
)
|
167
183
|
|
184
|
+
@staticmethod
|
185
|
+
def _form_member_mentions(member_ids_to_mention: list[str] | None) -> str:
|
186
|
+
"""
|
187
|
+
:param member_ids_to_mention: List of member IDs to mention in the Slack message.
|
188
|
+
:return: String of member mentions.
|
189
|
+
"""
|
190
|
+
|
191
|
+
if not member_ids_to_mention:
|
192
|
+
return ""
|
193
|
+
|
194
|
+
return " ".join([f"<@{member_id}>" for member_id in member_ids_to_mention])
|
195
|
+
|
168
196
|
def _get_traceback_file_name(self, exception: Exception, exception_timestamp: str) -> str:
|
169
197
|
"""
|
170
198
|
:param exception: Exception being sent to Slack.
|
@@ -275,7 +303,10 @@ class ErrorLogger(AsyncioWorker):
|
|
275
303
|
traceback_filename = self._get_traceback_file_name(exception=exception, exception_timestamp=formatted_timestamp)
|
276
304
|
|
277
305
|
notification_emoji = SEVERITY_EMOJIS[severity]
|
278
|
-
|
306
|
+
# Temporary since the bot is used in training and the API.
|
307
|
+
mention = (
|
308
|
+
self.member_mentions if not ErrorSeverities.should_mention(severity=severity) else self.CHANNEL_MENTION
|
309
|
+
)
|
279
310
|
|
280
311
|
self._log_error_to_terminal(exception=exception)
|
281
312
|
|
@@ -291,6 +322,7 @@ class ErrorLogger(AsyncioWorker):
|
|
291
322
|
exception=exception,
|
292
323
|
frequency=frequency,
|
293
324
|
frequency_time_window=frequency_time_window,
|
325
|
+
custom_error_message=self.custom_error_message,
|
294
326
|
),
|
295
327
|
)
|
296
328
|
except SlackApiError as e:
|
@@ -1 +0,0 @@
|
|
1
|
-
1.0.4
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/base_observers.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/observers/observer_containers.py
RENAMED
File without changes
|
File without changes
|
{libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/post_processors/__init__.py
RENAMED
File without changes
|
{libinephany-1.0.4 → libinephany-1.1.2}/libinephany/observations/post_processors/postprocessors.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/configs/observer_config.py
RENAMED
File without changes
|
{libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/configs/outer_model_config.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/schemas/observation_models.py
RENAMED
File without changes
|
{libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/schemas/request_schemas.py
RENAMED
File without changes
|
{libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/schemas/response_schemas.py
RENAMED
File without changes
|
File without changes
|
{libinephany-1.0.4 → libinephany-1.1.2}/libinephany/pydantic_models/states/hyperparameter_states.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|