Melatih model dengan himpunan data Azure Machine Learning

Perhatian

Artikel ini mereferensikan CentOS, distribusi Linux yang mendekati status End Of Life (EOL). Harap pertimbangkan penggunaan dan perencanaan Anda yang sesuai. Untuk informasi selengkapnya, lihat panduan Akhir Masa Pakai CentOS.

BERLAKU UNTUK:SDK Python azureml v1

Dalam artikel ini, Anda mempelajari cara bekerja dengan himpunan data Azure Machine Learning untuk melatih model pembelajaran mesin. Anda dapat menggunakan himpunan data di target komputasi lokal atau jarak jauh tanpa khawatir tentang string koneksi atau jalur data.

Himpunan data Azure Machine Learning menyediakan integrasi yang mulus dengan fungsi pelatihan Azure Machine Learning seperti ScriptRunConfig, HyperDrive, dan alur Azure Machine Learning.

Jika Anda belum siap untuk membuat data tersedia untuk pelatihan model, tetapi ingin memuat data ke notebook untuk eksplorasi data, lihat cara menjelajahi data di himpunan data.

Prasyarat

Untuk membuat dan bekerja dengan himpunan data, Anda memerlukan:

Catatan

Beberapa kelas Himpunan data memiliki dependensi pada paket azureml-dataprep. Untuk pengguna Linux, kelas tersebut hanya didukung pada distribusi berikut: Red Hat Enterprise Linux, Ubuntu, Fedora, dan CentOS.

Memakai himpunan data dalam skrip pelatihan pembelajaran mesin

Jika Anda memiliki data terstruktur yang belum terdaftar sebagai himpunan data, buat TabularDataset dan gunakan langsung di skrip pelatihan Anda untuk eksperimen lokal atau jarak jauh.

Dalam contoh ini, Anda membuat TabularDataset yang tidak terdaftar dan menentukannya sebagai argumen skrip di objek ScriptRunConfig untuk pelatihan. Jika Anda ingin menggunakan kembali TabularDataset ini dengan eksperimen lain di ruang kerja Anda, lihat cara mendaftarkan himpunan data ke ruang kerja Anda.

Membuat TabularDataset

Kode berikut membuat TabularDataset yang tidak terdaftar dari url 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)

Objek TabularDataset memberi Anda kemampuan untuk memuat data dalam TabularDataset ke dalam pandas atau Spark DataFrame sehingga Anda dapat bekerja dengan persiapan data dan pustaka pelatihan yang sudah dikenal tanpa harus meninggalkan buku catatan Anda.

Mengakses himpunan data dalam skrip pelatihan

Kode berikut mengonfigurasi argumen skrip --input-data yang akan Anda tentukan saat mengonfigurasi eksekusi pelatihan (lihat bagian berikutnya). Saat himpunan data tabular diteruskan sebagai nilai argumen, Azure Pembelajaran Mesin akan menyelesaikannya ke ID himpunan data, yang kemudian dapat Anda gunakan untuk mengakses himpunan data dalam skrip pelatihan Anda (tanpa harus mengodekan nama atau ID himpunan data dalam skrip Anda). Kemudian akan digunakan metode to_pandas_dataframe() untuk memuat himpunan data itu ke dalam dataframe pandas untuk eksplorasi dan persiapan data lebih lanjut sebelum pelatihan.

Catatan

Jika sumber data asli Anda berisi NaN, string kosong, atau nilai kosong, saat Anda menggunakan to_pandas_dataframe(), maka nilai tersebut diganti sebagai nilai Null.

Jika Anda perlu memuat data yang disiapkan ke dalam himpunan data baru dari dataframe pandas dalam memori, tulis data ke file lokal, seperti parket, dan buat himpunan data baru dari file tersebut. Pelajari lebih lanjut cara membuat himpunan data.

%%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()

Mengonfigurasi eksekusi pelatihan

Objek ScriptRunConfig digunakan untuk mengonfigurasi dan mengirimkan eksekusi pelatihan.

Kode ini membuat objek ScriptRunConfig, src, yang menentukan:

  • Direktori skrip untuk skrip Anda. Semua file dalam direktori ini diunggah ke dalam node kluster untuk eksekusi.
  • Naskah pelatihan, train_titanic.py.
  • Set data input untuk pelatihan, titanic_ds, sebagai argumen skrip. Azure Pembelajaran Mesin akan mengatasinya ke ID himpunan data yang sesuai saat diteruskan ke skrip Anda.
  • Target komputasi untuk eksekusi.
  • Lingkungan untuk eksekusi.
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)                             

Pasang file ke target komputasi jarak jauh

Jika Anda memiliki data yang tidak terstruktur, buat FileDataset dan pasang atau unduh file data Anda untuk membuatnya tersedia untuk target komputasi jarak jauh untuk pelatihan. Pelajari tentang kapan menggunakan mount vs. download untuk eksperimen pelatihan jarak jauh.

