wandb 0.17.5__py3-none-any.whl → 0.17.7__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.
- wandb/__init__.py +5 -16
- wandb/agents/pyagent.py +1 -2
- wandb/apis/public/api.py +1 -1
- wandb/apis/public/jobs.py +5 -0
- wandb/bin/nvidia_gpu_stats +0 -0
- wandb/cli/cli.py +21 -0
- wandb/data_types.py +5 -4
- wandb/env.py +6 -0
- wandb/integration/kfp/wandb_logging.py +1 -1
- wandb/integration/lightning/fabric/logger.py +5 -5
- wandb/integration/openai/fine_tuning.py +13 -5
- wandb/integration/ultralytics/pose_utils.py +0 -1
- wandb/proto/v3/wandb_internal_pb2.py +226 -226
- wandb/proto/v3/wandb_settings_pb2.py +1 -1
- wandb/proto/v3/wandb_telemetry_pb2.py +10 -10
- wandb/proto/v4/wandb_internal_pb2.py +226 -226
- wandb/proto/v4/wandb_settings_pb2.py +1 -1
- wandb/proto/v4/wandb_telemetry_pb2.py +10 -10
- wandb/proto/v5/wandb_internal_pb2.py +226 -226
- wandb/proto/v5/wandb_settings_pb2.py +1 -1
- wandb/proto/v5/wandb_telemetry_pb2.py +10 -10
- wandb/proto/wandb_deprecated.py +4 -0
- wandb/proto/wandb_internal_pb2.py +6 -0
- wandb/sdk/artifacts/artifact.py +6 -1
- wandb/sdk/artifacts/artifact_manifest_entry.py +31 -0
- wandb/sdk/artifacts/storage_handlers/azure_handler.py +35 -23
- wandb/sdk/data_types/_dtypes.py +5 -5
- wandb/sdk/data_types/base_types/media.py +3 -1
- wandb/sdk/data_types/helper_types/bounding_boxes_2d.py +3 -1
- wandb/sdk/data_types/helper_types/image_mask.py +3 -1
- wandb/sdk/data_types/image.py +3 -1
- wandb/sdk/data_types/object_3d.py +113 -2
- wandb/sdk/data_types/saved_model.py +3 -1
- wandb/sdk/interface/interface.py +40 -16
- wandb/sdk/interface/interface_shared.py +6 -9
- wandb/sdk/internal/datastore.py +1 -1
- wandb/sdk/internal/handler.py +0 -2
- wandb/sdk/internal/internal.py +1 -1
- wandb/sdk/internal/job_builder.py +5 -2
- wandb/sdk/internal/sender.py +31 -15
- wandb/sdk/internal/tb_watcher.py +2 -2
- wandb/sdk/internal/update.py +2 -2
- wandb/sdk/launch/_launch.py +4 -2
- wandb/sdk/launch/_project_spec.py +34 -8
- wandb/sdk/launch/agent/agent.py +6 -2
- wandb/sdk/launch/agent/run_queue_item_file_saver.py +2 -4
- wandb/sdk/launch/builder/build.py +4 -2
- wandb/sdk/launch/builder/kaniko_builder.py +13 -5
- wandb/sdk/launch/builder/templates/_wandb_bootstrap.py +2 -1
- wandb/sdk/launch/create_job.py +2 -0
- wandb/sdk/launch/inputs/internal.py +42 -28
- wandb/sdk/launch/inputs/schema.py +39 -0
- wandb/sdk/launch/runner/kubernetes_runner.py +72 -0
- wandb/sdk/launch/runner/local_container.py +13 -10
- wandb/sdk/launch/runner/sagemaker_runner.py +3 -5
- wandb/sdk/launch/utils.py +2 -0
- wandb/sdk/lib/apikey.py +1 -1
- wandb/sdk/lib/disabled.py +13 -174
- wandb/sdk/service/streams.py +2 -4
- wandb/sdk/wandb_config.py +1 -1
- wandb/sdk/wandb_init.py +77 -33
- wandb/sdk/wandb_login.py +6 -6
- wandb/sdk/wandb_run.py +150 -90
- wandb/sdk/wandb_settings.py +4 -3
- wandb/sdk/wandb_setup.py +66 -3
- wandb/sdk/wandb_sweep.py +5 -2
- wandb/wandb_agent.py +2 -0
- {wandb-0.17.5.dist-info → wandb-0.17.7.dist-info}/METADATA +3 -2
- {wandb-0.17.5.dist-info → wandb-0.17.7.dist-info}/RECORD +72 -70
- {wandb-0.17.5.dist-info → wandb-0.17.7.dist-info}/WHEEL +0 -0
- {wandb-0.17.5.dist-info → wandb-0.17.7.dist-info}/entry_points.txt +0 -0
- {wandb-0.17.5.dist-info → wandb-0.17.7.dist-info}/licenses/LICENSE +0 -0
wandb/__init__.py
CHANGED
@@ -1,9 +1,6 @@
|
|
1
1
|
"""Use wandb to track machine learning work.
|
2
2
|
|
3
|
-
|
4
|
-
- wandb.init — initialize a new run at the top of your training script
|
5
|
-
- wandb.config — track hyperparameters and metadata
|
6
|
-
- wandb.log — log metrics and media over time within your training loop
|
3
|
+
Train and fine-tune models, manage models from experimentation to production.
|
7
4
|
|
8
5
|
For guides and examples, see https://docs.wandb.ai.
|
9
6
|
|
@@ -11,11 +8,7 @@ For scripts and interactive notebooks, see https://github.com/wandb/examples.
|
|
11
8
|
|
12
9
|
For reference documentation, see https://docs.wandb.com/ref/python.
|
13
10
|
"""
|
14
|
-
__version__ = "0.17.
|
15
|
-
|
16
|
-
|
17
|
-
# Used with pypi checks and other messages related to pip
|
18
|
-
_wandb_module = "wandb"
|
11
|
+
__version__ = "0.17.7"
|
19
12
|
|
20
13
|
from typing import Optional
|
21
14
|
|
@@ -74,6 +67,7 @@ from wandb.data_types import Video
|
|
74
67
|
from wandb.data_types import Audio
|
75
68
|
from wandb.data_types import Table
|
76
69
|
from wandb.data_types import Html
|
70
|
+
from wandb.data_types import box3d
|
77
71
|
from wandb.data_types import Object3D
|
78
72
|
from wandb.data_types import Molecule
|
79
73
|
from wandb.data_types import Histogram
|
@@ -117,13 +111,6 @@ def _assert_is_user_process():
|
|
117
111
|
assert not _IS_INTERNAL_PROCESS
|
118
112
|
|
119
113
|
|
120
|
-
# toplevel:
|
121
|
-
# save()
|
122
|
-
# restore()
|
123
|
-
# login()
|
124
|
-
# sweep()
|
125
|
-
# agent()
|
126
|
-
|
127
114
|
# globals
|
128
115
|
Api = PublicApi
|
129
116
|
api = InternalApi()
|
@@ -245,6 +232,7 @@ __all__ = (
|
|
245
232
|
"Audio",
|
246
233
|
"Table",
|
247
234
|
"Html",
|
235
|
+
"box3d",
|
248
236
|
"Object3D",
|
249
237
|
"Molecule",
|
250
238
|
"Histogram",
|
@@ -252,4 +240,5 @@ __all__ = (
|
|
252
240
|
"log_model",
|
253
241
|
"use_model",
|
254
242
|
"link_model",
|
243
|
+
"define_metric",
|
255
244
|
)
|
wandb/agents/pyagent.py
CHANGED
@@ -14,7 +14,6 @@ import time
|
|
14
14
|
import traceback
|
15
15
|
|
16
16
|
import wandb
|
17
|
-
from wandb import wandb_sdk
|
18
17
|
from wandb.apis import InternalApi
|
19
18
|
from wandb.sdk.launch.sweeps import utils as sweep_utils
|
20
19
|
|
@@ -298,7 +297,7 @@ class Agent:
|
|
298
297
|
sweep_param_path, job.config
|
299
298
|
)
|
300
299
|
os.environ[wandb.env.SWEEP_ID] = self._sweep_id
|
301
|
-
|
300
|
+
wandb.sdk.wandb_setup._setup(_reset=True)
|
302
301
|
|
303
302
|
wandb.termlog(f"Agent Starting Run: {run_id} with config:")
|
304
303
|
for k, v in job.config.items():
|
wandb/apis/public/api.py
CHANGED
@@ -821,7 +821,7 @@ class Api:
|
|
821
821
|
order: (str) Order can be `created_at`, `heartbeat_at`, `config.*.value`, or `summary_metrics.*`.
|
822
822
|
If you prepend order with a + order is ascending.
|
823
823
|
If you prepend order with a - order is descending (default).
|
824
|
-
The default order is run.created_at from
|
824
|
+
The default order is run.created_at from oldest to newest.
|
825
825
|
per_page: (int) Sets the page size for query pagination.
|
826
826
|
include_sweeps: (bool) Whether to include the sweep runs in the results.
|
827
827
|
|
wandb/apis/public/jobs.py
CHANGED
@@ -65,6 +65,7 @@ class Job:
|
|
65
65
|
self._entrypoint = source_info.get("entrypoint")
|
66
66
|
self._dockerfile = source_info.get("dockerfile")
|
67
67
|
self._build_context = source_info.get("build_context")
|
68
|
+
self._base_image = source_info.get("base_image")
|
68
69
|
self._args = source_info.get("args")
|
69
70
|
self._partial = self._job_info.get("_partial", False)
|
70
71
|
self._requirements_file = os.path.join(self._fpath, "requirements.frozen.txt")
|
@@ -131,6 +132,8 @@ class Job:
|
|
131
132
|
launch_project.set_job_dockerfile(self._dockerfile)
|
132
133
|
if self._build_context:
|
133
134
|
launch_project.set_job_build_context(self._build_context)
|
135
|
+
if self._base_image:
|
136
|
+
launch_project.set_job_base_image(self._base_image)
|
134
137
|
|
135
138
|
def _configure_launch_project_artifact(self, launch_project):
|
136
139
|
artifact_string = self._job_info.get("source", {}).get("artifact")
|
@@ -152,6 +155,8 @@ class Job:
|
|
152
155
|
launch_project.set_job_dockerfile(self._dockerfile)
|
153
156
|
if self._build_context:
|
154
157
|
launch_project.set_job_build_context(self._build_context)
|
158
|
+
if self._base_image:
|
159
|
+
launch_project.set_job_base_image(self._base_image)
|
155
160
|
|
156
161
|
def _configure_launch_project_container(self, launch_project):
|
157
162
|
launch_project.docker_image = self._job_info.get("source", {}).get("image")
|
Binary file
|
wandb/cli/cli.py
CHANGED
@@ -1417,6 +1417,13 @@ def launch_sweep(
|
|
1417
1417
|
help="""Specific docker image you'd like to use. In the form name:tag.
|
1418
1418
|
If passed in, will override the docker image value passed in using a config file.""",
|
1419
1419
|
)
|
1420
|
+
@click.option(
|
1421
|
+
"--base-image",
|
1422
|
+
"-B",
|
1423
|
+
default=None,
|
1424
|
+
metavar="BASE IMAGE",
|
1425
|
+
help="""Docker image to run job code in. Incompatible with --docker-image.""",
|
1426
|
+
)
|
1420
1427
|
@click.option(
|
1421
1428
|
"--config",
|
1422
1429
|
"-c",
|
@@ -1508,6 +1515,7 @@ def launch(
|
|
1508
1515
|
entity,
|
1509
1516
|
project,
|
1510
1517
|
docker_image,
|
1518
|
+
base_image,
|
1511
1519
|
config,
|
1512
1520
|
cli_template_vars,
|
1513
1521
|
queue,
|
@@ -1604,6 +1612,7 @@ def launch(
|
|
1604
1612
|
git_hash=git_version,
|
1605
1613
|
name=job_name,
|
1606
1614
|
project=project,
|
1615
|
+
base_image=base_image,
|
1607
1616
|
build_context=build_context,
|
1608
1617
|
dockerfile=dockerfile,
|
1609
1618
|
entity=entity,
|
@@ -2001,6 +2010,12 @@ def describe(job):
|
|
2001
2010
|
help="Path to the build context from the root of the job source code. If "
|
2002
2011
|
"provided, this is used as the base path for the Dockerfile and entrypoint.",
|
2003
2012
|
)
|
2013
|
+
@click.option(
|
2014
|
+
"--base-image",
|
2015
|
+
"-B",
|
2016
|
+
type=str,
|
2017
|
+
help="Base image to use for the job. Incompatible with image jobs.",
|
2018
|
+
)
|
2004
2019
|
@click.option(
|
2005
2020
|
"--dockerfile",
|
2006
2021
|
"-D",
|
@@ -2025,6 +2040,7 @@ def create(
|
|
2025
2040
|
git_hash,
|
2026
2041
|
runtime,
|
2027
2042
|
build_context,
|
2043
|
+
base_image,
|
2028
2044
|
dockerfile,
|
2029
2045
|
):
|
2030
2046
|
"""Create a job from a source, without a wandb run.
|
@@ -2056,6 +2072,10 @@ def create(
|
|
2056
2072
|
)
|
2057
2073
|
entrypoint = "main.py"
|
2058
2074
|
|
2075
|
+
if job_type == "image" and base_image:
|
2076
|
+
wandb.termerror("Cannot provide --base-image/-B for an `image` job")
|
2077
|
+
return
|
2078
|
+
|
2059
2079
|
artifact, action, aliases = _create_job(
|
2060
2080
|
api=api,
|
2061
2081
|
path=path,
|
@@ -2069,6 +2089,7 @@ def create(
|
|
2069
2089
|
git_hash=git_hash,
|
2070
2090
|
runtime=runtime,
|
2071
2091
|
build_context=build_context,
|
2092
|
+
base_image=base_image,
|
2072
2093
|
dockerfile=dockerfile,
|
2073
2094
|
)
|
2074
2095
|
if not artifact:
|
wandb/data_types.py
CHANGED
@@ -44,7 +44,7 @@ from .sdk.data_types.histogram import Histogram
|
|
44
44
|
from .sdk.data_types.html import Html
|
45
45
|
from .sdk.data_types.image import Image
|
46
46
|
from .sdk.data_types.molecule import Molecule
|
47
|
-
from .sdk.data_types.object_3d import Object3D
|
47
|
+
from .sdk.data_types.object_3d import Object3D, box3d
|
48
48
|
from .sdk.data_types.plotly import Plotly
|
49
49
|
from .sdk.data_types.saved_model import _SavedModel
|
50
50
|
from .sdk.data_types.trace_tree import WBTraceTree
|
@@ -65,6 +65,7 @@ __all__ = [
|
|
65
65
|
"Html",
|
66
66
|
"Image",
|
67
67
|
"Molecule",
|
68
|
+
"box3d",
|
68
69
|
"Object3D",
|
69
70
|
"Plotly",
|
70
71
|
"Video",
|
@@ -103,7 +104,7 @@ class _TableIndex(int, _TableLinkMixin):
|
|
103
104
|
def _json_helper(val, artifact):
|
104
105
|
if isinstance(val, WBValue):
|
105
106
|
return val.to_json(artifact)
|
106
|
-
elif val.__class__
|
107
|
+
elif val.__class__ is dict:
|
107
108
|
res = {}
|
108
109
|
for key in val:
|
109
110
|
res[key] = _json_helper(val[key], artifact)
|
@@ -269,10 +270,10 @@ class Table(Media):
|
|
269
270
|
if dtype is None:
|
270
271
|
dtype = _dtypes.UnknownType()
|
271
272
|
|
272
|
-
if optional.__class__
|
273
|
+
if optional.__class__ is not list:
|
273
274
|
optional = [optional for _ in range(len(self.columns))]
|
274
275
|
|
275
|
-
if dtype.__class__
|
276
|
+
if dtype.__class__ is not list:
|
276
277
|
dtype = [dtype for _ in range(len(self.columns))]
|
277
278
|
|
278
279
|
self._column_types = _dtypes.TypedDictType({})
|
wandb/env.py
CHANGED
@@ -161,6 +161,12 @@ def is_debug(default: Optional[str] = None, env: Optional[Env] = None) -> bool:
|
|
161
161
|
return _env_as_bool(DEBUG, default=default, env=env)
|
162
162
|
|
163
163
|
|
164
|
+
def is_offline(env: Optional[Env] = None) -> bool:
|
165
|
+
if env is None:
|
166
|
+
env = os.environ
|
167
|
+
return env.get(MODE) == "offline"
|
168
|
+
|
169
|
+
|
164
170
|
def error_reporting_enabled() -> bool:
|
165
171
|
return _env_as_bool(ERROR_REPORTING, default="True")
|
166
172
|
|
@@ -8,7 +8,7 @@ from typing_extensions import override
|
|
8
8
|
|
9
9
|
import wandb
|
10
10
|
from wandb import Artifact
|
11
|
-
from wandb.sdk.lib import
|
11
|
+
from wandb.sdk.lib import telemetry
|
12
12
|
from wandb.sdk.wandb_run import Run
|
13
13
|
|
14
14
|
try:
|
@@ -293,7 +293,7 @@ class WandbLogger(Logger):
|
|
293
293
|
anonymous: Optional[bool] = None,
|
294
294
|
project: Optional[str] = None,
|
295
295
|
log_model: Union[Literal["all"], bool] = False,
|
296
|
-
experiment:
|
296
|
+
experiment: Optional["Run"] = None,
|
297
297
|
prefix: str = "",
|
298
298
|
checkpoint_name: Optional[str] = None,
|
299
299
|
log_checkpoint_on: Union[Literal["success"], Literal["all"]] = "success",
|
@@ -312,7 +312,7 @@ class WandbLogger(Logger):
|
|
312
312
|
self._prefix = prefix
|
313
313
|
self._experiment = experiment
|
314
314
|
self._logged_model_time: Dict[str, float] = {}
|
315
|
-
self._checkpoint_callback: Optional[
|
315
|
+
self._checkpoint_callback: Optional[ModelCheckpoint] = None
|
316
316
|
|
317
317
|
# paths are processed as strings
|
318
318
|
if save_dir is not None:
|
@@ -360,7 +360,7 @@ class WandbLogger(Logger):
|
|
360
360
|
|
361
361
|
@property
|
362
362
|
@rank_zero_experiment
|
363
|
-
def experiment(self) ->
|
363
|
+
def experiment(self) -> "Run":
|
364
364
|
r"""Actual wandb object.
|
365
365
|
|
366
366
|
To use wandb features in your :class:`~lightning.pytorch.core.LightningModule`, do the
|
@@ -393,7 +393,7 @@ class WandbLogger(Logger):
|
|
393
393
|
self._experiment = wandb.init(**self._wandb_init)
|
394
394
|
|
395
395
|
# define default x-axis
|
396
|
-
if isinstance(self._experiment,
|
396
|
+
if isinstance(self._experiment, Run) and getattr(
|
397
397
|
self._experiment, "define_metric", None
|
398
398
|
):
|
399
399
|
self._experiment.define_metric("trainer/global_step")
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import base64
|
1
2
|
import datetime
|
2
3
|
import io
|
3
4
|
import json
|
@@ -16,13 +17,13 @@ from wandb.util import parse_version
|
|
16
17
|
|
17
18
|
openai = util.get_module(
|
18
19
|
name="openai",
|
19
|
-
required="
|
20
|
-
lazy=
|
20
|
+
required="This integration requires `openai`. To install, please run `pip install openai`",
|
21
|
+
lazy=False,
|
21
22
|
)
|
22
23
|
|
23
|
-
if parse_version(openai.__version__) < parse_version("1.0
|
24
|
+
if parse_version(openai.__version__) < parse_version("1.12.0"):
|
24
25
|
raise wandb.Error(
|
25
|
-
f"This integration requires openai version 1.0
|
26
|
+
f"This integration requires openai version 1.12.0 and above. Your current version is {openai.__version__} "
|
26
27
|
"To fix, please `pip install -U openai`"
|
27
28
|
)
|
28
29
|
|
@@ -228,7 +229,14 @@ class WandbLogger:
|
|
228
229
|
# check results are present
|
229
230
|
try:
|
230
231
|
results_id = fine_tune.result_files[0]
|
231
|
-
|
232
|
+
try:
|
233
|
+
encoded_results = cls.openai_client.files.content(
|
234
|
+
file_id=results_id
|
235
|
+
).read()
|
236
|
+
results = base64.b64decode(encoded_results).decode("utf-8")
|
237
|
+
except Exception:
|
238
|
+
# attempt to read as text, works for older jobs
|
239
|
+
results = cls.openai_client.files.content(file_id=results_id).text
|
232
240
|
except openai.NotFoundError:
|
233
241
|
if show_individual_warnings:
|
234
242
|
wandb.termwarn(
|
@@ -23,7 +23,6 @@ def annotate_keypoint_results(result: Results, visualize_skeleton: bool):
|
|
23
23
|
|
24
24
|
|
25
25
|
def annotate_keypoint_batch(image_path: str, keypoints: Any, visualize_skeleton: bool):
|
26
|
-
original_image = None
|
27
26
|
with Image.open(image_path) as original_image:
|
28
27
|
original_image = np.ascontiguousarray(original_image)
|
29
28
|
annotator = Annotator(original_image)
|