Bir işteki verilere erişme

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)Python SDK azure-ai-ml v2 (geçerli)

Bu makalede şunları öğreneceksiniz:

  • Azure Machine Learning işinde Azure depolamadan veri okuma.
  • Azure Machine Learning işinizden Azure Depolama'a veri yazma.
  • Bağlama ve indirme modları arasındaki fark.
  • Verilere erişmek için kullanıcı kimliğini ve yönetilen kimliği kullanma.
  • bir işte kullanılabilen bağlama ayarları.
  • Yaygın senaryolar için en uygun bağlama ayarları.
  • V1 veri varlıklarına erişme.

Önkoşullar

  • 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 v2 için Azure Machine Learning SDK'sı.

  • Azure Machine Learning çalışma alanı

Hızlı başlangıç

Verilere erişirken kullanabileceğiniz ayrıntılı seçenekleri keşfetmeden önce, önce veri erişimi için ilgili kod parçacıklarını açıklayacağız.

Azure Machine Learning işinde Azure depolamadan veri okuma

Bu örnekte, genel blob depolama hesabından verilere erişen bir Azure Machine Learning işi gönderirsiniz. Ancak kod parçacığını özel bir Azure Depolama hesabındaki kendi verilerinize erişmek için uyarlayabilirsiniz. Yolu burada açıklandığı gibi güncelleştirin. Azure Machine Learning, Microsoft Entra geçişi ile bulut depolamada kimlik doğrulamasını sorunsuz bir şekilde işler. Bir iş gönderdiğinizde şunları seçebilirsiniz:

  • Kullanıcı kimliği: Microsoft Entra kimliğinizi verilere erişmek için geçirme
  • Yönetilen kimlik: Verilere erişmek için işlem hedefinin yönetilen kimliğini kullanma
  • Hiçbiri: Verilere erişmek için kimlik belirtmeyin. Kimlik bilgisi tabanlı (anahtar/SAS belirteci) veri depolarını kullanırken veya genel verilere erişirken Hiçbiri'ni kullanma

İpucu

Kimlik doğrulaması için anahtarlar veya SAS belirteçleri kullanıyorsanız, çalışma zamanı anahtar/belirtecin açığa çıkmadan depolamaya otomatik olarak bağlanacağı için bir Azure Machine Learning veri deposu oluşturmanızı öneririz.

from azure.ai.ml import command, Input, MLClient, UserIdentityConfiguration, ManagedIdentityConfiguration
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes, InputOutputModes
from azure.identity import DefaultAzureCredential

# Set your subscription, resource group and workspace name:
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AML_WORKSPACE_NAME>"

# connect to the AzureML workspace
ml_client = MLClient(
    DefaultAzureCredential(), subscription_id, resource_group, workspace
)

# ==============================================================
# Set the URI path for the data. Supported paths include:
# local: `./<path>
# Blob: wasbs://<container_name>@<account_name>.blob.core.windows.net/<path>
# ADLS: abfss://<file_system>@<account_name>.dfs.core.windows.net/<path>
# Datastore: azureml://datastores/<data_store_name>/paths/<path>
# Data Asset: azureml:<my_data>:<version>
# We set the path to a file on a public blob container
# ==============================================================
path = "wasbs://data@azuremlexampledata.blob.core.windows.net/titanic.csv"

# ==============================================================
# What type of data does the path point to? Options include:
# data_type = AssetTypes.URI_FILE # a specific file
# data_type = AssetTypes.URI_FOLDER # a folder
# data_type = AssetTypes.MLTABLE # an mltable
# The path we set above is a specific file
# ==============================================================
data_type = AssetTypes.URI_FILE

# ==============================================================
# Set the mode. The popular modes include:
# mode = InputOutputModes.RO_MOUNT # Read-only mount on the compute target
# mode = InputOutputModes.DOWNLOAD # Download the data to the compute target
# ==============================================================
mode = InputOutputModes.RO_MOUNT

# ==============================================================
# You can set the identity you want to use in a job to access the data. Options include:
# identity = UserIdentityConfiguration() # Use the user's identity
# identity = ManagedIdentityConfiguration() # Use the compute target managed identity
# ==============================================================
# This example accesses public data, so we don't need an identity.
# You also set identity to None if you use a credential-based datastore
identity = None

# Set the input for the job:
inputs = {
    "input_data": Input(type=data_type, path=path, mode=mode)
}

# This command job uses the head Linux command to print the first 10 lines of the file
job = command(
    command="head ${{inputs.input_data}}",
    inputs=inputs,
    environment="azureml://registries/azureml/environments/sklearn-1.1/versions/4",
    compute="cpu-cluster",
    identity=identity,
)

# Submit the command
ml_client.jobs.create_or_update(job)

Azure Machine Learning işinizden Azure Depolama'a veri yazma

Bu örnekte, varsayılan Azure Machine Learning Veri Deponuza veri yazan bir Azure Machine Learning işi gönderirsiniz. İsteğe bağlı olarak, çıktıda name bir veri varlığı oluşturmak için veri varlığınızın değerini ayarlayabilirsiniz.

from azure.ai.ml import command, Input, Output, MLClient
from azure.ai.ml.constants import AssetTypes, InputOutputModes
from azure.identity import DefaultAzureCredential

# Set your subscription, resource group and workspace name:
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AML_WORKSPACE_NAME>"

# connect to the AzureML workspace
ml_client = MLClient(
    DefaultAzureCredential(), subscription_id, resource_group, workspace
)

# ==============================================================
# Set the input and output URI paths for the data. Supported paths include:
# local: `./<path>
# Blob: wasbs://<container_name>@<account_name>.blob.core.windows.net/<path>
# ADLS: abfss://<file_system>@<account_name>.dfs.core.windows.net/<path>
# Datastore: azureml://datastores/<data_store_name>/paths/<path>
# Data Asset: azureml:<my_data>:<version>
# As an example, we set the input path to a file on a public blob container
# As an example, we set the output path to a folder in the default datastore
# ==============================================================
input_path = "wasbs://data@azuremlexampledata.blob.core.windows.net/titanic.csv"
output_path = "azureml://datastores/workspaceblobstore/paths/quickstart-output/titanic.csv"

# ==============================================================
# What type of data are you pointing to?
# AssetTypes.URI_FILE (a specific file)
# AssetTypes.URI_FOLDER (a folder)
# AssetTypes.MLTABLE (a table)
# The path we set above is a specific file
# ==============================================================
data_type = AssetTypes.URI_FILE

# ==============================================================
# Set the input mode. The most commonly-used modes:
# InputOutputModes.RO_MOUNT
# InputOutputModes.DOWNLOAD
# Set the mode to Read Only (RO) to mount the data
# ==============================================================
input_mode = InputOutputModes.RO_MOUNT

# ==============================================================
# Set the output mode. The most commonly-used modes:
# InputOutputModes.RW_MOUNT
# InputOutputModes.UPLOAD
# Set the mode to Read Write (RW) to mount the data
# ==============================================================
output_mode = InputOutputModes.RW_MOUNT

# Set the input and output for the job:
inputs = {
    "input_data": Input(type=data_type, path=input_path, mode=input_mode)
}

