ML işlem hattı adımlarına ve adımlar arasında veri taşıma (Python)
ŞUNLAR IÇIN GEÇERLIDIR:Python SDK azureml v1
Bu makalede, Azure Machine Learning işlem hattındaki adımlar arasında verileri içeri aktarma, dönüştürme ve taşımaya yönelik kod sağlanır. Azure Machine Learning'de verilerin nasıl çalıştığına genel bir 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ı nedir?
Bu makale, şunları nasıl yapacağınızı gösterir:
- Önceden var olan veriler için nesneleri kullanma
Dataset
- Adımlarınızdaki verilere erişme
- Verileri eğitim ve doğrulama alt kümeleri gibi alt kümelere bölme
Dataset
- Bir 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şturun
Önkoşullar
Gerekenler:
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 dizinde JSON dosyasını arar, ancak kullanarakfrom_config(path="your/file/path")
dosyanın üzerine işaret eden 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ının kullanımı kısaca gösterilmektedir.
Önceden var olan veriler için nesneleri kullanma Dataset
Bir işlem hattına veri almak için tercih edilen yol Bir Dataset nesnesi kullanmaktır. Dataset
nesneleri, ç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ı yolu, ç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çeneklere sahip 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şim kurduğunu 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ğinizde bağımsız değişkenini inputs
kullanarak veri kümesini kullanarak Run.get_context().input_datasets[]
alabilirsiniz.
Adlandırılmış 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çimdir. İ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
İş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: için
FileDataset
. Erişim modunu ayarlamak için veyaas_download()
kullanınas_mount()
. TabularDataset, ayarlanmış 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 (yani , "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.
Ve gibi random_split()
take_sample()
yöntemleri birden çok giriş oluşturmak veya işlem hattı adımınıza geçirilen veri miktarını azaltmak için 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 yönelik adlandırılmış girişler, nesnenin Run
içinde bir sözlük olarak kullanılabilir. kullanarak Run.get_context()
etkin Run
nesneyi alın ve ardından kullanarak input_datasets
adlandırılmış girişlerin sözlüğünü alın. Nesneyi bağımsız değişken yerine inputs
bağımsız değişkenini arguments
kullanarak geçirdiysenizDatasetConsumptionConfig
, kod kullanarak ArgParser
verilere 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'ten 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.
Kayıtlı bir Dataset
bilgisayara doğrudan erişmek de mümkündür. Kayıtlı veri kümeleri kalıcı olduğundan ve çalışma alanında 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
Dataset
Nesneler yalnızca kalıcı verileri temsil ederken, 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
'ınıza 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ğitimin kullanılması 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. Daha sonra 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 veri 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. Verileri ADLS 2. Nesil veri depolarına geri yazmak için rol izinlerini ayarlama hakkında daha fazla bilgi edinin.Tamamlandıktan
step1
ve çıkış tarafındanstep1_output_data
belirtilen hedefe yazıldıktan sonra, 2. adım 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 belgelenenle 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 duruma 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 gerekli olmadığında 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 kısa vadeli depolama ilkesiyle blob depolamayı kullanma (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 dışarı 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.