Share via


Azure Machine Learning veri kümeleri ile modelleri eğitin

Dikkat

Bu makalede, Kullanım Süresi Sonu (EOL) durumuna yakın bir Linux dağıtımı olan CentOS'a başvuruda bulunur. Lütfen kullanımınızı ve buna uygun planlamayı göz önünde bulundurun. Daha fazla bilgi için bkz . CentOS Kullanım Süresi Sonu kılavuzu.

ŞUNUN IÇIN GEÇERLIDIR:Python SDK azureml v1

Bu makalede, makine öğrenmesi modellerini eğitmek için Azure Machine Learning veri kümeleriyle çalışmayı öğreneceksiniz. veri kümelerini bağlantı dizesi veya veri yolları konusunda endişelenmeden yerel veya uzak işlem hedefinizde kullanabilirsiniz.

Azure Machine Learning veri kümeleri ScriptRunConfig, HyperDrive ve Azure Machine Learning işlem hatları gibi Azure Machine Learning eğitim işlevleriyle sorunsuz bir tümleştirme sağlar.

Verilerinizi model eğitimi için kullanılabilir hale getirmek için hazır değilseniz ancak verilerinizi araştırmak üzere not defterinize yüklemek istiyorsanız, bkz . Veri kümenizdeki verileri keşfetme.

Önkoşullar

Veri kümeleri oluşturmak ve veri kümeleriyle eğitmek için şunları yapmanız gerekir:

Not

Bazı Veri kümesi sınıflarının azureml-dataprep paketine bağımlılıkları vardır. Linux kullanıcıları için bu sınıflar yalnızca şu dağıtımlarda desteklenir: Red Hat Enterprise Linux, Ubuntu, Fedora ve CentOS.

Makine öğrenmesi eğitim betiklerinde veri kümelerini kullanma

Henüz veri kümesi olarak kaydedilmemiş yapılandırılmış verileriniz varsa, bir TabularDataset oluşturun ve yerel veya uzak denemeniz için doğrudan eğitim betiğinizde kullanın.

Bu örnekte, kaydedilmemiş bir TabularDataset oluşturur ve eğitim için ScriptRunConfig nesnesinde betik bağımsız değişkeni olarak belirtirsiniz. Bu TabularDataset'i çalışma alanınızdaki diğer denemelerle yeniden kullanmak istiyorsanız, veri kümelerini çalışma alanınıza kaydetme konusuna bakın.

TabularDataset oluşturma

Aşağıdaki kod, web URL'sinden kaydedilmemiş bir TabularDataset oluşturur.

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)

TabularDataset nesneleri, not defterinizden çıkmak zorunda kalmadan bilindik veri hazırlama ve eğitim kitaplıklarıyla çalışabilmeniz için TabularDataset'inizdeki verileri pandas veya Spark DataFrame'e yükleme olanağı sağlar.

Eğitim betiğinde veri kümesine erişme

Aşağıdaki kod, eğitim çalıştırmanızı yapılandırırken belirteceğiniz bir betik bağımsız değişkeni --input-data yapılandırılır (sonraki bölüme bakın). Tablolu veri kümesi bağımsız değişken değeri olarak geçirildiğinde, Azure Machine Learning bunu veri kümesinin kimliğine çözümler. Bunu eğitim betiğinizdeki veri kümesine erişmek için kullanabilirsiniz (betiğinizdeki veri kümesinin adını veya kimliğini sabit kodlamak zorunda kalmadan). Daha sonra, eğitimden önce daha fazla veri keşfi ve hazırlık için bu veri kümesini bir pandas veri çerçevesine yüklemek için yöntemini kullanır to_pandas_dataframe() .

Not

Özgün veri kaynağınızda NaN, boş dizeler veya boş değerler varsa, kullandığınızda to_pandas_dataframe()bu değerler Null değer olarak değiştirilir.