outputs = {
    "output_data": Output(type=data_type, 
                          path=output_path, 
                          mode=output_mode,
                          # optional: if you want to create a data asset from the output, 
                          # then uncomment name (name can be set without setting version)
                          # name = "<name_of_data_asset>",
                          # version = "<version>",
                  )
}

# This command job copies the data to your default Datastore
job = command(
    command="cp ${{inputs.input_data}} ${{outputs.output_data}}",
    inputs=inputs,
    outputs=outputs,
    environment="azureml://registries/azureml/environments/sklearn-1.1/versions/4",
    compute="cpu-cluster",
)

# Submit the command
ml_client.jobs.create_or_update(job)

Azure Machine Learning veri çalışma zamanı

Bir iş gönderdiğinizde Azure Machine Learning veri çalışma zamanı, depolama konumundan işlem hedefine kadar veri yükünü denetler. Azure Machine Learning veri çalışma zamanı, makine öğrenmesi görevleri için hız ve verimlilik için iyileştirilmiştir. Başlıca avantajları şunlardır:

  • Yüksek hız ve yüksek bellek verimliliği ile bilinen Rust dilinde yazılmış veri yükleri. Eşzamanlı veri indirmeleri için Rust, Python Genel Yorumlayıcı Kilidi (GIL) sorunlarından kaçınıyor
  • Hafif; Rust'ın diğer teknolojilere bağımlılığı yoktur ; örneğin JVM. Sonuç olarak, çalışma zamanı hızla yüklenir ve işlem hedefinde fazladan kaynak (CPU, Bellek) boşaltmaz
  • Çok işlemli (paralel) veri yükleme
  • Derin öğrenme yaparken GPU'ların daha iyi kullanımını sağlamak için verileri CPU'larda arka plan görevi olarak hazırlar
  • Bulut depolamaya sorunsuz kimlik doğrulaması işleme
  • Verileri bağlama (akış) veya tüm verileri indirme seçenekleri sağlar. Daha fazla bilgi için Bağlama (akış) ve İndirme bölümlerini ziyaret edin.
  • fsspec ile sorunsuz tümleştirme- yerel, uzak ve katıştırılmış dosya sistemlerine ve bayt depolamaya yönelik birleşik bir python arabirimi.

İpucu

Eğitim (istemci) kodunuzda kendi bağlama/indirme özelliğinizi oluşturmak yerine Azure Machine Learning veri çalışma zamanından yararlanmanızı öneririz. genel yorumlayıcı kilidi (GIL) sorunları nedeniyle istemci kodu depolamadan veri indirmek için Python kullandığında depolama aktarım hızı kısıtlamaları gözlemledik.

Yollar

Bir işe veri girişi/çıkışı sağladığınızda, veri konumuna işaret eden bir path parametre belirtmeniz gerekir. Bu tablo, Azure Machine Learning'in desteklediği farklı veri konumlarını ve ayrıca parametre örneklerini gösterir path :

Konum Örnekler
Yerel bilgisayarınızdaki bir yol ./home/username/data/my_data
Ortak http(ler) sunucusundaki yol https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv
Azure Depolama'da yol wasbs://<container_name>@<account_name>.blob.core.windows.net/<path>
abfss://<file_system>@<account_name>.dfs.core.windows.net/<path>
Azure Machine Learning Veri Deposu'nda yol azureml://datastores/<data_store_name>/paths/<path>
Veri Varlığının yolu azureml:<my_data>:<version>

Modu

Veri girişleri/çıkışları ile bir iş çalıştırdığınızda şu mod seçeneklerinden birini belirleyebilirsiniz:

  • ro_mount: Depolama konumunu yerel disk (SSD) işlem hedefinde salt okunur olarak bağlayın.

  • rw_mount: Depolama konumunu yerel disk (SSD) işlem hedefinde okuma-yazma olarak bağlayın.

  • download: Verileri depolama konumundan yerel disk (SSD) işlem hedefine indirin.

  • upload: İşlem hedefinden depolama konumuna veri yükleyin.

  • eval_mount/eval_download:Bu modlar MLTable için benzersizdir. Bazı senaryolarda MLTable, MLTable dosyasını barındıran depolama hesabından farklı bir depolama hesabında bulunabilecek dosyaları verebilir. Öte yandan MLTable, depolama kaynağında bulunan verileri alt kümeye alabilir veya karıştırabilir. Alt kümenin/karıştırmanın bu görünümü yalnızca Azure Machine Learning veri çalışma zamanı MLTable dosyasını gerçekten değerlendiriyorsa görünür hale gelir. Örneğin, bu diyagramda mlTable'ın iki farklı depolama kapsayıcısıyla nasıl eval_mount kullanıldığı veya eval_download bu kapsayıcılardan görüntüleri nasıl alabildiği ve farklı bir depolama hesabında bulunan ek açıklamalar dosyasının nasıl kullanıldığı ve ardından uzak işlem hedefinin dosya sistemine nasıl bağlanıp indirilebileceği gösterilir.

    Screenshot showing evaluation of mount.

    Klasör camera1 , camera2 klasör ve annotations.csv dosyaya daha sonra işlem hedefinin dosya sisteminden klasör yapısında erişilebilir:

    /INPUT_DATA
    ├── account-a
    │   ├── container1
    │   │   └── camera1
    │   │       ├── image1.jpg
    │   │       └── image2.jpg
    │   └── container2
    │       └── camera2
    │           ├── image1.jpg
    │           └── image2.jpg
    └── account-b
        └── container1
            └── annotations.csv
    
  • direct: Azure Machine Learning veri çalışma zamanına gitmek yerine diğer API'ler aracılığıyla doğrudan bir URI'den veri okumak isteyebilirsiniz. Örneğin, boto s3 istemcisini kullanarak bir s3 demetinde (sanal barındırılan stil veya yol stili https URL ile) verilere erişmek isteyebilirsiniz. Girişin URI'sini moduyla direct dize olarak alabilirsiniz. Yöntemler URI'leri işlemeyi bildiği için Spark İşleri'nde spark.read_*() doğrudan modun kullanıldığını görürsünüz. Spark olmayan işler için erişim kimlik bilgilerini yönetmek sizin sorumluluğunuzdadır. Örneğin, işlem MSI'sini veya başka bir şekilde aracı erişimini açıkça kullanmanız gerekir.

Bu tabloda farklı tür/mod/giriş/çıkış bileşimleri için olası modlar gösterilmektedir:

Tür Giriş/Çıkış upload download ro_mount rw_mount direct eval_download eval_mount
uri_folder Giriş
uri_file Giriş
mltable Giriş
uri_folder Çıktı
uri_file Çıktı
mltable Çıktı

İndir

İndirme modunda, tüm giriş verileri işlem hedefinin yerel diskine (SSD) kopyalanır. Azure Machine Learning veri çalışma zamanı, tüm veriler kopyalandıktan sonra kullanıcı eğitim betiğini başlatır. Kullanıcı betiği başlatıldığında, diğer dosyalar gibi yerel diskten verileri okur. İş tamamlandığında veriler işlem hedefinin diskinden kaldırılır.

