ob-metaflow-extensions 1.1.127__tar.gz → 1.1.129__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.
Potentially problematic release.
This version of ob-metaflow-extensions might be problematic. Click here for more details.
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/PKG-INFO +1 -1
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/__init__.py +2 -1
- ob-metaflow-extensions-1.1.129/metaflow_extensions/outerbounds/plugins/card_utilities/async_cards.py +142 -0
- ob-metaflow-extensions-1.1.129/metaflow_extensions/outerbounds/plugins/card_utilities/extra_components.py +545 -0
- ob-metaflow-extensions-1.1.129/metaflow_extensions/outerbounds/plugins/card_utilities/injector.py +70 -0
- ob-metaflow-extensions-1.1.129/metaflow_extensions/outerbounds/plugins/nim/__init__.py +137 -0
- ob-metaflow-extensions-1.1.129/metaflow_extensions/outerbounds/plugins/nim/card.py +154 -0
- ob-metaflow-extensions-1.1.129/metaflow_extensions/outerbounds/plugins/nim/nim_manager.py +319 -0
- ob-metaflow-extensions-1.1.129/metaflow_extensions/outerbounds/plugins/nim/utilities.py +5 -0
- ob-metaflow-extensions-1.1.129/metaflow_extensions/outerbounds/plugins/snowpark/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/ob_metaflow_extensions.egg-info/PKG-INFO +1 -1
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/ob_metaflow_extensions.egg-info/SOURCES.txt +6 -0
- ob-metaflow-extensions-1.1.129/ob_metaflow_extensions.egg-info/requires.txt +3 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/setup.py +2 -2
- ob-metaflow-extensions-1.1.127/metaflow_extensions/outerbounds/plugins/nim/__init__.py +0 -52
- ob-metaflow-extensions-1.1.127/metaflow_extensions/outerbounds/plugins/nim/nim_manager.py +0 -233
- ob-metaflow-extensions-1.1.127/ob_metaflow_extensions.egg-info/requires.txt +0 -3
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/README.md +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/config/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/auth_server.py +0 -0
- {ob-metaflow-extensions-1.1.127/metaflow_extensions/outerbounds/plugins/fast_bakery → ob-metaflow-extensions-1.1.129/metaflow_extensions/outerbounds/plugins/card_utilities}/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127/metaflow_extensions/outerbounds/plugins/nvcf → ob-metaflow-extensions-1.1.129/metaflow_extensions/outerbounds/plugins/fast_bakery}/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/fast_bakery/docker_environment.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery_cli.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery_decorator.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/kubernetes/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/kubernetes/kubernetes_client.py +0 -0
- {ob-metaflow-extensions-1.1.127/metaflow_extensions/outerbounds/plugins/secrets → ob-metaflow-extensions-1.1.129/metaflow_extensions/outerbounds/plugins/nvcf}/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/nvcf/constants.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/nvcf/exceptions.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/nvcf/heartbeat_store.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf_cli.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf_decorator.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/nvcf/utils.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/perimeters.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/profilers/deco_injector.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/profilers/gpu_profile_decorator.py +0 -0
- {ob-metaflow-extensions-1.1.127/metaflow_extensions/outerbounds/plugins/snowpark → ob-metaflow-extensions-1.1.129/metaflow_extensions/outerbounds/plugins/secrets}/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/secrets/secrets.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/snowflake/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/snowflake/snowflake.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_cli.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_client.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_decorator.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_exceptions.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_job.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_service_spec.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/plugins/tensorboard/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/profilers/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/profilers/gpu.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/remote_config.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/toplevel/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/toplevel/global_aliases_for_metaflow_package.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/toplevel/plugins/azure/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/toplevel/plugins/gcp/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/toplevel/plugins/kubernetes/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/metaflow_extensions/outerbounds/toplevel/plugins/snowflake/__init__.py +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/ob_metaflow_extensions.egg-info/dependency_links.txt +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/ob_metaflow_extensions.egg-info/top_level.txt +0 -0
- {ob-metaflow-extensions-1.1.127 → ob-metaflow-extensions-1.1.129}/setup.cfg +0 -0
|
@@ -319,8 +319,9 @@ STEP_DECORATORS_DESC = [
|
|
|
319
319
|
("snowpark", ".snowpark.snowpark_decorator.SnowparkDecorator"),
|
|
320
320
|
("tensorboard", ".tensorboard.TensorboardDecorator"),
|
|
321
321
|
("gpu_profile", ".profilers.gpu_profile_decorator.GPUProfileDecorator"),
|
|
322
|
+
("nim", ".nim.NimDecorator"),
|
|
322
323
|
]
|
|
323
|
-
|
|
324
|
+
|
|
324
325
|
TOGGLE_STEP_DECORATOR = [
|
|
325
326
|
"-batch",
|
|
326
327
|
"-step_functions_internal",
|
ob-metaflow-extensions-1.1.129/metaflow_extensions/outerbounds/plugins/card_utilities/async_cards.py
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
from metaflow.metaflow_current import current
|
|
2
|
+
import sqlite3
|
|
3
|
+
from threading import Thread, Event
|
|
4
|
+
import time
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class InfoCollectorThread(Thread):
|
|
8
|
+
def __init__(
|
|
9
|
+
self,
|
|
10
|
+
interval=1,
|
|
11
|
+
file_name=None,
|
|
12
|
+
sqlite_fetch_func=None, # Callable
|
|
13
|
+
):
|
|
14
|
+
super().__init__()
|
|
15
|
+
self._exit_event = Event()
|
|
16
|
+
self._interval = interval
|
|
17
|
+
assert file_name is not None, "file_name must be provided"
|
|
18
|
+
self._file_name = file_name
|
|
19
|
+
self.daemon = True
|
|
20
|
+
self._data = {}
|
|
21
|
+
self._has_errored = False
|
|
22
|
+
self._current_error = None
|
|
23
|
+
self.sqlite_fetch_func = sqlite_fetch_func
|
|
24
|
+
|
|
25
|
+
def read(self):
|
|
26
|
+
return self._data
|
|
27
|
+
|
|
28
|
+
def has_errored(self):
|
|
29
|
+
return self._has_errored
|
|
30
|
+
|
|
31
|
+
def get_error(self):
|
|
32
|
+
return self._current_error
|
|
33
|
+
|
|
34
|
+
def _safely_load(self):
|
|
35
|
+
try:
|
|
36
|
+
conn = sqlite3.connect(self._file_name)
|
|
37
|
+
data = self.sqlite_fetch_func(conn)
|
|
38
|
+
return {"metrics": data}, None
|
|
39
|
+
except FileNotFoundError as e:
|
|
40
|
+
return {}, e
|
|
41
|
+
except sqlite3.Error as e:
|
|
42
|
+
return {}, e
|
|
43
|
+
finally:
|
|
44
|
+
conn.close()
|
|
45
|
+
|
|
46
|
+
def run(self):
|
|
47
|
+
while self._exit_event.is_set() is False:
|
|
48
|
+
data, self._current_error = self._safely_load()
|
|
49
|
+
if not self._current_error:
|
|
50
|
+
self._data = data
|
|
51
|
+
self._has_errored = True if self._current_error else False
|
|
52
|
+
time.sleep(self._interval)
|
|
53
|
+
|
|
54
|
+
def stop(self):
|
|
55
|
+
self._exit_event.set()
|
|
56
|
+
self.join()
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class CardRefresher:
|
|
60
|
+
|
|
61
|
+
CARD_ID = None
|
|
62
|
+
|
|
63
|
+
def on_startup(self, current_card):
|
|
64
|
+
raise NotImplementedError("make_card method must be implemented")
|
|
65
|
+
|
|
66
|
+
def on_error(self, current_card, error_message):
|
|
67
|
+
raise NotImplementedError("error_card method must be implemented")
|
|
68
|
+
|
|
69
|
+
def on_update(self, current_card, data_object):
|
|
70
|
+
raise NotImplementedError("update_card method must be implemented")
|
|
71
|
+
|
|
72
|
+
def sqlite_fetch_func(self, conn):
|
|
73
|
+
raise NotImplementedError("sqlite_fetch_func must be implemented")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class CardUpdaterThread(Thread):
|
|
77
|
+
def __init__(
|
|
78
|
+
self,
|
|
79
|
+
card_refresher: CardRefresher,
|
|
80
|
+
interval=1,
|
|
81
|
+
file_name=None,
|
|
82
|
+
collector_thread: InfoCollectorThread = None,
|
|
83
|
+
):
|
|
84
|
+
super().__init__()
|
|
85
|
+
self._exit_event = Event()
|
|
86
|
+
self._interval = interval
|
|
87
|
+
self._refresher = card_refresher
|
|
88
|
+
self._file_name = file_name
|
|
89
|
+
self._collector_thread = collector_thread
|
|
90
|
+
self.daemon = True
|
|
91
|
+
|
|
92
|
+
def run(self):
|
|
93
|
+
if self._refresher.CARD_ID is None:
|
|
94
|
+
raise ValueError("CARD_ID must be defined")
|
|
95
|
+
current_card = current.card[self._refresher.CARD_ID]
|
|
96
|
+
self._refresher.on_startup(current_card)
|
|
97
|
+
while self._exit_event.is_set() is False:
|
|
98
|
+
data = self._collector_thread.read()
|
|
99
|
+
if self._collector_thread.has_errored():
|
|
100
|
+
self._refresher.on_error(
|
|
101
|
+
current_card, self._collector_thread.get_error()
|
|
102
|
+
)
|
|
103
|
+
self._refresher.on_update(current_card, data)
|
|
104
|
+
time.sleep(self._interval)
|
|
105
|
+
|
|
106
|
+
def stop(self):
|
|
107
|
+
self._exit_event.set()
|
|
108
|
+
self._collector_thread.stop()
|
|
109
|
+
self.join()
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class AsyncPeriodicRefresher:
|
|
113
|
+
def __init__(
|
|
114
|
+
self,
|
|
115
|
+
card_referesher: CardRefresher,
|
|
116
|
+
updater_interval=1,
|
|
117
|
+
collector_interval=1,
|
|
118
|
+
file_name=None,
|
|
119
|
+
):
|
|
120
|
+
assert card_referesher.CARD_ID is not None, "CARD_ID must be defined"
|
|
121
|
+
self._collector_thread = InfoCollectorThread(
|
|
122
|
+
interval=collector_interval,
|
|
123
|
+
file_name=file_name,
|
|
124
|
+
sqlite_fetch_func=card_referesher.sqlite_fetch_func,
|
|
125
|
+
)
|
|
126
|
+
self._collector_thread.start()
|
|
127
|
+
self._updater_thread = CardUpdaterThread(
|
|
128
|
+
card_refresher=card_referesher,
|
|
129
|
+
interval=updater_interval,
|
|
130
|
+
file_name=file_name,
|
|
131
|
+
collector_thread=self._collector_thread,
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
def start(self):
|
|
135
|
+
self._updater_thread.start()
|
|
136
|
+
|
|
137
|
+
def stop(self):
|
|
138
|
+
data = self._collector_thread.read()
|
|
139
|
+
current_card = current.card[self._updater_thread._refresher.CARD_ID]
|
|
140
|
+
self._updater_thread._refresher.on_update(current_card, data)
|
|
141
|
+
self._updater_thread.stop()
|
|
142
|
+
self._collector_thread.stop()
|