What are the usage statistics ZenML collects
In order to help us better understand how the community uses ZenML, the pip package reports anonymized usage statistics. You can always opt out by using the CLI command:
zenml config analytics opt-out
Currently, opting in and out of analytics is a global setting applicable to all ZenML repositories within your system.
In addition to the community at large, ZenML is created and maintained by a startup based in Munich, Germany called ZenML GmbH. We're a team of techies that love MLOps and want to build tools that fellow developers would love to use in their daily work. This is us, if you want to put faces to the names!
However, in order to improve ZenML and understand how it is being used, we need to use analytics to have an overview of how it is used 'in the wild'. This not only helps us find bugs but also helps us prioritize features and commands that might be useful in future releases. If we did not have this information, all we really get is pip download statistics and chatting with people directly, which while being valuable, is not enough to seriously better the tool as a whole.
Currently, ZenML utilizes two different, yet similar, strategies to track the analytics.
In the first version, it uses
Segmentas the data aggregation library for all our analytics. The entire code is entirely visible and can be seen at
analytics_utils.py. The main function is the
track(...)function that triggers a Segment Analytics Track event, which runs on a separate background thread from the main thread.
In the second version, the creation of the events and their corresponding metadata follows a similar process. However, before getting tracked by
Segment, the events first go through a central ZenML analytics server. This added layer allows us to put various countermeasures to incidents such as getting spammed events and enables us to have a more optimized tracking process.
In both versions, none of the data sent can identify you individually but allows us to understand how ZenML is being used holistically.
ZenML triggers an asynchronous Segment Track Event on the following events, which is also viewable in the
analytics_utils.pyfile in the GitHub repository.
RUN_PIPELINE = "Pipeline run"
GET_PIPELINES = "Pipelines fetched"
GET_PIPELINE = "Pipeline fetched"
INITIALIZE_REPO = "ZenML initialized"
INITIALIZED_PROFILE = "Profile initialized"
REGISTERED_STACK_COMPONENT = "Stack component registered"
UPDATED_STACK_COMPONENT = "Stack component updated"
COPIED_STACK_COMPONENT = "Stack component copied"
REGISTERED_STACK = "Stack registered"
REGISTERED_DEFAULT_STACK = "Default stack registered"
SET_STACK = "Stack set"
UPDATED_STACK = "Stack updated"
COPIED_STACK = "Stack copied"
IMPORT_STACK = "Stack imported"
EXPORT_STACK = "Stack exported"
# Model Deployment
MODEL_DEPLOYED = "Model deployed"
# Analytics opt in and out
OPT_IN_ANALYTICS = "Analytics opt-in"
OPT_OUT_ANALYTICS = "Analytics opt-out"
RUN_ZENML_GO = "ZenML go"
RUN_EXAMPLE = "Example run"
PULL_EXAMPLE = "Example pull"
INSTALL_INTEGRATION = "Integration installed"
CREATED_USER = "User created"
CREATED_DEFAULT_USER = "Default user created"
DELETED_USER = "User deleted"
CREATED_TEAM = "Team created"
DELETED_TEAM = "Team deleted"
CREATED_WORKSPACE = "Workspace created"
DELETED_WORKSPACE = "Workspace deleted"
CREATED_ROLE = "Role created"
DELETED_ROLE = "Role deleted"
CREATED_FLAVOR = "Flavor created"
# Test event
EVENT_TEST = "Test event"
# Stack recipes
PULL_STACK_RECIPE = "Stack recipes pulled"
RUN_STACK_RECIPE = "Stack recipe created"
DESTROY_STACK_RECIPE = "Stack recipe destroyed"
No, we won't. Our sole purpose of contacting you will be to ask for feedback (e.g. in the shape of a user interview). These interviews help the core team understand usage better, and prioritize feature requests.
If you have any concerns about data privacy and usage of personal information, please contact us, and we will try to alleviate any concerns as soon as possible.