Исключить зависимость частного пакета при регистрации модели с помощью MLflow в DatabricksPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Исключить зависимость частного пакета при регистрации модели с помощью MLflow в Databricks

Сообщение Anonymous »

Я развертываю рабочий процесс Databricks с использованием пакетов активов Databricks (DAB). У меня есть индивидуальный пакет (

Код: Выделить всё

mypackage
), установленный в моем кластере, который включает в себя несколько команд CLI для разных рабочих процессов. Этот пакет содержит все зависимости, необходимые для моих рабочих процессов. Обратите внимание, что mypackage является частным репозиторием PyPI и недоступен извне.
Когда я использую 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
    используется только во время обучения и оркестрации рабочего процесса, но не требуется для вывода модели.
Будем очень признательны за любые рекомендации о том, как правильно исключить mypackage из зависимостей модели при входе в систему с помощью MLflow.
Что я пробовал
Что я пробовал:
В качестве обходного пути я попытался взломать, где Я переопределяю классы своих моделей в модуле __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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»