Hazırlanan verileri bellek içi pandas veri çerçevesinden yeni bir veri kümesine yüklemeniz gerekiyorsa, verileri parquet gibi yerel bir dosyaya yazın ve bu dosyadan yeni bir veri kümesi oluşturun. Veri kümeleri oluşturma hakkında daha fazla bilgi edinin.

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

Eğitim çalıştırmasını yapılandırma

ScriptRunConfig nesnesi, eğitim çalıştırmasını yapılandırmak ve göndermek için kullanılır.

Bu kod, srcşunu belirten bir ScriptRunConfig nesnesi oluşturur:

  • Betikleriniz için bir betik dizini. Bu dizindeki dosyaların tümü yürütülmek üzere küme düğümlerine yüklenir.
  • Eğitim betiği, train_titanic.py.
  • Betik bağımsız değişkeni olarak eğitim titanic_dsiçin giriş veri kümesi. Azure Machine Learning bu sorunu betiğinize geçirildiğinde veri kümesinin ilgili kimliğine çözümleyecektir.
  • Çalıştırma için işlem hedefi.
  • Çalıştırmanın ortamı.
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)                             

Dosyaları uzak işlem hedeflerine bağlama

Yapılandırılmamış verileriniz varsa bir FileDataset oluşturun ve eğitim için uzak işlem hedefiniz için kullanılabilir hale getirmek için veri dosyalarınızı bağlayın veya indirin. Uzaktan eğitim denemeleriniz için bağlama ve indirmenin ne zaman kullanılacağını öğrenin.

Aşağıdaki örnek,

  • Eğitim verileriniz için bir FileDataset , mnist_dsgirişi oluşturur.
  • Eğitim sonuçlarının nereye yazılmasını ve bu sonuçların FileDataset olarak yükseltileceği yeri belirtir.
  • Giriş veri kümesini işlem hedefine bağlar.

Not

Özel bir Docker temel görüntüsü kullanıyorsanız, veri kümesi bağlamanın çalışması için bağımlılık olarak aracılığıyla apt-get install -y fuse birleştirmeyi yüklemeniz gerekir. Özel derleme görüntüsü oluşturmayı öğrenin.

Not defteri örneği için bkz . Veri girişi ve çıkışıyla eğitim çalıştırmasını yapılandırma.

FileDataset Oluşturma

Aşağıdaki örnek, mnist_data web URL'lerinden kaydedilmemiş bir FileDataset oluşturur. Bu FileDataset, eğitim çalıştırmanızın giriş verileridir.

Diğer kaynaklardan veri kümeleri oluşturma hakkında daha fazla bilgi edinin.


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)

Eğitim çıktısı nereye yazılır?

OutputFileDatasetConfig nesnesiyle eğitim sonuçlarınızın nereye yazılacağını belirtebilirsiniz.

OutputFileDatasetConfig nesneleri şunları yapmanızı sağlar:

  • Bir çalıştırmanın çıkışını belirttiğiniz bulut depolama alanına bağlayın veya karşıya yükleyin.
  • Çıkışı şu desteklenen depolama türlerine FileDataset olarak kaydedin:
    • Azure blobu
    • Azure dosya paylaşımı
    • Azure Data Lake Depolama nesil 1 ve 2
  • Eğitim çalıştırmaları arasındaki veri kökenini izleyin.

Aşağıdaki kod, eğitim sonuçlarının varsayılan blob veri deposundaki outputdatasetdef_blob_storeklasörüne FileDataset olarak kaydedilmesi gerektiğini belirtir.

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'))

Eğitim çalıştırmasını yapılandırma

Oluşturucunun parametresi ScriptRunConfig aracılığıyla arguments bağlanırken veri kümesini bağımsız değişken olarak geçirmenizi öneririz. Bunu yaptığınızda, bağımsız değişkenler aracılığıyla eğitim betiğinizdeki veri yolunu (bağlama noktası) alırsınız. Bu şekilde, herhangi bir bulut platformunda yerel hata ayıklama ve uzaktan eğitim için aynı eğitim betiğini kullanabilirsiniz.

