wandb 0.13.11__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 +1 -1
- 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 +9 -0
- wandb/apis/public.py +0 -2
- wandb/cli/cli.py +100 -72
- wandb/docker/__init__.py +33 -5
- wandb/proto/v3/wandb_telemetry_pb2.py +10 -10
- wandb/proto/v4/wandb_telemetry_pb2.py +10 -10
- wandb/sdk/internal/internal_api.py +85 -9
- wandb/sdk/launch/_project_spec.py +45 -55
- wandb/sdk/launch/agent/agent.py +80 -18
- wandb/sdk/launch/builder/build.py +16 -74
- wandb/sdk/launch/builder/docker_builder.py +36 -8
- wandb/sdk/launch/builder/kaniko_builder.py +78 -37
- wandb/sdk/launch/builder/templates/_wandb_bootstrap.py +68 -18
- wandb/sdk/launch/environment/aws_environment.py +4 -0
- wandb/sdk/launch/launch.py +1 -6
- wandb/sdk/launch/launch_add.py +0 -5
- wandb/sdk/launch/registry/abstract.py +12 -0
- wandb/sdk/launch/registry/elastic_container_registry.py +31 -1
- wandb/sdk/launch/registry/google_artifact_registry.py +32 -0
- wandb/sdk/launch/registry/local_registry.py +15 -1
- wandb/sdk/launch/runner/abstract.py +0 -14
- wandb/sdk/launch/runner/kubernetes_runner.py +25 -19
- wandb/sdk/launch/runner/local_container.py +7 -8
- wandb/sdk/launch/runner/local_process.py +0 -3
- wandb/sdk/launch/runner/sagemaker_runner.py +0 -3
- wandb/sdk/launch/runner/vertex_runner.py +0 -2
- wandb/sdk/launch/sweeps/scheduler.py +39 -10
- wandb/sdk/launch/utils.py +52 -4
- wandb/sdk/wandb_run.py +3 -10
- wandb/sync/sync.py +1 -0
- wandb/util.py +1 -0
- {wandb-0.13.11.dist-info → wandb-0.14.0.dist-info}/METADATA +1 -1
- {wandb-0.13.11.dist-info → wandb-0.14.0.dist-info}/RECORD +41 -38
- {wandb-0.13.11.dist-info → wandb-0.14.0.dist-info}/WHEEL +1 -1
- {wandb-0.13.11.dist-info → wandb-0.14.0.dist-info}/LICENSE +0 -0
- {wandb-0.13.11.dist-info → wandb-0.14.0.dist-info}/entry_points.txt +0 -0
- {wandb-0.13.11.dist-info → wandb-0.14.0.dist-info}/top_level.txt +0 -0
@@ -4,17 +4,12 @@ import logging
|
|
4
4
|
import time
|
5
5
|
from typing import Any, Dict, List, Optional
|
6
6
|
|
7
|
-
from kubernetes import client # type: ignore
|
8
|
-
from kubernetes.client.api.batch_v1_api import BatchV1Api # type: ignore
|
9
|
-
from kubernetes.client.api.core_v1_api import CoreV1Api # type: ignore
|
10
|
-
from kubernetes.client.models.v1_job import V1Job # type: ignore
|
11
|
-
from kubernetes.client.models.v1_secret import V1Secret # type: ignore
|
12
|
-
|
13
7
|
import wandb
|
14
8
|
from wandb.apis.internal import Api
|
15
9
|
from wandb.sdk.launch.builder.abstract import AbstractBuilder
|
16
10
|
from wandb.sdk.launch.environment.abstract import AbstractEnvironment
|
17
11
|
from wandb.sdk.launch.registry.abstract import AbstractRegistry
|
12
|
+
from wandb.sdk.launch.registry.local_registry import LocalRegistry
|
18
13
|
from wandb.util import get_module, load_json_yaml_dict
|
19
14
|
|
20
15
|
from .._project_spec import LaunchProject, get_entry_point_command
|
@@ -28,6 +23,17 @@ from ..utils import (
|
|
28
23
|
)
|
29
24
|
from .abstract import AbstractRun, AbstractRunner, Status
|
30
25
|
|
26
|
+
get_module(
|
27
|
+
"kubernetes",
|
28
|
+
required="Kubernetes runner requires the kubernetes package. Please install it with `pip install wandb[launch]`.",
|
29
|
+
)
|
30
|
+
|
31
|
+
from kubernetes import client # type: ignore # noqa: E402
|
32
|
+
from kubernetes.client.api.batch_v1_api import BatchV1Api # type: ignore # noqa: E402
|
33
|
+
from kubernetes.client.api.core_v1_api import CoreV1Api # type: ignore # noqa: E402
|
34
|
+
from kubernetes.client.models.v1_job import V1Job # type: ignore # noqa: E402
|
35
|
+
from kubernetes.client.models.v1_secret import V1Secret # type: ignore # noqa: E402
|
36
|
+
|
31
37
|
TIMEOUT = 5
|
32
38
|
MAX_KUBERNETES_RETRIES = (
|
33
39
|
60 # default 10 second loop time on the agent, this is 10 minutes
|
@@ -83,11 +89,11 @@ class KubernetesSubmittedRun(AbstractRun):
|
|
83
89
|
name=self.name, namespace=self.namespace
|
84
90
|
)
|
85
91
|
status = job_response.status
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
92
|
+
|
93
|
+
pod = self.core_api.read_namespaced_pod(
|
94
|
+
name=self.pod_names[0], namespace=self.namespace
|
95
|
+
)
|
96
|
+
if pod.status.phase in ["Pending", "Unknown"]:
|
91
97
|
now = time.time()
|
92
98
|
if self._fail_count == 0:
|
93
99
|
self._fail_first_msg_time = now
|
@@ -95,13 +101,11 @@ class KubernetesSubmittedRun(AbstractRun):
|
|
95
101
|
self._fail_count += 1
|
96
102
|
if now - self._fail_last_msg_time > FAIL_MESSAGE_INTERVAL:
|
97
103
|
wandb.termlog(
|
98
|
-
f"{LOG_PREFIX}
|
104
|
+
f"{LOG_PREFIX}Pod has not started yet for job: {self.name}. Will wait up to {round(10 - (now - self._fail_first_msg_time)/60)} minutes."
|
99
105
|
)
|
100
106
|
self._fail_last_msg_time = now
|
101
107
|
if self._fail_count > MAX_KUBERNETES_RETRIES:
|
102
|
-
raise LaunchError(
|
103
|
-
f"Failed to start job {self.name}, because of error {str(e)}"
|
104
|
-
)
|
108
|
+
raise LaunchError(f"Failed to start job {self.name}")
|
105
109
|
# todo: we only handle the 1 pod case. see https://kubernetes.io/docs/concepts/workloads/controllers/job/#parallel-jobs for multipod handling
|
106
110
|
return_status = None
|
107
111
|
if status.succeeded == 1:
|
@@ -275,7 +279,9 @@ class KubernetesRunner(AbstractRunner):
|
|
275
279
|
builder: Optional[AbstractBuilder],
|
276
280
|
) -> Optional[AbstractRun]: # noqa: C901
|
277
281
|
kubernetes = get_module( # noqa: F811
|
278
|
-
"kubernetes",
|
282
|
+
"kubernetes",
|
283
|
+
required="Kubernetes runner requires the kubernetes package. Please"
|
284
|
+
" install it with `pip install wandb[launch]`.",
|
279
285
|
)
|
280
286
|
resource_args = launch_project.resource_args.get("kubernetes", {})
|
281
287
|
if not resource_args:
|
@@ -392,9 +398,6 @@ class KubernetesRunner(AbstractRunner):
|
|
392
398
|
job_dict["metadata"] = job_metadata
|
393
399
|
job_dict["status"] = job_status
|
394
400
|
|
395
|
-
if not self.ack_run_queue_item(launch_project):
|
396
|
-
return None
|
397
|
-
|
398
401
|
_logger.info(f"Creating Kubernetes job from: {job_dict}")
|
399
402
|
job_response = kubernetes.utils.create_from_yaml(
|
400
403
|
api_client, yaml_objects=[job_dict], namespace=namespace
|
@@ -422,6 +425,9 @@ def maybe_create_imagepull_secret(
|
|
422
425
|
namespace: str,
|
423
426
|
) -> Optional["V1Secret"]:
|
424
427
|
secret = None
|
428
|
+
if isinstance(registry, LocalRegistry):
|
429
|
+
# Secret not required
|
430
|
+
return None
|
425
431
|
uname, token = registry.get_username_password()
|
426
432
|
creds_info = {
|
427
433
|
"auths": {
|
@@ -11,12 +11,14 @@ from wandb.sdk.launch.builder.abstract import AbstractBuilder
|
|
11
11
|
from wandb.sdk.launch.environment.abstract import AbstractEnvironment
|
12
12
|
|
13
13
|
from .._project_spec import LaunchProject, compute_command_args
|
14
|
-
from ..builder.build import
|
14
|
+
from ..builder.build import get_env_vars_dict
|
15
15
|
from ..utils import (
|
16
16
|
LOG_PREFIX,
|
17
17
|
PROJECT_SYNCHRONOUS,
|
18
18
|
_is_wandb_dev_uri,
|
19
19
|
_is_wandb_local_uri,
|
20
|
+
docker_image_exists,
|
21
|
+
pull_docker_image,
|
20
22
|
sanitize_wandb_api_key,
|
21
23
|
)
|
22
24
|
from .abstract import AbstractRun, AbstractRunner, Status
|
@@ -85,10 +87,6 @@ class LocalContainerRunner(AbstractRunner):
|
|
85
87
|
docker_args: Dict[str, Any] = launch_project.resource_args.get(
|
86
88
|
"local-container", {}
|
87
89
|
)
|
88
|
-
# TODO: leaving this here because of existing CLI command
|
89
|
-
# we should likely just tell users to specify the gpus arg directly
|
90
|
-
if launch_project.cuda:
|
91
|
-
docker_args["gpus"] = "all"
|
92
90
|
|
93
91
|
if _is_wandb_local_uri(self._api.settings("base_url")):
|
94
92
|
if sys.platform == "win32":
|
@@ -149,8 +147,6 @@ class LocalContainerRunner(AbstractRunner):
|
|
149
147
|
)
|
150
148
|
).strip()
|
151
149
|
|
152
|
-
if not self.ack_run_queue_item(launch_project):
|
153
|
-
return None
|
154
150
|
sanitized_cmd_str = sanitize_wandb_api_key(command_str)
|
155
151
|
_msg = f"{LOG_PREFIX}Launching run in docker with command: {sanitized_cmd_str}"
|
156
152
|
wandb.termlog(_msg)
|
@@ -224,9 +220,12 @@ def get_docker_command(
|
|
224
220
|
cmd += [prefix]
|
225
221
|
else:
|
226
222
|
cmd += [prefix, shlex.quote(str(value))]
|
223
|
+
|
227
224
|
if entry_cmd:
|
228
|
-
cmd += ["--entrypoint"
|
225
|
+
cmd += ["--entrypoint", entry_cmd[0]]
|
229
226
|
cmd += [shlex.quote(image)]
|
227
|
+
if entry_cmd and len(entry_cmd) > 1:
|
228
|
+
cmd += entry_cmd[1:]
|
230
229
|
if additional_args:
|
231
230
|
cmd += additional_args
|
232
231
|
return cmd
|
@@ -81,9 +81,6 @@ class LocalProcessRunner(AbstractRunner):
|
|
81
81
|
for env_key, env_value in env_vars.items():
|
82
82
|
cmd += [f"{shlex.quote(env_key)}={shlex.quote(env_value)}"]
|
83
83
|
|
84
|
-
if not self.ack_run_queue_item(launch_project):
|
85
|
-
return None
|
86
|
-
|
87
84
|
entry_cmd = get_entry_point_command(entry_point, launch_project.override_args)
|
88
85
|
cmd += entry_cmd
|
89
86
|
|
@@ -164,9 +164,6 @@ class SageMakerRunner(AbstractRunner):
|
|
164
164
|
)
|
165
165
|
_logger.info(f"Docker image built with uri {image}")
|
166
166
|
|
167
|
-
if not self.ack_run_queue_item(launch_project):
|
168
|
-
return None
|
169
|
-
|
170
167
|
_logger.info("Connecting to sagemaker client")
|
171
168
|
command_args = get_entry_point_command(
|
172
169
|
entry_point, launch_project.override_args
|
@@ -18,6 +18,7 @@ from wandb.errors import CommError
|
|
18
18
|
from wandb.sdk.launch.launch_add import launch_add
|
19
19
|
from wandb.sdk.launch.sweeps import SchedulerError
|
20
20
|
from wandb.sdk.lib.runid import generate_id
|
21
|
+
from wandb.wandb_agent import Agent
|
21
22
|
|
22
23
|
_logger = logging.getLogger(__name__)
|
23
24
|
LOG_PREFIX = f"{click.style('sched:', fg='cyan')} "
|
@@ -37,6 +38,7 @@ class SchedulerState(Enum):
|
|
37
38
|
COMPLETED = 4
|
38
39
|
FAILED = 5
|
39
40
|
STOPPED = 6
|
41
|
+
CANCELLED = 7
|
40
42
|
|
41
43
|
|
42
44
|
class RunState(Enum):
|
@@ -79,17 +81,20 @@ class Scheduler(ABC):
|
|
79
81
|
self._project = (
|
80
82
|
project or os.environ.get("WANDB_PROJECT") or api.settings("project")
|
81
83
|
)
|
84
|
+
self._sweep_id: str = sweep_id or "empty-sweep-id"
|
85
|
+
self._state: SchedulerState = SchedulerState.PENDING
|
86
|
+
|
82
87
|
# Make sure the provided sweep_id corresponds to a valid sweep
|
83
88
|
try:
|
84
89
|
resp = self._api.sweep(
|
85
90
|
sweep_id, "{}", entity=self._entity, project=self._project
|
86
91
|
)
|
92
|
+
if resp.get("state") == SchedulerState.CANCELLED.name:
|
93
|
+
self._state = SchedulerState.CANCELLED
|
87
94
|
self._sweep_config = yaml.safe_load(resp["config"])
|
88
95
|
except Exception as e:
|
89
96
|
raise SchedulerError(f"{LOG_PREFIX}Exception when finding sweep: {e}")
|
90
97
|
|
91
|
-
self._sweep_id: str = sweep_id or "empty-sweep-id"
|
92
|
-
self._state: SchedulerState = SchedulerState.PENDING
|
93
98
|
# Dictionary of the runs being managed by the scheduler
|
94
99
|
self._runs: Dict[str, SweepRun] = {}
|
95
100
|
# Threading lock to ensure thread-safe access to the runs dictionary
|
@@ -131,6 +136,7 @@ class Scheduler(ABC):
|
|
131
136
|
SchedulerState.COMPLETED,
|
132
137
|
SchedulerState.FAILED,
|
133
138
|
SchedulerState.STOPPED,
|
139
|
+
SchedulerState.CANCELLED,
|
134
140
|
]:
|
135
141
|
return False
|
136
142
|
return True
|
@@ -138,6 +144,13 @@ class Scheduler(ABC):
|
|
138
144
|
def start(self) -> None:
|
139
145
|
"""Start a scheduler, confirms prerequisites, begins execution loop."""
|
140
146
|
wandb.termlog(f"{LOG_PREFIX}Scheduler starting.")
|
147
|
+
if not self.is_alive():
|
148
|
+
wandb.termerror(
|
149
|
+
f"{LOG_PREFIX}Sweep already {self.state.name.lower()}! Exiting..."
|
150
|
+
)
|
151
|
+
self.exit()
|
152
|
+
return
|
153
|
+
|
141
154
|
self._state = SchedulerState.STARTING
|
142
155
|
if not self._try_load_executable():
|
143
156
|
wandb.termerror(
|
@@ -235,13 +248,21 @@ class Scheduler(ABC):
|
|
235
248
|
for run_id, run in self._yield_runs():
|
236
249
|
try:
|
237
250
|
_state = self._api.get_run_state(self._entity, self._project, run_id)
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
251
|
+
_rqi_state = run.queued_run.state if run.queued_run else None
|
252
|
+
if (
|
253
|
+
not _state
|
254
|
+
or _state
|
255
|
+
in [
|
256
|
+
"crashed",
|
257
|
+
"failed",
|
258
|
+
"killed",
|
259
|
+
"finished",
|
260
|
+
]
|
261
|
+
or _rqi_state == "failed"
|
262
|
+
):
|
263
|
+
_logger.debug(
|
264
|
+
f"({run_id}) run-state:{_state}, rqi-state:{_rqi_state}"
|
265
|
+
)
|
245
266
|
run.state = RunState.DEAD
|
246
267
|
_runs_to_remove.append(run_id)
|
247
268
|
elif _state in [
|
@@ -272,12 +293,13 @@ class Scheduler(ABC):
|
|
272
293
|
"""Add a launch job to the Launch RunQueue.
|
273
294
|
|
274
295
|
run_id: supplied by gorilla from agentHeartbeat
|
296
|
+
entry_point: sweep entrypoint overrides image_uri/job entrypoint
|
275
297
|
config: launch config
|
276
298
|
"""
|
277
299
|
# job and image first from CLI args, then from sweep config
|
278
300
|
_job = self._kwargs.get("job") or self._sweep_config.get("job")
|
279
301
|
|
280
|
-
_sweep_config_uri = self._sweep_config.get("
|
302
|
+
_sweep_config_uri = self._sweep_config.get("image_uri")
|
281
303
|
_image_uri = self._kwargs.get("image_uri") or _sweep_config_uri
|
282
304
|
if _job is None and _image_uri is None:
|
283
305
|
raise SchedulerError(
|
@@ -286,6 +308,13 @@ class Scheduler(ABC):
|
|
286
308
|
elif _job is not None and _image_uri is not None:
|
287
309
|
raise SchedulerError(f"{LOG_PREFIX}Sweep has both 'job' and 'image_uri'")
|
288
310
|
|
311
|
+
if self._sweep_config.get("command"):
|
312
|
+
entry_point = Agent._create_sweep_command(self._sweep_config["command"])
|
313
|
+
wandb.termwarn(
|
314
|
+
f"{LOG_PREFIX}Sweep command {entry_point} will override"
|
315
|
+
f' {"job" if _job else "image_uri"} entrypoint'
|
316
|
+
)
|
317
|
+
|
289
318
|
run_id = run_id or generate_id()
|
290
319
|
queued_run = launch_add(
|
291
320
|
run_id=run_id,
|
wandb/sdk/launch/utils.py
CHANGED
@@ -10,11 +10,21 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
|
|
10
10
|
import click
|
11
11
|
|
12
12
|
import wandb
|
13
|
+
import wandb.docker as docker
|
13
14
|
from wandb import util
|
14
15
|
from wandb.apis.internal import Api
|
15
16
|
from wandb.errors import CommError, Error
|
16
17
|
from wandb.sdk.launch.wandb_reference import WandbReference
|
17
18
|
|
19
|
+
from .builder.templates._wandb_bootstrap import (
|
20
|
+
FAILED_PACKAGES_POSTFIX,
|
21
|
+
FAILED_PACKAGES_PREFIX,
|
22
|
+
)
|
23
|
+
|
24
|
+
FAILED_PACKAGES_REGEX = re.compile(
|
25
|
+
f"{re.escape(FAILED_PACKAGES_PREFIX)}(.*){re.escape(FAILED_PACKAGES_POSTFIX)}"
|
26
|
+
)
|
27
|
+
|
18
28
|
if TYPE_CHECKING: # pragma: no cover
|
19
29
|
from wandb.apis.public import Artifact as PublicArtifact
|
20
30
|
|
@@ -25,6 +35,12 @@ class LaunchError(Error):
|
|
25
35
|
pass
|
26
36
|
|
27
37
|
|
38
|
+
class LaunchDockerError(Error):
|
39
|
+
"""Raised when Docker daemon is not running."""
|
40
|
+
|
41
|
+
pass
|
42
|
+
|
43
|
+
|
28
44
|
class ExecutionError(Error):
|
29
45
|
"""Generic execution exception."""
|
30
46
|
|
@@ -146,7 +162,6 @@ def construct_launch_spec(
|
|
146
162
|
parameters: Optional[Dict[str, Any]],
|
147
163
|
resource_args: Optional[Dict[str, Any]],
|
148
164
|
launch_config: Optional[Dict[str, Any]],
|
149
|
-
cuda: Optional[bool],
|
150
165
|
run_id: Optional[str],
|
151
166
|
repository: Optional[str],
|
152
167
|
) -> Dict[str, Any]:
|
@@ -202,8 +217,6 @@ def construct_launch_spec(
|
|
202
217
|
|
203
218
|
if entry_point:
|
204
219
|
launch_spec["overrides"]["entry_point"] = entry_point
|
205
|
-
if cuda is not None:
|
206
|
-
launch_spec["cuda"] = cuda
|
207
220
|
|
208
221
|
if run_id is not None:
|
209
222
|
launch_spec["run_id"] = run_id
|
@@ -621,7 +634,7 @@ def resolve_build_and_registry_config(
|
|
621
634
|
) -> Tuple[Dict[str, Any], Dict[str, Any]]:
|
622
635
|
resolved_build_config: Dict[str, Any] = {}
|
623
636
|
if build_config is None and default_launch_config is not None:
|
624
|
-
resolved_build_config = default_launch_config.get("
|
637
|
+
resolved_build_config = default_launch_config.get("builder", {})
|
625
638
|
elif build_config is not None:
|
626
639
|
resolved_build_config = build_config
|
627
640
|
resolved_registry_config: Dict[str, Any] = {}
|
@@ -656,3 +669,38 @@ def make_name_dns_safe(name: str) -> str:
|
|
656
669
|
# Actual length limit is 253, but we want to leave room for the generated suffix
|
657
670
|
resp = resp[:200]
|
658
671
|
return resp
|
672
|
+
|
673
|
+
|
674
|
+
def warn_failed_packages_from_build_logs(log: str, image_uri: str) -> None:
|
675
|
+
match = FAILED_PACKAGES_REGEX.search(log)
|
676
|
+
if match:
|
677
|
+
wandb.termwarn(
|
678
|
+
f"Failed to install the following packages: {match.group(1)} for image: {image_uri}. Will attempt to launch image without them."
|
679
|
+
)
|
680
|
+
|
681
|
+
|
682
|
+
def docker_image_exists(docker_image: str, should_raise: bool = False) -> bool:
|
683
|
+
"""Check if a specific image is already available.
|
684
|
+
|
685
|
+
Optionally raises an exception if the image is not found.
|
686
|
+
"""
|
687
|
+
_logger.info("Checking if base image exists...")
|
688
|
+
try:
|
689
|
+
docker.run(["docker", "image", "inspect", docker_image])
|
690
|
+
return True
|
691
|
+
except (docker.DockerError, ValueError) as e:
|
692
|
+
if should_raise:
|
693
|
+
raise e
|
694
|
+
_logger.info("Base image not found. Generating new base image")
|
695
|
+
return False
|
696
|
+
|
697
|
+
|
698
|
+
def pull_docker_image(docker_image: str) -> None:
|
699
|
+
"""Pull the requested docker image."""
|
700
|
+
if docker_image_exists(docker_image):
|
701
|
+
# don't pull images if they exist already, eg if they are local images
|
702
|
+
return
|
703
|
+
try:
|
704
|
+
docker.run(["docker", "pull", docker_image])
|
705
|
+
except docker.DockerError as e:
|
706
|
+
raise LaunchError(f"Docker server returned error: {e}")
|
wandb/sdk/wandb_run.py
CHANGED
@@ -233,6 +233,8 @@ class RunStatusChecker:
|
|
233
233
|
|
234
234
|
if result:
|
235
235
|
process(result)
|
236
|
+
# if request finished, clear the handle to send on the next interval
|
237
|
+
local_handle = None
|
236
238
|
|
237
239
|
time_elapsed = time.monotonic() - time_probe
|
238
240
|
wait_time = max(self._stop_polling_interval - time_elapsed, 0)
|
@@ -2498,6 +2500,7 @@ class Run:
|
|
2498
2500
|
def unwatch(self, models=None) -> None: # type: ignore
|
2499
2501
|
wandb.unwatch(models=models)
|
2500
2502
|
|
2503
|
+
# TODO(kdg): remove all artifact swapping logic
|
2501
2504
|
def _swap_artifact_name(self, artifact_name: str, use_as: Optional[str]) -> str:
|
2502
2505
|
artifact_key_string = use_as or artifact_name
|
2503
2506
|
replacement_artifact_info = self._launch_artifact_mapping.get(
|
@@ -2513,10 +2516,6 @@ class Run:
|
|
2513
2516
|
)
|
2514
2517
|
return f"{entity}/{project}/{new_name}"
|
2515
2518
|
elif replacement_artifact_info is None and use_as is None:
|
2516
|
-
wandb.termwarn(
|
2517
|
-
f"Could not find {artifact_name} in launch artifact mapping. "
|
2518
|
-
f"Searching for unique artifacts with sequence name: {artifact_name}"
|
2519
|
-
)
|
2520
2519
|
sequence_name = artifact_name.split(":")[0].split("/")[-1]
|
2521
2520
|
unique_artifact_replacement_info = (
|
2522
2521
|
self._unique_launch_artifact_sequence_names.get(sequence_name)
|
@@ -2532,14 +2531,8 @@ class Run:
|
|
2532
2531
|
return f"{entity}/{project}/{new_name}"
|
2533
2532
|
|
2534
2533
|
else:
|
2535
|
-
wandb.termwarn(
|
2536
|
-
f"Could not find swappable artifact at key: {use_as}. Using {artifact_name}"
|
2537
|
-
)
|
2538
2534
|
return artifact_name
|
2539
2535
|
|
2540
|
-
wandb.termwarn(
|
2541
|
-
f"Could not find {artifact_key_string} in launch artifact mapping. Using {artifact_name}"
|
2542
|
-
)
|
2543
2536
|
return artifact_name
|
2544
2537
|
|
2545
2538
|
def _detach(self) -> None:
|
wandb/sync/sync.py
CHANGED
@@ -142,6 +142,7 @@ class SyncThread(threading.Thread):
|
|
142
142
|
proto_run.run_id = self._run_id or wandb.util.generate_id()
|
143
143
|
proto_run.project = self._project or wandb.util.auto_project_name(None)
|
144
144
|
proto_run.entity = self._entity
|
145
|
+
proto_run.telemetry.feature.sync_tfevents = True
|
145
146
|
|
146
147
|
url = "{}/{}/{}/runs/{}".format(
|
147
148
|
self._app_url,
|
wandb/util.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
wandb/__init__.py,sha256=
|
1
|
+
wandb/__init__.py,sha256=OY44rhrK9CZ3AXzdrfqtoSFOz5Da6aALYY163kBqVD0,6051
|
2
2
|
wandb/__main__.py,sha256=gripuDgB7J8wMMeJt4CIBRjn1BMSFr5zvsrt585Pnj4,64
|
3
3
|
wandb/_globals.py,sha256=CccwOAls5bxJArYHg12b08ZeKR8Qu9u57GtYWjBH0o0,702
|
4
4
|
wandb/data_types.py,sha256=ubLUgZ74CDkzPgrJNt1E0FHQuWQbzVFM42OBkZQwxzY,75068
|
@@ -7,7 +7,7 @@ wandb/jupyter.py,sha256=OetSXg5_Eu3WES_9TOarIzbvx6wCIfLSVyno2bEbisk,16940
|
|
7
7
|
wandb/magic.py,sha256=YVSQmkrtlQ56p-VqkwjiPGNBa694UvPALxc4yp6RiLk,59
|
8
8
|
wandb/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
9
|
wandb/trigger.py,sha256=s6pc7ol-s76i7YRNf4P13f9co2f4f8simzXkjcmSQG0,614
|
10
|
-
wandb/util.py,sha256=
|
10
|
+
wandb/util.py,sha256=ad5rhrY3Q4CNcmh_9Ic72Yei_0L1Jm8UURwUhpyx5cQ,61173
|
11
11
|
wandb/viz.py,sha256=hrRhuDuvgelF-qK0eoVmBJyJi1DjQ3vkmrgRKgM2lyg,3217
|
12
12
|
wandb/wandb_agent.py,sha256=4ohs94jROgasA5ZH3FhIRyuFF5li1kWt3lC_UqPuSAo,23538
|
13
13
|
wandb/wandb_controller.py,sha256=SjL4Sx1scOzY-lFp9bGmf6P43p99xlLxpGUAMetRS_c,24729
|
@@ -16,9 +16,12 @@ wandb/wandb_torch.py,sha256=f_xxU4unLnNWiyLSPpTT86Iwx1MGhUyqkKX5NAJx0Qs,21999
|
|
16
16
|
wandb/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
17
|
wandb/agents/pyagent.py,sha256=FLoOmORjVQ-MtjBtd7XUXljBqm0Tks6xguRGn1AsAs4,12921
|
18
18
|
wandb/apis/__init__.py,sha256=haXrAmHFoC3gL1_NphdalvaMKGSiiFWB2QCOIJUhPGc,1329
|
19
|
-
wandb/apis/internal.py,sha256=
|
19
|
+
wandb/apis/internal.py,sha256=2nOLHiOVv4Pduh4l6Zy3g7kGybViutn1ATbXeB6n1sA,6152
|
20
20
|
wandb/apis/normalize.py,sha256=PzB9YfayTfzM262m5H5Z7I0qH3G5gNwtkPt3lTu0BHg,2141
|
21
|
-
wandb/apis/public.py,sha256=
|
21
|
+
wandb/apis/public.py,sha256=6TtoQ2ZEbl2sInwsAmTQtF5sSYhUoh27jQ-NCL_gILI,179826
|
22
|
+
wandb/apis/importers/__init__.py,sha256=117C1xz4GGn1T3e3LOJ3GSSnQZrnWvZiS0AP_3B0K9Q,124
|
23
|
+
wandb/apis/importers/base.py,sha256=ANIeFJcg8W4tpnq9AbdDag8v48Qd-YGA2DVep8byhXc,10160
|
24
|
+
wandb/apis/importers/mlflow.py,sha256=gXzpJ1aVFMSwxeO_kUGNyl6TJvVzfNOx5EJOinM96sM,3538
|
22
25
|
wandb/apis/reports/__init__.py,sha256=Dr4Qj7g-Oprr2-yci3GnkGmmef0NWL1PVTcIeRfy8PI,949
|
23
26
|
wandb/apis/reports/_blocks.py,sha256=pauLnohwcEAPksqaJQIB04LjRn4KOe3MNQvCCWYiE7E,53785
|
24
27
|
wandb/apis/reports/_helpers.py,sha256=SlJQcvD-fDBSniXcp4BLsSxW_1fp-fhVFiZj6qYgEqg,2126
|
@@ -37,8 +40,8 @@ wandb/beta/workflows.py,sha256=ozY3OooklSsjdZeowl8an5VF6phCUgIn3yYv0vkIO7Q,10051
|
|
37
40
|
wandb/bin/apple_gpu_stats,sha256=-CVDIPhgV1f_jjM1dkXJgmo6AQY4wjy1xCGg1e8zn0w,337072
|
38
41
|
wandb/catboost/__init__.py,sha256=kgsxRzur9liL-CPOVubjNVJ_FEDiktbyA7gQQXxG1n0,226
|
39
42
|
wandb/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
40
|
-
wandb/cli/cli.py,sha256=
|
41
|
-
wandb/docker/__init__.py,sha256=
|
43
|
+
wandb/cli/cli.py,sha256=pge9FSPhpq-zk5qocxCu3E1L9GPSQsgC7Won9mPsy1U,78841
|
44
|
+
wandb/docker/__init__.py,sha256=PW64nHMdNB4B7WYVC12lZf242Zi_d5QHLtAtfThqM9g,9575
|
42
45
|
wandb/docker/auth.py,sha256=d0uCK29uATBe6HKkbhbvdEYYbSIkdppiwzvWsgUqqMc,15065
|
43
46
|
wandb/docker/wandb-entrypoint.sh,sha256=P4eTMG7wYsgTfJIws_HT7QFlYBI70ZLnNlDGTZdmYVE,989
|
44
47
|
wandb/docker/www_authenticate.py,sha256=eQd0ap8LpZkS9ImRn2gdgl7gnHeKprdqjClrZOaCsQo,2805
|
@@ -130,13 +133,13 @@ wandb/proto/v3/wandb_base_pb2.py,sha256=0Ixr7LeEOTdIU_pewdbhRZOrFqRtgsOsWcyC_Tw4
|
|
130
133
|
wandb/proto/v3/wandb_internal_pb2.py,sha256=qgGpq44m9a3_dRtbdZpay94R8J_-anaYJ_bdboag_ug,79464
|
131
134
|
wandb/proto/v3/wandb_server_pb2.py,sha256=l8fk4O9pGC8_8oHxC3CacxDxW1KNy1ST49DS-s_VxIk,25856
|
132
135
|
wandb/proto/v3/wandb_server_pb2_grpc.py,sha256=wPgsoCB-OyZjN2f88vG1-SCFJtr6YOceKDSn2SolOiM,70982
|
133
|
-
wandb/proto/v3/wandb_telemetry_pb2.py,sha256=
|
136
|
+
wandb/proto/v3/wandb_telemetry_pb2.py,sha256=yv9W4LdtFOOxRDzHDpAPVa7NAdhVOh1r_VpEG0QBlpQ,11215
|
134
137
|
wandb/proto/v4/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
135
138
|
wandb/proto/v4/wandb_base_pb2.py,sha256=fF312_OnXSKQTjMW0Pwdo-yZBmFURWH-n4XJ_sEaExY,1315
|
136
139
|
wandb/proto/v4/wandb_internal_pb2.py,sha256=z9vL6zr4V-PWDIXpBeVqGQ5KvgsqkfwSIkbCPFn5LnA,36136
|
137
140
|
wandb/proto/v4/wandb_server_pb2.py,sha256=GlaUcDwBOJnhRSuQW-ddGeyXrVVD1oj05pMprt6e5Is,13976
|
138
141
|
wandb/proto/v4/wandb_server_pb2_grpc.py,sha256=wPgsoCB-OyZjN2f88vG1-SCFJtr6YOceKDSn2SolOiM,70982
|
139
|
-
wandb/proto/v4/wandb_telemetry_pb2.py,sha256=
|
142
|
+
wandb/proto/v4/wandb_telemetry_pb2.py,sha256=CX220fSnk6dQtSCkSKRHHiITR_x_stWxkD9A2Ql-v2g,8662
|
140
143
|
wandb/sacred/__init__.py,sha256=2sCLXqvkwjEqOvPFdtAtmo80PY4hky7rj4owO5PoJWQ,80
|
141
144
|
wandb/sdk/__init__.py,sha256=_dmAd0D7tTMYXpV_FqdGpAMSn6wtmsN5dEPoFlXaXmU,719
|
142
145
|
wandb/sdk/wandb_alerts.py,sha256=SwBPBiXRxknMTMGbsVoMMWqWK65UWMcKAdTWZtdwAeo,193
|
@@ -149,7 +152,7 @@ wandb/sdk/wandb_manager.py,sha256=l2sHY64fck-hQ35pmnMgY5egmGix5icpVRohFe0RqMY,69
|
|
149
152
|
wandb/sdk/wandb_metric.py,sha256=a3GiQXr6H18m81uobYjlJaC8CL8iANzI42qxkxfZsDs,3268
|
150
153
|
wandb/sdk/wandb_require.py,sha256=CsclI4T0RUhPGIOEtGbjtrtFmYj9NFtgAgHUEddVyNg,2732
|
151
154
|
wandb/sdk/wandb_require_helpers.py,sha256=ZmKv5aXXHDTTU6nYHMLKW4_pt9X-PlaMtbRJl77kHX8,1331
|
152
|
-
wandb/sdk/wandb_run.py,sha256=
|
155
|
+
wandb/sdk/wandb_run.py,sha256=2ODQw3QmtePve1I0UJ6wnxLfCnauQPyAlV02Wd-5PN4,142067
|
153
156
|
wandb/sdk/wandb_save.py,sha256=RJeT-_cpmtUxqNk3AmFVW1Tb8k5s46ylmvb8cw54Vks,181
|
154
157
|
wandb/sdk/wandb_settings.py,sha256=SKrzP5W5bN79Q2Pauk4-54kfS-4eh9EZqU-exx7xm7g,65061
|
155
158
|
wandb/sdk/wandb_setup.py,sha256=A-V4BO0Lrz8elnNhme0fQsg-TJx-YIEQBTX30Zo07j8,11079
|
@@ -205,7 +208,7 @@ wandb/sdk/internal/file_stream.py,sha256=zkgRlto6YIE8KKdW9wLD7ZdfDl1s21g8CQff8ne
|
|
205
208
|
wandb/sdk/internal/flow_control.py,sha256=0D6AO8nZN6wGO46g6vdj_Lc4w2EztyLdxi7ydMICRA8,8587
|
206
209
|
wandb/sdk/internal/handler.py,sha256=aGyXyML8AelYSjWeg8WhIKiZnN__Ti7xXUBfMJKCmoI,31616
|
207
210
|
wandb/sdk/internal/internal.py,sha256=mz3ki8uFttOo0Zbq5SV_83Y1pJkBj5Uc7imSStFhLxg,12838
|
208
|
-
wandb/sdk/internal/internal_api.py,sha256=
|
211
|
+
wandb/sdk/internal/internal_api.py,sha256=AC0XKm78cBo0BVkSYRStcvpeR1q_5wdf4DDE_s0CgLw,110317
|
209
212
|
wandb/sdk/internal/internal_util.py,sha256=1BI2ol9hhRukU7zBPbPhUcUXa58i4vLa4ocgBUya6pQ,2655
|
210
213
|
wandb/sdk/internal/job_builder.py,sha256=xlArhh2a7jE8rYlbBU5NDtt0Lau9cDWWExhRDDkiWXU,7788
|
211
214
|
wandb/sdk/internal/profiler.py,sha256=ZpPXJJZhkml3ZL8HPbB-vZGAVPZUv0Wv-nWjOnCMXPg,2350
|
@@ -235,39 +238,39 @@ wandb/sdk/internal/system/assets/open_metrics.py,sha256=p6u8ygyZQnD66Ve96qbP6fzH
|
|
235
238
|
wandb/sdk/internal/system/assets/tpu.py,sha256=Iac09nmjUgV6Zm3zfbI8J9wYww671askzvXcovvfn48,4918
|
236
239
|
wandb/sdk/internal/system/assets/trainium.py,sha256=Kl0Y89Bic1OqjmKhtL1wyOB8AnKl5cULAkoYmjZXX54,12340
|
237
240
|
wandb/sdk/launch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
238
|
-
wandb/sdk/launch/_project_spec.py,sha256=
|
241
|
+
wandb/sdk/launch/_project_spec.py,sha256=OzRlnrUo470ekXldX2XXNuzzYQ2GLUfOD5uVBA68gnw,19787
|
239
242
|
wandb/sdk/launch/github_reference.py,sha256=aSTDKT_WMGkci8_TPg2ICPdhiMLCnAy5ZyU17x_qIGY,8275
|
240
|
-
wandb/sdk/launch/launch.py,sha256=
|
241
|
-
wandb/sdk/launch/launch_add.py,sha256=
|
243
|
+
wandb/sdk/launch/launch.py,sha256=8KpqUIIBuIPlheYXPrh0bLLgBvVZ6Y7q79Akqldc7Ao,11020
|
244
|
+
wandb/sdk/launch/launch_add.py,sha256=1AQ454hBd5opE7m92Boa7Bx4n2yVkG2ne7zGeM6662w,7785
|
242
245
|
wandb/sdk/launch/loader.py,sha256=IsaJCS2GpZMgS8EaqRT8M0ZAzNc-NP8hjL29_Eq42UM,8213
|
243
|
-
wandb/sdk/launch/utils.py,sha256=
|
246
|
+
wandb/sdk/launch/utils.py,sha256=ocrHRoWPfwEn1O6dx1_jIunoZ_8S3hjnqCJJ-eZPvsE,24486
|
244
247
|
wandb/sdk/launch/wandb_reference.py,sha256=t4REjZz5lwB9fjDW2eo8uRgw9KeLsPeZ1Uu8tiFDBfA,4253
|
245
248
|
wandb/sdk/launch/agent/__init__.py,sha256=nwGHzJptq87cXCSAJi7Wv2ShL-HZwDgMo2aFC2Rh20w,85
|
246
|
-
wandb/sdk/launch/agent/agent.py,sha256=
|
249
|
+
wandb/sdk/launch/agent/agent.py,sha256=DytOM-Evzqnvr1L_Kt0B23An9T7jby1Q9AkzO8FrhxI,19078
|
247
250
|
wandb/sdk/launch/builder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
248
251
|
wandb/sdk/launch/builder/abstract.py,sha256=nFrbUU7HBeJRYMrAy_EUbfGdGi2wAMNT5BubPpTwK7w,2469
|
249
|
-
wandb/sdk/launch/builder/build.py,sha256=
|
250
|
-
wandb/sdk/launch/builder/docker_builder.py,sha256=
|
251
|
-
wandb/sdk/launch/builder/kaniko_builder.py,sha256=
|
252
|
+
wandb/sdk/launch/builder/build.py,sha256=aF24pxsNLcv7vPCbcwlXcTapvIn-gYZ2Q-PXhkBtaOI,20018
|
253
|
+
wandb/sdk/launch/builder/docker_builder.py,sha256=ovlDQ_RweyYH8wqKKC9C_ZxyLHsUgezTmq-p3VKyBpQ,6045
|
254
|
+
wandb/sdk/launch/builder/kaniko_builder.py,sha256=3AuY3eYidazWrYYfv0z68OnlkJj1_3Qj6w4mats2Zdk,15938
|
252
255
|
wandb/sdk/launch/builder/noop.py,sha256=3ZSGWKYX_ahm7Qt-Z1tXC_eyTRrqenytWbC37Wm3Akg,1490
|
253
|
-
wandb/sdk/launch/builder/templates/_wandb_bootstrap.py,sha256=
|
256
|
+
wandb/sdk/launch/builder/templates/_wandb_bootstrap.py,sha256=k29ACdlAfC6gxEFBo7c5F6VbVVYv3t9-6a6nfNZDiFk,5817
|
254
257
|
wandb/sdk/launch/environment/abstract.py,sha256=k65QRutKWOB6LFTrIMHP8GkWe5MWJYKk5YWFjWEIF3E,926
|
255
|
-
wandb/sdk/launch/environment/aws_environment.py,sha256=
|
258
|
+
wandb/sdk/launch/environment/aws_environment.py,sha256=cwYVxQ6sWnxhv97ftIBeR9UbZH8ro-1zo6HgjH1LGmQ,9967
|
256
259
|
wandb/sdk/launch/environment/gcp_environment.py,sha256=vksFQyHH7k0oKFHXlzFe4kJ3_8CDaUxsb9ptlbrpPvU,10103
|
257
260
|
wandb/sdk/launch/environment/local_environment.py,sha256=pV7moIX4XuKG5vf64vqGu4yTLUwNQe-eg83iLMd2ilc,2226
|
258
|
-
wandb/sdk/launch/registry/abstract.py,sha256=
|
259
|
-
wandb/sdk/launch/registry/elastic_container_registry.py,sha256=
|
260
|
-
wandb/sdk/launch/registry/google_artifact_registry.py,sha256=
|
261
|
-
wandb/sdk/launch/registry/local_registry.py,sha256=
|
261
|
+
wandb/sdk/launch/registry/abstract.py,sha256=3lCuTdqDAAIV_nmgGTfSd2gc1-02dTo5lY-KpuXj-wc,1400
|
262
|
+
wandb/sdk/launch/registry/elastic_container_registry.py,sha256=zfpDYJqZnNr9kJkL_HNvFNl5K_cSNngGlXevJlVM6G8,5759
|
263
|
+
wandb/sdk/launch/registry/google_artifact_registry.py,sha256=RHgg9j02JGmRebeqFhoIDD71IaZqWVIf3vZM1R2zfGI,7133
|
264
|
+
wandb/sdk/launch/registry/local_registry.py,sha256=851LoTJO9G08JZgxMmwMimiNH7OHxltjIj_tlpqf8ro,1720
|
262
265
|
wandb/sdk/launch/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
263
|
-
wandb/sdk/launch/runner/abstract.py,sha256=
|
264
|
-
wandb/sdk/launch/runner/kubernetes_runner.py,sha256=
|
265
|
-
wandb/sdk/launch/runner/local_container.py,sha256=
|
266
|
-
wandb/sdk/launch/runner/local_process.py,sha256=
|
267
|
-
wandb/sdk/launch/runner/sagemaker_runner.py,sha256=
|
268
|
-
wandb/sdk/launch/runner/vertex_runner.py,sha256=
|
266
|
+
wandb/sdk/launch/runner/abstract.py,sha256=Lgoylgg5ifuwBLL_bhNzM1Q5mXUaG4adIbkrfzsnKCU,5192
|
267
|
+
wandb/sdk/launch/runner/kubernetes_runner.py,sha256=YnGxySJqu795cg3DI0Nnf0dREdW0yVbvCxVtWBZcdwY,18732
|
268
|
+
wandb/sdk/launch/runner/local_container.py,sha256=wGhfwlQj6bfnf3fc4VxOy8grLOo-NLO0Y9XG2xqY-N8,8257
|
269
|
+
wandb/sdk/launch/runner/local_process.py,sha256=4n7YQcYhUVQhXl_qMdypgo6hapy96V2UaHK4uLb965o,3280
|
270
|
+
wandb/sdk/launch/runner/sagemaker_runner.py,sha256=EL7Wo04Dlerv87Vv5W20XhOnoz0Idg4WWICG_lo7uHM,12085
|
271
|
+
wandb/sdk/launch/runner/vertex_runner.py,sha256=yEBSFl2_cFyTuKs6uUnpX4uKN-JRcuI_2OuIkTeqH_0,7195
|
269
272
|
wandb/sdk/launch/sweeps/__init__.py,sha256=ROE75akKQpMzkZKZ-dg_deCyluQr0u2oo617DIsWt-c,958
|
270
|
-
wandb/sdk/launch/sweeps/scheduler.py,sha256=
|
273
|
+
wandb/sdk/launch/sweeps/scheduler.py,sha256=pYT-ZHsx68l_h3vEcscx3cHL8R9zmAP268D87o4n2_w,11722
|
271
274
|
wandb/sdk/launch/sweeps/scheduler_sweep.py,sha256=GLcB3RsOTX2ZQ914nR17MnNL765l57V_7MSKmfGYuB8,5891
|
272
275
|
wandb/sdk/lib/__init__.py,sha256=PeqhRWcgiOzo6LliKn8UgNOXMzbr2k0dx5egTAKa7g4,149
|
273
276
|
wandb/sdk/lib/_settings_toposort_generate.py,sha256=8xNbH9JAMDyOcga0p_nfUoWqQdR1AUMBGUDplYbQiyY,5272
|
@@ -339,7 +342,7 @@ wandb/sklearn/plot/clusterer.py,sha256=_zeNa_DgNT7YeRuTFiFbgpIGL_dUV8lmQqFztJ7R1
|
|
339
342
|
wandb/sklearn/plot/regressor.py,sha256=yw3sFuWGDeD_mByi-Xuef79_4zdpE6ODJyIPiYEY0z8,3905
|
340
343
|
wandb/sklearn/plot/shared.py,sha256=_BMOiBmwNO_vIH5f2SDQcPASrJabxmRuKuELwA27-9k,2732
|
341
344
|
wandb/sync/__init__.py,sha256=vZMKb-AOlEwKQf4GNTndrgHuvGCeDMDTZAVwimtXZ0o,101
|
342
|
-
wandb/sync/sync.py,sha256=
|
345
|
+
wandb/sync/sync.py,sha256=gdLj7biCZllbK4a0dCvAR7kh3WMRfin4O7wPHfdlAQ4,14859
|
343
346
|
wandb/testing/relay.py,sha256=DNTk5Yd8yUn39ZfxAd0D1q-N093PIwhJVPeO6pMLXoo,25127
|
344
347
|
wandb/vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
345
348
|
wandb/vendor/gql-0.2.0/setup.py,sha256=_osNap_aCOVvTlDwP9f-aI10TJbpIflxcG6fEQoAxNs,1314
|
@@ -725,9 +728,9 @@ wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/platform.py,sha256=UORYTNVcUSE2
|
|
725
728
|
wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/unicode_paths.py,sha256=UWX8DB97ygkEeSxWQUYCHR4MahNilux7vl5TCTQtPPk,2190
|
726
729
|
wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/win32stat.py,sha256=ZOevOTbSo8NRiIxkuBVGaG4yigWnPoO0goxAi-jsBkM,3828
|
727
730
|
wandb/xgboost/__init__.py,sha256=GRixyb89ki1Znfw48RRiRPxZnK41aEj1L48bBG6-Kh0,230
|
728
|
-
wandb-0.
|
729
|
-
wandb-0.
|
730
|
-
wandb-0.
|
731
|
-
wandb-0.
|
732
|
-
wandb-0.
|
733
|
-
wandb-0.
|
731
|
+
wandb-0.14.0.dist-info/LICENSE,sha256=izOKRJpGOx1PrJiGOKR0HsNdlB5JdH2d0Z4P7a7ssTc,1081
|
732
|
+
wandb-0.14.0.dist-info/METADATA,sha256=rf29u6KpQheWvq4tiW_Y8C6kx-XrdlPaiaGuVbInlpw,7926
|
733
|
+
wandb-0.14.0.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
|
734
|
+
wandb-0.14.0.dist-info/entry_points.txt,sha256=5VEDOaS7CgcNfzb_FEaNkLS2AyPLzJJdY74xYYipTdQ,68
|
735
|
+
wandb-0.14.0.dist-info/top_level.txt,sha256=gPLPSekU6Labh_9yJz7WLb6Q9DK72I02_ARvDEG9Xsw,6
|
736
|
+
wandb-0.14.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|