When you have a model saved via MLEM and want to use it, the first step is to make sure you have the right dependencies and packages. Given a model, MLEM can get the list of requirements of different types (including Python, Unix, as well as some others).
This complements the checkenv command.
MLEM can export the installable requirements needed for a model using the
mlem build command, where
model is the path to model saved via
$ mlem build requirements -m model ⏳️ Loading model from sk-model.mlem scikit-learn==1.0.2 pandas==1.4.2 numpy==1.22.3
Now, it can be used to install the requirements like this:
$ pip install $(mlem -q build requirements -m model)
-q stands for the quiet mode which disables the emoji output.
One can also save these
requirements to generate a
--target option which allows us to pass a path of the file i.e.
$ mlem build requirements -m model --target requirements.txt ⏳️ Loading model from model.mlem 💼 Materializing requirements... ✅ Materialized to requirements.txt!
and now the contents of
requirements.txt can be checked using
$ cat requirements.txt scikit-learn==1.0.2 pandas==1.4.2 numpy==1.22.3
This is different from creating a python package for the model.
Some python libraries require unix based packages underneath to function
correctly. An example is the
libgomp1 package required by the
MLEM can figure out
unix based packages for some
supported libraries and these can be used as below:
To get a list of
unix based requirements, use the
--req_type option such as
The output of above can be used in conjunction like:
$ apt-get install $(mlem -q build requirements -m model --req_type unix)
--target option is not supported for unix based requirements.
Custom requirements represent local python code such as files, zipped sources,
etc. Custom requirements always need the
--target option since they are
materialized at the target.
For instance, a function can be saved via
MLEM at a location
# func.py def f(txt): print(txt)
# save.py from mlem.api import save from func import f saved = save(f, 'mlem-f')
and the following command could be used to materialize this custom requirement at a target:
$ mlem build requirements -m mlem-f --req_type custom --target ./dir ⏳️ Loading model from mlem-f.mlem 💼 Materializing requirements... ✅ Materialized to ./dir!
The contents of
dir can be checked using
$ ls dir func.py
$ cat dir/func.py def f(txt): print(txt)
Conda based requirements specify conda packages and cannot be determined
automatically as of now. In any case, the
--target option is not supported for
One can manually pass conda requirements to create conda based virtual environments using the conda builder as discussed here.