Content-Length: 572898 | pFad | https://github.com/googleapis/python-aiplatform/commit/fa7d3a0e3cd5040eb4ab1c3b0df4e494dc84bac3

AE feat: Add default TensorBoard support. · googleapis/python-aiplatform@fa7d3a0 · GitHub
Skip to content

Commit fa7d3a0

Browse files
vertex-sdk-botcopybara-github
authored andcommitted
feat: Add default TensorBoard support.
PiperOrigin-RevId: 528842757
1 parent 921bfc0 commit fa7d3a0

File tree

5 files changed

+279
-6
lines changed

5 files changed

+279
-6
lines changed

google/cloud/aiplatform/metadata/metadata.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
# limitations under the License.
1616
#
1717

18+
import datetime
1819
import logging
1920
import os
2021
from typing import Dict, Union, Optional, Any, List
@@ -61,6 +62,24 @@ def _get_experiment_schema_version() -> str:
6162
return constants.SCHEMA_VERSIONS[constants.SYSTEM_EXPERIMENT]
6263

6364

65+
def _get_or_create_default_tensorboard() -> tensorboard_resource.Tensorboard:
66+
"""Helper method to get the default TensorBoard instance if already exists, or create a default TensorBoard instance.
67+
68+
Returns:
69+
tensorboard_resource.Tensorboard: the default TensorBoard instance.
70+
"""
71+
tensorboards = tensorboard_resource.Tensorboard.list(filter="is_default=true")
72+
if tensorboards:
73+
return tensorboards[0]
74+
else:
75+
default_tensorboard = tensorboard_resource.Tensorboard.create(
76+
display_name="Default Tensorboard "
77+
+ datetime.datetime.now().isoformat(sep=" "),
78+
is_default=True,
79+
)
80+
return default_tensorboard
81+
82+
6483
# Legacy Experiment tracking
6584
# Maintaining creation APIs for backwards compatibility testing
6685
class _LegacyExperimentService:
@@ -268,7 +287,11 @@ def set_experiment(
268287
experiment_name=experiment, description=description
269288
)
270289

271-
backing_tb = backing_tensorboard or self._global_tensorboard
290+
backing_tb = (
291+
backing_tensorboard
292+
or self._global_tensorboard
293+
or _get_or_create_default_tensorboard()
294+
)
272295

273296
current_backing_tb = experiment.backing_tensorboard_resource_name
274297

