Код: Выделить всё
mypackage
Когда я использую mlflow.pyfunc.log_model() для регистрации моей модели, MLflow автоматически обнаруживает и включает mypackage.submodule в качестве зависимости для модели. Это вызывает проблемы, потому что:
- является частным и не может быть установлен из внешней среды.
Код: Выделить всё
mypackage
- Модель на самом деле не нуждается в mypackage или его зависимостях для вывода — ей нужны только стандартные библиотеки, такие как PyTorch и Pandas.
Код: Выделить всё
import mlflow.pyfunc
from mypackage.submodule import MyModelClass
model = MyModelClass()
mlflow.pyfunc.log_model(
python_model=model,
artifact_path="my_model",
# Other parameters
)
- *Как я могу зарегистрировать свою модель с помощью mlflow .pyfunc.log_model() без включения mypackage в качестве зависимости?*
- Есть ли Собственный MLflow способ предотвратить включение определенных пакетов в модель. среду?
- Существуют ли передовые методы обработки ситуаций, когда среда обучения включает пакеты, которые не должны быть зависимыми сериализованной модели?
- Я использую Databricks и Databricks Asset Bundles для развертывание.
- В модели используются стандартные библиотеки (например, PyTorch, Pandas), необходимые для вывода.
- используется только во время обучения и оркестрации рабочего процесса, но не требуется для вывода модели.
Код: Выделить всё
mypackage
Что я пробовал
Что я пробовал:
В качестве обходного пути я попытался взломать, где Я переопределяю классы своих моделей в модуле __main__ и сериализую их с помощью CloudPickle, по сути удаляя ссылки на mypackage. Вот фрагмент того, что я сделал:
Код: Выделить всё
import inspect
import cloudpickle
# Extract source code of the model classes
model_source = inspect.getsource(MyModelClass)
# Create a main namespace and redefine classes in __main__
main_namespace = {
'__name__': '__main__',
# Include other necessary imports
}
exec(model_source, main_namespace)
# Access the redefined class
MyModelClassMain = main_namespace['MyModelClass']
model = MyModelClassMain()
# Serialize the model
with open("model.pkl", "wb") as f:
cloudpickle.dump(model, f)
# Log the model without including 'mypackage'
mlflow.pyfunc.log_model(
python_model=model,
artifact_path="my_model",
artifacts={"model.pkl": "model.pkl"},
pip_requirements=["torch", "pandas", "cloudpickle"],
# Other parameters
)
Подробнее здесь: https://stackoverflow.com/questions/792 ... databricks