# Project structure
machinable projects are build around two corresponding concepts: The
Component that contains code that you would like to execute; and the
machinable.yaml configuration file that specifies the default configuration associated with the component.
The following sections will discuss these fundamentals in more detail. For now, let's focus on the file structure of the project. To create a machinable project, it's sufficient to create a folder or repository that contains a
my-example-project ├── ... └── machinable.yaml
Think of it as a README that provides basic definitions of the project's components and their respective default configuration.
# machinable.yaml components: - optimization: data: sinus components:models: - linear_regression: - gradient_descent: learning_rate: 0.01
From the example definition above you can guess that this project implements a linear regression and some gradient based approach to solve some optimization problem. The file exposes all crucial parameters like the dataset or a model's learning rate. The definition also implicitly describes the file organisation of the component source code:
my-example-project ├── optimization.py ├── models │ ├── linear_regression.py │ └── gradient_descent.py └── machinable.yaml
While the directory structure and file names may differ from project to project, the
machinable.yaml acts as global entry point to any machinable project. In particular, it makes it easy inspect all relevant hyperparameters and the code organisation in one place.