Skapa och hantera datatillgångar

GÄLLER FÖR:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (aktuell)

Den här artikeln visar hur du skapar och hanterar datatillgångar i Azure Machine Learning.

Datatillgångar kan hjälpa dig när du behöver följande funktioner:

  • Versionshantering: Datatillgångar stöder dataversionshantering.
  • Reproducerbarhet: När du har skapat en datatillgångsversion är den oföränderlig. Det går inte att ändra eller ta bort den. Därför kan träningsjobb eller pipelines som använder datatillgången återskapas.
  • Granskningsbarhet: Eftersom datatillgångsversionen är oföränderlig kan du spåra tillgångsversionerna, vem som uppdaterade en version och när versionsuppdateringarna inträffade.
  • Ursprung: För en viss datatillgång kan du visa vilka jobb eller pipelines som använder data.
  • Användarvänlighet: En Azure-maskininlärningsdatatillgång liknar webbläsarbokmärken (favoriter). I stället för att komma ihåg långa lagringssökvägar (URI:er) som refererar till dina data som används ofta i Azure Storage kan du skapa en datatillgångsversion och sedan komma åt den versionen av tillgången med ett eget namn (till exempel: azureml:<my_data_asset_name>:<version>).

Dricks

För att få åtkomst till dina data i en interaktiv session (till exempel en notebook-fil) eller ett jobb behöver du inte först skapa en datatillgång. Du kan använda Datastore-URI:er för att komma åt data. URI:er för datalager är ett enkelt sätt att komma åt data för dem som kommer igång med Azure-maskininlärning.

Förutsättningar

Om du vill skapa och arbeta med datatillgångar behöver du:

Skapa datatillgångar

När du skapar datatillgången måste du ange datatillgångstypen. Azure Machine Learning stöder tre typer av datatillgång:

Type API Kanoniska scenarier
Arkiv
Referera till en enskild fil
uri_file Läs en enda fil i Azure Storage (filen kan ha valfritt format).
Mapp
Referera till en mapp
uri_folder Läs en mapp med parquet-/CSV-filer till Pandas/Spark.

Läs ostrukturerade data (bilder, text, ljud osv.) som finns i en mapp.
Tabell
Referera till en datatabell
mltable Du har ett komplext schema som kan ändras ofta, eller så behöver du en delmängd med stora tabelldata.

AutoML med tabeller.

Läs ostrukturerade data (bilder, text, ljud osv.) data som är spridda över flera lagringsplatser.

Kommentar

Använd inte inbäddade newlines i csv-filer om du inte registrerar data som en MLTable. Inbäddade nya radlinjer i csv-filer kan orsaka feljusterade fältvärden när du läser data. MLTable har den här parametern support_multi_linei read_delimited transformering för att tolka citerade radbrytningar som en post.

När du använder datatillgången i ett Azure Machine Learning-jobb kan du antingen montera eller ladda ned tillgången till beräkningsnoderna. Mer information finns i Lägen.

Du måste också ange en path parameter som pekar på datatillgångens plats. Sökvägar som stöds är:

Plats Exempel
En sökväg på den lokala datorn ./home/username/data/my_data
En sökväg i ett datalager azureml://datastores/<data_store_name>/paths/<path>
En sökväg på en offentlig http-server https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv
En sökväg i Azure Storage (Blob) wasbs://<containername>@<accountname>.blob.core.windows.net/<path_to_data>/
(ADLS gen2) abfss://<file_system>@<account_name>.dfs.core.windows.net/<path>
(ADLS gen1) adl://<accountname>.azuredatalakestore.net/<path_to_data>/

Kommentar

När du skapar en datatillgång från en lokal sökväg laddas den automatiskt upp till standardmolnlagringen i Azure Machine Learning.

Skapa en datatillgång: Filtyp

En datatillgång som är en filtyp (uri_file) pekar på en enda fil i lagringen (till exempel en CSV-fil). Du kan skapa en filtypad datatillgång med hjälp av:

Skapa en YAML-fil och kopiera och klistra in följande kod. Du måste uppdatera <> platshållarna med namnet på din datatillgång, version, beskrivning och sökväg till en enda fil på en plats som stöds.