Aşağıdaki örnek, aracılığıyla argumentsFileDataset'e geçen bir ScriptRunConfig oluşturur. Çalıştırmayı gönderdikten sonra, veri kümesi mnist_ds tarafından başvurulan veri dosyaları işlem hedefine bağlanır ve eğitim sonuçları varsayılan veri deposunda belirtilen outputdataset klasöre kaydedilir.

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)

Basit eğitim betiği

Aşağıdaki betik ScriptRunConfig aracılığıyla gönderilir. Veri kümesini girdi olarak okur mnist_ds ve dosyayı outputdataset varsayılan blob veri deposundaki def_blob_storeklasörüne yazar.

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

Bağlama ve indirme karşılaştırması

Azure Blob depolama, Azure Dosyalar, Azure Data Lake Storage 1. Nesil, Azure Data Lake Storage 2. Nesil, Azure SQL Veritabanı ve PostgreSQL için Azure Veritabanı.

Bir veri kümesini bağladığınızda, veri kümesi tarafından başvuruda bulunulan dosyaları bir dizine (bağlama noktası) ekler ve işlem hedefinde kullanılabilir hale getirirsiniz. Bağlama, Azure Machine Learning İşlem, sanal makineler ve HDInsight gibi Linux tabanlı işlemlerde desteklenir. Veri boyutunuz işlem diski boyutunu aşarsa indirme işlemi mümkün değildir. Bu senaryoda, yalnızca betiğiniz tarafından kullanılan veri dosyaları işleme sırasında yüklendiğinden bağlamanızı öneririz.

Bir veri kümesini indirdiğinizde, veri kümesi tarafından başvuruda bulunılan tüm dosyalar işlem hedefine indirilir. İndirme işlemi tüm işlem türleri için desteklenir. Betiğiniz veri kümesi tarafından başvuruda bulunan tüm dosyaları işliyorsa ve işlem diskiniz tam veri kümenize sığabiliyorsa, depolama hizmetlerinden veri akışı yükünü önlemek için indirmeniz önerilir. Çok düğümlü indirmeler için bkz . Azaltmayı önleme.

Not

İndirme yolu adı, Windows işletim sistemi için 255 alfasayısal karakterden uzun olmamalıdır. Linux işletim sistemi için indirme yolu adı 4.096 alfasayısal karakterden uzun olmamalıdır. Ayrıca Linux işletim sistemi için dosya adı (indirme yolunun /path/to/file/{filename}son bölümüdür) 255 alfasayısal karakterden uzun olmamalıdır.

Aşağıdaki kod şu konumdaki temp dizinine bağlar dataset : 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)

Makine öğrenmesi betiklerinde veri kümeleri alma

Kayıtlı veri kümelerine Azure Machine Learning işlemleri gibi işlem kümelerinde hem yerel hem de uzaktan erişilebilir. Denemeler arasında kayıtlı veri kümenize erişmek için aşağıdaki kodu kullanarak çalışma alanınıza erişin ve daha önce gönderdiğiniz çalıştırmada kullanılan veri kümesini alın. Varsayılan olarak, sınıfındaki get_by_name()Dataset yöntemi çalışma alanına kayıtlı veri kümesinin en son sürümünü döndürür.

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

Eğitim sırasında kaynak koduna erişme

Azure Blob depolama, Azure dosya paylaşımından daha yüksek aktarım hızına sahiptir ve paralel olarak başlatılan çok sayıda iş için ölçeklendirilir. Bu nedenle, çalıştırmalarınızı kaynak kod dosyalarını aktarmak için Blob depolama kullanacak şekilde yapılandırmanızı öneririz.

Aşağıdaki kod örneği, çalıştırma yapılandırmasında kaynak kod aktarımları için hangi blob veri deposunun kullanılacağını belirtir.

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

Not defteri örnekleri

Sorun giderme

