🚀 DataChain Open-Source Release. Star us on !
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
$ 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)
where -q
stands for the quiet mode which disables the emoji output.
One can also save these requirements
to generate a requirements.txt
file
using the --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
lightgbm
library. 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
mlem build requirements -m model --req_type unix
.
The output of above can be used in conjunction like:
$ apt-get install $(mlem -q build requirements -m model --req_type unix)
The --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 mlem-f
# 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
and with
$ 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
it.
One can manually pass conda requirements to create conda based virtual environments using the conda builder as discussed here.