Manage External Services
How to manage external, longer-lived services
ZenML interacts with external systems (e.g. prediction services, monitoring systems, visualization services) via a so-called Service abstraction. The concrete implementation of this abstraction deals with functionality concerning the life-cycle management and tracking of an external service (e.g. process, container, Kubernetes deployment etc.).

Using Services in Steps

Services can be passed through steps like any other object, and used to interact with the external systems that they represent:
from zenml.steps import step
@step
def my_step(my_service: MyService) -> ...:
if not my_service.is_running:
my_service.start() # starts service
my_service.stop() # stops service

Examples

One concrete example of a Service is the built-in LocalDaemonService, a service represented by a local daemon process which extends the base Service class with functionality concerning the life-cycle management and tracking of local daemon processes. The LocalDaemonService is used by various integrations to connect your local machines to remote components such as a Metadata Store in KubeFlow.
Another example is the TensorboardService. It enables visualizing TensorBoard logs by managing a local TensorBoard server, which couples nicely with the TensorboardVisualizer to visualize Tensorboard logs:
from zenml.integrations.tensorflow.services.tensorboard_service import (
TensorboardService,
TensorboardServiceConfig
)
service = TensorboardService(
TensorboardServiceConfig(
logdir=logdir,
)
)
# start the service
service.start(timeout=20)
# stop the service
service.stop()
You can find full examples of using services here: