Aller au contenu principal

Exécuter les projets MLflow sur Databricks

remarque

MLflow Projects n'est plus pris en charge.

Cette documentation a été retirée et pourrait ne pas être mise à jour. Les produits, services ou technologies mentionnés dans ce contenu ne sont plus pris en charge.

Un Projet MLflow est un format d'empaquetage du code de Data Science de manière réutilisable et reproductible. Le composant MLflow Projects inclut une API et des outils en ligne de commande pour l'exécution de projets, qui s'intègrent également au composant Tracking pour enregistrer automatiquement les paramètres et le commit git de votre code source à des fins de reproductibilité.

Cet article décrit le format d'un projet MLflow et comment exécuter un projet MLflow à distance sur des clusters Databricks à l'aide de la CLI MLflow, ce qui facilite la mise à l'échelle verticale de votre code Data Science.

L'exécution de projets MLflow n'est pas prise en charge sur Databricks Free Edition.

Format de projet MLflow

Tout répertoire local ou repository Git peut être traité comme un projet MLflow. Les conventions suivantes définissent un projet :

  • Le nom du projet est le nom du répertoire.
  • L'environnement logiciel est spécifié dans python_env.yaml, s'il est présent. Si aucun fichier python_env.yaml n’est présent, MLflow utilise un environnement virtualenv contenant uniquement Python (plus précisément, la dernière version de Python disponible pour virtualenv) lors de l’exécution du projet.
  • Tout fichier .py ou .sh du projet peut être un point d'entrée, sans paramètres déclarés explicitement. Lorsque vous exécutez une telle commande avec un ensemble de paramètres, MLflow transmet chaque paramètre sur la ligne de commande en utilisant la syntaxe --key <value>.

Vous spécifiez plus d'options en ajoutant un fichier MLproject, qui est un fichier texte au format YAML. Un exemple de fichier MLproject ressemble à ceci :

YAML
name: My Project

python_env: python_env.yaml

entry_points:
main:
parameters:
data_file: path
regularization: { type: float, default: 0.1 }
command: 'python train.py -r {regularization} {data_file}'
validate:
parameters:
data_file: path
command: 'python validate.py {data_file}'

Pour Databricks Runtime 13.0 ML et versions supérieures, les Projets MLflow ne peuvent pas s'exécuter correctement au sein d'un cluster de type Job Databricks. Pour migrer les projets MLflow existants vers Databricks Runtime 13.0 ML et versions ultérieures, consultez Format de projet de job Spark MLflow Databricks.

Format de projet de job MLflow Databricks Spark

Le projet de job MLflow Databricks Spark est un type de projet MLflow introduit dans MLflow 2.14. Ce type de projet prend en charge l'exécution de projets MLflow à partir d'un cluster de tâches Spark et ne peut être exécuté qu'à l'aide du backend databricks.

Les projets de jobs Databricks Spark doivent définir databricks_spark_job.python_file ou entry_points. Le fait de ne spécifier ni l'un ni l'autre ou de spécifier les deux paramètres entraîne une exception.

Voici un exemple de fichier MLproject qui utilise le paramètre databricks_spark_job.python_file. Ce paramètre implique l'utilisation d'un chemin d'accès codé en dur pour le fichier d'exécution Python et ses arguments.

YAML
name: My Databricks Spark job project 1

databricks_spark_job:
python_file: 'train.py' # the file which is the entry point file to execute
parameters: ['param1', 'param2'] # a list of parameter strings
python_libraries: # dependencies required by this project
- mlflow==2.4.1 # MLflow dependency is required
- scikit-learn

Voici un exemple de fichier MLproject qui utilise le paramètre entry_points :

YAML
name: My Databricks Spark job project 2

databricks_spark_job:
python_libraries: # dependencies to be installed as databricks cluster libraries
- mlflow==2.4.1
- scikit-learn

entry_points:
main:
parameters:
model_name: { type: string, default: model }
script_name: { type: string, default: train.py }
command: 'python {script_name} {model_name}'

Le paramètre entry_points vous permet de transmettre des paramètres qui utilisent des paramètres de ligne de commande, tels que :

mlflow run . -b databricks --backend-config cluster-spec.json \
-P script_name=train.py -P model_name=model123 \
--experiment-id <experiment-id>

Les limitations suivantes s'appliquent aux projets de job Databricks Spark :

  • Ce type de projet ne prend pas en charge la spécification des sections suivantes dans le fichier MLproject : docker_env, python_env ou conda_env.
  • Les dépendances de votre projet doivent être spécifiées dans le champ python_libraries de la section databricks_spark_job. Les versions de Python ne peuvent pas être personnalisées avec ce type de projet.
  • L'environnement d'exécution doit utiliser l'environnement d'exécution principal du driver Spark pour s'exécuter dans les clusters de jobs qui utilisent Databricks Runtime 13.0 ou version supérieure.
    • De même, toutes les dépendances Python qui sont définies comme requises pour le projet doivent être installées en tant que dépendances de clusters Databricks. Ce comportement est différent des comportements d'exécution de projet précédents où les bibliothèques devaient être installées dans un environnement distinct.

Exécuter un projet MLflow

Pour exécuter un projet MLflow sur un cluster Databricks dans le Workspace default, utilisez la commande :

Bash
mlflow run <uri> -b databricks --backend-config <json-new-cluster-spec>

<uri> est une URI de repository Git ou un dossier contenant un projet MLflow et <json-new-cluster-spec> est un document JSON contenant une structure new_cluster. L'URI Git doit être de la forme : https://github.com/<repo>#<project-folder>.