Veri kümesi başlatılamadı: Bağlama noktasının hazır olması beklenmek zaman aşımına uğradı:

  • Giden ağ güvenlik grubu kurallarınız yoksa ve kullanıyorsanız azureml-sdk>=1.12.0, güncelleştirme ve bağımlılıklarını belirli bir ikincil sürüm için en son sürüm olacak şekilde güncelleştirin azureml-dataset-runtime veya bir çalıştırmada kullanıyorsanız, düzeltmeyle birlikte en son düzeltme ekine sahip olabilmesi için ortamınızı yeniden oluşturun.
  • kullanıyorsanız azureml-sdk<1.12.0en son sürüme yükseltin.
  • Giden NSG kurallarınız varsa, hizmet etiketi AzureResourceMonitoriçin tüm trafiğe izin veren bir giden kuralı olduğundan emin olun.

Veri kümesi başlatılamadı: StreamAccessException'a ThrottlingException neden oldu

Çok düğümlü dosya indirmeleri için tüm düğümler Azure Depolama hizmetinden dosya veri kümesindeki tüm dosyaları indirmeye çalışabilir ve bu da azaltma hatasına neden olur. Azaltmayı önlemek için, ortam değişkenini AZUREML_DOWNLOAD_CONCURRENCY başlangıçta düğüm sayısına bölünen CPU çekirdeği sayısının sekiz katı bir değere ayarlayın. Bu ortam değişkeni için bir değer ayarlamak için biraz deneme gerekebilir, bu nedenle yukarıda belirtilen kılavuz bir başlangıç noktasıdır.

Aşağıdaki örnekte 32 çekirdek ve 4 düğüm varsayılmaktadır.

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

AzureFile depolama

Depolama alanı aşırı yüklendiğinden proje dosyaları AzureFile'da çalışma dizinine yüklenemiyor:

  • Veri aktarımı gibi diğer iş yükleri için dosya paylaşımı kullanıyorsanız, dosya paylaşımının çalıştırmaları göndermek için ücretsiz olarak kullanılabilmesi için blobları kullanmanız önerilir.

  • Başka bir seçenek de iş yükünü iki farklı çalışma alanı arasında bölmektir.

ConfigException: Eksik kimlik bilgileri nedeniyle AzureFileService bağlantısı oluşturulamadı. Hesap Anahtarı veya SAS belirtecinin varsayılan çalışma alanı blob deposuna bağlanması gerekir.

Depolama erişim kimlik bilgilerinizin çalışma alanına ve ilişkili dosya veri deposuna bağlı olduğundan emin olmak için aşağıdaki adımları tamamlayın:

  1. Azure portalında çalışma alanınıza gidin.
  2. Çalışma alanına Genel Bakış sayfasında depolama bağlantısını seçin.
  3. Depolama sayfasında, sol taraftaki menüden Erişim anahtarları'nı seçin.
  4. Anahtarı kopyalayın.
  5. Çalışma alanınızın Azure Machine Learning stüdyosu gidin.
  6. Stüdyoda, kimlik doğrulaması kimlik bilgilerini sağlamak istediğiniz dosya veri depolarını seçin.
  7. Kimlik doğrulamayı güncelleştir'i seçin.
  8. Önceki adımlardan anahtarı yapıştırın.
  9. Kaydet'i seçin.

Verileri giriş olarak geçirme

TypeError: FileNotFound: Böyle bir dosya veya dizin yok: Sağladığınız dosya yolu dosyanın bulunduğu yerde değilse bu hata oluşur. Dosyaya başvurma şeklinizin, veri kümenizi işlem hedefinize bağladığınız konumla tutarlı olduğundan emin olmanız gerekir. Belirleyici bir durumdan emin olmak için bir veri kümesini işlem hedefine bağlarken soyut yolu kullanmanızı öneririz. Örneğin, aşağıdaki kodda veri kümesini işlem hedefinin /tmpdosya sisteminin köküne bağlarız.

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

Baştaki eğik çizgi olan '/' öğesini eklemezseniz, örneğin /mnt/batch/.../tmp/dataset veri kümesinin nereye bağlanmasını istediğinizi belirtmek için işlem hedefine çalışma dizinine ön ek eklemeniz gerekir.

Sonraki adımlar