Share via


Modellek betanítása Azure Machine Tanulás adatkészletekkel

Figyelemfelhívás

Ez a cikk a CentOS-ra, egy olyan Linux-disztribúcióra hivatkozik, amely közel áll az élettartam (EOL) állapotához. Ennek megfelelően fontolja meg a használatot és a tervezést. További információ: CentOS End Of Life útmutató.

ÉRVÉNYES:Python SDK azureml v1

Ebben a cikkben megtudhatja, hogyan dolgozhat az Azure Machine Tanulás adatkészletekkel a gépi tanulási modellek betanítása érdekében. A helyi vagy távoli számítási célban lévő adathalmazokat anélkül használhatja, hogy kapcsolati sztring vagy adatelérési utak miatt kellene aggódnia.

Az Azure Machine Tanulás-adathalmazok zökkenőmentes integrációt biztosítanak az Azure Machine Tanulás olyan betanítási funkcióival, mint a ScriptRunConfig, a HyperDrive és az Azure Machine Tanulás folyamatok.

Ha nem áll készen arra, hogy az adatokat elérhetővé tegye a modellbetanításhoz, de szeretné betölteni az adatokat a jegyzetfüzetbe az adatfeltáráshoz, tekintse meg, hogyan vizsgálhatja meg az adathalmazban lévő adatokat.

Előfeltételek

Adathalmazok létrehozásához és betanítása a következőkre van szükség:

Feljegyzés

Egyes adathalmazosztályok függőségekkel rendelkeznek az azureml-dataprep csomagtól. Linux-felhasználók számára ezek az osztályok csak a következő disztribúciókban támogatottak: Red Hat Enterprise Linux, Ubuntu, Fedora és CentOS.

Adathalmazok felhasználása gépi tanulási betanítási szkriptekben

Ha olyan strukturált adatokkal rendelkezik, amelyeket még nem regisztrált adathalmazként, hozzon létre egy TabularDatasetet, és használja közvetlenül a betanítási szkriptben a helyi vagy távoli kísérlethez.

Ebben a példában létrehoz egy nem regisztrált TabularDatasetet, és szkriptargumentumként adja meg a ScriptRunConfig objektumban a betanításhoz. Ha ezt a TabularDataset-et más kísérletekkel szeretné újra felhasználni a munkaterületen, tekintse meg , hogyan regisztrálhat adathalmazokat a munkaterületen.

TabularDataset létrehozása

Az alábbi kód létrehoz egy nem regisztrált TabularDatasetet egy webes URL-címből.

from azureml.core.dataset import Dataset

web_path ='https://dprepdata.blob.core.windows.net/demo/Titanic.csv'
titanic_ds = Dataset.Tabular.from_delimited_files(path=web_path)

A TabularDataset-objektumok lehetővé teszik az adatok betöltését a TabularDatasetben egy pandasba vagy Spark DataFrame-be, így a jegyzetfüzet elhagyása nélkül használhatja a jól ismert adatelőkészítési és betanítási kódtárakat.

Adatkészlet elérése betanítási szkriptben

A következő kód konfigurál egy szkriptargumentumot --input-data , amelyet a betanítási futtatás konfigurálásakor fog megadni (lásd a következő szakaszt). Amikor a táblázatos adatkészletet argumentumértékként adja át, az Azure Machine Tanulás feloldja az adathalmaz azonosítójára, amelyet ezután használhat a betanítási szkriptben lévő adathalmaz eléréséhez (anélkül, hogy az adathalmaz nevét vagy azonosítóját a szkriptben kellene kódolnia). Ezután a módszerrel betölti az to_pandas_dataframe() adathalmazt egy pandas-adatkeretbe további adatfeltáráshoz és előkészítéshez a betanítás előtt.

Feljegyzés

Ha az eredeti adatforrás naN-t, üres sztringeket vagy üres értékeket tartalmaz, akkor to_pandas_dataframe()ezek az értékek null értékként lesznek lecserélve.

Ha az előkészített adatokat egy memórián belüli pandas-adatkeretből kell betöltenie egy új adatkészletbe, írja be az adatokat egy helyi fájlba, például egy parquetbe, és hozzon létre egy új adatkészletet a fájlból. További információ az adathalmazok létrehozásáról.

%%writefile $script_folder/train_titanic.py

import argparse
from azureml.core import Dataset, Run

parser = argparse.ArgumentParser()
parser.add_argument("--input-data", type=str)
args = parser.parse_args()

run = Run.get_context()
ws = run.experiment.workspace

# get the input dataset by ID
dataset = Dataset.get_by_id(ws, id=args.input_data)

# load the TabularDataset to pandas DataFrame
df = dataset.to_pandas_dataframe()

A betanítási futtatás konfigurálása