$schema: https://azuremlschemas.azureedge.net/latest/data.schema.json

# Supported paths include:
# local: './<path>/<file>' (this will be automatically uploaded to cloud storage)
# blob:  'wasbs://<container_name>@<account_name>.blob.core.windows.net/<path>/<file>'
# ADLS gen2: 'abfss://<file_system>@<account_name>.dfs.core.windows.net/<path>/<file>'
# Datastore: 'azureml://datastores/<data_store_name>/paths/<path>/<file>'

type: uri_file
name: <NAME OF DATA ASSET>
version: <VERSION>
description: <DESCRIPTION>
path: <SUPPORTED PATH>

Kör sedan följande kommando i CLI (uppdatera <filename> platshållaren till YAML-filnamnet):

az ml data create -f <filename>.yml

Skapa en datatillgång: Mapptyp

En datatillgång som är en mapptyp (uri_folder) är en som pekar på en mapp i lagringen (till exempel en mapp som innehåller flera undermappar med bilder). Du kan skapa en mapptypad datatillgång med hjälp av:

Skapa en YAML-fil och kopiera och klistra in följande kod. Du måste uppdatera <> platshållarna med namnet på din datatillgång, version, beskrivning och sökväg till en mapp på en plats som stöds.

$schema: https://azuremlschemas.azureedge.net/latest/data.schema.json

# Supported paths include:
# local: './<path>/<folder>' (this will be automatically uploaded to cloud storage)
# blob:  'wasbs://<container_name>@<account_name>.blob.core.windows.net/<path>/<folder>'
# ADLS gen2: 'abfss://<file_system>@<account_name>.dfs.core.windows.net/<path>/<folder>'
# Datastore: 'azureml://datastores/<data_store_name>/paths/<path>/<folder>'

type: uri_folder
name: <NAME OF DATA ASSET>
version: <VERSION>
description: <DESCRIPTION>
path: <SUPPORTED PATH>

Kör sedan följande kommando i CLI (uppdatera <filename> platshållaren till filnamnet till YAML-filnamnet):

az ml data create -f <filename>.yml

Skapa en datatillgång: Tabelltyp

Azure Machine Learning-tabeller (MLTable) har omfattande funktioner som beskrivs mer detaljerat i Arbeta med tabeller i Azure Machine Learning. I stället för att upprepa dokumentationen här ger vi ett exempel på hur du skapar en tabelltypad datatillgång med hjälp av Titanic-data som finns på ett offentligt tillgängligt Azure Blob Storage-konto.

Skapa först en ny katalog med namnet data och skapa en fil med namnet MLTable:

mkdir data
touch MLTable

Kopiera och klistra sedan in följande YAML i MLTable-filen som du skapade i föregående steg:

Varning

Byt inte namn på MLTable filen till MLTable.yaml eller MLTable.yml . Azure Machine Learning förväntar sig en MLTable fil.

paths:
- file: wasbs://data@azuremlexampledata.blob.core.windows.net/titanic.csv
transformations:
- read_delimited:
    delimiter: ','
    empty_as_string: false
    encoding: utf8
    header: all_files_same_headers
    include_path_column: false
    infer_column_types: true
    partition_size: 20971520
    path_column: Path
    support_multi_line: false
- filter: col('Age') > 0
- drop_columns:
  - PassengerId
- convert_column_types:
  - column_type:
      boolean:
        false_values:
        - 'False'
        - 'false'
        - '0'
        mismatch_as: error
        true_values:
        - 'True'
        - 'true'
        - '1'
    columns: Survived
type: mltable

Kör sedan följande kommando i CLI. Se till att du uppdaterar <> platshållarna med datatillgångens namn och versionsvärden.

az ml data create --path ./data --name <DATA ASSET NAME> --version <VERSION> --type mltable

Viktigt!

path Ska vara en mapp som innehåller en giltig MLTable fil.

Skapa datatillgångar från jobbutdata

Du kan skapa en datatillgång från ett Azure Machine Learning-jobb genom att ange parametern name i utdata. I det här exemplet skickar du ett jobb som kopierar data från ett offentligt bloblager till ditt standarddatalager för Azure Machine Learning och skapar en datatillgång med namnet job_output_titanic_asset.

