Repo & Config
What is the .zen folder and the global config?
This is an older version of the ZenML documentation. To check the latest version please visit https://docs.zenml.io
The Global Config and the Repository
ZenML has two main locations where it stores information on the machine where it is used. These are the Global Config and the Repository. The latter is also referred to as the .zen folder.
The Global Config
Most of the information stored by ZenML on a machine, such as the global settings, the configured ZenML Profiles and even the configured Stacks and Stack Components, is kept in a folder commonly referred to as the ZenML Global Config Directory or the ZenML Config Path. The location of this folder depends on the operating system type and the current system user, but is usually located in the following locations:
Linux:
~/.config/zenml
Mac:
~/Library/Application Support/ZenML
Windows:
C:\Users\%USERNAME%\AppData\Local\ZenML
The default location may be overridden by setting the ZENML_CONFIG_PATH
environment variable to a custom value. The current location of the Global Config Directory used on a system can be retrieved by running the following command:
Manually altering or deleting the files and folders stored under the ZenML Global Config Directory is not recommended, as this can break the internal consistency of the ZenML configuration. As an alternative, ZenML provides CLI commands that can be used to manage the information stored there:
zenml analytics
- manage the analytics settingszenml profile
- manage configuration Profileszenml stack
- manage Stackszenml <stack-component>
- manage Stack Componentszenml clean
- to be used only in case of emergency, to bring the ZenML configuration back to its default factory state
The first time that ZenML is run on a machine, it creates the Global Config Directory and initializes the default configuration in it, along with a default Profile and Stack:
The following is an example of the layout of the Global Config Directory immediately after initialization:
As shown above, the Global Config Directory stores the following information:
The
global.yaml
file stores the global configuration settings: the unique ZenML user ID, the active Profile, the analytics related options and a list of all configured Profiles, along with their configuration attributes, such as the active Stack set for each Profile. This is an example of theglobal.yaml
file contents immediately after initialization:The
local_stores
directory is where some "local" flavors of Stack Components, such as thelocal
Artifact Store, thesqlite
Metadata Store or thelocal
Secrets Manager persist data locally. Every local Stack Component will have its own subdirectory here named after the Stack Component's unique UUID. One notable example is thelocal
Artifact Store flavor that, when part of the active Stack, stores all the artifacts generated by Pipeline runs in the designated local directory.The
profiles
directory is used as a default root path location where ZenML stores information about the Stacks, Stack Components, custom Stack Component flavors etc. that are configured under each Profile. Every Profile will have its own subdirectory here, unless the Profile is explicitly created with a custom configuration path. (See thezenml profile
command and the section on ZenML Profiles for more information about Profiles.)
In addition to the above, you may also find the following files and folders under the Global Config Directory, depending on what you do with ZenML:
zenml_examples
- used as a local cache by thezenml example
command, where the pulled ZenML examples are stored.kubeflow
- this is where the Kubeflow orchestrators that are part of a Stack store some of their configuration and logs.
The ZenML Repository
A ZenML Repository designates a folder that contains a complete set of Python scripts and modules as well as any associated files that are needed to run ZenML pipelines. Any such folder can be registered as a ZenML Repository root by running the zenml init
command from that folder or passing its location as an argument to that same command, e.g.:
The Repository designation plays a double role in ZenML:
it is used by ZenML to identify which files it must copy into the environments it builds that are used to execute pipeline steps remotely, such as container images.
it stores local configuration parameters that can be set independently of the global configuration: the Repository active Profile and active Stack. These settings are in effect when ZenML code is executed while the current working directory is the Repository root or one of its sub-folders. For more information on setting the active Profile and Stack local to a Repository, please visit the ZenML Profiles section.
A ZenML Repository is easily identifiable by the presence of a (hidden) .zen
directory located in the root folder. The .zen
directory contains a single config.yaml
file that stores the local settings:
It is recommended to use the zenml init
command to initialize a ZenML Repository in the same location of your custom Python source tree where you would normally point PYTHONPATH, especially if your Python code relies on a hierarchy of modules spread out across multiple sub-folders.
ZenML CLI commands and ZenML code will display a warning if they are not running in the context of a ZenML Repository, e.g.:
To remove the Repository designation from a folder, simply delete the .zen
subdirectory in that folder.
The GlobalConfiguration and Repository Singletons
ZenML provides two singleton objects that can be used to access and manage the information stored in the Global Config Directory and the current Repository.
To access the global configuration settings and manage Profiles, you can use the zenml.config.global_config.GlobalConfiguration
singleton, while the zenml.repository.Repository
singleton acts as the central point of management for Stacks, Stack Components, Stack Component flavors and other associated ZenML concepts. The following are examples of how to use these singletons to perform various operations:
to retrieve the global configuration, active Profile and active Stack:
to create a new Profile and set it as the active one:
access the active Stack
register and set a new Stack
To explore all possible operations that can be performed via the GlobalConfiguration
and Repository
singletons, please consult the API docs sections on GlobalConfiguration and Repository.
Last updated