Avantajlar Dezavantajlar
Eğitim başladığında, tüm veriler eğitim betiği için işlem hedefinin yerel diskinde (SSD) kullanılabilir. Azure depolama /ağ etkileşimi gerekmez. Veri kümesinin bir işlem hedef diskinde tamamen sığması gerekir.
Kullanıcı betiği başlatıldıktan sonra depolama/ağ güvenilirliğine bağımlılık olmaz. Veri kümesinin tamamı indirilir (eğitimin verilerin yalnızca küçük bir kısmını rastgele seçmesi gerekiyorsa indirme işleminin büyük bölümü boşa gider).
Azure Machine Learning veri çalışma zamanı indirmeyi paralelleştirebilir (birçok küçük dosyada önemli fark) ve maksimum ağ /depolama aktarım hızı. İş, tüm veriler işlem hedefinin yerel diskine indirilene kadar bekler. Gönderilen derin öğrenme işi için, veriler hazır olana kadar GPU'lar boşta olur.
FUSE katmanı tarafından kaçınılmaz ek yük eklenmedi (gidiş dönüş: kullanıcı betiğinde kullanıcı alanı çağrısı → çekirdek → kullanıcı alanı birleştirme daemon'u → çekirdek → kullanıcı alanında kullanıcı betiğine yanıt) Depolama değişiklikler, indirme tamamlandıktan sonra verilere yansıtılamaz.

İndirme ne zaman kullanılır?

  • Veriler, diğer eğitime müdahale etmeden işlem hedefinin diskine sığacak kadar küçüktür
  • Eğitim, veri kümesinin çoğunu veya tümünü kullanır
  • Eğitim, bir veri kümesindeki dosyaları birden çok kez okur
  • Eğitim büyük bir dosyanın rastgele konumlarına atlanmalıdır
  • Eğitim başlamadan önce tüm veriler indirilene kadar beklemeniz sorun değil

Kullanılabilir indirme ayarları

İndirme ayarlarını işinizdeki şu ortam değişkenleriyle ayarlayabilirsiniz:

Ortam Değişkeni Adı Tür Varsayılan Değer Açıklama
RSLEX_DOWNLOADER_THREADS u64 NUMBER_OF_CPU_CORES * 4 İndirme işleminin kullanabileceği eşzamanlı iş parçacığı sayısı
AZUREML_DATASET_HTTP_RETRY_COUNT u64 7 Geçici hatalardan kurtarmak için ayrı ayrı depolama / http istek yeniden deneme denemelerinin sayısı.

İşinizde, ortam değişkenlerini ayarlayarak yukarıdaki varsayılan değerleri değiştirebilirsiniz. Örneğin:

Kısa olması için, yalnızca işteki ortam değişkenlerini tanımlamayı gösteririz.

from azure.ai.ml import command

env_var = {
"RSLEX_DOWNLOADER_THREADS": 64,
"AZUREML_DATASET_HTTP_RETRY_COUNT": 10
}

job = command(
        environment_variables=env_var
)

Performans ölçümlerini indirme

İşlem hedefinizin VM boyutu, verilerinizin indirme süresini etkiler. Özellikle:

  • Çekirdek sayısı. Ne kadar çok çekirdek varsa o kadar eşzamanlılık ve dolayısıyla indirme hızı da o kadar hızlı olur.
  • Beklenen ağ bant genişliği. Azure'daki her vm, Ağ Arabirim Kartı'ndan (NIC) maksimum aktarım hızına sahiptir.

Not

A100 GPU VM'leri için Azure Machine Learning veri çalışma zamanı, işlem hedefine (yaklaşık 24 Gbit/sn) veri indirirken NIC'yi (Ağ Arabirimi Kartı) doygun hale getirebilir: Mümkün olan teorik maksimum aktarım hızı.

Bu tabloda, Azure Machine Learning veri çalışma zamanının VM'deki Standard_D15_v2 100 GB'lık bir dosya için işleyebileceği indirme performansı gösterilmektedir (20cores, 25 Gbit/sn Ağ aktarım hızı):

Veri yapısı Yalnızca indirme (sn) MD5'i indirme ve hesaplama (sn) Elde Edilen Aktarım Hızı (Gbit/sn)
10 x 10 GB Dosyalar 55.74 260.97 14,35 Gbit/sn
100 x 1 GB Dosyalar 58.09 259.47 13,77 Gbit/sn
1 x 100 GB Dosya 96.13 300.61 8,32 Gbit/sn

Daha küçük dosyalara ayrılmış daha büyük bir dosyanın paralellik nedeniyle indirme performansını geliştirebileceğini görebiliriz. Depolama isteği gönderimleri için gereken süre, yükü indirmeye harcanan zamana göre arttığı için çok küçük (4 MB'tan az) olan dosyalardan kaçınmanızı öneririz. Daha fazla bilgi için Bkz . Birçok küçük dosya sorunu.

Bağlama (akış)

Bağlama modunda, Azure Machine Learning veri özelliği öykünmüş bir dosya sistemi oluşturmak için FUSE (kullanıcı alanında dosya sistemi) Linux özelliğini kullanır. Çalışma zamanı, tüm verileri işlem hedefinin yerel diskine (SSD) indirmek yerine kullanıcının betik eylemlerine gerçek zamanlı olarak tepki verebilir. Örneğin, "open file", "read 2-KB chunk from position X", "list directory content".

Avantajlar Dezavantajlar
İşlem hedefi yerel disk kapasitesini aşan veriler kullanılabilir (işlem donanımıyla sınırlı değildir) Linux FUSE modülünün ek yükü eklendi.
Eğitimin başlangıcında gecikme olmaz (indirme modundan farklı olarak). Kullanıcının kod davranışına bağımlılık (tek bir iş parçacığı bağlamasında küçük dosyaları sıralı olarak okuyan eğitim kodu da depolama alanından veri isterse, ağ veya depolama aktarım hızını en üst düzeye çıkarmayabilir).
Kullanım senaryosu için ayar yapmak için daha fazla kullanılabilir ayar. Windows desteği yok.
Depolama alanından yalnızca eğitim için gereken veriler okunur.

Bağlama ne zaman kullanılır?

  • Veriler büyük ve işlem hedefi yerel diske sığmıyor.
  • Bir kümedeki her bir işlem düğümlerinin veri kümesinin tamamını (csv dosya seçimindeki rastgele dosya veya satırlar vb.) okuması gerekmez.
  • Eğitim başlamadan önce tüm verilerin indirilmesini bekleyen gecikmeler bir sorun haline gelebilir (boşta GPU süresi).

Kullanılabilir bağlama ayarları

Bağlama ayarlarını işinizde şu ortam değişkenleriyle ayarlayabilirsiniz:

Env değişken adı Tür Default value Açıklama
DATASET_MOUNT_ATTRIBUTE_CACHE_TTL u64 Ayarlanmadı (önbelleğin süresi hiç dolmaz) Arama sonuçlarının önbellekte tutulması ve bu bilgi isteklerinin getattr yeniden depolamadan istenmesi için milisaniye cinsinden süre gerekir.
DATASET_RESERVED_FREE_DISK_SPACE u64 150 MB İşlemin iyi durumda kalmasını sağlamak için bir sistem yapılandırmasına yöneliktir. Diğer ayarlar hangi değerlere sahip olursa olsun, Azure Machine Learning veri çalışma zamanı disk alanının son RESERVED_FREE_DISK_SPACE baytlarını kullanmaz.
DATASET_MOUNT_CACHE_SIZE usize Sınırsız Disk alanı bağlamanın ne kadar kullanabileceğini denetler. Pozitif bir değer, mutlak değeri bayt cinsinden ayarlar. Negatif değer, disk alanının ne kadarının boş bırakılası olduğunu ayarlar. Bu tablo daha fazla disk önbelleği seçeneği sağlar. Kolaylık sağlamak için ve MBGB değiştiricilerini desteklerKB.
DATASET_MOUNT_FILE_CACHE_PRUNE_THRESHOLD f64 1.0 Birim bağlama, önbelleğe kadar doldurulduğunda önbellek ayıklamayı AVAILABLE_CACHE_SIZE * DATASET_MOUNT_FILE_CACHE_PRUNE_THRESHOLDbaşlatır. 0 ile 1 arasında olmalıdır. Bunu 1 olarak < ayarlamak, daha önce arka plan önbelleği ayıklamayı tetikler.
DATASET_MOUNT_FILE_CACHE_PRUNE_TARGET f64 0.7 Ayıklama önbelleği en az (1-DATASET_MOUNT_FILE_CACHE_PRUNE_TARGET) önbellek alanı boşaltmaya çalışır.
DATASET_MOUNT_READ_BLOCK_SIZE usize 2 MB Akış okuma bloğu boyutu. Dosya yeterince büyük olduğunda, en az DATASET_MOUNT_READ_BLOCK_SIZE depolama alanından veri isteyin ve birleştirme istenen okuma işlemi daha az olsa bile önbellek.
DATASET_MOUNT_READ_BUFFER_BLOCK_COUNT usize 32 Önceden derlenmesi gereken blok sayısı (okuma bloğu k, k+1, ..., k.+DATASET_MOUNT_READ_BUFFER_BLOCK_COUNTbloklarının arka planda önceden eklenmesini tetikler)
DATASET_MOUNT_READ_THREADS usize NUMBER_OF_CORES * 4 Arka plan önceden oluşturulmuş iş parçacıklarının sayısı.
DATASET_MOUNT_BLOCK_BASED_CACHE_ENABLED ikili yanlış Blok tabanlı önbelleğe almayı etkinleştirin.
DATASET_MOUNT_MEMORY_CACHE_SIZE usize 128 MB Yalnızca blok tabanlı önbelleğe alma için geçerlidir. RAM blok tabanlı önbelleğe alma özelliğinin boyutu kullanılabilir. 0 değeri, bellek önbelleğe almayı tamamen devre dışı bırakır.
DATASET_MOUNT_BLOCK_FILE_CACHE_ENABLED ikili true Yalnızca blok tabanlı önbelleğe alma için geçerlidir. True olarak ayarlandığında, blok tabanlı önbelleğe alma blokları önbelleğe almak için yerel sabit sürücüyü kullanır.
DATASET_MOUNT_BLOCK_FILE_CACHE_MAX_QUEUE_SIZE usize 512 MB Yalnızca blok tabanlı önbelleğe alma için geçerlidir. Blok tabanlı önbelleğe alma, önbelleğe alınmış bloğu arka planda yerel bir diske yazar. Bu ayar, yerel disk önbelleğine boşaltmayı bekleyen blokları depolamak için ne kadar bellek bağlama kullanabileceğini denetler.
DATASET_MOUNT_BLOCK_FILE_CACHE_WRITE_THREADS usize NUMBER_OF_CORES * 2 Yalnızca blok tabanlı önbelleğe alma için geçerlidir. İndirilen blokları işlem hedefinin yerel diskine yazmak için blok tabanlı önbelleğe alma tarafından kullanılan arka plan iş parçacıklarının sayısı.
DATASET_UNMOUNT_TIMEOUT_SECONDS u64 30 Bağlama iletisi döngüsünü zorla sonlandırmadan önce bekleyen tüm işlemlerin (örneğin, boşaltma çağrıları) bitebilmesi için unmount saniye cinsinden süre.

İşinizde, ortam değişkenlerini ayarlayarak yukarıdaki varsayılan değerleri değiştirebilirsiniz, örneğin:

from azure.ai.ml import command

env_var = {
"DATASET_MOUNT_BLOCK_FILE_CACHE_ENABLED": True
}

job = command(
        environment_variables=env_var
)

Blok tabanlı açık mod

Blok tabanlı açık mod, her dosyayı önceden tanımlanmış boyuttaki bloklara böler (son blok hariç). Belirtilen konumdan gelen bir okuma isteği, depolama alanından ilgili bir blok istiyor ve istenen verileri hemen döndürür. Okuma, birden çok iş parçacığı kullanarak (sıralı okuma için en iyi duruma getirilmiş) N sonraki blokların arka planda önceden eklenmesini de tetikler. İndirilen bloklar iki katmanlı önbellekte (RAM ve yerel disk) önbelleğe alınır.

Avantajlar Dezavantajlar
Eğitim betiğine hızlı veri teslimi (henüz istenmeyen öbekler için daha az engelleme). Rastgele okumalar ileriye dönük önceden oluşturulmuş blokları boşa harcayabilir.
Arka plan iş parçacıklarına daha fazla iş yükü boşaltılır (önceden hazırlama /önbelleğe alma). Daha sonra eğitim devam edebilir. Yerel disk önbelleğindeki bir dosyadan (örneğin, tam dosya önbelleği modunda) doğrudan okuma işlemlerine kıyasla önbellekler arasında gezinmek için ek yük eklendi.
Depolama alanından yalnızca istenen veriler (artı ön işlem) okunur.
Yeterince küçük veriler için hızlı RAM tabanlı önbellek kullanılır.
Blok tabanlı açık modu ne zaman kullanılır?

Rastgele dosya konumlarından hızlı okuma işlemlerine ihtiyaç duymanız dışında çoğu senaryo için önerilir. Böyle durumlarda Tüm dosya önbelleği açma modunu kullanın.

Tüm dosya önbelleği açma modu

Bağlama klasörünün altındaki bir dosya (örneğin, f = open(path, args)) tüm dosya modunda açıldığında, tüm dosya diskteki bir işlem hedef önbellek klasörüne indirilene kadar çağrı engellenir. Sonraki tüm okuma çağrıları önbelleğe alınmış dosyaya yönlendirilir, bu nedenle depolama etkileşimi gerekmez. Önbellekte geçerli dosyaya sığacak kadar kullanılabilir alan yoksa, bağlama önbellekten en son kullanılan dosyayı silerek ayıklamayı dener. Dosyanın diske sığmadığı durumlarda (önbellek ayarlarıyla ilgili olarak), veri çalışma zamanı akış moduna geri döner.

Avantajlar Dezavantajlar
Dosya açıldıktan sonra depolama güvenilirliği / aktarım hızı bağımlılıkları yoktur. Dosyanın tamamı indirilene kadar açık arama engellenir.
Hızlı rastgele okumalar (dosyanın rastgele yerlerinden gelen öbekleri okuma). Dosyanın bazı bölümleri gerekmese bile dosyanın tamamı depolama alanından okunur.
Kullanılması gereken durumlar

128 MB'ı aşan nispeten büyük dosyalar için rastgele okuma gerektiğinde.

Kullanım

İşinizde ortam değişkenini DATASET_MOUNT_BLOCK_BASED_CACHE_ENABLED olarak false ayarlayın:

from azure.ai.ml import command

env_var = {
"DATASET_MOUNT_BLOCK_BASED_CACHE_ENABLED": False
}

job = command(
        environment_variables=env_var
)

Bağlama: Dosyaları listeleme

Milyonlarca dosyayla çalışırken özyinelemeli bir liste kullanmaktan kaçının; örneğinls -R /mnt/dataset/folder/. Özyinelemeli bir liste, üst dizinin dizin içeriğini listelemek için birçok çağrı tetikler. Ardından, içindeki her dizin için tüm alt düzeylerde ayrı bir özyinelemeli çağrı gerektirir. Azure Depolama genellikle tek liste isteği başına yalnızca 5000 öğe döndürülmesini sağlar. Sonuç olarak, her biri 10 dosya içeren 1M klasörlerin özyinelemeli bir listesi depolama isteği gerektirir 1,000,000 / 5000 + 1,000,000 = 1,000,200 . Buna karşılık, 10.000 dosya içeren 1.000 klasör, özyinelemeli bir liste için yalnızca 1001 istek depolama isteğine ihtiyaç duyar.

Azure Machine Learning bağlaması, listelemeyi yavaş bir şekilde işler. Bu nedenle, birçok küçük dosyayı listelemek için, tam listeyi döndüren bir istemci kitaplığı çağrısı yerine yinelemeli bir istemci kitaplığı çağrısı (örneğin Python'da os.scandir() ) kullanmak daha iyidir (örneğin, os.listdir() Python'da). Yinelemeli bir istemci kitaplığı çağrısı bir oluşturucu döndürür, yani listenin tamamı yüklenene kadar beklemesi gerekmez. Daha sonra daha hızlı ilerleyebilir.

Bu tablo, Python os.scandir() ve os.listdir() işlevlerin düz bir yapıda ~4M dosyaları içeren bir klasörü listelemesi için gereken süreyi karşılaştırır:

Metric os.scandir() os.listdir()
İlk girişi alma süresi (sn) 0.67 553.79
İlk 50 bin girdiyi alma süresi (sn) 9.56 562.73
Tüm girişleri alma süresi (sn) 558.35 582.14

Yaygın senaryolar için en uygun bağlama ayarları

Bazı yaygın senaryolar için Azure Machine Learning işinizde ayarlamanız gereken en uygun bağlama ayarlarını gösteririz.

Büyük dosyayı bir kez sırayla okuma (csv dosyasındaki satırları işleme)

Bu bağlama ayarlarını environment_variables Azure Machine Learning işinizin bölümüne ekleyin:

Not

Sunucusuz işlem kullanmak için bu kodda silincompute="cpu-cluster",.

from azure.ai.ml import command

env_var = {
  "DATASET_MOUNT_BLOCK_BASED_CACHE_ENABLED": True, # Enable block-based caching
  "DATASET_MOUNT_BLOCK_FILE_CACHE_ENABLED": False, # Disable caching on disk
  "DATASET_MOUNT_MEMORY_CACHE_SIZE": 0, # Disabling in-memory caching

  # Increase the number of blocks used for prefetch. This leads to use of more RAM (2 MB * #value set).
  # Can adjust up and down for fine-tuning, depending on the actual data processing pattern.
  # An optimal setting based on our test ~= the number of prefetching threads (#CPU_CORES * 4 by default)
  "DATASET_MOUNT_READ_BUFFER_BLOCK_COUNT": 80,
}

job = command(
        environment_variables=env_var
)
Birden çok iş parçacığından büyük dosyayı bir kez okuma (bölümlenmiş csv dosyasını birden çok iş parçacığında işleme)

Bu bağlama ayarlarını environment_variables Azure Machine Learning işinizin bölümüne ekleyin:

from azure.ai.ml import command

env_var = {
  "DATASET_MOUNT_BLOCK_BASED_CACHE_ENABLED": True, # Enable block-based caching
  "DATASET_MOUNT_BLOCK_FILE_CACHE_ENABLED": False, # Disable caching on disk
  "DATASET_MOUNT_MEMORY_CACHE_SIZE": 0, # Disabling in-memory caching
}

job = command(
        environment_variables=env_var
)
Bir kerede birden çok iş parçacığından milyonlarca küçük dosya (görüntü) okuma (görüntüler üzerinde tek dönem eğitimi)

Bu bağlama ayarlarını environment_variables Azure Machine Learning işinizin bölümüne ekleyin:

from azure.ai.ml import command

env_var = {
  "DATASET_MOUNT_BLOCK_BASED_CACHE_ENABLED": True, # Enable block-based caching
  "DATASET_MOUNT_BLOCK_FILE_CACHE_ENABLED": False, # Disable caching on disk
  "DATASET_MOUNT_MEMORY_CACHE_SIZE": 0, # Disabling in-memory caching
}

job = command(
        environment_variables=env_var
)
Birden çok iş parçacığından milyonlarca küçük dosyayı (görüntü) birden çok kez okuma (görüntüler üzerinde birden çok dönem eğitimi)

Bu bağlama ayarlarını environment_variables Azure Machine Learning işinizin bölümüne ekleyin:

from azure.ai.ml import command

env_var = {
  "DATASET_MOUNT_BLOCK_BASED_CACHE_ENABLED": True, # Enable block-based caching
}

job = command(
        environment_variables=env_var
)
Rastgele aramalarla büyük dosyaları okuma (bağlı klasörden dosya veritabanı sunma gibi)

Bu bağlama ayarlarını environment_variables Azure Machine Learning işinizin bölümüne ekleyin:

from azure.ai.ml import command

env_var = {
  "DATASET_MOUNT_BLOCK_BASED_CACHE_ENABLED": False, # Disable block-based caching
}

job = command(
        environment_variables=env_var
)

Veri yükleme performans sorunlarını tanılama ve çözme

Azure Machine Learning işi verilerle yürütürken, girişin girişi baytların mode depolamadan nasıl okunacağını ve işlem hedefi yerel SSD diskinde önbelleğe alınacağını belirler. İndirme modu için, kullanıcı kodu yürütmeyi başlatmadan önce diskteki tüm veriler önbelleğe alınır. Bu nedenle,

  • paralel iş parçacığı sayısı
  • dosya sayısı
  • dosya boyutu

en yüksek indirme hızlarını etkiler. Bağlama için, veriler önbelleğe alınmaya başlamadan önce kullanıcı kodunun dosyaları açmaya başlaması gerekir. Farklı bağlama ayarları farklı okuma ve önbelleğe alma davranışına neden olabilir. Çeşitli faktörlerin, verilerin depolama alanından yüklenme hızı üzerinde etkisi vardır:

  • İşlem için veri konumu: Depolama ve işlem hedef konumlarınız aynı olmalıdır. Depolama ve işlem hedefiniz farklı bölgelerde bulunuyorsa, verilerin bölgeler arasında aktarılması gerektiğinden performans düşer. Verilerinizin işlemle birlikte olmasını sağlama hakkında daha fazla bilgi için verileri işlemle birlikte birlikte kullanma adresini ziyaret edin.
  • İşlem hedef boyutu: Küçük işlemler daha büyük işlem boyutlarına kıyasla daha düşük çekirdek sayılarına (daha az paralellik) ve beklenen ağ bant genişliğine sahiptir; her iki faktör de veri yükleme performansını etkiler.
    • Örneğin, (2 çekirdek, 1500 Mb/sn NIC) gibi Standard_D2_v2 küçük bir VM boyutu kullanıyorsanız ve 50.000 MB (50 GB) veri yüklemeye çalışırsanız, en iyi ulaşılabilir veri yükleme süresi yaklaşık 270 saniye olur (NIC'yi 187,5 MB/sn aktarım hızına doyduğunuz varsayılır). Buna karşılık, bir Standard_D5_v2 (16 çekirdek, 12.000 Mb/sn) aynı verileri yaklaşık 33 saniye içinde yükler (NIC'yi 1500 MB/sn aktarım hızında doyduğunuz varsayılır).
  • Depolama katmanı: Büyük Dil Modelleri (LLM) dahil olmak üzere çoğu senaryo için standart depolama en iyi maliyet/performans profilini sağlar. Ancak, çok sayıda küçük dosyanız varsa premium depolama daha iyi bir maliyet/performans profili sunar. Daha fazla bilgi için Bkz. Azure Depolama seçenekleri.
  • Depolama yükü: Depolama hesabı yüksek yük altındaysa (örneğin, veri isteyen bir kümedeki birçok GPU düğümü) depolamanın çıkış kapasitesine erişme riskiyle karşı karşıyasınız demektir. Daha fazla bilgi için bkz. Depolama yükleme. Paralel erişim gerektiren çok sayıda küçük dosyanız varsa, depolamanın istek sınırlarına ulaşabilirsiniz. Standart depolama hesapları için hedefleri ölçeklendirme bölümünde hem çıkış kapasitesi hem de depolama isteklerinin sınırlarıyla ilgili güncel bilgileri okuyun.
  • Kullanıcı kodunda veri erişim düzeni: Bağlama modunu kullandığınızda, kodunuzdaki açma/okuma eylemlerine göre veriler getirilir. Örneğin, büyük bir dosyanın rastgele bölümlerini okurken, bağlamaların varsayılan veri hazırlama ayarları okunmayacak blokların indirilmesine neden olabilir. En yüksek aktarım hızına ulaşmak için bazı ayarları ayarlamanız gerekebilir. Daha fazla bilgi için bkz . Yaygın senaryolar için en uygun bağlama ayarları.

Sorunları tanılamak için günlükleri kullanma

İşinizden veri çalışma zamanının günlüklerine erişmek için:

  1. İş sayfasından Çıkışlar+Günlükler sekmesini seçin.
  2. system_logs klasörünü ve ardından data_capability klasörünü seçin.
  3. İki günlük dosyası görmeniz gerekir: Screenshot showing data runtime logs.

Günlük dosyası data-capability.log , önemli veri yükleme görevleri için harcanan süreyle ilgili üst düzey bilgileri gösterir. Örneğin, verileri indirdiğinizde çalışma zamanı indirme etkinliği başlangıç ve bitiş saatlerini günlüğe kaydeder:

INFO 2023-05-18 17:14:47,790 sdk_logger.py:44 [28] - ActivityStarted, download
INFO 2023-05-18 17:14:50,295 sdk_logger.py:44 [28] - ActivityCompleted: Activity=download, HowEnded=Success, Duration=2504.39 [ms]

İndirme aktarım hızı, VM boyutu için beklenen ağ bant genişliğinin bir bölümüyse, günlük dosyasını rslex.log inceleyebilirsiniz.<ZAMAN DAMGASı>. Bu dosya Rust tabanlı çalışma zamanına ait tüm ayrıntılı günlüğü içerir; örneğin, paralelleştirme:

2023-05-18T14:08:25.388670Z  INFO copy_uri:copy_uri:copy_dataset:write_streams_to_files:collect:reduce:reduce_and_combine:reduce:get_iter: rslex::prefetching: close time.busy=23.2µs time.idle=1.90µs sessionId=012ea46a-341c-4258-8aba-90bde4fdfb51 source=Dataset[Partitions: 1, Sources: 1] file_name_column=None break_on_first_error=true skip_existing_files=false parallelization_degree=4 self=Dataset[Partitions: 1, Sources: 1] parallelization_degree=4 self=Dataset[Partitions: 1, Sources: 1] parallelization_degree=4 self=Dataset[Partitions: 1, Sources: 1] parallelization_degree=4 i=0 index=0
2023-05-18T14:08:25.388731Z  INFO copy_uri:copy_uri:copy_dataset:write_streams_to_files:collect:reduce:reduce_and_combine:reduce: rslex::dataset_crossbeam: close time.busy=90.9µs time.idle=9.10µs sessionId=012ea46a-341c-4258-8aba-90bde4fdfb51 source=Dataset[Partitions: 1, Sources: 1] file_name_column=None break_on_first_error=true skip_existing_files=false parallelization_degree=4 self=Dataset[Partitions: 1, Sources: 1] parallelization_degree=4 self=Dataset[Partitions: 1, Sources: 1] parallelization_degree=4 self=Dataset[Partitions: 1, Sources: 1] parallelization_degree=4 i=0
2023-05-18T14:08:25.388762Z  INFO copy_uri:copy_uri:copy_dataset:write_streams_to_files:collect:reduce:reduce_and_combine:combine: rslex::dataset_crossbeam: close time.busy=1.22ms time.idle=9.50µs sessionId=012ea46a-341c-4258-8aba-90bde4fdfb51 source=Dataset[Partitions: 1, Sources: 1] file_name_column=None break_on_first_error=true skip_existing_files=false parallelization_degree=4 self=Dataset[Partitions: 1, Sources: 1] parallelization_degree=4 self=Dataset[Partitions: 1, Sources: 1] parallelization_degree=4 self=Dataset[Partitions: 1, Sources: 1] parallelization_degree=4

rslex.log dosyası, bağlama veya indirme modlarını seçip seçmediğinize bakılmaksızın tüm dosya kopyalamayla ilgili ayrıntıları sağlar. Ayrıca kullanılan Ayarlar (ortam değişkenleri) de açıklanmaktadır. Hata ayıklamayı başlatmak için yaygın senaryolar için En uygun bağlama ayarlarını yapıp yapmadığını denetleyin.

Azure depolamayı izleme

Azure portalında depolama ölçümlerini görmek için Depolama hesabınızı ve ardından Ölçümler'i seçebilirsiniz:

Screenshot showing blob metrics.

Ardından SuccessE2ELatency değerini SuccessServerLatency ile çizersiniz. Ölçümler yüksek SuccessE2ELatency ve düşük SuccessServerLatency gösteriyorsa, kullanılabilir iş parçacıklarınız sınırlıysa veya CPU, bellek veya ağ bant genişliği gibi kaynaklar yetersizse şunları yapmalısınız:

  • İşinizin CPU ve bellek kullanımını denetlemek için Azure Machine Learning stüdyosu izleme görünümünü kullanın. CPU ve bellek yetersizse işlem hedefi VM boyutunu artırmayı göz önünde bulundurun.
  • İndiriyorsanız ve CPU ile belleği kullanmıyorsanız artırmayı RSLEX_DOWNLOADER_THREADS göz önünde bulundurun. Bağlama kullanıyorsanız, daha fazla önceden işlem yapmak için artırmanız DATASET_MOUNT_READ_BUFFER_BLOCK_COUNT ve daha fazla okuma iş parçacığı için artırmanız DATASET_MOUNT_READ_THREADS gerekir.

Ölçümler düşük SuccessE2ELatency ve düşük SuccessServerLatency gösteriyorsa, ancak istemci yüksek gecikme süresiyle karşılaşıyorsa, hizmete ulaşan depolama isteğinde gecikme yaşarsınız. Aşağıdakileri denetlemeniz gerekir:

  • Bağlama/indirme (DATASET_MOUNT_READ_THREADS/RSLEX_DOWNLOADER_THREADS) için kullanılan iş parçacığı sayısının işlem hedefinde kullanılabilir çekirdek sayısına göre çok düşük ayarlanıp ayarlanmadığı. Ayar çok düşükse, iş parçacığı sayısını artırın.
  • İndirme (AZUREML_DATASET_HTTP_RETRY_COUNT) için yeniden deneme sayısının çok yüksek ayarlanıp ayarlanmadığı. Öyleyse, yeniden deneme sayısını azaltın.

İş sırasında disk kullanımını izleme

Azure Machine Learning stüdyosu, iş yürütmeniz sırasında işlem hedef disk GÇ'sini ve kullanımını da izleyebilirsiniz. İşinize gidin ve İzleme sekmesini seçin. Bu sekme, 30 günlük sıralı olarak işinizin kaynakları hakkında içgörüler sağlar. Örneğin:

Screenshot showing disk usage during job execution.

Not

İş izleme yalnızca Azure Machine Learning'in yönettiği işlem kaynaklarını destekler. Çalışma zamanı 5 dakikadan kısa olan işler bu görünümü doldurmak için yeterli veriye sahip olmayacaktır.

Azure Machine Learning veri çalışma zamanı, işlemi iyi durumda tutmak için disk alanının son RESERVED_FREE_DISK_SPACE baytlarını kullanmaz (varsayılan değerdir 150MB). Diskiniz doluysa kodunuz dosyaları çıkış olarak bildirmeden diske yazıyordur. Bu nedenle, verilerin yanlışlıkla geçici diske yazılmadığından emin olmak için kodunuzu denetleyin. Geçici diske dosya yazmanız gerekiyorsa ve bu kaynak dolmaya başlıyorsa şunları göz önünde bulundurun:

  • VM Boyutunu daha büyük bir geçici diske sahip olacak şekilde artırma
  • Verilerinizi diskten temizlemek için önbelleğe alınan verilerde (DATASET_MOUNT_ATTRIBUTE_CACHE_TTL ) bir TTL ayarlama

İşlemle verileri birlikte birleştirme

Dikkat

Depolama ve işlem farklı bölgelerdeyse, verilerin bölgeler arasında aktarılması gerektiğinden performansınız düşer. Bu, maliyetleri artırır. Depolama hesabınızın ve işlem kaynaklarınızın aynı bölgede olduğundan emin olun.

Verileriniz ve Azure Machine Learning Çalışma Alanı farklı bölgelerde depolanıyorsa, azcopy yardımcı programıyla verileri aynı bölgedeki bir depolama hesabına kopyalamanızı öneririz. AzCopy sunucudan sunucuya API'leri kullanır, böylece veriler doğrudan depolama sunucuları arasında kopyalanır. Bu kopyalama işlemleri bilgisayarınızın ağ bant genişliğini kullanmaz. Ortam değişkeniyle bu işlemlerin AZCOPY_CONCURRENCY_VALUE aktarım hızını artırabilirsiniz. Daha fazla bilgi edinmek için bkz . Eşzamanlılığı artırma.

Depolama yükleme

Aşağıdaki durumlarda tek bir depolama hesabı yüksek yük altında olduğunda kısıtlanabilir:

  • İşiniz birçok GPU düğümü kullanıyor
  • Depolama hesabınızda işinizi çalıştırırken verilere erişen birçok eşzamanlı kullanıcı/uygulama var

Bu bölümde, azaltmanın iş yükünüz için sorun oluşturup oluşturmayabileceğini ve azaltma azaltmasına nasıl yaklaşabileceğinizi belirleyen hesaplamalar gösterilir.

Bant genişliği sınırlarını hesaplama

Azure Depolama hesabının varsayılan çıkış sınırı 120 Gbit/sn'dir. Azure VM'lerinin farklı ağ bant genişlikleri vardır ve bu da depolamanın varsayılan çıkış kapasitesi üst sınırına ulaşmada gereken teorik işlem düğümlerinin sayısını etkiler:

Size GPU Kartı Sanal işlemci Bellek: GiB Geçici depolama (SSD) GiB GPU Kartı Sayısı GPU belleği: GiB Beklenen ağ bant genişliği (Gbit/sn) Depolama Hesabı Çıkış Varsayılan Üst (Gbit/sn)* Varsayılan çıkış kapasitesine isabet eden Düğüm sayısı
Standard_ND96asr_v4 A100 96 900 6000 8 40 24 120 5
Standard_ND96amsr_A100_v4 A100 96 1900 6400 8 80 24 120 5
Standard_NC6s_v3 V100 6 112 736 1 16 24 120 5
Standard_NC12s_v3 V100 12 224 1474 2 32 24 120 5
Standard_NC24s_v3 V100 24 448 2948 4 64 24 120 5
Standard_NC24rs_v3 V100 24 448 2948 4 64 24 120 5
Standard_NC4as_T4_v3 T4 4 28 180 1 16 8 120 15
Standard_NC8as_T4_v3 T4 8 56 360 1 16 8 120 15
Standard_NC16as_T4_v3 T4 16 110 360 1 16 8 120 15
Standard_NC64as_T4_v3 T4 64 440 2880 4 64 32 120 3

A100/V100 SKU'larının her ikisi de 24 Gbit/sn düğüm başına en yüksek ağ bant genişliğine sahiptir. Tek bir hesaptan veri okuyan her düğüm teorik en fazla 24 Gbit/sn'ye yakın okuma gerçekleştirebiliyorsa, çıkış kapasitesi beş düğümle gerçekleşir. Altı veya daha fazla işlem düğümünün kullanılması tüm düğümlerde veri aktarım hızını düşürmeye başlar.

Önemli

İş yükünüz 6'dan fazla A100/V100 düğümüne ihtiyaç duyuyorsa veya varsayılan depolama çıkış kapasitesini (120Gbit/sn) aşacağınıza inanıyorsanız destek birimine başvurun (Azure Portal aracılığıyla) ve depolama çıkış sınırı artışı isteyin.

Birden çok depolama hesabı arasında ölçeklendirme

Maksimum depolama çıkış kapasitesini aşabilir ve/veya istek oranı sınırlarına basabilirsiniz. Bu sorunlar oluşursa, depolama hesabındaki bu sınırları artırmak için önce desteğe başvurmanızı öneririz.

En yüksek çıkış kapasitesini veya istek hızı sınırını artıramıyorsanız, verileri birden çok depolama hesabına çoğaltmayı düşünmelisiniz. Azure Data Factory, Azure Depolama Gezgini veya azcopyile verileri birden çok bilgisayarınızda kopyalayın ve eğitim işinizdeki tüm hesapları bağlayın. Yalnızca bağlamada erişilen veriler indirilir. Bu nedenle, eğitim kodunuz ortam değişkeninden öğesini okuyarak RANK birden çok girişten hangisinin hangisinden okunabileceğini seçebilir. İş tanımınız bir depolama hesabı listesinden geçer:

$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
code: src
command: >-
  python train.py
  --epochs ${{inputs.epochs}}
  --learning-rate ${{inputs.learning_rate}}
  --data ${{inputs.cifar_storage1}}, ${{inputs.cifar_storage2}}
inputs:
  epochs: 1
  learning_rate: 0.2
  cifar_storage1:
    type: uri_folder
    path: azureml://datastores/storage1/paths/cifar
  cifar_storage2:
    type: uri_folder
    path: azureml://datastores/storage2/paths/cifar
environment: azureml:AzureML-pytorch-1.9-ubuntu18.04-py37-cuda11-gpu@latest
compute: azureml:gpu-cluster
distribution:
  type: pytorch
  process_count_per_instance: 1
resources:
  instance_count: 2
display_name: pytorch-cifar-distributed-example
experiment_name: pytorch-cifar-distributed-example
description: Train a basic convolutional neural network (CNN) with PyTorch on the CIFAR-10 dataset, distributed via PyTorch.

Eğitim python kodunuz bu düğüme özgü depolama hesabını almak için kullanabilir RANK :

import argparse
import os

parser = argparse.ArgumentParser()
parser.add_argument('--data', nargs='+')
args = parser.parse_args()

world_size = int(os.environ["WORLD_SIZE"])
rank = int(os.environ["RANK"])
local_rank = int(os.environ["LOCAL_RANK"])

data_path_for_this_rank = args.data[rank]

Birçok küçük dosya sorunu

Depolamadan dosya okumak, her dosya için istekte bulunmayı içerir. Dosya başına istek sayısı, dosya boyutlarına ve dosya okumalarını işleyen yazılımın ayarlarına göre değişir.

Dosyalar genellikle 1-4 MB boyutunda bloklar halinde okunur. Bloktan küçük dosyalar tek bir istekle okunur (GET file.jpg 0-4 MB) ve bloktan büyük dosyalar blok başına bir istekte bulunur (GET file.jpg 0-4 MB, GET file.jpg 4-8 MB). Bu tabloda, 4 MB'lık bloktan küçük dosyaların daha büyük dosyalara kıyasla daha fazla depolama isteğine neden olduğu gösterilmektedir:

# Dosyalar Dosya Boyutu Toplam veri boyutu Blok boyutu # Depolama istekleri
2,000,000 500 KB 1 TB 4 MB 2,000,000
1.000 1 GB 1 TB 4 MB 256,000

Küçük dosyalar için gecikme süresi aralığı çoğunlukla veri aktarımları yerine depolamaya yönelik isteklerin işlenmesini içerir. Bu nedenle, dosya boyutunu artırmak için şu önerileri sunuyoruz:

  • Yapılandırılmamış veriler (görüntüler, metin, video vb.) için, küçük dosyaları birden çok öbek halinde okunabilecek daha büyük bir dosya olarak depolamak için birlikte arşivleyin (zip/tar). Bu büyük arşivlenmiş dosyalar işlem kaynağında açılabilir ve PyTorch Archive DataPipes daha küçük dosyaları ayıklayabilir.
  • Yapılandırılmış veriler (CSV, parquet vb.) için, boyutu artırmak için dosyaları birleştirdiğinden emin olmak için ETL işleminizi inceleyin. Spark,dosya boyutlarını artırmaya yardımcı olacak yöntemlere coalesce() sahiptirrepartition().

Dosya boyutlarınızı artıramıyorsanız Azure Depolama seçeneklerinizi keşfedin.

Azure Depolama seçenekleri

Azure Depolama iki katman sunar: standart ve premium:

Depolama Senaryo
Azure Blob - Standart (HDD) Verileriniz daha büyük bloblarda (görüntüler, video vb.) yapılandırılmıştır.
Azure Blob - Premium (SSD) Yüksek işlem hızları, daha küçük nesneler veya tutarlı olarak düşük depolama gecikme süresi gereksinimleri

İpucu

"Çok" küçük dosyalar (KB boyutu) için, depolama maliyeti GPU işlemini çalıştırma maliyetlerinden daha düşük olduğundan premium (SSD) kullanmanızı öneririz.

V1 veri varlıklarını okuma

Bu bölümde, bir V2 işinde V1 FileDataset ve TabularDataset veri varlıklarının nasıl okunduğu açıklanmaktadır.

Bir FileDataset

nesnesinde Input olarak ve modeInputOutputModes.EVAL_MOUNTolarak typeAssetTypes.MLTABLE belirtin:

Not

Sunucusuz işlem kullanmak için bu kodda silincompute="cpu-cluster",.

MLClient nesnesi, MLClient nesnesi başlatma seçenekleri ve çalışma alanına bağlanma hakkında daha fazla bilgi için çalışma alanına Bağlan adresini ziyaret edin.

from azure.ai.ml import command
from azure.ai.ml.entities import Data
from azure.ai.ml import Input
from azure.ai.ml.constants import AssetTypes, InputOutputModes
from azure.ai.ml import MLClient

ml_client = MLClient.from_config(credential=DefaultAzureCredential())

filedataset_asset = ml_client.data.get(name="<filedataset_name>", version="<version>")

my_job_inputs = {
    "input_data": Input(
            type=AssetTypes.MLTABLE,
            path=filedataset_asset.id,
            mode=InputOutputModes.EVAL_MOUNT
    )
}

job = command(
    code="./src",  # Local path where the code is stored
    command="ls ${{inputs.input_data}}",
    inputs=my_job_inputs,
    environment="<environment_name>:<version>",
    compute="cpu-cluster",
)

# Submit the command
returned_job = ml_client.jobs.create_or_update(job)
# Get a URL for the job status
returned_job.services["Studio"].endpoint

Bir TabularDataset

nesnesinde Input öğesini olarak ve mode olarak AssetTypes.MLTABLEInputOutputModes.DIRECTbelirtintype:

Not

Sunucusuz işlem kullanmak için bu kodda silincompute="cpu-cluster",.

from azure.ai.ml import command
from azure.ai.ml.entities import Data
from azure.ai.ml import Input
from azure.ai.ml.constants import AssetTypes, InputOutputModes
from azure.ai.ml import MLClient

ml_client = MLClient.from_config(credential=DefaultAzureCredential())

filedataset_asset = ml_client.data.get(name="<tabulardataset_name>", version="<version>")

my_job_inputs = {
    "input_data": Input(
            type=AssetTypes.MLTABLE,
            path=filedataset_asset.id,
            mode=InputOutputModes.DIRECT
    )
}

job = command(
    code="./src",  # Local path where the code is stored
    command="python train.py --inputs ${{inputs.input_data}}",
    inputs=my_job_inputs,
    environment="<environment_name>:<version>",
    compute="cpu-cluster",
)

# Submit the command
returned_job = ml_client.jobs.create_or_update(job)
# Get a URL for the status of the job
returned_job.services["Studio"].endpoint

Sonraki adımlar