Skapa en YAML-fil för jobbspecifikation (<file-name>.yml):

$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json

# path: Set the URI path for the data. Supported paths include
# local: `./<path>
# Blob: wasbs://<container_name>@<account_name>.blob.core.windows.net/<path>
# ADLS: abfss://<file_system>@<account_name>.dfs.core.windows.net/<path>
# Datastore: azureml://datastores/<data_store_name>/paths/<path>
# Data Asset: azureml:<my_data>:<version>

# type: What type of data are you pointing to?
# uri_file (a specific file)
# uri_folder (a folder)
# mltable (a table)

# mode: Set INPUT mode:
# ro_mount (read-only mount)
# download (download from storage to node)
# mode: Set the OUTPUT mode
# rw_mount (read-write mount)
# upload (upload data from node to storage)

type: command
command: cp ${{inputs.input_data}} ${{outputs.output_data}}
compute: azureml:cpu-cluster
environment: azureml://registries/azureml/environments/sklearn-1.1/versions/4
inputs:
  input_data:
    mode: ro_mount
    path: azureml:wasbs://data@azuremlexampledata.blob.core.windows.net/titanic.csv
    type: uri_file
outputs:
  output_data:
    mode: rw_mount
    path: azureml://datastores/workspaceblobstore/paths/quickstart-output/titanic.csv
    type: uri_file
    name: job_output_titanic_asset
    

Skicka sedan jobbet med hjälp av CLI:

az ml job create --file <file-name>.yml

Hantera datatillgångar

Ta bort en datatillgång

Viktigt!

Borttagning av datatillgång stöds inte avsiktligt.

Om Azure Machine Learning tillät borttagning av datatillgång skulle det ha följande negativa effekter:

  • Produktionsjobb som använder datatillgångar som senare togs bort skulle misslyckas.
  • Det skulle bli svårare att återskapa ett ML-experiment.
  • Jobbets ursprung skulle brytas eftersom det skulle bli omöjligt att visa den borttagna datatillgångsversionen.
  • Du skulle inte kunna spåra och granska korrekt eftersom versioner kan saknas.

Därför ger datatillgångarnas oföränderlighet en skyddsnivå när du arbetar i ett team som skapar produktionsarbetsbelastningar.

När en datatillgång har skapats felaktigt – till exempel med ett felaktigt namn, typ eller sökväg – erbjuder Azure Machine Learning lösningar för att hantera situationen utan de negativa konsekvenserna av borttagning:

Jag vill ta bort den här datatillgången eftersom... Lösning
Namnet är felaktigt Arkivera datatillgången
Teamet använder inte längre datatillgången Arkivera datatillgången
Det belamrar listan över datatillgånger Arkivera datatillgången
Sökvägen är felaktig Skapa en ny version av datatillgången (samma namn) med rätt sökväg. Mer information finns i Skapa datatillgångar.
Den har en felaktig typ För närvarande tillåter Inte Azure Machine Learning att en ny version med en annan typ skapas jämfört med den ursprungliga versionen.
(1) Arkivera datatillgången
(2) Skapa en ny datatillgång under ett annat namn med rätt typ.

Arkivera en datatillgång

När du arkiverar en datatillgång döljs den som standard från båda listfrågorna (till exempel i CLI az ml data list) och datatillgångslistan i Studio-användargränssnittet. Du kan fortfarande fortsätta att referera till och använda en arkiverad datatillgång i dina arbetsflöden. Du kan arkivera antingen:

  • alla versioner av datatillgången under ett visst namn, eller
  • en specifik datatillgångsversion

Arkivera alla versioner av en datatillgång

Om du vill arkivera alla versioner av datatillgången under ett visst namn använder du:

Kör följande kommando (uppdatera <> platshållaren med namnet på datatillgången):

az ml data archive --name <NAME OF DATA ASSET>

Arkivera en specifik datatillgångsversion

Om du vill arkivera en specifik datatillgångsversion använder du:

Kör följande kommando (uppdatera <> platshållarna med namnet på din datatillgång och version):

az ml data archive --name <NAME OF DATA ASSET> --version <VERSION TO ARCHIVE>

Återställa en arkiverad datatillgång

Du kan återställa en arkiverad datatillgång. Om alla versioner av datatillgången arkiveras kan du inte återställa enskilda versioner av datatillgången – du måste återställa alla versioner.

Återställa alla versioner av en datatillgång

Om du vill återställa alla versioner av datatillgången under ett visst namn använder du:

Kör följande kommando (uppdatera <> platshållaren med namnet på datatillgången):

az ml data restore --name <NAME OF DATA ASSET>

Återställa en specifik datatillgångsversion

Viktigt!

Om alla datatillgångsversioner arkiverades kan du inte återställa enskilda versioner av datatillgången – du måste återställa alla versioner.

Om du vill återställa en specifik datatillgångsversion använder du:

Kör följande kommando (uppdatera <> platshållarna med namnet på din datatillgång och version):

az ml data restore --name <NAME OF DATA ASSET> --version <VERSION TO ARCHIVE>

Dataursprung

Data härkomst uppfattas i stort sett som den livscykel som sträcker sig över datans ursprung och var de flyttas över tid över lagringen. Olika typer av bakåtblickande scenarier använder det, till exempel felsökning, spårning av rotorsaker i ML-pipelines och felsökning. Datakvalitetsanalys, efterlevnad och "tänk om"-scenarier använder också ursprung. Härkomst representeras visuellt för att visa data som flyttas från källa till mål och omfattar även datatransformeringar. Med tanke på komplexiteten i de flesta företagsdatamiljöer kan dessa vyer bli svåra att förstå utan konsolidering eller maskering av kringutrustningsdatapunkter.

I en Azure Machine Learning-pipeline visar dina datatillgångar datas ursprung och hur data bearbetades, till exempel:

Screenshot showing data lineage in the job details.

Du kan visa jobben som använder datatillgången i Studio-användargränssnittet. Välj först Data på den vänstra menyn och välj sedan namnet på datatillgången. Du kan se jobb som använder datatillgången:

Screenshot that shows the jobs that consume a data asset.

Jobbvyn i Datatillgångar gör det enklare att hitta jobbfel och utföra routningsorsaksanalys i ml-pipelines och felsökning.

Taggning av datatillgång

Datatillgångar stöder taggning, vilket är extra metadata som tillämpas på datatillgången i form av ett nyckel/värde-par. Datataggning ger många fördelar:

  • Beskrivning av datakvalitet. Om din organisation till exempel använder en medallion lakehouse-arkitektur kan du tagga tillgångar med medallion:bronze (rå), medallion:silver (validerad) och medallion:gold (berikad).
  • Ger effektiv sökning och filtrering av data för att hjälpa dataidentifiering.
  • Hjälper till att identifiera känsliga personuppgifter för att hantera och styra dataåtkomsten på rätt sätt. Till exempel sensitivity:PII/sensitivity:nonPII.
  • Identifiera om data godkänns från en ansvarsfull AI-granskning (RAI). Till exempel RAI_audit:approved/RAI_audit:todo.

Du kan lägga till taggar i datatillgångar som en del av deras skapandeflöde, eller så kan du lägga till taggar i befintliga datatillgångar. Det här avsnittet visar båda.

Lägga till taggar som en del av flödet för att skapa datatillgång

Skapa en YAML-fil och kopiera och klistra in följande kod. Du måste uppdatera <> platshållarna med namnet på din datatillgång, version, beskrivning, taggar (nyckel/värde-par) och sökvägen till en enda fil på en plats som stöds.

$schema: https://azuremlschemas.azureedge.net/latest/data.schema.json

# Supported paths include:
# local: './<path>/<file>' (this will be automatically uploaded to cloud storage)
# blob:  'wasbs://<container_name>@<account_name>.blob.core.windows.net/<path>/<file>'
# ADLS gen2: 'abfss://<file_system>@<account_name>.dfs.core.windows.net/<path>/<file>'
# Datastore: 'azureml://datastores/<data_store_name>/paths/<path>/<file>'

# Data asset types, use one of:
# uri_file, uri_folder, mltable

