Utiliser des bibliothèques Python personnalisées avec Model Serving
Dans cet article, vous apprendrez à inclure des bibliothèques personnalisées ou des bibliothèques provenant d'un serveur miroir privé lorsque vous enregistrez votre modèle, afin de pouvoir les utiliser avec les déploiements de modèles Model Serving. Vous devez effectuer les étapes détaillées dans ce guide après avoir préparé un modèle de ML entraîné pour le déploiement, mais avant de créer un Endpoint Model Serving Databricks.
Le développement de modèles nécessite souvent l'utilisation de bibliothèques Python personnalisées qui contiennent des fonctions de pré- ou post-traitement, des définitions de modèles personnalisées et d'autres utilitaires partagés. De plus, de nombreuses équipes de sécurité d'entreprise encouragent l'utilisation de miroirs PyPi privés, tels que Nexus ou Artifactory, afin de réduire le risque d'attaques de la chaîne d'approvisionnement. Databricks offre une prise en charge native pour l'installation de bibliothèques personnalisées et de bibliothèques provenant d'un miroir privé dans le Workspace Databricks.
Exigences
-
MLflow 1.29 ou supérieur
-
Restreindre l'accès réseau sortant des Endpoint Model Serving en configurant des politiques réseau. Consultez Valider avec le service de modèle.
Option 1 : Utiliser un repository de package privé
Utilisez l'option 1 si votre organisation utilise un miroir PyPI privé (tel que Nexus ou Artifactory). Les administrateurs de Workspace peuvent le configurer comme repository de package par default pour le Workspace. Model Serving utilise automatiquement cette configuration au niveau du Workspace lors de la création de votre environnement de modèle.
Pour configurer un repository de packages privé, consultez Configurer les repositories de packages Python par défaut.
Une fois configuré, passez à Servir votre modèle.
Option 2 : Packager des bibliothèques personnalisées sous forme de fichiers wheel
Utilisez l'Option 2 si un miroir PyPI privé n'est pas accessible, ou si vous avez des bibliothèques personnalisées qui ne sont disponibles dans aucun repository de packages. Vous pouvez les empaqueter sous forme de fichiers Python wheel et les inclure lors de l'enregistrement de votre modèle.
Étape 1 : Upload de votre fichier de dépendance
Databricks vous recommande de upload votre fichier de dépendance vers les volumes Unity Catalog. Alternativement, vous pouvez l'upload dans le Databricks File System (DBFS) à l'aide de l'interface utilisateur Databricks.
Pour s'assurer que votre bibliothèque est disponible pour votre Notebook, vous devez l'installer en utilisant %pip. L'utilisation de %pip installe la bibliothèque dans le Notebook actuel et download la dépendance sur le cluster.
Étape 2 : Enregistrez le modèle avec une bibliothèque personnalisée
Après avoir installé la bibliothèque et upload le fichier Python wheel vers des volumes Unity Catalog ou DBFS, incluez le code suivant dans votre script. Dans le extra_pip_requirements, spécifiez le chemin d'accès à votre fichier de dépendance.
mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements=["/volumes/path/to/dependency.whl"])
Si vous avez une bibliothèque personnalisée, vous devez spécifier toutes les bibliothèques Python personnalisées associées à votre modèle lorsque vous configurez la journalisation. Vous pouvez le faire avec les paramètres extra_pip_requirements ou conda_env dans log_model().
from mlflow.utils.environment import _mlflow_conda_env
mlflow.pyfunc.log_model(
name="model",
python_model=MyModel(),
extra_pip_requirements=["/volumes/path/to/dependency.whl"],
)
Si votre bibliothèque personnalisée est stockée ailleurs que dans un volume ou DBFS, vous pouvez spécifier son emplacement à l'aide du paramètre code_paths, et passer "code/<wheel-file-name>.whl" dans le paramètre 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"],
)
Étape 3 : Mettre à jour le modèle MLflow avec les fichiers Python wheel
MLflow fournit l’utilitaire add_libraries_to_model() pour journaliser votre modèle avec toutes ses dépendances pré-empaquetées sous forme de fichiers Python wheel. Ceci empaquette vos bibliothèques personnalisées avec le modèle en plus de *toutes* les autres bibliothèques spécifiées comme dépendances de votre modèle. Cela garantit que les bibliothèques utilisées par votre modèle sont exactement celles accessibles depuis votre environnement d’entraînement.
Dans l’exemple suivant, model_uri référence le registre de modèles Unity Catalog à l’aide de la syntaxe models:/<uc-model>/<model-version>. Pour référencer le registre des modèles de Workspace (hérité), utilisez models:/<model-name>/<model-version>.
Lorsque vous utilisez l'URI du registre de modèles, cet utilitaire génère une nouvelle version sous votre modèle enregistré existant.
import mlflow.models.utils
mlflow.models.utils.add_libraries_to_model(<model-uri>)
Déployer votre modèle
Lorsqu'une nouvelle version du modèle avec les packages inclus est disponible dans le registre de modèles, vous pouvez ajouter cette version du modèle à un endpoint avec Model Serving.
Dépanner l'installation de package
Si le déploiement de votre modèle échoue pendant la phase de build, vous pouvez consulter les Logs de build pour identifier les problèmes d'installation de package.
- Accédez à la page Serving de votre Workspace Databricks.
- Cliquez sur le nom de votre endpoint pour ouvrir les détails de l'endpoint.
- Cliquez sur l'onglet Logs .
- Sélectionnez la version échouée dans le menu déroulant.
- Cliquez sur Logs de build .
Examinez les messages d'erreur pour identifier le problème.
Après avoir résolu le problème, créez un nouveau déploiement ou mettez à jour votre endpoint pour Trigger une nouvelle build.
Dépannage du repository de packages privé
Si vous utilisez un repository de package privé, les problèmes courants incluent :
- packages manquants : le package n'est pas disponible dans votre repository configuré. Ajoutez le package requis à votre repository privé.
- Problèmes de connexion : Model Serving ne peut pas atteindre votre repository de package. Vérifiez la connectivité réseau et les règles de pare-feu.
- Échecs d'authentification : Les identifiants configurés pour votre repository ne sont pas valides ou ont expiré. Mettez à jour les secrets dans la configuration de votre Workspace.
Les Notebooks Serverless utilisent le même repository de packages default configuré pour votre Workspace. Vous pouvez utiliser un Notebook pour tester la connectivité, l’authentification et la disponibilité des packages en installant les exigences à partir du fichier requirements.txt de votre modèle avant de le déployer dans 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!")