ML işlem hattı adımlarına ve adımlar arasında veri taşıma (Python)
ŞUNUN IÇIN GEÇERLIDIR: Python SDK azureml v1
Bu makalede, Azure Machine Learning işlem hattındaki adımlar arasında verileri içeri aktarmaya, dönüştürmeye ve taşımaya yönelik kod sağlanır. Azure Machine Learning'de verilerin nasıl çalıştığına genel bakış için bkz . Azure depolama hizmetlerindeki verilere erişme. Azure Machine Learning işlem hatlarının avantajları ve yapısı için bkz . Azure Machine Learning işlem hatları nelerdir?
Bu makalede aşağıdaki işlemler hakkında bilgi edinirsiniz:
- Önceden var olan veriler için nesneleri kullanma
Dataset
- Adımlarınız içinde verilere erişme
- Verileri eğitim ve doğrulama alt kümeleri gibi alt kümelere bölme
Dataset
- Sonraki işlem hattı adımına veri aktarmak için nesneler oluşturma
OutputFileDatasetConfig
- İşlem hattı adımlarına giriş olarak nesneleri kullanma
OutputFileDatasetConfig
- Kalıcı hale getirmek istediğiniz yeni
Dataset
nesnelerOutputFileDatasetConfig
oluşturma
Önkoşullar
Şunlara sahip olmanı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ü deneyin.
Python için Azure Machine Learning SDK'sı veya Azure Machine Learning stüdyosu erişimi.
Azure Machine Learning çalışma alanı.
Bir Azure Machine Learning çalışma alanı oluşturun veya Python SDK'sı aracılığıyla mevcut bir çalışma alanını kullanın. ve
Datastore
sınıfını içeri aktarınWorkspace
ve işlevinifrom_config()
kullanarak dosyadanconfig.json
abonelik bilgilerinizi yükleyin. Bu işlev varsayılan olarak geçerli dizindeki JSON dosyasını arar, ancak kullanarakfrom_config(path="your/file/path")
dosyaya işaret etmek için bir yol parametresi de belirtebilirsiniz.import azureml.core from azureml.core import Workspace, Datastore ws = Workspace.from_config()
Önceden var olan bazı veriler. Bu makalede Azure blob kapsayıcısı kullanımı kısaca gösterilmektedir.
İsteğe bağlı: Azure Machine Learning SDK'sı ile makine öğrenmesi işlem hatlarını oluşturma ve çalıştırma başlığı altında açıklanan gibi mevcut bir makine öğrenmesi işlem hattı.
Önceden var olan veriler için nesneleri kullanma Dataset
İşlem hattına veri almak için tercih edilen yol, Bir Dataset nesnesi kullanmaktır. Dataset
nesneler, çalışma alanı genelinde kullanılabilen kalıcı verileri temsil eder.
Nesneleri oluşturmanın ve kaydetmenin Dataset
birçok yolu vardır. Tablosal veri kümeleri, bir veya daha fazla dosyada bulunan sınırlandırılmış verilere yöneliktir. Dosya veri kümeleri ikili veriler (görüntüler gibi) veya ayrıştırdığınız veriler içindir. Nesne oluşturmanın Dataset
en basit programlı yolları, çalışma alanı depolama alanında veya genel URL'lerde mevcut blobları kullanmaktır:
datastore = Datastore.get(workspace, 'training_data')
iris_dataset = Dataset.Tabular.from_delimited_files(DataPath(datastore, 'iris.csv'))
datastore_path = [
DataPath(datastore, 'animals/dog/1.jpg'),
DataPath(datastore, 'animals/dog/2.jpg'),
DataPath(datastore, 'animals/cat/*.jpg')
]
cats_dogs_dataset = Dataset.File.from_files(path=datastore_path)
Farklı seçeneklerle ve farklı kaynaklardan veri kümeleri oluşturma, bunları kaydetme ve Azure Machine Learning kullanıcı arabiriminde gözden geçirme, veri boyutunun işlem kapasitesiyle nasıl etkileşime geçtiğini anlama ve bunları sürüm oluşturma hakkında daha fazla seçenek için bkz . Azure Machine Learning veri kümeleri oluşturma.
Veri kümelerini betiğinize geçirme
Veri kümesinin yolunu betiğinize geçirmek için nesnesinin Dataset
as_named_input()
yöntemini kullanın. Elde DatasetConsumptionConfig
edilen nesneyi betiğinize bağımsız değişken olarak geçirebilir veya işlem hattı betiğinizin bağımsız değişkenini inputs
kullanarak veri kümesini kullanarak Run.get_context().input_datasets[]
alabilirsiniz.
Adlandırılmış bir giriş oluşturduktan sonra erişim modunu seçebilirsiniz (yalnızca FileDataset için): as_mount()
veya as_download()
. Betiğiniz veri kümenizdeki tüm dosyaları işlerse ve işlem kaynağınızdaki disk veri kümesi için yeterince büyükse indirme erişim modu daha iyi bir seçenektir. İndirme erişim modu, çalışma zamanında veri akışı yükünden kaçınır. Betiğiniz veri kümesinin bir alt kümesine erişiyorsa veya işlem için çok büyükse bağlama erişim modunu kullanın. Daha fazla bilgi için Bağlama ve İndirme karşılaştırması
İşlem hattı adımınıza bir veri kümesi geçirmek için:
- Nesne oluşturmak
DatasetConsumptionConfig
için veyaFileDataset.as_named_input()
(sonunda 's' yok) kullanınTabularDataset.as_named_input()
- Yalnızca
FileDataset
:. Erişim modunu ayarlamak için veyaas_download()
kullanınas_mount()
. TabularDataset, erişim modunu desteklemez. - veya
inputs
bağımsız değişkenini kullanarakarguments
veri kümelerini işlem hattı adımlarınıza geçirme
Aşağıdaki kod parçacığı, iris_dataset (TabularDataset) kullanarak bu adımları oluşturucu içinde birleştirmenin PythonScriptStep
ortak desenini gösterir:
train_step = PythonScriptStep(
name="train_data",
script_name="train.py",
compute_target=cluster,
inputs=[iris_dataset.as_named_input('iris')]
)
Not
Tüm bu bağımsız değişkenlerin (, "train_data"
, , "train.py"
cluster
ve iris_dataset
) değerlerini kendi verilerinizle değiştirmeniz gerekir.
Yukarıdaki kod parçacığı yalnızca çağrının biçimini gösterir ve bir Microsoft örneğinin parçası değildir.
Birden çok giriş oluşturmak veya işlem hattı adımınıza geçirilen veri miktarını azaltmak için ve take_sample()
gibi random_split()
yöntemleri de kullanabilirsiniz:
seed = 42 # PRNG seed
smaller_dataset = iris_dataset.take_sample(0.1, seed=seed) # 10%
train, test = smaller_dataset.random_split(percentage=0.8, seed=seed)
train_step = PythonScriptStep(
name="train_data",
script_name="train.py",
compute_target=cluster,
inputs=[train.as_named_input('train'), test.as_named_input('test')]
)
Betiğinizdeki veri kümelerine erişme
İşlem hattı adım betiğinize adlandırılmış girişler, nesne içinde Run
bir sözlük olarak kullanılabilir. kullanarak Run.get_context()
etkin Run
nesneyi alın ve kullanarak adlandırılmış girişlerin input_datasets
sözlüğünü alın. Nesnesini bağımsız değişken yerine inputs
bağımsız değişkenini kullanarak arguments
geçirdiysenizDatasetConsumptionConfig
, verilere kod kullanarak ArgParser
erişin. Her iki teknik de aşağıdaki kod parçacıklarında gösterilmiştir:
İşlem hattı tanımı betiği
# Code for demonstration only: It would be very confusing to split datasets between `arguments` and `inputs`
train_step = PythonScriptStep(
name="train_data",
script_name="train.py",
compute_target=cluster,
# datasets passed as arguments
arguments=['--training-folder', train.as_named_input('train').as_download()],
# datasets passed as inputs
inputs=[test.as_named_input('test').as_download()]
)
train.py
PythonScriptStep dosyasından başvuruda bulunan betik
# In pipeline script
parser = argparse.ArgumentParser()
# Retreive the dataset passed as an argument
parser.add_argument('--training-folder', type=str, dest='train_folder', help='training data folder mounting point')
args = parser.parse_args()
training_data_folder = args.train_folder
# Retrieve the dataset passed as an input
testing_data_folder = Run.get_context().input_datasets['test']
Geçirilen değer, veri kümesi dosyalarının yoludur.
Ayrıca, kayıtlı Dataset
bir bilgisayara doğrudan erişmek de mümkündür. Kayıtlı veri kümeleri kalıcı olduğundan ve çalışma alanı genelinde paylaşıldığından, bunları doğrudan alabilirsiniz:
run = Run.get_context()
ws = run.experiment.workspace
ds = Dataset.get_by_name(workspace=ws, name='mnist_opendataset')
Not
Yukarıdaki kod parçacıkları çağrıların biçimini gösterir ve bir Microsoft örneğinin parçası değildir. Çeşitli bağımsız değişkenleri kendi projenizdeki değerlerle değiştirmeniz gerekir.
Ara veriler için kullanma OutputFileDatasetConfig
Nesneler yalnızca kalıcı verileri temsil ederken Dataset
, OutputFileDatasetConfig
nesneler işlem hattı adımlarından ve kalıcı çıkış verilerinden geçici veri çıkışı için kullanılabilir. OutputFileDatasetConfig
blob depolama, dosya paylaşımı, adlsgen1 veya adlsgen2'ye veri yazmayı destekler. Hem bağlama modunu hem de karşıya yükleme modunu destekler. Bağlama modunda, bağlı dizine yazılan dosyalar, dosya kapatıldığında kalıcı olarak depolanır. Karşıya yükleme modunda, çıktı dizinine yazılan dosyalar işin sonunda karşıya yüklenir. İş başarısız olursa veya iptal edilirse çıkış dizini karşıya yüklenmez.
OutputFileDatasetConfig
nesnesinin varsayılan davranışı, çalışma alanının varsayılan veri deposuna yazmaktır. parametresiyle arguments
nesnelerinizi OutputFileDatasetConfig
kendi nesnelerinize PythonScriptStep
geçirin.
from azureml.data import OutputFileDatasetConfig
dataprep_output = OutputFileDatasetConfig()
input_dataset = Dataset.get_by_name(workspace, 'raw_data')
dataprep_step = PythonScriptStep(
name="prep_data",
script_name="dataprep.py",
compute_target=cluster,
arguments=[input_dataset.as_named_input('raw_data').as_mount(), dataprep_output]
)
Not
' OutputFileDatasetConfig
a eşzamanlı yazma işlemi başarısız olur. Aynı anda tek OutputFileDatasetConfig
bir kullanmayı denemeyin. Dağıtılmış eğitimi kullanırken olduğu gibi çok işlemli bir durumda tek OutputFileDatasetConfig
bir tane paylaşmayın.
Eğitim adımının çıktıları olarak kullanma OutputFileDatasetConfig
İşlem hattınızın PythonScriptStep
adımında programın bağımsız değişkenlerini kullanarak sağlanan çıkış yollarını alabilirsiniz. Bu ilk adımsa ve çıkış verilerini başlatacaksa belirtilen yolda dizini oluşturmanız gerekir. Ardından içinde yer OutputFileDatasetConfig
almak istediğiniz dosyaları yazabilirsiniz.
parser = argparse.ArgumentParser()
parser.add_argument('--output_path', dest='output_path', required=True)
args = parser.parse_args()
# Make directory for file
os.makedirs(os.path.dirname(args.output_path), exist_ok=True)
with open(args.output_path, 'w') as f:
f.write("Step 1's output")
İlk olmayan adımlara giriş olarak okuma OutputFileDatasetConfig
İlk işlem hattı adımı yola bazı veriler OutputFileDatasetConfig
yazdıktan ve bu ilk adımın çıktısı haline geldikten sonra, sonraki bir adıma giriş olarak kullanılabilir.
Aşağıdaki kodda:
step1_output_data
PythonScriptStep'instep1
çıktısının, karşıya yükleme erişim modunda ADLS 2. Nesil veri deposunamy_adlsgen2
yazıldığını gösterir. ADLS 2. Nesil veri depolarına veri yazmak için rol izinlerini ayarlama hakkında daha fazla bilgi edinin.Tamamlandıktan ve çıkış tarafından
step1_output_data
belirtilen hedefe yazıldıktan sonrastep1
, adım2 giriş olarak kullanılmayastep1_output_data
hazır olur.
# get adls gen 2 datastore already registered with the workspace
datastore = workspace.datastores['my_adlsgen2']
step1_output_data = OutputFileDatasetConfig(name="processed_data", destination=(datastore, "mypath/{run-id}/{output-name}")).as_upload()
step1 = PythonScriptStep(
name="generate_data",
script_name="step1.py",
runconfig = aml_run_config,
arguments = ["--output_path", step1_output_data]
)
step2 = PythonScriptStep(
name="read_pipeline_data",
script_name="step2.py",
compute_target=compute,
runconfig = aml_run_config,
arguments = ["--pd", step1_output_data.as_input()]
)
pipeline = Pipeline(workspace=ws, steps=[step1, step2])
İpucu
Python betiğindeki verileri okumak, betiğinizdeki step2.py
Access veri kümelerinde daha önce belgelenenlerle aynıdır; verileri erişmek için betiğinizde bağımsız değişkenini --pd
eklemek için kullanınArgumentParser
.
Nesneleri yeniden kullanmak üzere kaydetme OutputFileDatasetConfig
Denemenizin OutputFileDatasetConfig
süresinden daha uzun süre kullanılabilir hale getirmek isterseniz denemeler arasında paylaşmak ve yeniden kullanmak için çalışma alanınıza kaydedin.
step1_output_ds = step1_output_data.register_on_complete(
name='processed_data',
description = 'files from step1'
)
Artık gerekmediğinde içeriği silme OutputFileDatasetConfig
Azure ile OutputFileDatasetConfig
yazılan ara verileri otomatik olarak silmez. Büyük miktarda gereksiz veri için depolama ücretlerinden kaçınmak için şunları yapmalısınız:
Dikkat
Ara verileri yalnızca verilerin son değişiklik tarihinden itibaren 30 gün sonra silin. İşlem hattı, ara verilerin yeniden kullanım için 30 gün içinde mevcut olduğunu varsayacağından, verilerin daha önce silinmesi işlem hattı çalıştırmasının başarısız olmasına neden olabilir.
- Artık gerekli olmadığında işlem hattı işinin sonundaki ara verileri program aracılığıyla silin.
- Ara veriler için blob depolamayı kısa vadeli depolama ilkesiyle kullanın (bkz. Azure Blob Depolama erişim katmanlarını otomatikleştirerek maliyetleri iyileştirme). Bu ilke yalnızca çalışma alanının varsayılan olmayan veri deposuna ayarlanabilir. Ara verileri varsayılan olmayan başka bir veri deposuna aktarmak için kullanın
OutputFileDatasetConfig
.# Get adls gen 2 datastore already registered with the workspace datastore = workspace.datastores['my_adlsgen2'] step1_output_data = OutputFileDatasetConfig(name="processed_data", destination=(datastore, "mypath/{run-id}/{output-name}")).as_upload()
- Artık gerekli olmayan verileri düzenli olarak gözden geçirin ve silin.
Daha fazla bilgi için bkz . Azure Machine Learning maliyetlerini planlama ve yönetme.