type: uri_file
name: <NAME OF DATA ASSET>
version: <VERSION>
description: <DESCRIPTION>
tags:
    <KEY1>: <VALUE>
    <KEY2>: <VALUE>
path: <SUPPORTED PATH>

Kör sedan följande kommando i CLI (uppdatera <filename> platshållaren till YAML-filnamnet):

az ml data create -f <filename>.yml

Lägga till taggar i en befintlig datatillgång

Kör följande kommando i Azure CLI och uppdatera <> platshållarna med datatillgångens namn, version och nyckel/värde-par för taggen.

az ml data update --name <DATA ASSET NAME> --version <VERSION> --set tags.<KEY>=<VALUE>

Metodtips för versionshantering

Vanligtvis organiserar dina ETL-processer din mappstruktur i Azure Storage efter tid, till exempel:

/
└── 📁 mydata
    ├── 📁 year=2022
    │   ├── 📁 month=11
    │   │   └── 📄 file1
    │   │   └── 📄 file2
    │   └── 📁 month=12
    │       └── 📄 file1
    │   │   └── 📄 file2
    └── 📁 year=2023
        └── 📁 month=1
            └── 📄 file1
    │   │   └── 📄 file2

Med kombinationen av tids-/versionsstrukturerade mappar och Azure Machine Learning-tabeller (MLTable) kan du konstruera versionsbaserade datauppsättningar. För att visa hur du uppnår versionshanterade data med Azure Machine Learning-tabeller använder vi ett hypotetiskt exempel. Anta att du har en process som laddar upp kamerabilder till Azure Blob Storage varje vecka i följande struktur:

/myimages
└── 📁 year=2022
    ├── 📁 week52
    │   ├── 📁 camera1
    │   │   └── 🖼️ file1.jpeg
    │   │   └── 🖼️ file2.jpeg
    │   └── 📁 camera2
    │       └── 🖼️ file1.jpeg
    │   │   └── 🖼️ file2.jpeg
└── 📁 year=2023
    ├── 📁 week1
    │   ├── 📁 camera1
    │   │   └── 🖼️ file1.jpeg
    │   │   └── 🖼️ file2.jpeg
    │   └── 📁 camera2
    │       └── 🖼️ file1.jpeg
    │   │   └── 🖼️ file2.jpeg

Kommentar

Även om vi visar hur du använder version av avbildningsdata (jpeg) kan samma metod tillämpas på alla filtyper (till exempel Parquet, CSV).

Med Azure Machine Learning-tabeller (mltable) skapar du en tabell med sökvägar som innehåller data fram till slutet av den första veckan 2023 och sedan skapar en datatillgång:

import mltable
from mltable import MLTableHeaders, MLTableFileEncoding, DataType
from azure.ai.ml import MLClient
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
from azure.identity import DefaultAzureCredential

# The ** in the pattern below will glob all sub-folders (camera1, ..., camera2)
paths = [
    {
        "pattern": "abfss://<file_system>@<account_name>.dfs.core.windows.net/myimages/year=2022/week=52/**/*.jpeg"
    },
    {
        "pattern": "abfss://<file_system>@<account_name>.dfs.core.windows.net/myimages/year=2023/week=1/**/*.jpeg"
    },
]

tbl = mltable.from_paths(paths)
tbl.save("./myimages")

# Connect to the AzureML workspace
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AML_WORKSPACE_NAME>"

ml_client = MLClient(
    DefaultAzureCredential(), subscription_id, resource_group, workspace
)

# Define the Data asset object
my_data = Data(
    path=mltable_folder,
    type=AssetTypes.MLTABLE,
    description="My images. Version includes data through to 2023-Jan-08.",
    name="myimages",
    version="20230108",
)

# Create the data asset in the workspace
ml_client.data.create_or_update(my_data)

I slutet av följande vecka har din ETL uppdaterat data för att inkludera mer data:

/myimages
└── 📁 year=2022
    ├── 📁 week52
    │   ├── 📁 camera1
    │   │   └── 🖼️ file1.jpeg
    │   │   └── 🖼️ file2.jpeg
    │   └── 📁 camera2
    │   │   └── 🖼️ file1.jpeg
    │   │   └── 🖼️ file2.jpeg