google/cloud/aiplatform/tensorboard/tensorboard_resource.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,18 @@
2424
from google.cloud.aiplatform import base
2525
from google.cloud.aiplatform import initializer
2626
from google.cloud.aiplatform import utils
27-
from google.cloud.aiplatform.compat.types import tensorboard as gca_tensorboard
27+
from google.cloud.aiplatform.compat.types import (
28+
tensorboard as gca_tensorboard,
29+
)
2830
from google.cloud.aiplatform.compat.types import (
2931
tensorboard_data as gca_tensorboard_data,
3032
)
3133
from google.cloud.aiplatform.compat.types import (
3234
tensorboard_experiment as gca_tensorboard_experiment,
3335
)
34-
from google.cloud.aiplatform.compat.types import tensorboard_run as gca_tensorboard_run
36+
from google.cloud.aiplatform.compat.types import (
37+
tensorboard_run as gca_tensorboard_run,
38+
)
3539
from google.cloud.aiplatform.compat.types import (
3640
tensorboard_service as gca_tensorboard_service,
3741
)
@@ -95,6 +99,7 @@ def create(
9599
display_name: Optional[str] = None,
96100
description: Optional[str] = None,
97101
labels: Optional[Dict[str, str]] = None,
102+
is_default=False,
98103
project: Optional[str] = None,
99104
location: Optional[str] = None,
100105
credentials: Optional[auth_credentials.Credentials] = None,
@@ -132,6 +137,10 @@ def create(
132137
See https://goo.gl/xmQnxf for more information and examples of labels.
133138
System reserved label keys are prefixed with "aiplatform.googleapis.com/"
134139
and are immutable.
140+
is_default (bool):
141+
If the TensorBoard instance is default or not. The default
142+
TensorBoard instance will be used by Experiment/ExperimentRun
143+
when needed if no TensorBoard instance is explicitly specified.
135144
project (str):
136145
Optional. Project to upload this model to. Overrides project set in
137146
aiplatform.init.
@@ -182,6 +191,7 @@ def create(
182191
display_name=display_name,
183192
description=description,
184193
labels=labels,
194+
is_default=is_default,
185195
encryption_spec=encryption_spec,
186196
)
187197

@@ -208,6 +218,7 @@ def update(
208218
display_name: Optional[str] = None,
209219
description: Optional[str] = None,
210220
labels: Optional[Dict[str, str]] = None,
221+
is_default: Optional[bool] = None,
211222
request_metadata: Optional[Sequence[Tuple[str, str]]] = (),
212223
encryption_spec_key_name: Optional[str] = None,
213224
) -> "Tensorboard":
@@ -238,6 +249,11 @@ def update(
238249
See https://goo.gl/xmQnxf for more information and examples of labels.
239250
System reserved label keys are prefixed with "aiplatform.googleapis.com/"
240251
and are immutable.
252+
is_default (bool):
253+
Optional. If the TensorBoard instance is default or not.
254+
The default TensorBoard instance will be used by
255+
Experiment/ExperimentRun when needed if no TensorBoard instance
256+
is explicitly specified.
241257
request_metadata (Sequence[Tuple[str, str]]):
242258
Optional. Strings which should be sent along with the request as metadata.
243259
encryption_spec_key_name (str):
@@ -268,6 +284,9 @@ def update(
268284
utils.validate_labels(labels)
269285
update_mask.append("labels")
270286

287+
if is_default is not None:
288+
update_mask.append("is_default")
289+
271290
encryption_spec = None
272291
if encryption_spec_key_name:
273292
encryption_spec = initializer.global_config.get_encryption_spec(
@@ -282,6 +301,7 @@ def update(
282301
display_name=display_name,
283302
description=description,
284303
labels=labels,
304+
is_default=is_default,
285305
encryption_spec=encryption_spec,
286306
)
287307

tests/unit/aiplatform/test_autologging.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@
6060
from google.cloud.aiplatform.compat.types import (
6161
tensorboard as gca_tensorboard,
6262
)
63+
from google.cloud.aiplatform.metadata import metadata
64+
6365

6466
import test_tensorboard
6567
import test_metadata
@@ -454,6 +456,15 @@ def update_context_mock():
454456
yield update_context_mock
455457

456458

459+
@pytest.fixture
460+
def get_or_create_default_tb_none_mock():
461+
with patch.object(
462+
metadata, "_get_or_create_default_tensorboard"
463+
) as get_or_create_default_tb_none_mock:
464+
get_or_create_default_tb_none_mock.return_value = None
465+
yield get_or_create_default_tb_none_mock
466+
467+
457468
_TEST_EXPERIMENT_RUN_CONTEXT_NAME = f"{_TEST_PARENT}/contexts/{_TEST_EXECUTION_ID}"
458469
_TEST_OTHER_EXPERIMENT_RUN_CONTEXT_NAME = (
459470
f"{_TEST_PARENT}/contexts/{_TEST_OTHER_EXECUTION_ID}"
@@ -702,6 +713,7 @@ def test_autologging_raises_if_experiment_not_set(
702713
"get_experiment_mock_without_tensorboard",
703714
"get_metadata_store_mock",
704715
"update_context_mock",
716+
"get_or_create_default_tb_none_mock",
705717
)
706718
def test_autologging_raises_if_experiment_tensorboard_not_set(
707719
self,

0 commit comments

Comments
 (0)








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: https://github.com/googleapis/python-aiplatform/commit/fa7d3a0e3cd5040eb4ab1c3b0df4e494dc84bac3

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy