Aracılığıyla paylaş


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 nesneler OutputFileDatasetConfig oluşturun

Önkoşullar

Gerekenler:

Ö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 Datasetas_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:

  1. Nesne oluşturmak DatasetConsumptionConfig için veya FileDataset.as_named_input() (sonunda 's' yok) kullanın TabularDataset.as_named_input()
  2. Yalnızca: içinFileDataset. Erişim modunu ayarlamak için veya as_download() kullanınas_mount(). TabularDataset, ayarlanmış erişim modunu desteklemez.
  3. veya inputs bağımsız değişkenini kullanarak arguments 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"clusterve 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_datasetsadlandı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 OutputFileDatasetConfigalmak 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'in step1 çıktısının, karşıya yükleme erişim modunda ADLS 2. Nesil veri deposuna my_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ından step1_output_databelirtilen hedefe yazıldıktan sonra, 2. adım giriş olarak kullanılmaya step1_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.pyAccess 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 OutputFileDatasetConfigyazı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.

Sonraki adımlar