wandb 0.13.10__py3-none-any.whl → 0.14.0__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- wandb/__init__.py +2 -3
- wandb/apis/__init__.py +1 -3
- wandb/apis/importers/__init__.py +4 -0
- wandb/apis/importers/base.py +312 -0
- wandb/apis/importers/mlflow.py +113 -0
- wandb/apis/internal.py +29 -2
- wandb/apis/normalize.py +6 -5
- wandb/apis/public.py +163 -180
- wandb/apis/reports/_templates.py +6 -12
- wandb/apis/reports/report.py +1 -1
- wandb/apis/reports/runset.py +1 -3
- wandb/apis/reports/util.py +12 -10
- wandb/beta/workflows.py +57 -34
- wandb/catboost/__init__.py +1 -2
- wandb/cli/cli.py +215 -133
- wandb/data_types.py +63 -56
- wandb/docker/__init__.py +78 -16
- wandb/docker/auth.py +21 -22
- wandb/env.py +0 -1
- wandb/errors/__init__.py +8 -116
- wandb/errors/term.py +1 -1
- wandb/fastai/__init__.py +1 -2
- wandb/filesync/dir_watcher.py +8 -5
- wandb/filesync/step_prepare.py +76 -75
- wandb/filesync/step_upload.py +1 -2
- wandb/integration/catboost/__init__.py +1 -3
- wandb/integration/catboost/catboost.py +8 -14
- wandb/integration/fastai/__init__.py +7 -13
- wandb/integration/gym/__init__.py +35 -4
- wandb/integration/keras/__init__.py +3 -3
- wandb/integration/keras/callbacks/metrics_logger.py +9 -8
- wandb/integration/keras/callbacks/model_checkpoint.py +9 -9
- wandb/integration/keras/callbacks/tables_builder.py +31 -19
- wandb/integration/kfp/kfp_patch.py +20 -17
- wandb/integration/kfp/wandb_logging.py +1 -2
- wandb/integration/lightgbm/__init__.py +21 -19
- wandb/integration/prodigy/prodigy.py +6 -7
- wandb/integration/sacred/__init__.py +9 -12
- wandb/integration/sagemaker/__init__.py +1 -3
- wandb/integration/sagemaker/auth.py +0 -1
- wandb/integration/sagemaker/config.py +1 -1
- wandb/integration/sagemaker/resources.py +1 -1
- wandb/integration/sb3/sb3.py +8 -4
- wandb/integration/tensorboard/__init__.py +1 -3
- wandb/integration/tensorboard/log.py +8 -8
- wandb/integration/tensorboard/monkeypatch.py +11 -9
- wandb/integration/tensorflow/__init__.py +1 -3
- wandb/integration/xgboost/__init__.py +4 -6
- wandb/integration/yolov8/__init__.py +7 -0
- wandb/integration/yolov8/yolov8.py +250 -0
- wandb/jupyter.py +31 -35
- wandb/lightgbm/__init__.py +1 -2
- wandb/old/settings.py +2 -2
- wandb/plot/bar.py +1 -2
- wandb/plot/confusion_matrix.py +1 -3
- wandb/plot/histogram.py +1 -2
- wandb/plot/line.py +1 -2
- wandb/plot/line_series.py +4 -4
- wandb/plot/pr_curve.py +17 -20
- wandb/plot/roc_curve.py +1 -3
- wandb/plot/scatter.py +1 -2
- wandb/proto/v3/wandb_server_pb2.py +85 -39
- wandb/proto/v3/wandb_telemetry_pb2.py +10 -10
- wandb/proto/v4/wandb_server_pb2.py +51 -39
- wandb/proto/v4/wandb_telemetry_pb2.py +10 -10
- wandb/sdk/__init__.py +1 -3
- wandb/sdk/backend/backend.py +1 -1
- wandb/sdk/data_types/_dtypes.py +38 -30
- wandb/sdk/data_types/base_types/json_metadata.py +1 -3
- wandb/sdk/data_types/base_types/media.py +17 -17
- wandb/sdk/data_types/base_types/wb_value.py +33 -26
- wandb/sdk/data_types/helper_types/bounding_boxes_2d.py +91 -125
- wandb/sdk/data_types/helper_types/classes.py +1 -1
- wandb/sdk/data_types/helper_types/image_mask.py +12 -12
- wandb/sdk/data_types/histogram.py +5 -4
- wandb/sdk/data_types/html.py +1 -2
- wandb/sdk/data_types/image.py +11 -11
- wandb/sdk/data_types/molecule.py +3 -6
- wandb/sdk/data_types/object_3d.py +1 -2
- wandb/sdk/data_types/plotly.py +1 -2
- wandb/sdk/data_types/saved_model.py +10 -8
- wandb/sdk/data_types/video.py +1 -1
- wandb/sdk/integration_utils/data_logging.py +5 -5
- wandb/sdk/interface/artifacts.py +288 -266
- wandb/sdk/interface/interface.py +2 -3
- wandb/sdk/interface/interface_grpc.py +1 -1
- wandb/sdk/interface/interface_queue.py +1 -1
- wandb/sdk/interface/interface_relay.py +1 -1
- wandb/sdk/interface/interface_shared.py +1 -2
- wandb/sdk/interface/interface_sock.py +1 -1
- wandb/sdk/interface/message_future.py +1 -1
- wandb/sdk/interface/message_future_poll.py +1 -1
- wandb/sdk/interface/router.py +1 -1
- wandb/sdk/interface/router_queue.py +1 -1
- wandb/sdk/interface/router_relay.py +1 -1
- wandb/sdk/interface/router_sock.py +1 -1
- wandb/sdk/interface/summary_record.py +1 -1
- wandb/sdk/internal/artifacts.py +1 -1
- wandb/sdk/internal/datastore.py +2 -3
- wandb/sdk/internal/file_pusher.py +5 -3
- wandb/sdk/internal/file_stream.py +22 -19
- wandb/sdk/internal/handler.py +5 -4
- wandb/sdk/internal/internal.py +1 -1
- wandb/sdk/internal/internal_api.py +115 -55
- wandb/sdk/internal/job_builder.py +1 -3
- wandb/sdk/internal/profiler.py +1 -1
- wandb/sdk/internal/progress.py +4 -6
- wandb/sdk/internal/sample.py +1 -3
- wandb/sdk/internal/sender.py +28 -16
- wandb/sdk/internal/settings_static.py +5 -5
- wandb/sdk/internal/system/assets/__init__.py +1 -0
- wandb/sdk/internal/system/assets/cpu.py +3 -9
- wandb/sdk/internal/system/assets/disk.py +2 -4
- wandb/sdk/internal/system/assets/gpu.py +6 -18
- wandb/sdk/internal/system/assets/gpu_apple.py +2 -4
- wandb/sdk/internal/system/assets/interfaces.py +50 -22
- wandb/sdk/internal/system/assets/ipu.py +1 -3
- wandb/sdk/internal/system/assets/memory.py +7 -13
- wandb/sdk/internal/system/assets/network.py +4 -8
- wandb/sdk/internal/system/assets/open_metrics.py +283 -0
- wandb/sdk/internal/system/assets/tpu.py +1 -4
- wandb/sdk/internal/system/assets/trainium.py +26 -14
- wandb/sdk/internal/system/system_info.py +2 -3
- wandb/sdk/internal/system/system_monitor.py +52 -20
- wandb/sdk/internal/tb_watcher.py +12 -13
- wandb/sdk/launch/_project_spec.py +54 -65
- wandb/sdk/launch/agent/agent.py +374 -90
- wandb/sdk/launch/builder/abstract.py +61 -7
- wandb/sdk/launch/builder/build.py +81 -110
- wandb/sdk/launch/builder/docker_builder.py +181 -0
- wandb/sdk/launch/builder/kaniko_builder.py +419 -0
- wandb/sdk/launch/builder/noop.py +31 -12
- wandb/sdk/launch/builder/templates/_wandb_bootstrap.py +70 -20
- wandb/sdk/launch/environment/abstract.py +28 -0
- wandb/sdk/launch/environment/aws_environment.py +276 -0
- wandb/sdk/launch/environment/gcp_environment.py +271 -0
- wandb/sdk/launch/environment/local_environment.py +65 -0
- wandb/sdk/launch/github_reference.py +3 -8
- wandb/sdk/launch/launch.py +38 -29
- wandb/sdk/launch/launch_add.py +6 -8
- wandb/sdk/launch/loader.py +230 -0
- wandb/sdk/launch/registry/abstract.py +54 -0
- wandb/sdk/launch/registry/elastic_container_registry.py +163 -0
- wandb/sdk/launch/registry/google_artifact_registry.py +203 -0
- wandb/sdk/launch/registry/local_registry.py +62 -0
- wandb/sdk/launch/runner/abstract.py +1 -16
- wandb/sdk/launch/runner/{kubernetes.py → kubernetes_runner.py} +83 -95
- wandb/sdk/launch/runner/local_container.py +46 -22
- wandb/sdk/launch/runner/local_process.py +1 -4
- wandb/sdk/launch/runner/{aws.py → sagemaker_runner.py} +53 -212
- wandb/sdk/launch/runner/{gcp_vertex.py → vertex_runner.py} +38 -55
- wandb/sdk/launch/sweeps/__init__.py +3 -2
- wandb/sdk/launch/sweeps/scheduler.py +132 -39
- wandb/sdk/launch/sweeps/scheduler_sweep.py +80 -89
- wandb/sdk/launch/utils.py +101 -30
- wandb/sdk/launch/wandb_reference.py +2 -7
- wandb/sdk/lib/_settings_toposort_generate.py +166 -0
- wandb/sdk/lib/_settings_toposort_generated.py +201 -0
- wandb/sdk/lib/apikey.py +2 -4
- wandb/sdk/lib/config_util.py +4 -1
- wandb/sdk/lib/console.py +1 -3
- wandb/sdk/lib/deprecate.py +3 -3
- wandb/sdk/lib/file_stream_utils.py +7 -5
- wandb/sdk/lib/filenames.py +1 -1
- wandb/sdk/lib/filesystem.py +61 -5
- wandb/sdk/lib/git.py +1 -3
- wandb/sdk/lib/import_hooks.py +4 -7
- wandb/sdk/lib/ipython.py +8 -5
- wandb/sdk/lib/lazyloader.py +1 -3
- wandb/sdk/lib/mailbox.py +14 -4
- wandb/sdk/lib/proto_util.py +10 -5
- wandb/sdk/lib/redirect.py +15 -22
- wandb/sdk/lib/reporting.py +1 -3
- wandb/sdk/lib/retry.py +4 -5
- wandb/sdk/lib/runid.py +1 -3
- wandb/sdk/lib/server.py +15 -9
- wandb/sdk/lib/sock_client.py +1 -1
- wandb/sdk/lib/sparkline.py +1 -1
- wandb/sdk/lib/wburls.py +1 -1
- wandb/sdk/service/port_file.py +1 -2
- wandb/sdk/service/service.py +36 -13
- wandb/sdk/service/service_base.py +12 -1
- wandb/sdk/verify/verify.py +5 -7
- wandb/sdk/wandb_artifacts.py +142 -177
- wandb/sdk/wandb_config.py +5 -8
- wandb/sdk/wandb_helper.py +1 -1
- wandb/sdk/wandb_init.py +24 -13
- wandb/sdk/wandb_login.py +9 -9
- wandb/sdk/wandb_manager.py +39 -4
- wandb/sdk/wandb_metric.py +2 -6
- wandb/sdk/wandb_require.py +4 -15
- wandb/sdk/wandb_require_helpers.py +1 -9
- wandb/sdk/wandb_run.py +95 -141
- wandb/sdk/wandb_save.py +1 -3
- wandb/sdk/wandb_settings.py +149 -54
- wandb/sdk/wandb_setup.py +66 -46
- wandb/sdk/wandb_summary.py +13 -10
- wandb/sdk/wandb_sweep.py +6 -7
- wandb/sdk/wandb_watch.py +1 -1
- wandb/sklearn/calculate/confusion_matrix.py +1 -1
- wandb/sklearn/calculate/learning_curve.py +1 -1
- wandb/sklearn/calculate/summary_metrics.py +1 -3
- wandb/sklearn/plot/__init__.py +1 -1
- wandb/sklearn/plot/classifier.py +27 -18
- wandb/sklearn/plot/clusterer.py +4 -5
- wandb/sklearn/plot/regressor.py +4 -4
- wandb/sklearn/plot/shared.py +2 -2
- wandb/sync/__init__.py +1 -3
- wandb/sync/sync.py +4 -5
- wandb/testing/relay.py +11 -10
- wandb/trigger.py +1 -1
- wandb/util.py +106 -81
- wandb/viz.py +4 -4
- wandb/wandb_agent.py +50 -50
- wandb/wandb_controller.py +2 -3
- wandb/wandb_run.py +1 -2
- wandb/wandb_torch.py +1 -1
- wandb/xgboost/__init__.py +1 -2
- {wandb-0.13.10.dist-info → wandb-0.14.0.dist-info}/METADATA +6 -2
- {wandb-0.13.10.dist-info → wandb-0.14.0.dist-info}/RECORD +224 -209
- {wandb-0.13.10.dist-info → wandb-0.14.0.dist-info}/WHEEL +1 -1
- wandb/sdk/launch/builder/docker.py +0 -80
- wandb/sdk/launch/builder/kaniko.py +0 -393
- wandb/sdk/launch/builder/loader.py +0 -32
- wandb/sdk/launch/runner/loader.py +0 -50
- {wandb-0.13.10.dist-info → wandb-0.14.0.dist-info}/LICENSE +0 -0
- {wandb-0.13.10.dist-info → wandb-0.14.0.dist-info}/entry_points.txt +0 -0
- {wandb-0.13.10.dist-info → wandb-0.14.0.dist-info}/top_level.txt +0 -0
wandb/sdk/interface/interface.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
"""Interface base class - Used to send messages to the internal process
|
1
|
+
"""Interface base class - Used to send messages to the internal process.
|
2
2
|
|
3
3
|
InterfaceBase: The abstract class
|
4
4
|
InterfaceGrpc: Use gRPC to send and receive messages
|
@@ -267,7 +267,6 @@ class InterfaceBase:
|
|
267
267
|
A new tree of dict's with large objects replaced with dictionaries
|
268
268
|
with "_type" entries that say which type the original data was.
|
269
269
|
"""
|
270
|
-
|
271
270
|
# Constructs a new `dict` tree in `json_value` that discards and/or
|
272
271
|
# encodes objects that aren't JSON serializable.
|
273
272
|
|
@@ -396,7 +395,7 @@ class InterfaceBase:
|
|
396
395
|
obj: Optional[pb.ArtifactManifest] = None,
|
397
396
|
) -> pb.ArtifactManifest:
|
398
397
|
proto_manifest = obj or pb.ArtifactManifest()
|
399
|
-
proto_manifest.version = artifact_manifest.version()
|
398
|
+
proto_manifest.version = artifact_manifest.version()
|
400
399
|
proto_manifest.storage_policy = artifact_manifest.storage_policy.name()
|
401
400
|
|
402
401
|
for k, v in artifact_manifest.storage_policy.config().items() or {}.items():
|
@@ -1,4 +1,4 @@
|
|
1
|
-
"""InterfaceShared - Derived from InterfaceBase - shared with InterfaceQueue and InterfaceSock
|
1
|
+
"""InterfaceShared - Derived from InterfaceBase - shared with InterfaceQueue and InterfaceSock.
|
2
2
|
|
3
3
|
See interface.py for how interface classes relate to each other.
|
4
4
|
|
@@ -380,7 +380,6 @@ class InterfaceShared(InterfaceBase):
|
|
380
380
|
Returns:
|
381
381
|
RunRecord object
|
382
382
|
"""
|
383
|
-
|
384
383
|
req = self._make_record(run=run)
|
385
384
|
resp = self._communicate(req, timeout=timeout)
|
386
385
|
if resp is None:
|
wandb/sdk/interface/router.py
CHANGED
@@ -8,7 +8,7 @@ import typing as t
|
|
8
8
|
|
9
9
|
|
10
10
|
class SummaryRecord:
|
11
|
-
"""Encodes a diff -- analogous to the SummaryRecord protobuf message"""
|
11
|
+
"""Encodes a diff -- analogous to the SummaryRecord protobuf message."""
|
12
12
|
|
13
13
|
update: t.List["SummaryItem"]
|
14
14
|
remove: t.List["SummaryItem"]
|
wandb/sdk/internal/artifacts.py
CHANGED
@@ -80,7 +80,7 @@ class ArtifactSaver:
|
|
80
80
|
self._api = api
|
81
81
|
self._file_pusher = file_pusher
|
82
82
|
self._digest = digest
|
83
|
-
self._manifest = ArtifactManifest.from_manifest_json(
|
83
|
+
self._manifest = ArtifactManifest.from_manifest_json(manifest_json)
|
84
84
|
self._is_user_created = is_user_created
|
85
85
|
self._server_artifact = None
|
86
86
|
|
wandb/sdk/internal/datastore.py
CHANGED
@@ -112,8 +112,7 @@ class DataStore:
|
|
112
112
|
return offset
|
113
113
|
|
114
114
|
def in_last_block(self):
|
115
|
-
"""
|
116
|
-
handle in progress writes"""
|
115
|
+
"""Determine if we're in the last block to handle in-progress writes."""
|
117
116
|
return self._index > self._size_bytes - LEVELDBLOG_DATA_LEN
|
118
117
|
|
119
118
|
def scan_record(self):
|
@@ -260,7 +259,7 @@ class DataStore:
|
|
260
259
|
# write middles (if any)
|
261
260
|
while data_left > LEVELDBLOG_DATA_LEN:
|
262
261
|
self._write_record(
|
263
|
-
s[data_used : data_used + LEVELDBLOG_DATA_LEN],
|
262
|
+
s[data_used : data_used + LEVELDBLOG_DATA_LEN],
|
264
263
|
LEVELDBLOG_MIDDLE,
|
265
264
|
)
|
266
265
|
data_used += LEVELDBLOG_DATA_LEN
|
@@ -27,10 +27,11 @@ logger = logging.getLogger(__name__)
|
|
27
27
|
|
28
28
|
class FilePusher:
|
29
29
|
"""Parallel file upload class.
|
30
|
+
|
30
31
|
This manages uploading multiple files in parallel. It will restart a given file's
|
31
|
-
upload job if it receives a notification that that file has been modified.
|
32
|
-
|
33
|
-
|
32
|
+
upload job if it receives a notification that that file has been modified. The
|
33
|
+
finish() method will block until all events have been processed and all uploads are
|
34
|
+
complete.
|
34
35
|
"""
|
35
36
|
|
36
37
|
MAX_UPLOAD_JOBS = 64
|
@@ -117,6 +118,7 @@ class FilePusher:
|
|
117
118
|
copy: bool = True,
|
118
119
|
):
|
119
120
|
"""Tell the file pusher that a file's changed and should be uploaded.
|
121
|
+
|
120
122
|
Arguments:
|
121
123
|
save_name: string logical location of the file relative to the run
|
122
124
|
directory.
|
@@ -103,8 +103,9 @@ class SummaryFilePolicy(DefaultFilePolicy):
|
|
103
103
|
|
104
104
|
|
105
105
|
class StreamCRState:
|
106
|
-
"""
|
107
|
-
|
106
|
+
r"""Stream state that tracks carriage returns.
|
107
|
+
|
108
|
+
There are two streams: stdout and stderr. We create two instances for each stream.
|
108
109
|
An instance holds state about:
|
109
110
|
found_cr: if a carriage return has been found in this stream.
|
110
111
|
cr: most recent offset (line number) where we found \r.
|
@@ -124,17 +125,16 @@ class StreamCRState:
|
|
124
125
|
|
125
126
|
|
126
127
|
class CRDedupeFilePolicy(DefaultFilePolicy):
|
127
|
-
"""File stream policy
|
128
|
-
carriage returns.
|
128
|
+
r"""File stream policy for removing carriage-return erased characters.
|
129
129
|
|
130
|
-
This is what a terminal does. We use it for console output to reduce the
|
131
|
-
|
132
|
-
|
130
|
+
This is what a terminal does. We use it for console output to reduce the amount of
|
131
|
+
data we need to send over the network (eg. for progress bars), while preserving the
|
132
|
+
output's appearance in the web app.
|
133
133
|
|
134
|
-
CR stands for "carriage return", for the character \r. It tells the terminal
|
135
|
-
|
136
|
-
|
137
|
-
|
134
|
+
CR stands for "carriage return", for the character \r. It tells the terminal to move
|
135
|
+
the cursor back to the start of the current line. Progress bars (like tqdm) use \r
|
136
|
+
repeatedly to overwrite a line with newer updates. This gives the illusion of the
|
137
|
+
progress bar filling up in real-time.
|
138
138
|
"""
|
139
139
|
|
140
140
|
def __init__(self, start_chunk_id: int = 0) -> None:
|
@@ -148,7 +148,8 @@ class CRDedupeFilePolicy(DefaultFilePolicy):
|
|
148
148
|
|
149
149
|
@staticmethod
|
150
150
|
def get_consecutive_offsets(console: Dict[int, str]) -> List[List[int]]:
|
151
|
-
"""
|
151
|
+
"""Compress consecutive line numbers into an interval.
|
152
|
+
|
152
153
|
Args:
|
153
154
|
console: Dict[int, str] which maps offsets (line numbers) to lines of text.
|
154
155
|
It represents a mini version of our console dashboard on the UI.
|
@@ -176,13 +177,14 @@ class CRDedupeFilePolicy(DefaultFilePolicy):
|
|
176
177
|
|
177
178
|
@staticmethod
|
178
179
|
def split_chunk(chunk: Chunk) -> Tuple[str, str]:
|
179
|
-
"""
|
180
|
+
r"""Split chunks.
|
181
|
+
|
180
182
|
Args:
|
181
183
|
chunk: object with two fields: filename (str) & data (str)
|
182
184
|
`chunk.data` is a str containing the lines we want. It usually contains \n or \r or both.
|
183
185
|
`chunk.data` has two possible formats (for the two streams - stdout and stderr):
|
184
186
|
- "2020-08-25T20:38:36.895321 this is my line of text\nsecond line\n"
|
185
|
-
- "ERROR 2020-08-25T20:38:36.895321 this is my line of text\nsecond line\nthird\n"
|
187
|
+
- "ERROR 2020-08-25T20:38:36.895321 this is my line of text\nsecond line\nthird\n".
|
186
188
|
|
187
189
|
Here's another example with a carriage return \r.
|
188
190
|
- "ERROR 2020-08-25T20:38:36.895321 \r progress bar\n"
|
@@ -206,7 +208,8 @@ class CRDedupeFilePolicy(DefaultFilePolicy):
|
|
206
208
|
return prefix, rest
|
207
209
|
|
208
210
|
def process_chunks(self, chunks: List) -> List["ProcessedChunk"]:
|
209
|
-
"""
|
211
|
+
r"""Process chunks.
|
212
|
+
|
210
213
|
Args:
|
211
214
|
chunks: List of Chunk objects. See description of chunk above in `split_chunk(...)`.
|
212
215
|
|
@@ -268,7 +271,7 @@ class CRDedupeFilePolicy(DefaultFilePolicy):
|
|
268
271
|
|
269
272
|
intervals = self.get_consecutive_offsets(console)
|
270
273
|
ret = []
|
271
|
-
for
|
274
|
+
for a, b in intervals:
|
272
275
|
processed_chunk: "ProcessedChunk" = {
|
273
276
|
"offset": a,
|
274
277
|
"content": [console[i] for i in range(a, b + 1)],
|
@@ -495,7 +498,7 @@ class FileStreamApi:
|
|
495
498
|
raise e
|
496
499
|
|
497
500
|
def _handle_response(self, response: Union[Exception, "requests.Response"]) -> None:
|
498
|
-
"""
|
501
|
+
"""Log dropped chunks and updates dynamic settings."""
|
499
502
|
if isinstance(response, Exception):
|
500
503
|
wandb.termerror(
|
501
504
|
"Dropped streaming file chunk (see wandb/debug-internal.log)"
|
@@ -575,7 +578,7 @@ class FileStreamApi:
|
|
575
578
|
self._queue.put(Chunk(filename, data))
|
576
579
|
|
577
580
|
def push_success(self, artifact_id: str, save_name: str) -> None:
|
578
|
-
"""Notification that a file upload has been successfully completed
|
581
|
+
"""Notification that a file upload has been successfully completed.
|
579
582
|
|
580
583
|
Arguments:
|
581
584
|
artifact_id: ID of artifact
|
@@ -584,7 +587,7 @@ class FileStreamApi:
|
|
584
587
|
self._queue.put(self.PushSuccess(artifact_id, save_name))
|
585
588
|
|
586
589
|
def finish(self, exitcode: int) -> None:
|
587
|
-
"""
|
590
|
+
"""Clean up.
|
588
591
|
|
589
592
|
Anything pushed after finish will be dropped.
|
590
593
|
|
wandb/sdk/internal/handler.py
CHANGED
@@ -413,7 +413,7 @@ class HandleManager:
|
|
413
413
|
self._step += 1
|
414
414
|
|
415
415
|
def _history_define_metric(self, hkey: str) -> Optional[MetricRecord]:
|
416
|
-
"""
|
416
|
+
"""Check for hkey match in glob metrics and return the defined metric."""
|
417
417
|
# Dont define metric for internal metrics
|
418
418
|
if hkey.startswith("_"):
|
419
419
|
return None
|
@@ -478,7 +478,6 @@ class HandleManager:
|
|
478
478
|
history: HistoryRecord,
|
479
479
|
history_dict: Dict[str, Any],
|
480
480
|
) -> None:
|
481
|
-
|
482
481
|
# if syncing an old run, we can skip this logic
|
483
482
|
if history_dict.get("_step") is None:
|
484
483
|
self._history_assign_step(history, history_dict)
|
@@ -825,8 +824,10 @@ class HandleManager:
|
|
825
824
|
self._dispatch_record(record, always_send=True)
|
826
825
|
|
827
826
|
def handle_request_keepalive(self, record: Record) -> None:
|
828
|
-
"""
|
829
|
-
|
827
|
+
"""Handle a keepalive request.
|
828
|
+
|
829
|
+
Keepalive is a noop, we just want to verify transport is alive.
|
830
|
+
"""
|
830
831
|
|
831
832
|
def handle_request_run_status(self, record: Record) -> None:
|
832
833
|
self._dispatch_record(record, always_send=True)
|
wandb/sdk/internal/internal.py
CHANGED
@@ -177,7 +177,7 @@ def wandb_internal(
|
|
177
177
|
traceback.print_exception(*exc_info)
|
178
178
|
sentry_exc(exc_info, delay=True)
|
179
179
|
wandb.termerror("Internal wandb error: file data was not synced")
|
180
|
-
if settings.get("
|
180
|
+
if not settings.get("_disable_service"):
|
181
181
|
# TODO: We can make this more graceful by returning an error to streams.py
|
182
182
|
# and potentially just fail the one stream.
|
183
183
|
os._exit(-1)
|