MLflow-projecten uitvoeren op Azure Databricks

Een MLflow-project is een indeling voor het verpakken van gegevenswetenschapscode op een herbruikbare en reproduceerbare manier. Het onderdeel MLflow Projects bevat een API en opdrachtregelprogramma's voor het uitvoeren van projecten, die ook kunnen worden geïntegreerd met het onderdeel Tracking om automatisch de parameters en git-doorvoer van uw broncode vast te leggen voor reproduceerbaarheid.

In dit artikel wordt de indeling van een MLflow-project beschreven en wordt beschreven hoe u een MLflow-project op afstand uitvoert op Azure Databricks-clusters met behulp van de MLflow CLI, zodat u uw gegevenswetenschapcode eenvoudig verticaal kunt schalen.

MLflow-projectindeling

Elke lokale map of Git-opslagplaats kan worden behandeld als een MLflow-project. De volgende conventies definiëren een project:

  • De naam van het project is de naam van de map.
  • De softwareomgeving wordt opgegeven in python_env.yaml, indien aanwezig. Als er geen python_env.yaml bestand aanwezig is, gebruikt MLflow een virtualenv-omgeving met alleen Python (met name de nieuwste Python die beschikbaar is voor virtualenv) bij het uitvoeren van het project.
  • Een .py bestand in .sh het project kan een toegangspunt zijn, zonder expliciet gedeclareerde parameters. Wanneer u een dergelijke opdracht uitvoert met een set parameters, geeft MLflow elke parameter op de opdrachtregel door met behulp van --key <value> de syntaxis.

U geeft meer opties op door een MLproject-bestand toe te voegen. Dit is een tekstbestand in yamL-syntaxis. Een voorbeeld van een MLproject-bestand ziet er als volgt uit:

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}"

Een MLflow-project uitvoeren

Gebruik de opdracht om een MLflow-project uit te voeren op een Azure Databricks-cluster in de standaardwerkruimte:

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

waar <uri> is een Git-opslagplaats-URI of map met een MLflow-project en <json-new-cluster-spec> is een JSON-document met een new_cluster structuur. De Git-URI moet van de volgende vorm zijn: https://github.com/<repo>#<project-folder>.

Een voorbeeld van een clusterspecificatie is:

{
  "spark_version": "7.3.x-scala2.12",
  "num_workers": 1,
  "node_type_id": "Standard_DS3_v2"
}

Als u bibliotheken op de werkrol wilt installeren, gebruikt u de indeling 'clusterspecificatie'. Houd er rekening mee dat Python-wielbestanden moeten worden geüpload naar DBFS en moeten worden opgegeven als pypi afhankelijkheden. Voorbeeld:

{
  "new_cluster": {
    "spark_version": "7.3.x-scala2.12",
    "num_workers": 1,
    "node_type_id": "Standard_DS3_v2"
  },
  "libraries": [
    {
      "pypi": {
        "package": "tensorflow"
      }
    },
    {
      "pypi": {
         "package": "/dbfs/path_to_my_lib.whl"
      }
    }
  ]
}

Belangrijk

  • .egg en .jar afhankelijkheden worden niet ondersteund voor MLflow-projecten.
  • Uitvoering voor MLflow-projecten met Docker-omgevingen wordt niet ondersteund.
  • U moet een nieuwe clusterspecificatie gebruiken bij het uitvoeren van een MLflow-project op Databricks. Het uitvoeren van projecten op basis van bestaande clusters wordt niet ondersteund.

SparkR gebruiken

Als u SparkR wilt gebruiken in een MLflow-projectuitvoering, moet uw projectcode eerst SparkR als volgt installeren en importeren:

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

library(SparkR)

Uw project kan vervolgens een SparkR-sessie initialiseren en SparkR als normaal gebruiken:

sparkR.session()
...

Voorbeeld

In dit voorbeeld ziet u hoe u een experiment maakt, het MLflow-zelfstudieproject uitvoert op een Azure Databricks-cluster, de uitvoer van de taakuitvoering bekijkt en de uitvoering in het experiment bekijkt.

Vereisten

  1. Installeer MLflow met behulp van pip install mlflow.
  2. Installeer en configureer de Databricks CLI. Het Databricks CLI-verificatiemechanisme is vereist voor het uitvoeren van taken op een Azure Databricks-cluster.

Stap 1: Een experiment maken

  1. Selecteer MLflow Experiment maken > in de werkruimte.

  2. Voer in het veld Naam de naam in Tutorial.

  3. Klik op Create. Noteer de experiment-id. In dit voorbeeld is het 14622565.

    Experiment-id

Stap 2: Het MLflow-zelfstudieproject uitvoeren

Met de volgende stappen stelt u de MLFLOW_TRACKING_URI omgevingsvariabele in en voert u het project uit, registreert u de trainingsparameters, metrische gegevens en het getrainde model naar het experiment dat u in de vorige stap hebt genoteerd:

  1. Stel de MLFLOW_TRACKING_URI omgevingsvariabele in op de Azure Databricks-werkruimte.

    export MLFLOW_TRACKING_URI=databricks
    
  2. Voer het MLflow-zelfstudieproject uit en train een wijnmodel. Vervang <experiment-id> door de experiment-id die u in de vorige stap hebt genoteerd.

    mlflow run https://github.com/mlflow/mlflow#examples/sklearn_elasticnet_wine -b databricks --backend-config cluster-spec.json --experiment-id <experiment-id>
    
    === 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. Kopieer de URL https://<databricks-instance>#job/<job-id>/run/1 in de laatste regel van de uitvoer van de MLflow-uitvoer.

Stap 3: De Azure Databricks-taak weergeven

  1. Open de URL die u in de vorige stap in een browser hebt gekopieerd om de uitvoer van de Azure Databricks-taak weer te geven:

    Uitvoer van taakuitvoering

Stap 4: De details van het experiment en de MLflow-uitvoering weergeven

  1. Navigeer naar het experiment in uw Azure Databricks-werkruimte.

    Ga naar experiment

  2. Klik op het experiment.

    Experiment weergeven

  3. Als u uitvoeringsdetails wilt weergeven, klikt u op een koppeling in de kolom Datum.

    Details van de uitvoering

U kunt logboeken van uw uitvoering bekijken door te klikken op de koppeling Logboeken in het veld Taakuitvoer.

Resources

Zie voor enkele voorbeelden van MLflow-projecten de MLflow-appbibliotheek, die een opslagplaats met kant-en-klare projecten bevat die erop gericht zijn ML-functionaliteit eenvoudig in uw code op te nemen.