Trenowanie modeli przy użyciu zestawów danych usługi Azure Machine Learning
DOTYCZY: Zestaw SDK języka Python w wersji 1
Z tego artykułu dowiesz się, jak pracować z zestawami danych usługi Azure Machine Learning w celu trenowania modeli uczenia maszynowego. Zestawy danych można używać w lokalnym lub zdalnym obiekcie docelowym obliczeniowym bez obaw o parametry połączenia lub ścieżki danych.
Aby uzyskać dane ustrukturyzowane, zobacz Korzystanie z zestawów danych w skryptach uczenia maszynowego.
Aby uzyskać dane bez struktury, zobacz Instalowanie plików do zdalnych obiektów docelowych obliczeniowych.
Zestawy danych usługi Azure Machine Learning zapewniają bezproblemową integrację z funkcjami trenowania usługi Azure Machine Learning, takimi jak ScriptRunConfig, HyperDrive i Potoki usługi Azure Machine Learning.
Jeśli nie jesteś gotowy do udostępnienia danych na potrzeby trenowania modelu, ale chcesz załadować dane do notesu na potrzeby eksploracji danych, zobacz, jak eksplorować dane w zestawie danych.
Wymagania wstępne
Aby utworzyć i wytrenować zestawy danych, potrzebne są następujące elementy:
Subskrypcja platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto. Wypróbuj bezpłatną lub płatną wersję usługi Azure Machine Learning już dziś.
Obszar roboczy usługi Azure Machine Learning.
Zainstalowany zestaw SDK usługi Azure Machine Learning dla języka Python (>= 1.13.0), który zawiera
azureml-datasets
pakiet.
Uwaga
Niektóre klasy zestawów danych mają zależności od pakietu azureml-dataprep . W przypadku użytkowników systemu Linux te klasy są obsługiwane tylko w następujących dystrybucjach: Red Hat Enterprise Linux, Ubuntu i Fedora.
Korzystanie z zestawów danych w skryptach trenowania uczenia maszynowego
Jeśli dane ustrukturyzowane nie zostały jeszcze zarejestrowane jako zestaw danych, utwórz zestaw danych tabelarycznych i użyj ich bezpośrednio w skrybacie szkoleniowym dla eksperymentu lokalnego lub zdalnego.
W tym przykładzie utworzysz niezarejestrowany zestaw danych tabelarycznych i określisz go jako argument skryptu w obiekcie ScriptRunConfig na potrzeby trenowania. Jeśli chcesz ponownie użyć tego zestawu tabularDataset z innymi eksperymentami w obszarze roboczym, zobacz , jak zarejestrować zestawy danych w obszarze roboczym.
Tworzenie TabularDataset
Poniższy kod tworzy niezarejestrowany zestaw tabularDataset z adresu URL sieci Web.
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)
Obiekty TabularDataset oferują sposób ładowania danych w tabeli TabularDataset do biblioteki pandas lub Spark DataFrame, dzięki czemu można pracować ze znanymi bibliotekami przygotowywania i trenowania danych bez konieczności opuszczania notesu.
Uzyskiwanie dostępu do zestawu danych w skry skrycie szkoleniowym
Poniższy kod konfiguruje argument --input-data
skryptu, który określisz podczas konfigurowania przebiegu trenowania (zobacz następną sekcję). Gdy tabelaryczny zestaw danych zostanie przekazany jako wartość argumentu, usługa Azure Machine Learning rozpozna go jako identyfikator zestawu danych. Następnie możesz użyć tej wartości argumentu, aby uzyskać dostęp do zestawu danych w skrypcie trenowania (bez konieczności kodowania nazwy lub identyfikatora zestawu danych w skrypcie). Następnie używa to_pandas_dataframe()
metody do załadowania tego zestawu danych do ramki danych biblioteki pandas w celu dalszej eksploracji i przygotowania danych przed rozpoczęciem trenowania.
Uwaga
Jeśli oryginalne źródło danych zawiera wartość NaN, puste ciągi lub puste wartości, gdy używasz to_pandas_dataframe()
metody , te wartości są zastępowane jako wartość null .
Jeśli musisz załadować przygotowane dane do nowego zestawu danych z ramki danych pandas w pamięci, zapisz dane w pliku lokalnym, takim jak parquet, i utwórz nowy zestaw danych z tego pliku. Dowiedz się więcej na temat tworzenia zestawów danych.
%%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()
Konfigurowanie przebiegu trenowania
Obiekt ScriptRunConfig służy do konfigurowania i przesyłania przebiegu trenowania.
Ten kod tworzy obiekt ScriptRunConfig , src
który określa:
- Katalog skryptów dla skryptów. Wszystkie pliki w tym katalogu są przekazywane do węzłów klastra w celu wykonania.
- Skrypt szkoleniowy train_titanic.py.
- Wejściowy zestaw danych do trenowania ,
titanic_ds
jako argument skryptu. Usługa Azure Machine Learning rozwiązuje go z odpowiednim identyfikatorem zestawu danych po przekazaniu go do skryptu. - Docelowy obiekt obliczeniowy dla przebiegu.
- Środowisko przebiegu.
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)
Instalowanie plików do zdalnych celów obliczeniowych
Jeśli masz dane bez struktury, utwórz zestaw plików FileDataset i zainstaluj lub pobierz pliki danych, aby udostępnić je zdalnemu celowi obliczeniowemu na potrzeby trenowania. Dowiedz się, kiedy używać instalacji a pobierania dla eksperymentów trenowania zdalnego.
Poniższy przykład
- Tworzy wejściowy element FileDataset,
mnist_ds
, dla danych szkoleniowych. - Określa, gdzie mają być zapisywane wyniki trenowania, oraz podwyższanie poziomu tych wyników jako fileDataset.
- Instaluje wejściowy zestaw danych do docelowego obiektu obliczeniowego.
Uwaga
Jeśli używasz niestandardowego obrazu podstawowego platformy Docker, musisz zainstalować bezpiecznik za pośrednictwem jako apt-get install -y fuse
zależność do instalacji zestawu danych. Dowiedz się, jak utworzyć niestandardowy obraz kompilacji.
Aby zapoznać się z przykładem notesu, zobacz How to configure a training run with data input and output (Jak skonfigurować przebieg trenowania przy użyciu danych wejściowych i wyjściowych).
Tworzenie FileDatase
Poniższy przykład tworzy niezarejestrowany zestaw plików na mnist_data
podstawie adresów URL sieci Web. Ten zestaw PlikówDataset to dane wejściowe dla przebiegu trenowania.
Dowiedz się więcej na temat tworzenia zestawów danych z innych źródeł.
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)
Gdzie pisać dane wyjściowe trenowania
Możesz określić miejsce zapisu wyników trenowania za pomocą obiektu OutputFileDatasetConfig.
Obiekty OutputFileDatasetConfig umożliwiają:
- Zainstaluj lub przekaż dane wyjściowe przebiegu do określonego magazynu w chmurze.
- Zapisz dane wyjściowe jako plikDataset w następujących obsługiwanych typach magazynu:
- Obiekt blob platformy Azure
- Udział plików platformy Azure
- Usługa Azure Data Lake Storage generacji 1 i 2
- Śledzenie pochodzenia danych między przebiegami trenowania.
Poniższy kod określa, że wyniki trenowania powinny być zapisywane jako plikDataset w outputdataset
folderze w domyślnym magazynie danych obiektów blob. 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'))
Konfigurowanie przebiegu trenowania
Zalecamy przekazanie zestawu danych jako argumentu podczas instalowania za pomocą arguments
parametru konstruktora ScriptRunConfig
. W ten sposób ścieżka danych (punkt instalowania) w skrycie trenowania jest pobierana za pośrednictwem argumentów. Dzięki temu możesz użyć tego samego skryptu szkoleniowego na potrzeby lokalnego debugowania i zdalnego trenowania na dowolnej platformie w chmurze.
W poniższym przykładzie zostanie utworzona konfiguracja ScriptRunConfig, która przekazuje element FileDataset za pośrednictwem elementu arguments
. Po przesłaniu przebiegu pliki danych, do których odwołuje się zestaw danych mnist_ds
, są instalowane do docelowego obiektu obliczeniowego, a wyniki trenowania są zapisywane w określonym outputdataset
folderze w domyślnym magazynie danych.
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)
Prosty skrypt trenowania
Poniższy skrypt jest przesyłany za pośrednictwem skryptu ScriptRunConfig. Odczytuje mnist_ds
zestaw danych jako dane wejściowe i zapisuje plik outputdataset
w folderze w domyślnym magazynie danych obiektów blob. def_blob_store
%%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)
Instalowanie a pobieranie
Instalowanie lub pobieranie plików dowolnego formatu jest obsługiwane w przypadku zestawów danych utworzonych na podstawie usługi Azure Blob Storage, Azure Files, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure SQL Database i Azure Database for PostgreSQL.
Podczas instalowania zestawu danych należy dołączyć pliki, do których odwołuje się zestaw danych, do katalogu (punkt instalacji) i udostępnić go w docelowym obiekcie obliczeniowym. Instalowanie jest obsługiwane w przypadku obliczeń opartych na systemie Linux, w tym obliczeń usługi Azure Machine Learning, maszyn wirtualnych i usługi HDInsight. Jeśli rozmiar danych przekracza rozmiar dysku obliczeniowego, pobieranie nie jest możliwe. W tym scenariuszu zalecamy instalowanie, ponieważ podczas przetwarzania są ładowane tylko pliki danych używane przez skrypt.
Po pobraniu zestawu danych wszystkie pliki, do których odwołuje się zestaw danych, są pobierane do docelowego obiektu obliczeniowego. Pobieranie jest obsługiwane dla wszystkich typów obliczeniowych. Jeśli skrypt przetwarza wszystkie pliki, do których odwołuje się zestaw danych, a dysk obliczeniowy może zmieścić się w pełnym zestawie danych, zaleca się uniknięcie obciążenia związanego z przesyłaniem strumieniowym danych z usług magazynu. Aby uzyskać informacje o pobieraniu z wieloma węzłami, zobacz , jak uniknąć ograniczania przepustowości.
Uwaga
Nazwa ścieżki pobierania nie powinna być dłuższa niż 255 znaków alfanumerycznych dla systemu operacyjnego Windows. W przypadku systemu operacyjnego Linux nazwa ścieżki pobierania nie powinna być dłuższa niż 4096 znaków alfanumerycznych. Ponadto w przypadku systemu operacyjnego Linux nazwa pliku (która jest ostatnim segmentem ścieżki /path/to/file/{filename}
pobierania) nie powinna być dłuższa niż 255 znaków alfanumerycznych.
Poniższy kod instaluje dataset
się w katalogu tymczasowym pod adresem 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)
Pobieranie zestawów danych w skryptach uczenia maszynowego
Zarejestrowane zestawy danych są dostępne lokalnie i zdalnie w klastrach obliczeniowych, takich jak obliczenia usługi Azure Machine Learning. Aby uzyskać dostęp do zarejestrowanego zestawu danych między eksperymentami, użyj następującego kodu, aby uzyskać dostęp do obszaru roboczego i pobrać zestaw danych, który został użyty w poprzednim przesłanym przebiegu. Domyślnie get_by_name()
metoda w Dataset
klasie zwraca najnowszą wersję zestawu danych zarejestrowanego w obszarze roboczym.
%%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()
Uzyskiwanie dostępu do kodu źródłowego podczas trenowania
Usługa Azure Blob Storage ma większą szybkość przepływności niż udział plików platformy Azure i będzie skalowana do dużej liczby zadań uruchomionych równolegle. Z tego powodu zalecamy skonfigurowanie przebiegów do używania usługi Blob Storage do przesyłania plików kodu źródłowego.
Poniższy przykład kodu określa w konfiguracji przebiegu, który magazyn danych obiektu blob ma być używany na potrzeby transferów kodu źródłowego.
# workspaceblobstore is the default blob storage
src.run_config.source_directory_data_store = "workspaceblobstore"
Przykłady notesów
- Aby uzyskać więcej przykładów i pojęć dotyczących zestawu danych, zobacz notesy zestawów danych.
- Zobacz, jak parametryzować zestawy danych w potokach uczenia maszynowego.
Rozwiązywanie problemów
Inicjowanie zestawu danych nie powiodło się: Upłynął limit czasu oczekiwania na przygotowanie punktu instalacji:
- Jeśli nie masz żadnych reguł sieciowej grupy zabezpieczeń dla ruchu wychodzącego i używasz
azureml-sdk>=1.12.0
polecenia , zaktualizujazureml-dataset-runtime
i jej zależności, aby być najnowszymi dla określonej wersji pomocniczej lub jeśli używasz jej w przebiegu, utwórz ponownie środowisko, aby mieć najnowszą poprawkę z poprawką. - Jeśli używasz programu
azureml-sdk<1.12.0
, przeprowadź uaktualnienie do najnowszej wersji. - Jeśli masz reguły sieciowej grupy zabezpieczeń dla ruchu wychodzącego, upewnij się, że istnieje reguła ruchu wychodzącego, która zezwala na cały ruch dla tagu
AzureResourceMonitor
usługi .
Inicjowanie zestawu danych nie powiodło się: wyjątek StreamAccessException został spowodowany przez wyjątek ThrottlingException
W przypadku pobierania plików z wieloma węzłami wszystkie węzły mogą próbować pobrać wszystkie pliki z zestawu danych plików z usługi Azure Storage, co powoduje błąd ograniczania przepustowości. Aby uniknąć ograniczania przepustowości, początkowo ustaw zmienną środowiskową AZUREML_DOWNLOAD_CONCURRENCY
na wartość osiem razy więcej rdzeni procesora CPU podzieloną przez liczbę węzłów. Skonfigurowanie wartości dla tej zmiennej środowiskowej może wymagać eksperymentowania, więc wcześniejsze wskazówki są punktem wyjścia.
W poniższym przykładzie przyjęto założenie, że 32 rdzenie i 4 węzły.
from azureml.core.environment import Environment
myenv = Environment(name="myenv")
myenv.environment_variables = {"AZUREML_DOWNLOAD_CONCURRENCY":64}
AzureFile Storage
Nie można przekazać plików projektu do katalogu roboczego w usłudze AzureFile, ponieważ magazyn jest przeciążony:
Jeśli używasz udziału plików dla innych obciążeń, takich jak transfer danych, zaleca się użycie obiektów blob, aby udział plików był bezpłatny do przesyłania przebiegów.
Możesz również podzielić obciążenie między dwa różne obszary robocze.
ConfigException: Nie można utworzyć połączenia z usługą AzureFileService z powodu brakujących poświadczeń. Klucz konta lub token SAS musi być połączony z domyślnym magazynem obiektów blob obszaru roboczego.
Aby upewnić się, że poświadczenia dostępu do magazynu są połączone z obszarem roboczym i skojarzonym magazynem danych plików, wykonaj następujące kroki:
- Przejdź do obszaru roboczego w witrynie Azure Portal.
- Wybierz link magazynu na stronie Przegląd obszaru roboczego.
- Na stronie magazynu wybierz pozycję Klucze dostępu w menu po lewej stronie.
- Skopiuj klucz.
- Przejdź do usługi Azure Machine Learning Studio dla swojego obszaru roboczego.
- W studio wybierz magazyn danych plików, dla którego chcesz podać poświadczenia uwierzytelniania.
- Wybierz pozycję Aktualizuj uwierzytelnianie.
- Wklej klucz z poprzednich kroków.
- Wybierz pozycję Zapisz.
Przekazywanie danych jako danych wejściowych
TypeError: FileNotFound: Nie ma takiego pliku lub katalogu: ten błąd występuje, jeśli w podanej ścieżce pliku nie ma lokalizacji pliku. Należy upewnić się, że sposób odwoływania się do pliku jest zgodny z miejscem, w którym zestaw danych został zainstalowany na docelowym obiekcie obliczeniowym. Aby zapewnić stan deterministyczny, zalecamy użycie ścieżki abstrakcyjnej podczas instalowania zestawu danych do docelowego obiektu obliczeniowego. Na przykład w poniższym kodzie instalujemy zestaw danych w katalogu głównym systemu plików docelowego /tmp
obiektu obliczeniowego .
# Note the leading / in '/tmp/dataset'
script_params = {
'--data-folder': dset.as_named_input('dogscats_train').as_mount('/tmp/dataset'),
}
Jeśli nie dołączysz ukośnika wiodącego do przodu "/", musisz na przykład prefiksować katalog roboczy w docelowym obiekcie obliczeniowym, /mnt/batch/.../tmp/dataset
aby wskazać, gdzie ma zostać zainstalowany zestaw danych.
Następne kroki
Automatyczne trenowanie modeli uczenia maszynowego za pomocą zestawów tabularDataset.
Trenowanie modeli klasyfikacji obrazów za pomocą zestawów PlikówDataset.