Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo, aprenderá a incluir bibliotecas personalizadas o bibliotecas desde un servidor espejo privado al registrar su modelo, de modo que pueda usarlas con las implementaciones de Mosaic AI Model Serving. Debe completar los pasos detallados en esta guía después de tener un modelo de ML entrenado listo para implementarse, pero antes de crear un punto de conexión de servicio de modelos de Azure Databricks.
El desarrollo de modelos a menudo requiere el uso de bibliotecas personalizadas de Python que contienen funciones para preprocesamiento o postprocesamiento, definiciones de modelos personalizadas y otras utilidades compartidas. Además, muchos equipos de seguridad empresarial fomentan el uso de espejos privados de PyPi, como Nexus o Artifactory, para reducir el riesgo de ataques de cadena de suministro. Azure Databricks ofrece compatibilidad nativa para la instalación de bibliotecas personalizadas y bibliotecas desde un reflejo privado en el área de trabajo de Azure Databricks.
Requisitos
- MLflow 1.29 o superior
- Restringa el acceso de red saliente desde los puntos de conexión de Model Serving mediante la configuración de directivas de red. Consulte Validación con servicio de modelos.
Opción 1: Uso de un repositorio de paquetes privado
Use la opción 1 si su organización usa un espejo de PyPI privado (como Nexus o Artifactory). Los administradores del área de trabajo pueden configurarlo como repositorio de paquetes predeterminado para el área de trabajo. Model Serving usa automáticamente esta configuración de nivel de área de trabajo al compilar el entorno de modelo.
Para configurar un repositorio de paquetes privados, consulte Configuración de repositorios de paquetes de Python predeterminados.
Una vez configurado, vaya a Servir el modelo.
Opción 2: Empaquetar bibliotecas personalizadas como archivos de rueda
Use la opción 2 si no se puede acceder a un reflejo privado de PyPI o si tiene bibliotecas personalizadas que no están disponibles en ningún repositorio de paquetes. Puede empaquetarlos como archivos de rueda de Python e incluirlos al registrar el modelo.
Paso 1: Cargar el archivo de dependencia
Databricks recomienda cargar el archivo de dependencia a los volúmenes del Catálogo de Unity. Como alternativa, puede cargarlo en el Sistema de archivos de Databricks (DBFS) mediante la interfaz de usuario de Azure Databricks.
Para asegurarse de que su biblioteca está disponible para su cuaderno de trabajo, debe instalarla mediante %pip. Mediante %pip instala la biblioteca en el cuaderno actual y descarga la dependencia en el clúster.
Paso 2: Registrar el modelo con una biblioteca personalizada
Después de instalar la biblioteca y cargar el archivo wheel de Python en los volúmenes de Unity Catalog o en DBFS, incluya el siguiente código en su script. En el campo extra_pip_requirements, especifique la ruta de acceso del archivo de dependencia.
mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements=["/volume/path/to/dependency.whl"])
Para DBFS, use lo siguiente:
mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements=["/dbfs/path/to/dependency.whl"])
Si tiene una biblioteca personalizada, debe especificar todas las bibliotecas personalizadas de Python asociadas al modelo al configurar el registro. Puede hacerlo con los parámetros extra_pip_requirements o conda_env en log_model().
Importante
Si está usando DBFS, asegúrese de incluir una barra diagonal, /, antes de su ruta dbfs cuando esté registrando extra_pip_requirements. Obtenga más información sobre las rutas de acceso de DBFS en Trabajar con archivos en Azure Databricks.
from mlflow.utils.environment import _mlflow_conda_env
mlflow.pyfunc.log_model(
name="model",
python_model=MyModel(),
extra_pip_requirements=["/volumes/path/to/dependency"],
)
Si la biblioteca personalizada se almacena en algún lugar distinto de un volumen o DBFS, puede especificar su ubicación mediante el parámetro code_paths y pasar "code/<wheel-file-name>.whl" en el parámetro extra_pip_requirements.
mlflow.pyfunc.log_model(
name="model",
python_model=MyModel(),
code_paths=["/path/to/dependency.whl"], # This will be logged as `code/dependency.whl`
extra_pip_requirements=["code/dependency.whl"],
)
Paso 3: Actualización del modelo de MLflow con archivos de rueda de Python
MLflow proporciona la utilidad add_libraries_to_model() para registrar el modelo con todas sus dependencias previamente empaquetadas como archivos de rueda de Python. Esto empaqueta las bibliotecas personalizadas junto con el modelo, además de todas las demás bibliotecas que se especifican como dependencias del modelo. Esto garantiza que las bibliotecas usadas por el modelo sean exactamente las accesibles desde el entorno de entrenamiento.
En el ejemplo siguiente, model_uri hace referencia al registro de modelos de Unity Catalog mediante la sintaxis models:/<uc-model>/<model-version>. Para hacer referencia al registro de modelos del espacio de trabajo (heredado), utiliza models:/<model-name>/<model-version>.
Cuando se usa el URI del registro del modelo, esta utilidad genera una nueva versión en el modelo registrado existente.
import mlflow.models.utils
mlflow.models.utils.add_libraries_to_model(<model-uri>)
Servir el modelo
Cuando hay disponible una nueva versión de modelo con los paquetes incluidos en el registro de modelos, puede agregar esta versión del modelo a un punto de conexión con el servicio de modelos.
Solución de problemas de instalación de paquetes
Si se produce un error en la implementación del modelo durante la fase de compilación, puede revisar los registros de compilación para identificar los problemas de instalación del paquete.
- Vaya a la página Servicio en el área de trabajo de Azure Databricks.
- Haga clic en el nombre del punto de conexión para abrir los detalles del punto de conexión.
- Haga clic en la pestaña Registros .
- Seleccione la versión con errores en el menú desplegable.
- Haga clic en Generar registros.
Revise los mensajes de error para identificar el problema.
Después de resolver el problema, cree una nueva implementación o actualice el punto de conexión para desencadenar una nueva compilación.
Solución de problemas del repositorio de paquetes privados
Si usa un repositorio de paquetes privados, los problemas comunes son los siguientes:
- Paquetes que faltan: el paquete no está disponible en el repositorio configurado. Agregue el paquete necesario al repositorio privado.
- Problemas de conexión: el servicio de modelos no puede acceder al repositorio de paquetes. Compruebe la conectividad de red y las reglas de firewall.
- Errores de autenticación: las credenciales configuradas para el repositorio no son válidas ni expiradas. Actualice las claves secretas en la configuración del área de trabajo.
Los cuadernos sin servidor usan el mismo repositorio de paquetes predeterminado configurado para el área de trabajo. Puede usar un cuaderno para probar la conectividad, la autenticación y la disponibilidad del paquete mediante la instalación de los requisitos del archivo del requirements.txt modelo antes de implementarlo en Model Serving.
import mlflow
import subprocess
import sys
# Step 1: Set your model details
catalog = "<your_catalog>"
schema = "<your_schema>"
model_name = "<your_model>"
version = <your_version>
# Step 2: Download the model's requirements.txt
full_model_name = f"{catalog}.{schema}.{model_name}"
requirements_uri = f"models:/{full_model_name}/{version}/requirements.txt"
print(f"Downloading artifacts from: {requirements_uri}")
local_path = mlflow.artifacts.download_artifacts(requirements_uri)
# Step 3: Print the requirements
with open(local_path, "r") as f:
print(f.read())
# Step 4: Install the requirements using the workspace's default package repository
print(f"Installing requirements from {local_path}...")
subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", local_path])
print("Installation complete!")