A betanítási futtatás konfigurálásához és elküldéséhez egy ScriptRunConfig-objektumot használunk.

Ez a kód létrehoz egy ScriptRunConfig objektumot, srcamely a következőket adja meg:

  • A szkriptek szkriptkönyvtára. Az ebben a könyvtárban található összes fájl fel lesz töltve a fürtcsomópontokra végrehajtás céljából.
  • A betanítási szkript, train_titanic.py.
  • A betanítás titanic_dsbemeneti adatkészlete szkriptargumentumként. Az Azure Machine Tanulás ezt az adatkészlet megfelelő azonosítójára fogja feloldani, amikor az átkerül a szkriptbe.
  • A futtatás számítási célja.
  • A futtatás környezete.
from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=script_folder,
                      script='train_titanic.py',
                      # pass dataset as an input with friendly name 'titanic'
                      arguments=['--input-data', titanic_ds.as_named_input('titanic')],
                      compute_target=compute_target,
                      environment=myenv)
                             
# Submit the run configuration for your training run
run = experiment.submit(src)
run.wait_for_completion(show_output=True)                             

Fájlok csatlakoztatása távoli számítási célokhoz

Ha strukturálatlan adatokkal rendelkezik, hozzon létre egy FileDatasetet , és csatlakoztassa vagy töltse le az adatfájlokat, hogy elérhetővé tegye őket a távoli számítási cél számára a betanításhoz. Megtudhatja, hogy mikor használhatja a csatlakoztatást és a letöltést a távoli betanítási kísérletekhez.

Az alábbi példa:

  • Létrehoz egy bemeneti FileDatasetet a mnist_dsbetanítási adatokhoz.
  • Megadja a betanítási eredmények írásának helyét, és az eredményeket FileDatasetként előlépteti.
  • Csatlakoztatja a bemeneti adathalmazt a számítási célhoz.

Feljegyzés

Ha egyéni Docker-alaprendszerképet használ, az adathalmaz csatlakoztatásához függőségként kell telepítenie a biztosítékot apt-get install -y fuse . Megtudhatja, hogyan hozhat létre egyéni buildrendszerképet.

A jegyzetfüzet példájához tekintse meg a betanítási futtatás konfigurálását adatbemenettel és kimenettel.

FileDataset létrehozása

Az alábbi példa egy nem regisztrált FileDatasetet hoz létre webes mnist_data URL-címekről. Ez a FileDataset a betanítási futtatás bemeneti adatai.

További információ arról , hogyan hozhat létre adathalmazokat más forrásokból.


from azureml.core.dataset import Dataset

web_paths = [
            'http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz'
            ]

mnist_ds = Dataset.File.from_files(path = web_paths)

Betanítási kimenet írásának helye

Megadhatja, hogy hol írja be a betanítási eredményeket egy OutputFileDatasetConfig objektummal.

Az OutputFileDatasetConfig objektumok lehetővé teszik a következőt:

  • A futtatás kimenetének csatlakoztatása vagy feltöltése a megadott felhőtárhelyre.
  • Mentse a kimenetet FileDatasetként az alábbi támogatott tártípusokra:
    • Azure-blob
    • Azure-fájlmegosztás
    • Az Azure Data Lake Storage 1. és 2. generációja
  • Kövesse nyomon az adatsorokat a betanítási futtatások között.

Az alábbi kód azt határozza meg, hogy a betanítási eredményeket FileDatasetként kell menteni az outputdataset alapértelmezett blobadattár mappájába. def_blob_store

from azureml.core import Workspace
from azureml.data import OutputFileDatasetConfig

ws = Workspace.from_config()

def_blob_store = ws.get_default_datastore()
output = OutputFileDatasetConfig(destination=(def_blob_store, 'sample/outputdataset'))

A betanítási futtatás konfigurálása

Azt javasoljuk, hogy a konstruktor paraméterén ScriptRunConfig keresztül arguments történő csatlakoztatáskor az adathalmazt argumentumként adja át. Ezzel argumentumokon keresztül lekérheti az adatútvonalat (csatlakoztatási pontot) a betanítási szkriptben. Így ugyanazt a betanítási szkriptet használhatja a helyi hibakereséshez és a távoli betanításhoz bármely felhőplatformon.

Az alábbi példa létrehoz egy ScriptRunConfig-konfigurációt, amely a FileDataseten keresztül halad át arguments. A futtatás elküldése után az adathalmaz mnist_ds által hivatkozott adatfájlok csatlakoztatva lesznek a számítási célhoz, és a betanítási eredmények az alapértelmezett adattár megadott outputdataset mappájába lesznek mentve.

from azureml.core import ScriptRunConfig

input_data= mnist_ds.as_named_input('input').as_mount()# the dataset will be mounted on the remote compute 

