我们在 AWS 基础设施上使用 Databricks,在mlflow
。
我们将项目内导入写为from src.(module location) import (objects)
.
按照网上的例子,我期望当我使用时mlflow.pyfunc.log_model(..., code_path=['PROJECT_ROOT/src'], ...)
,这会将整个代码树添加到模型的运行环境中,从而允许我们保持导入不变。
记录模型时,我得到一长串[Errno 95] Operation not supported
,我们仓库中的每个笔记本都有一个。这会阻止我们将模型注册到 mlflow。
我们使用了几种临时解决方案和变通方法,从强迫自己使用一个文件中的所有代码,到仅使用同一目录中的文件(code_path=['./filename.py']
,添加特定的库(并相应地更改导入路径)等。
然而,这些都不是最佳的。因此,我们要么重复代码(杀死 DRY),要么在包装器中放入一些导入(即那些无法在我们的工作环境中运行的导入,因为它与模型部署时遇到的环境不同)等。
我们还没有尝试将所有笔记本(我们认为这会导致[Errno 95] Operation not supported
)在一个单独的文件夹中。这将对我们当前的情况和流程造成极大的破坏,我们希望尽可能避免这种情况。
请指教
当我使用 Databricks 中的自定义模型逻辑时,我也遇到了类似的困难。src
目录(类似结构cookiecutter 数据科学 https://github.com/drivendata/cookiecutter-data-science)。解决方案是记录整个src
使用相对路径的目录。
因此,如果您有以下项目结构。
.
├── notebooks
│ └── train.py
└── src
├── __init__.py
└── model.py
Your train.py
应该看起来像这样。注意 AddN 来自MLflow 文档 https://mlflow.org/docs/latest/models.html#example-creating-a-custom-add-n-model.
import mlflow
from src.model import AddN
model = AddN(n=5)
mlflow.pyfunc.log_model(
registered_model_name="add_n_model",
artifact_path="add_n_model",
python_model=model,
code_path=["../src"],
)
这将复制所有代码src/
并将其记录在 MLflow 工件中,允许模型加载所有依赖项。
如果您没有使用notebooks/
目录,您将设置code_path=["src"]
。如果您使用像这样的子目录notebooks/train/train.py
,你将设置code_path=["../../src"]
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)