Contoh berikut,

  • Membuat input FileDataset, mnist_ds, untuk data pelatihan Anda.
  • Menentukan tempat menulis hasil pelatihan, dan untuk mempromosikan hasil tersebut sebagai FileDataset.
  • Memasang himpunan data input ke target komputasi.

Catatan

Jika Anda menggunakan gambar dasar Docker kustom, Anda harus menginstal sekering melalui apt-get install -y fuse sebagai dependensi untuk pemasangan himpunan data agar berfungsi. Pelajari cara membuat gambar build kustom.

Untuk contoh notebook, lihat Cara mengonfigurasi eksekusi pelatihan dengan input dan output data.

Membuat FileDataset

Contoh berikut membuat FileDataset yang tidak terdaftar, mnist_data dari url web. FileDataset ini adalah data input untuk menjalankan pelatihan Anda.

Pelajari selengkapnya tentang cara membuat himpunan data dari sumber lain.


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)

Tempat menulis output pelatihan

Anda dapat menentukan tempat menulis hasil pelatihan Anda dengan objek OutputFileDatasetConfig.

Objek OutputFileDatasetConfig memungkinkan Anda untuk:

  • Memasang atau mengunggah output eksekusi ke penyimpanan cloud yang Anda tentukan.
  • Simpan output sebagai FileDataset ke jenis penyimpanan yang didukung ini:
    • Blob Azure
    • Berbagi file Azure
    • Azure Data Lake Storage generasi 1 dan 2
  • Lacak garis keturunan data antara pelatihan yang dijalankan.

Kode berikut menentukan bahwa hasil pelatihan harus disimpan sebagai FileDataset di folder outputdataset di datastore blob default, 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'))

Mengonfigurasi eksekusi pelatihan

Sebaiknya lewati himpunan data sebagai argumen saat memasang melalui parameter arguments dari konstruktor ScriptRunConfig. Dengan demikian, Anda mendapatkan jalur data (titik pemasangan) dalam skrip pelatihan Anda melalui argumen. Dengan cara ini, Anda dapat menggunakan skrip pelatihan yang sama untuk penelusuran kesalahan lokal dan pelatihan jarak jauh di platform cloud mana pun.

Contoh berikut membuat ScriptRunConfig yang lolos di FileDataset melalui arguments. Setelah Anda menjalankan, file data yang dirujuk oleh himpunan data mnist_ds dipasang ke target komputasi, dan hasil pelatihan disimpan ke folder outputdataset yang ditentukan di datastore default.

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)

Skrip pelatihan sederhana

Skrip berikut dikirimkan melalui ScriptRunConfig. Skrip ini membaca mnist_ds himpunan data sebagai input, dan menulis file ke folder outputdataset di penyimpanan data blob default, 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)

Pasang vs unduh

Memasang atau mengunduh file dalam format apa pun yang didukung untuk himpunan data yang dibuat dari Azure Blob storage, Azure Files, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure SQL Database, dan Azure Database for PostgreSQL.

Saat Anda memasang himpunan data, Anda melampirkan file yang direferensikan oleh himpunan data ke direktori (titik pasang) dan membuatnya tersedia pada target komputasi. Pemasangan didukung untuk komputasi berbasis Linux, termasuk Azure Machine Learning Compute, komputer virtual, dan HDInsight. Jika ukuran data Anda melebihi ukuran disk komputasi, pengunduhan tidak dimungkinkan. Untuk skenario ini, kami sarankan pemasangan karena hanya file data yang digunakan oleh skrip Anda yang dimuat pada saat pemrosesan.

Saat Anda mengunduh himpunan data, semua file yang direferensikan oleh himpunan data akan diunduh ke target komputasi. Pengunduhan didukung untuk semua jenis komputasi. Jika skrip Anda memproses semua file yang direferensikan oleh set data, dan disk komputasi Anda dapat sesuai dengan set data lengkap Anda, pengunduhan disarankan untuk menghindari overhead data streaming dari layanan penyimpanan. Untuk pengunduhan multi-node, lihat cara menghindari pembatasan.

Catatan

Nama jalur unduhan tidak boleh lebih panjang dari 255 karakter alfa-numerik untuk OS Windows. Untuk OS Linux, nama jalur unduhan tidak boleh lebih panjang dari 4,096 karakter alfa-numerik. Juga, untuk nama file Linux OS (yang merupakan segmen terakhir dari jalur unduhan /path/to/file/{filename}) tidak boleh lebih dari 255 karakter alfa-numerik.

Kode berikut ini memasang dataset ke direktori sementara di 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)

Mendapatkan himpunan data dalam skrip pembelajaran mesin