src = ScriptRunConfig(source_directory=script_folder,
                      script='dummy_train.py',
                      arguments=[input_data, output],
                      compute_target=compute_target,
                      environment=myenv)

# Submit the run configuration for your training run
run = experiment.submit(src)
run.wait_for_completion(show_output=True)

Egyszerű betanítási szkript

A következő szkript a ScriptRunConfigon keresztül lesz elküldve. Beolvassa az mnist_ds adathalmazt bemenetként, és az alapértelmezett blobadattár def_blob_storemappájába írja a fájltoutputdataset.

%%writefile $source_directory/dummy_train.py

# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
import sys
import os

print("*********************************************************")
print("Hello Azure Machine Learning!")

mounted_input_path = sys.argv[1]
mounted_output_path = sys.argv[2]

print("Argument 1: %s" % mounted_input_path)
print("Argument 2: %s" % mounted_output_path)
    
with open(mounted_input_path, 'r') as f:
    content = f.read()
    with open(os.path.join(mounted_output_path, 'output.csv'), 'w') as fw:
        fw.write(content)

Csatlakoztatás és letöltés

Bármilyen formátumú fájlok csatlakoztatása vagy letöltése támogatott az Azure Blob Storage, az Azure Files, az Azure Data Lake Storage Gen1, az Azure Data Lake Storage Gen2, az Azure SQL Database és az Azure Database for PostgreSQL-ből létrehozott adathalmazokhoz.

Adathalmaz csatlakoztatásakor csatolja az adathalmaz által hivatkozott fájlokat egy könyvtárhoz (csatlakoztatási ponthoz), és elérhetővé teszi azt a számítási célon. A csatlakoztatás Linux-alapú számításokhoz támogatott, beleértve az Azure Machine Tanulás Computet, a virtuális gépeket és a HDInsightot. Ha az adatméret meghaladja a számítási lemez méretét, a letöltés nem lehetséges. Ebben a forgatókönyvben a csatlakoztatást javasoljuk, mivel csak a szkript által használt adatfájlok töltődnek be a feldolgozáskor.

Adathalmaz letöltésekor az adathalmaz által hivatkozott összes fájl le lesz töltve a számítási célra. A letöltés minden számítási típus esetében támogatott. Ha a szkript feldolgozza az adathalmaz által hivatkozott összes fájlt, és a számítási lemez elfér a teljes adatkészletben, a letöltést javasoljuk, hogy elkerülje a tárolási szolgáltatásokból származó streamelési adatok többletterhelését. A többcsomópontos letöltések esetében tekintse meg , hogyan kerülheti el a szabályozást.

Feljegyzés

A letöltési útvonal neve nem lehet hosszabb 255 alfanumerikus karakternél Windows operációs rendszer esetén. Linux operációs rendszer esetén a letöltési útvonal neve nem lehet hosszabb 4096 alfa-numerikus karakternél. Linux operációs rendszer esetén a fájlnév (amely a letöltési útvonal /path/to/file/{filename}utolsó szegmense) nem lehet hosszabb 255 alfa-numerikus karakternél.

A következő kód csatlakozik dataset a temp könyvtárhoz a következő helyen: mounted_path

import tempfile
mounted_path = tempfile.mkdtemp()

# mount dataset onto the mounted_path of a Linux-based compute
mount_context = dataset.mount(mounted_path)

mount_context.start()

import os
print(os.listdir(mounted_path))
print (mounted_path)

Adathalmazok lekérése gépi tanulási szkriptekben

A regisztrált adathalmazok helyileg és távolról is elérhetők olyan számítási fürtökön, mint az Azure Machine Tanulás számítás. A regisztrált adathalmaz kísérleteken keresztüli eléréséhez használja az alábbi kódot a munkaterület eléréséhez, és kérje le a korábban elküldött futtatás során használt adatkészletet. Alapértelmezés szerint az get_by_name()Dataset osztály metódusa a munkaterületen regisztrált adathalmaz legújabb verzióját adja vissza.

%%writefile $script_folder/train.py

from azureml.core import Dataset, Run

run = Run.get_context()
workspace = run.experiment.workspace

dataset_name = 'titanic_ds'

# Get a dataset by name
titanic_ds = Dataset.get_by_name(workspace=workspace, name=dataset_name)

# Load a TabularDataset into pandas DataFrame
df = titanic_ds.to_pandas_dataframe()

Forráskód elérése a betanítás során

Az Azure Blob Storage nagyobb átviteli sebességgel rendelkezik, mint egy Azure-fájlmegosztás, és nagy számú, párhuzamosan elindított feladatra lesz skálázva. Ezért javasoljuk, hogy konfigurálja a futtatásokat a Blob Storage használatára a forráskódfájlok átviteléhez.

