Azure Machine Learning veri kümeleri ile modelleri eğitin
Ş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.
Yapılandırılmış veriler için bkz . Makine öğrenmesi eğitim betiklerinde veri kümelerini kullanma.
Yapılandırılmamış veriler için bkz . Dosyaları uzak işlem hedeflerine bağlama.
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:
Azure aboneliği. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun. Azure Machine Learning'in ücretsiz veya ücretli sürümünü bugün deneyin.
Paketi içeren Python için Azure Machine Learning SDK'sı
azureml-datasets
(= 1.13.0) yüklendi>.
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 ve Fedora.
Makine öğrenmesi eğitim betiklerinde veri kümelerini kullanma
Henüz veri kümesi olarak kaydedilmemiş verileri yapılandırdıysanız, 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, tabularDataset'inizdeki verileri pandas veya Spark DataFrame'e yüklemenin bir yolunu sunar; böylece not defterinizden çıkmak zorunda kalmadan bilindik veri hazırlama ve eğitim kitaplıklarıyla çalışabilirsiniz.
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). Tablosal veri kümesi bağımsız değişken değeri olarak geçirildiğinde, Azure Machine Learning bunu veri kümesi kimliğine çözümler. Daha sonra bu bağımsız değişken değerini kullanarak eğitim betiğinizdeki veri kümesine erişebilirsiniz (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_ds
için giriş veri kümesi. Azure Machine Learning, betiğinize geçirildiğinde veri kümesinin ilgili kimliğine çözümler. - Ç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_ds
giriş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 Storage 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 outputdataset
def_blob_store
klasö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 arguments
FileDataset'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_store
klasö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
- Daha fazla veri kümesi örneği ve kavramı için bkz . veri kümesi not defterleri.
- ML işlem hatlarınızda veri kümelerini nasıl parametrize etmek istediğinize bakın.
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ştirinazureml-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.0
en son sürüme yükseltin. - Giden NSG kurallarınız varsa, hizmet etiketi
AzureResourceMonitor
iç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 önceki 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.
ayrıca iş yükünü iki farklı çalışma alanı arasında bölebilirsiniz.
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:
- Azure portalında çalışma alanınıza gidin.
- Çalışma alanına Genel Bakış sayfasında depolama bağlantısını seçin.
- Depolama sayfasında, sol taraftaki menüden Erişim anahtarları'nı seçin.
- Anahtarı kopyalayın.
- Çalışma alanınızın Azure Machine Learning stüdyosu gidin.
- Stüdyoda, kimlik doğrulaması kimlik bilgilerini sağlamak istediğiniz dosya veri depolarını seçin.
- Kimlik doğrulamayı güncelleştir'i seçin.
- Önceki adımlardan anahtarı yapıştırın.
- 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 /tmp
dosya 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, veri /mnt/batch/.../tmp/dataset
kümesinin nereye bağlanmasını istediğinizi belirtmek için örneğin işlem hedefinde çalışma dizinine ön ek eklemeniz gerekir.