Une spécification de cluster exemple est :

JSON
{
"spark_version": "7.3.x-scala2.12",
"num_workers": 1,
"node_type_id": "i3.xlarge"
}

Si vous devez installer des bibliothèques sur le Worker, utilisez le format « spécification de cluster ». Veuillez noter que les fichiers Python wheel doivent être importés vers DBFS et spécifiés comme dépendances pypi. Par exemple :

JSON
{
"new_cluster": {
"spark_version": "7.3.x-scala2.12",
"num_workers": 1,
"node_type_id": "i3.xlarge"
},
"libraries": [
{
"pypi": {
"package": "tensorflow"
}
},
{
"pypi": {
"package": "/dbfs/path_to_my_lib.whl"
}
}
]
}
important
  • .egg et les dépendances .jar ne sont pas prises en charge pour les projets MLflow.
  • L'exécution pour les projets MLflow avec des environnements Docker n'est pas prise en charge.
  • Vous devez utiliser une nouvelle spécification de clusters lors de l'exécution d'un projet MLflow sur Databricks. L'exécution de projets sur des clusters existants n'est pas prise en charge.

Utilisation de SparkR

Pour utiliser SparkR dans une exécution de projet MLflow, votre code de projet doit d’abord installer et importer SparkR comme suit :

R
if (file.exists("/databricks/spark/R/pkg")) {
install.packages("/databricks/spark/R/pkg", repos = NULL)
} else {
install.packages("SparkR")
}

library(SparkR)

Votre projet peut alors initialiser une session SparkR et utiliser SparkR normalement :

R
sparkR.session()
...

Exemple

Cet exemple montre comment créer une expérimentation, exécuter le projet tutoriel MLflow sur un cluster Databricks, afficher la sortie de l'exécution du Job et afficher l'exécution dans l'expérimentation.

Exigences

  1. Installez MLflow à l’aide de pip install mlflow.
  2. Installer et configurer la CLI Databricks. Le mécanisme d’authentification de Databricks CLI est requis pour exécuter des Jobs sur un cluster Databricks.

Étape 1 : créer une expérience

  1. Dans le Workspace, sélectionnez Créer > Expérimentation MLflow .

  2. Dans le champ Nom, saisissez Tutorial.

  3. Cliquez sur Créer. Notez l'ID d'Experimentation. Dans cet exemple, il s'agit de 14622565.

    ID d&#39;expérience

Étape 2 : Exécutez le projet tutoriel MLflow

Les étapes suivantes configurent la variable d'environnement MLFLOW_TRACKING_URI et exécutent le projet, en enregistrant les paramètres d'entraînement, les métriques et le modèle entraîné dans l'expérimentation mentionnée à l'étape précédente :

  1. Définissez la variable d’environnement MLFLOW_TRACKING_URI sur le Workspace Databricks.

    Bash
    export MLFLOW_TRACKING_URI=databricks
  2. Exécutez le projet de tutoriel MLflow, en entraînant un modèle de vin. Remplacez <experiment-id> par l'ID d'Experimentation que vous avez noté à l'étape précédente.

    Bash
    mlflow run https://github.com/mlflow/mlflow#examples/sklearn_elasticnet_wine -b databricks --backend-config cluster-spec.json --experiment-id <experiment-id>
    Console
    === Fetching project from https://github.com/mlflow/mlflow#examples/sklearn_elasticnet_wine into /var/folders/kc/l20y4txd5w3_xrdhw6cnz1080000gp/T/tmpbct_5g8u ===
    === Uploading project to DBFS path /dbfs/mlflow-experiments/<experiment-id>/projects-code/16e66ccbff0a4e22278e4d73ec733e2c9a33efbd1e6f70e3c7b47b8b5f1e4fa3.tar.gz ===
    === Finished uploading project to /dbfs/mlflow-experiments/<experiment-id>/projects-code/16e66ccbff0a4e22278e4d73ec733e2c9a33efbd1e6f70e3c7b47b8b5f1e4fa3.tar.gz ===
    === Running entry point main of project https://github.com/mlflow/mlflow#examples/sklearn_elasticnet_wine on Databricks ===
    === Launched MLflow run as Databricks job run with ID 8651121. Getting run status page URL... ===
    === Check the run's status at https://<databricks-instance>#job/<job-id>/run/1 ===
  3. Copiez l'URL https://<databricks-instance>#job/<job-id>/run/1 dans la dernière ligne de la sortie du run MLflow.

Étape 3 : Afficher l'exécution du Job Databricks

  1. Ouvrez l'URL que vous avez copiée à l'étape précédente dans un navigateur pour afficher le résultat de l'exécution du Job Databricks :

    Résultat du Job en cours d&#39;exécution

Étape 4 : Voir l'Experimentation et les détails du run MLflow

  1. Accédez à l'Expérimentation dans votre Databricks Workspace.

    Accéder à l&#39;expérimentation

  2. Cliquez sur l'expérimentation.

    Afficher l&#39;expérience

  3. Pour afficher les détails d'exécution, cliquez sur un Link dans la colonne Date.

    Détails de l’exécution

Vous pouvez afficher les Logs de votre exécution en cliquant sur le Link Logs dans le champ Job Output.

Ressources

Pour des exemples de projets MLflow, consultez la MLflow App Library, qui contient un repository de projets prêts à l'emploi visant à faciliter l'inclusion de fonctionnalités ML dans votre code.