Version and deploy your models following GitOps principles
Project description
MLEM helps you with machine learning model deployment. It saves ML models in a standard format that can be used in a variety of downstream deployment scenarios such as real-time serving through a REST API or batch processing.
- Run your model anywhere you want: package it as a Python package, a Docker Image or deploy it to Heroku (SageMaker, Kubernetes and more platforms are coming). Switch between formats and deployment platforms with a single command thanks to unified abstraction.
- Simple YAML file to save model metadata: automatically package Python env requirements and input data specifications into a ready-to-deploy format. Use the same human-readable format for any ML framework.
- Stick to your training workflow: MLEM doesn't ask you to rewrite your training code. To start using packaging or deployment machinery, add just two lines to your python script: one to import the library and one to save the model.
- Developer-first experience: use CLI when you feel like DevOps and API when you feel like a developer.
Why MLEM?
- MLEM automatically detects ML framework, Python requirements, model methods and input/output data specifications, saving your time and preventing manual errors.
- MLEM is designed for Git-centered ML models development. Use GitOps with Git as the single source of truth. Enable GitFlow and other software engineering best practices.
- MLEM is made with Unix philosophy in mind - one tool solves one problem very well. Plug MLEM into your toolset, easily integrating it with other tools like DVC.
Usage
This a quick walkthrough showcasing deployment and export functionality of MLEM.
Please read Get Started guide for a full version.
Installation
Install MLEM with pip:
$ pip install mlem
To install the pre-release version, run:
$ pip install git+https://github.com/iterative/mlem
Saving the model
# train.py
from mlem.api import save
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
def main():
data, y = load_iris(return_X_y=True, as_frame=True)
rf = RandomForestClassifier(
n_jobs=2,
random_state=42,
)
rf.fit(data, y)
save(
rf,
"rf",
sample_data=data,
labels=["random-forest", "classifier"],
description="Random Forest Classifier",
)
if __name__ == "__main__":
main()
Check out what we have:
$ ls
rf
rf.mlem
$ cat rf.mlem
> Click to show `cat` output
artifacts:
data:
hash: ea4f1bf769414fdacc2075ef9de73be5
size: 163651
uri: rf
description: Random Forest Classifier
labels:
- random-forest
- classifier
model_type:
methods:
predict:
args:
- name: data
type_:
columns:
- sepal length (cm)
- sepal width (cm)
- petal length (cm)
- petal width (cm)
dtypes:
- float64
- float64
- float64
- float64
index_cols: []
type: dataframe
name: predict
returns:
dtype: int64
shape:
- null
type: ndarray
predict_proba:
args:
- name: data
type_:
columns:
- sepal length (cm)
- sepal width (cm)
- petal length (cm)
- petal width (cm)
dtypes:
- float64
- float64
- float64
- float64
index_cols: []
type: dataframe
name: predict_proba
returns:
dtype: float64
shape:
- null
- 3
type: ndarray
sklearn_predict:
args:
- name: X
type_:
columns:
- sepal length (cm)
- sepal width (cm)
- petal length (cm)
- petal width (cm)
dtypes:
- float64
- float64
- float64
- float64
index_cols: []
type: dataframe
name: predict
returns:
dtype: int64
shape:
- null
type: ndarray
sklearn_predict_proba:
args:
- name: X
type_:
columns:
- sepal length (cm)
- sepal width (cm)
- petal length (cm)
- petal width (cm)
dtypes:
- float64
- float64
- float64
- float64
index_cols: []
type: dataframe
name: predict_proba
returns:
dtype: float64
shape:
- null
- 3
type: ndarray
type: sklearn
object_type: model
requirements:
- module: sklearn
version: 1.0.2
- module: pandas
version: 1.4.1
- module: numpy
version: 1.22.3
Deploying the model
If you want to follow this Quick Start, you'll need to sign up on https://heroku.com,
create an API_KEY and populate HEROKU_API_KEY
env var.
First, create an environment to deploy your model:
$ mlem declare env heroku staging
💾 Saving env to staging.mlem
Now we can deploy the model with mlem deploy
(you need to use different app_name
, since it's going to be published on https://herokuapp.com):
$ mlem deployment run mydeploy -m rf -t staging -c app_name=mlem-quick-start
⏳️ Loading deployment from .mlem/deployment/myservice.mlem
🔗 Loading link to .mlem/env/staging.mlem
🔗 Loading link to .mlem/model/rf.mlem
💾 Updating deployment at .mlem/deployment/myservice.mlem
🏛 Creating Heroku App example-mlem-get-started
💾 Updating deployment at .mlem/deployment/myservice.mlem
🛠 Creating docker image for heroku
💼 Adding model files...
🛠 Generating dockerfile...
💼 Adding sources...
💼 Generating requirements file...
🛠 Building docker image registry.heroku.com/example-mlem-get-started/web...
✅ Built docker image registry.heroku.com/example-mlem-get-started/web
🔼 Pushed image registry.heroku.com/example-mlem-get-started/web to remote registry at host registry.heroku.com
💾 Updating deployment at .mlem/deployment/myservice.mlem
🛠 Releasing app my-mlem-service formation
💾 Updating deployment at .mlem/deployment/myservice.mlem
✅ Service example-mlem-get-started is up. You can check it out at https://mlem-quick-start.herokuapp.com/
Exporting the model
You could easily export the model to a different format using mlem build
:
$ mlem build rf docker -c server.type=fastapi -c image.name=sklearn-model
⏳️ Loading model from rf.mlem
🛠 Building MLEM wheel file...
💼 Adding model files...
🛠 Generating dockerfile...
💼 Adding sources...
💼 Generating requirements file...
🛠 Building docker image sklearn-model:latest...
✅ Built docker image sklearn-model:latest
Contributing
Contributions are welcome! Please see our Contributing Guide for more details. Thanks to all our contributors!
Copyright
This project is distributed under the Apache license version 2.0 (see the LICENSE file in the project root).
By submitting a pull request to this project, you agree to license your contribution under the Apache license version 2.0 to this project.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file mlem-0.2.2.tar.gz
.
File metadata
- Download URL: mlem-0.2.2.tar.gz
- Upload date:
- Size: 168.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2a7834a247c19e3735c03714ec4cadc6f2df411f4efddf627d1f60eb2d0bc407 |
|
MD5 | 41b9a19c3e228b03801fb73d646c8f00 |
|
BLAKE2b-256 | 74aed928d507b51933902c042bc32558b6fce9165152cde5e99642dcccd6603b |
File details
Details for the file mlem-0.2.2-py3-none-any.whl
.
File metadata
- Download URL: mlem-0.2.2-py3-none-any.whl
- Upload date:
- Size: 137.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ea6a367bf29bccef87e6ea59b18f9ea17072f83fda5bb87edb213f6fbec3addd |
|
MD5 | 7bc9838bee7f354795ae990230a4b1c8 |
|
BLAKE2b-256 | 4d800cd440a5a9cc0a49af99bdc65118cbfe73b5dbdec899a424fdded4feb598 |