└── 📁 year=2023
    ├── 📁 week1
    │   ├── 📁 camera1
    │   │   └── 🖼️ file1.jpeg
    │   │   └── 🖼️ file2.jpeg
    │   └── 📁 camera2
    │   │   └── 🖼️ file1.jpeg
    │   │   └── 🖼️ file2.jpeg
    ├── 📁 week2
    │   ├── 📁 camera1
    │   │   └── 🖼️ file1.jpeg
    │   │   └── 🖼️ file2.jpeg
    │   └── 📁 camera2
    │   │   └── 🖼️ file1.jpeg
    │   │   └── 🖼️ file2.jpeg

Din första version (20230108) fortsätter att endast montera/ladda ned filer från year=2022/week=52 och year=2023/week=1 eftersom sökvägarna deklareras i MLTable filen. Detta säkerställer reproducerbarhet för dina experiment. Om du vill skapa en ny version av datatillgången som innehåller year=2023/week2använder du:

import mltable
from mltable import MLTableHeaders, MLTableFileEncoding, DataType
from azure.ai.ml import MLClient
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
from azure.identity import DefaultAzureCredential

# The ** in the pattern below will glob all sub-folders (camera1, ..., camera2)
paths = [
    {
        "pattern": "abfss://<file_system>@<account_name>.dfs.core.windows.net/myimages/year=2022/week=52/**/*.jpeg"
    },
    {
        "pattern": "abfss://<file_system>@<account_name>.dfs.core.windows.net/myimages/year=2023/week=1/**/*.jpeg"
    },
    {
        "pattern": "abfss://<file_system>@<account_name>.dfs.core.windows.net/myimages/year=2023/week=2/**/*.jpeg"
    },
]

# Save to an MLTable file on local storage
tbl = mltable.from_paths(paths)
tbl.save("./myimages")

# Next, you create a data asset - the MLTable file will automatically be uploaded

# Connect to the AzureML workspace
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AML_WORKSPACE_NAME>"

ml_client = MLClient(
    DefaultAzureCredential(), subscription_id, resource_group, workspace
)

# Define the Data asset object
my_data = Data(
    path=mltable_folder,
    type=AssetTypes.MLTABLE,
    description="My images. Version includes data through to 2023-Jan-15.",
    name="myimages",
    version="20230115", # update version to the date
)

# Create the data asset in the workspace
ml_client.data.create_or_update(my_data)

Nu har du två versioner av data, där namnet på versionen motsvarar det datum då bilderna laddades upp till lagring:

  1. 20230108: Bilderna fram till 2023-Jan-08.
  2. 20230115: Bilderna fram till 2023-Jan-15.

I båda fallen konstruerar MLTable en tabell med sökvägar som endast innehåller avbildningarna fram till dessa datum.

I ett Azure Machine Learning-jobb kan du montera eller ladda ned dessa sökvägar i den versionerade MLTable till beräkningsmålet med hjälp av antingen lägena eval_download eller eval_mount :

from azure.ai.ml import MLClient, command, Input
from azure.ai.ml.entities import Environment
from azure.identity import DefaultAzureCredential
from azure.ai.ml.constants import InputOutputModes

# connect to the AzureML workspace
ml_client = MLClient.from_config(
    DefaultAzureCredential()
)

# Get the 20230115 version of the data
data_asset = ml_client.data.get(name="myimages", version="20230115")

input = {
    "images": Input(type="mltable",
                   path=data_asset.id,
                   mode=InputOutputModes.EVAL_MOUNT
            )
}

cmd = """
ls ${{inputs.images}}/**
"""

job = command(
    command=cmd,
    inputs=input,
    compute="cpu-cluster",
    environment="azureml://registries/azureml/environments/sklearn-1.1/versions/4"
)

ml_client.jobs.create_or_update(job)

Kommentar

Lägena eval_mount och eval_download är unika för MLTable. I det här fallet utvärderar MLTable AzureML-datakörningsfunktionen filen och monterar sökvägarna på beräkningsmålet.

Nästa steg