Himpunan data terdaftar dapat diakses secara lokal dan jarak jauh pada klaster komputasi seperti komputasi Azure Machine Learning. Untuk mengakses himpunan data terdaftar di seluruh eksperimen, gunakan kode berikut untuk mengakses ruang kerja Anda dan dapatkan himpunan data yang digunakan dalam eksekusi yang Anda kirimkan sebelumnya. Secara default, metode get_by_name() pada kelas Dataset mengembalikan versi terbaru dari himpunan data yang terdaftar di ruang kerja.

%%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()

Mengakses kode sumber selama pelatihan

Azure Blob Storage memiliki kecepatan throughput yang lebih tinggi daripada berbagi file Azure dan akan menskalakan ke sejumlah besar pekerjaan yang dimulai secara paralel. Untuk alasan ini, sebaiknya konfigurasi eksekusi Anda agar menggunakan penyimpanan Blob untuk mentransfer file kode sumber.

Contoh kode berikut menentukan blob datastore mana yang akan digunakan untuk transfer kode sumber dalam konfigurasi eksekusi.

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

Contoh buku catatan

Pemecahan Masalah

Inisialisasi himpunan data gagal: Waktu menunggu titik pasang agar siap telah habis:

  • Jika Anda tidak memiliki aturan kelompok keamanan jaringan keluar dan menggunakan azureml-sdk>=1.12.0, perbarui azureml-dataset-runtime dan dependensinya menjadi yang terbaru untuk versi minor tertentu, atau jika Anda menggunakannya dalam eksekusi, buat ulang lingkungan Anda sehingga dapat memiliki patch terbaru dengan perbaikan.
  • Jika Anda menggunakan azureml-sdk<1.12.0, tingkatkan ke versi terbaru.
  • Jika Anda memiliki aturan NSG keluar, pastikan ada aturan keluar yang memungkinkan semua lalu lintas untuk tag layanan AzureResourceMonitor.

Inisialisasi himpunan data gagal: StreamAccessException disebabkan oleh ThrottlingException

Untuk pengunduhan file multi-simpul, semua simpul mungkin mencoba mengunduh semua file dalam himpunan data file dari layanan Azure Storage, yang mengakibatkan kesalahan pembatasan. Untuk menghindari pembatasan, awalnya atur variabel lingkungan AZUREML_DOWNLOAD_CONCURRENCY ke nilai dari 8 kali jumlah inti CPU yang dibagi dengan jumlah node. Menyiapkan nilai untuk variabel lingkungan ini mungkin memerlukan beberapa eksperimen, jadi panduan yang disebutkan di atas adalah titik awal.

Contoh berikut mengasumsikan 32 inti dan 4 simpul.

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

Penyimpanan AzureFile

Tidak dapat mengunggah file proyek ke direktori kerja di AzureFile karena penyimpanan kelebihan beban:

  • Jika Anda menggunakan berbagi file untuk beban kerja lain, seperti transfer data, rekomendasinya adalah menggunakan blob sehingga berbagi file gratis untuk digunakan untuk mengirimkan eksekusi.

  • Pilihan lain adalah membagi beban kerja antara dua ruang kerja yang berbeda.

ConfigException: Tidak dapat membuat koneksi ke AzureFileService karena info masuk yang hilang. Kunci Akun atau Token SAS harus ditautkan ke gudang blob ruang kerja default.

Untuk memastikan kredensial akses penyimpanan Anda ditautkan ke ruang kerja dan penyimpanan data file terkait, selesaikan langkah-langkah berikut:

  1. Buka ruang kerja Anda di portal Azure.
  2. Pilih tautan penyimpanan di halaman Ikhtisar ruang kerja.
  3. Pada halaman penyimpanan, pilih Tombol akses di menu sisi kiri.
  4. Salin kunci.
  5. Navigasi ke studio Azure Machine Learning untuk ruang kerja Anda.
  6. Di studio, pilih datastore file yang ingin Anda berikan kredensial autentikasinya.
  7. Pilih Perbarui autentikasi.
  8. Tempelkan tombol dari langkah-langkah sebelumnya.
  9. Pilih Simpan.

Meneruskan data sebagai input

TypeError: FileNotFound: Tidak ada file atau direktori seperti itu: Kesalahan ini terjadi jika jalur file yang Anda berikan bukan tempat file berada. Anda perlu memastikan cara Anda merujuk ke file konsisten dengan tempat Anda memasang himpunan data pada target komputasi Anda. Untuk memastikan keadaan deterministik, sebaiknya gunakan jalur abstrak saat memasang himpunan data ke target komputasi. Misalnya, dalam kode berikut kami memasang himpunan data di bawah akar sistem file dari target komputasi, /tmp.

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

Jika Anda tidak menyertakan garis miring ke depan, '/', Anda harus mengawali direktori kerja misalnya /mnt/batch/.../tmp/dataset pada target komputasi untuk menunjukkan tempat Anda ingin himpunan data dipasang.

Langkah berikutnya