Az alábbi példakód a futtatási konfigurációban határozza meg, hogy melyik blobadattárat használja a forráskódátvitelekhez.

# workspaceblobstore is the default blob storage
src.run_config.source_directory_data_store = "workspaceblobstore" 

Jegyzetfüzet-példák

Hibaelhárítás

Az adathalmaz inicializálása nem sikerült: A csatlakoztatási pont készenlétre várakozása túllépte az időkorlátot:

  • Ha nem rendelkezik kimenő hálózati biztonsági csoportra vonatkozó szabályokkal, azureml-dataset-runtime és az adott alverzió legújabb verziójának frissítését és függőségeit használjaazureml-sdk>=1.12.0, vagy futtatás közben használja, hozza létre újra a környezetet, hogy a javítással a legújabb javítással rendelkezzen.
  • Ha használja azureml-sdk<1.12.0, frissítsen a legújabb verzióra.
  • Ha kimenő NSG-szabályokkal rendelkezik, győződjön meg arról, hogy van egy kimenő szabály, amely engedélyezi a szolgáltatáscímke AzureResourceMonitorösszes forgalmát.

Az adathalmaz inicializálása nem sikerült: A StreamAccessExceptionet a ThrottlingException okozta

Többcsomópontos fájlletöltések esetén az összes csomópont megpróbálhatja letölteni a fájladatkészletben lévő összes fájlt az Azure Storage szolgáltatásból, ami szabályozási hibát eredményez. A szabályozás elkerülése érdekében először állítsa a környezeti változót AZUREML_DOWNLOAD_CONCURRENCY a processzormagok számának nyolcszorosára a csomópontok számával osztva. Ennek a környezeti változónak az értékének beállítása némi kísérletezést igényelhet, ezért a fent említett útmutató kiindulópontként szolgál.

Az alábbi példa 32 magot és 4 csomópontot feltételez.

from azureml.core.environment import Environment 
myenv = Environment(name="myenv")
myenv.environment_variables = {"AZUREML_DOWNLOAD_CONCURRENCY":64}

AzureFile Storage

A projektfájlok nem tölthetők fel az AzureFile munkakönyvtárába, mert a tároló túlterhelt:

  • Ha más számítási feladatokhoz, például adatátvitelhez használ fájlmegosztást, a javaslat a blobok használata, hogy a fájlmegosztás szabadon használható legyen a futtatások elküldéséhez.

  • Egy másik lehetőség a számítási feladat két különböző munkaterület közötti felosztása.

ConfigException: Hiányzó hitelesítő adatok miatt nem sikerült kapcsolatot létesíteni az AzureFileService szolgáltatással. Vagy egy fiókkulcsot vagy SAS-jogkivonatot kell összekapcsolni az alapértelmezett munkaterületi blobtárolóval.

Annak érdekében, hogy a tárelérési hitelesítő adatai a munkaterülethez és a társított fájladattárhoz legyenek csatolva, hajtsa végre az alábbi lépéseket:

  1. Lépjen a munkaterületre az Azure Portalon.
  2. Válassza ki a munkaterület Áttekintés lapján található tárolási hivatkozást.
  3. A tárlapon válassza az Access-kulcsokat a bal oldali menüben.
  4. Másolja ki a kulcsot.
  5. Lépjen a munkaterület Azure Machine Tanulás studiójához.
  6. A studióban válassza ki azt a fájladattárat, amelyhez hitelesítési hitelesítő adatokat szeretne megadni.
  7. Válassza a Hitelesítés frissítése lehetőséget.
  8. Illessze be a kulcsot az előző lépésekből.
  9. Válassza a Mentés lehetőséget.

Adatok továbbítása bemenetként

TypeError: FileNotFound: Nincs ilyen fájl vagy könyvtár: Ez a hiba akkor fordul elő, ha a megadott fájl elérési útja nem a fájl helye. Meg kell győződnie arról, hogy a fájlra való hivatkozás módja összhangban van azzal, ahol az adathalmazt a számítási célhoz csatlakoztatta. A determinisztikus állapot biztosítása érdekében javasoljuk, hogy használja az absztrakt útvonalat, amikor egy adathalmazt egy számítási célhoz csatlakoztat. Az alábbi kódban például csatlakoztatjuk az adathalmazt a számítási cél fájlrendszerének gyökeréhez. /tmp

# Note the leading / in '/tmp/dataset'
script_params = {
    '--data-folder': dset.as_named_input('dogscats_train').as_mount('/tmp/dataset'),
} 

Ha nem tartalmazza a kezdő perjelet(/), előtagként kell megadnia a munkakönyvtárat, például a számítási célon, /mnt/batch/.../tmp/dataset hogy jelezze, hová szeretné csatlakoztatni az adathalmazt.

Következő lépések