Aracılığıyla paylaş


ParallelRunStep sorunlarını giderme

ŞUNUN IÇIN GEÇERLIDIR: Python SDK azureml v1

Bu makalede, Azure Machine Learning SDK'sından ParallelRunStep sınıfını kullanarak hata aldığınızda sorun gidermeyi öğreneceksiniz.

İşlem hattı sorunlarını giderme hakkında genel ipuçları için bkz . Makine öğrenmesi işlem hatlarında sorun giderme.

Betikleri yerel olarak test etme

ParallelRunStep'iniz ML işlem hatlarında bir adım olarak çalışır. Betiklerinizi ilk adım olarak yerel olarak test etmek isteyebilirsiniz.

Giriş betiği gereksinimleri

için giriş betiği ParallelRunStep bir run() işlev içermeli ve isteğe bağlı olarak bir init() işlev içermelidir:

  • init(): Bu işlevi, daha sonra işlemeye yönelik herhangi bir maliyetli veya ortak hazırlık için kullanın. Örneğin, modeli genel bir nesneye yüklemek için kullanın. Bu işlev, işlemin başlangıcında yalnızca bir kez çağrılır.

    Not

    Yönteminiz init bir çıkış dizini oluşturuyorsa, bunu parents=True ve exist_ok=Truebelirtin. init yöntemi, işin çalıştığı her düğümdeki her çalışan işleminden çağrılır.

  • run(mini_batch): İşlev her mini_batch örnek için çalışır.
    • mini_batch: ParallelRunStep run yöntemini çağırır ve yönteme bağımsız değişken olarak bir liste veya pandas DataFrame geçirir. mini_batch'deki her girdi, giriş bir ise bir FileDataset dosya yolu veya bir pandas DataFrame olacaktır TabularDataset.
    • response: run() yöntemi bir pandas DataFrame veya dizi döndürmelidir. append_row output_action için, döndürülen bu öğeler ortak çıkış dosyasına eklenir. summary_only için öğelerin içeriği yoksayılır. Tüm çıkış eylemleri için, döndürülen her çıkış öğesi giriş mini toplu işleminde başarılı bir giriş öğesi çalıştırmasını gösterir. Çıktı sonucunu çalıştırmak için girişi eşlemek için çalıştırma sonucuna yeterli verinin eklendiğinden emin olun. Çalıştırma çıkışı çıkış dosyasına yazılır ve sıralı olacağı garanti edilmediğinden, çıkıştaki bir anahtarı kullanarak girişe eşlemeniz gerekir.

      Not

      Bir giriş öğesi için bir çıkış öğesi beklenir.

%%writefile digit_identification.py
# Snippets from a sample script.
# Refer to the accompanying digit_identification.py
# (https://github.com/Azure/MachineLearningNotebooks/tree/master/how-to-use-azureml/machine-learning-pipelines/parallel-run)
# for the implementation script.

import os
import numpy as np
import tensorflow as tf
from PIL import Image
from azureml.core import Model


def init():
    global g_tf_sess

    # Pull down the model from the workspace
    model_path = Model.get_model_path("mnist")

    # Construct a graph to execute
    tf.reset_default_graph()
    saver = tf.train.import_meta_graph(os.path.join(model_path, 'mnist-tf.model.meta'))
    g_tf_sess = tf.Session()
    saver.restore(g_tf_sess, os.path.join(model_path, 'mnist-tf.model'))


def run(mini_batch):
    print(f'run method start: {__file__}, run({mini_batch})')
    resultList = []
    in_tensor = g_tf_sess.graph.get_tensor_by_name("network/X:0")
    output = g_tf_sess.graph.get_tensor_by_name("network/output/MatMul:0")

    for image in mini_batch:
        # Prepare each image
        data = Image.open(image)
        np_im = np.array(data).reshape((1, 784))
        # Perform inference
        inference_result = output.eval(feed_dict={in_tensor: np_im}, session=g_tf_sess)
        # Find the best probability, and add it to the result list
        best_result = np.argmax(inference_result)
        resultList.append("{}: {}".format(os.path.basename(image), best_result))

    return resultList

Çıkarım betiğinizle aynı dizinde başka bir dosya veya klasörünüz varsa, geçerli çalışma dizinini bularak bu dosyaya başvurabilirsiniz. Paketlerinizi içeri aktarmak istiyorsanız paket klasörünüzü klasörüne sys.pathde ekleyebilirsiniz.

script_dir = os.path.realpath(os.path.join(__file__, '..',))
file_path = os.path.join(script_dir, "<file_name>")

packages_dir = os.path.join(file_path, '<your_package_folder>')
if packages_dir not in sys.path:
    sys.path.append(packages_dir)
from <your_package> import <your_class>

ParallelRunConfig parametreleri

ParallelRunConfig , Azure Machine Learning işlem hattı içindeki temel yapılandırmadır ParallelRunStep . Betiğinizi sarmak ve aşağıdaki girdilerin tümü de dahil olmak üzere gerekli parametreleri yapılandırmak için bunu kullanırsınız:

  • entry_script: Birden çok düğümde paralel olarak çalıştırılacak yerel dosya yolu olarak bir kullanıcı betiği. Varsa source_directory göreli bir yol kullanın. Aksi takdirde, makinede erişilebilen herhangi bir yolu kullanın.

  • mini_batch_size: Tek run() bir çağrıya geçirilen mini toplu iş boyutu. (isteğe bağlı; varsayılan değer ve 1MB için FileDataset TabularDatasetdosyalardır10.)

    • için FileDataset, en az değerine sahip dosya sayısıdır 1. Birden çok dosyayı tek bir mini toplu işlemde birleştirebilirsiniz.
    • için TabularDataset, verilerin boyutuna göre belirlenir. Örnek değerler : 1024, 1024KB, 10MBve 1GB. Önerilen değerdir 1MB. 'den TabularDataset mini toplu işlem hiçbir zaman dosya sınırlarını aşmaz. Örneğin, çeşitli boyutlarda .csv dosyalarınız varsa, en küçük dosya 100 KB ve en büyük dosya 10 MB'tır. ayarlarsanız mini_batch_size = 1MB, boyutu 1 MB'tan küçük olan dosyalar tek bir mini toplu iş olarak değerlendirilir. Boyutu 1 MB'tan büyük dosyalar birden çok mini toplu işleme bölünür.

      Not

      SQL tarafından desteklenen TabularDatasets bölümlenemez. Tek bir parquet dosyasından ve tek satır grubundan TabularDatasets bölümlenemez.

  • error_threshold: ve için kayıt hatalarının TabularDataset FileDataset sayısı işleme sırasında yoksayılmalıdır. Girişin tamamı için hata sayısı bu değerin üzerine çıkarsa iş durdurulacaktır. Hata eşiği, yönteme gönderilen tek tek mini toplu iş için değil, girişin tamamına yöneliktir run() . Aralık şeklindedir [-1, int.max]. bölümü, -1 işleme sırasındaki tüm hataları yoksaymayı gösterir.

  • output_action: Aşağıdaki değerlerden biri çıkışın nasıl düzenleneceklerini gösterir:

    • summary_only: Kullanıcı betiği çıkışı depolar. ParallelRunStep çıkışı yalnızca hata eşiği hesaplaması için kullanır.
    • append_row: Tüm girişler için çıkış klasöründe satırla ayrılmış tüm çıkışları eklemek için yalnızca bir dosya oluşturulur.
  • append_row_file_name: append_row output_action için çıkış dosyası adını özelleştirmek için (isteğe bağlı; varsayılan değer ).parallel_run_step.txt

  • source_directory: İşlem hedefinde yürütülecek tüm dosyaları içeren klasörlerin yolları (isteğe bağlı).

  • compute_target: Yalnızca AmlCompute desteklenir.

  • node_count: Kullanıcı betiğini çalıştırmak için kullanılacak işlem düğümlerinin sayısı.

  • process_count_per_node: Giriş betiğini paralel olarak çalıştırmak için düğüm başına çalışan işlemlerinin sayısı. GPU makinesi için varsayılan değer 1'dir. BIR CPU makinesi için varsayılan değer düğüm başına çekirdek sayısıdır. Bir çalışan işlemi, aldığı mini toplu işlemi geçirerek art arda çağırır run() . İşinizdeki toplam çalışan işlemi sayısı, process_count_per_node * node_countparalel olarak yürütülecek en fazla çalışan sayısına run() karar verir.

  • environment: Python ortam tanımı. Mevcut bir Python ortamını kullanmak veya geçici bir ortam ayarlamak için bunu yapılandırabilirsiniz. Tanım ayrıca gerekli uygulama bağımlılıklarını ayarlamakla da sorumludur (isteğe bağlı).

  • logging_level: Günlük ayrıntı düzeyi. Ayrıntı düzeyini artırma değerleri şunlardır: WARNING, INFOve DEBUG. (isteğe bağlı; varsayılan değer )INFO

  • run_invocation_timeout: Saniyeler run() içinde yöntem çağırma zaman aşımı. (isteğe bağlı; varsayılan değer )60

  • run_max_try: Mini toplu iş için deneme sayısı üst sınırı run() . Bir run() özel durum oluşturulursa veya ulaşıldığında run_invocation_timeout hiçbir şey döndürülmezse başarısız olur (isteğe bağlı; varsayılan değer olur 3).

bir logging_levelnode_countprocess_count_per_nodeişlem hattı çalıştırmasını yeniden gönderdiğinizde parametre değerlerine ince ayar yapmak için , , run_invocation_timeout, ve run_max_try olarak PipelineParameterbelirtebilirsiniz.mini_batch_size Bu örnekte, ve için mini_batch_size Process_count_per_node kullanırsınız PipelineParameter ve başka bir çalıştırmayı yeniden gönderdiğinizde bu değerleri değiştireceksiniz.

CUDA cihazları görünürlüğü

GPU'larla donatılmış işlem hedefleri için ortam değişkeni CUDA_VISIBLE_DEVICES çalışan işlemlerinde ayarlanır. AmlCompute'da, ortam değişkeninde AZ_BATCHAI_GPU_COUNT_FOUNDotomatik olarak ayarlanan toplam GPU cihazı sayısını bulabilirsiniz. Her çalışan işleminin ayrılmış bir GPU'ya sahip olmasını istiyorsanız, makinedeki GPU cihazlarının sayısına eşit olarak ayarlayın process_count_per_node . Her çalışan işlemi öğesine CUDA_VISIBLE_DEVICESbenzersiz bir dizin atar. Bir çalışan işlemi herhangi bir nedenle durursa, bir sonraki başlatılan çalışan işlemi, yayımlanan GPU dizinini kullanır.

Toplam GPU cihazı sayısı değerinden process_count_per_nodeküçükse, çalışan işlemlerine tümü kullanılana kadar GPU dizini atanır.

Toplam GPU cihazlarının 2 olduğu ve process_count_per_node = 4 örnek olarak işlem 0 ve işlem 1'in dizin 0 ve 1 olduğu düşünüldüğünde. İşlem 2 ve 3'de ortam değişkeni olmaz. GPU ataması için bu ortam değişkenlerini kullanan bir kitaplık için 2. ve 3. işlem GPU'lara sahip olmaz ve GPU cihazlarını almayı denemez. İşlem 0 durursa GPU dizini 0'ı yayınlar. 4. işlem olan sonraki işlemde GPU dizini 0 atanır.

Daha fazla bilgi için bkz . CUDA Pro İpucu: CUDA_VISIBLE_DEVICES ile GPU Görünürlüğünü Denetleme.

ParallelRunStep oluşturmak için parametreler

Betiği, ortam yapılandırmasını ve parametreleri kullanarak ParallelRunStep'i oluşturun. Çıkarım betiğinizin yürütme hedefi olarak çalışma alanınıza zaten eklediğiniz işlem hedefini belirtin. Aşağıdaki parametrelerin tümünü alan toplu çıkarım işlem hattı adımını oluşturmak için kullanın ParallelRunStep :

  • name: Aşağıdaki adlandırma kısıtlamalarıyla adımın adı: benzersiz, 3-32 karakter ve regex ^[a-z]([-a-z0-9]*[a-z0-9])?$.
  • parallel_run_configParallelRunConfig: Daha önce tanımlandığı gibi bir nesne.
  • inputs: Paralel işleme için bölümlenecek bir veya daha fazla tek tür Azure Machine Learning veri kümesi.
  • side_inputs: Bölümlemeye gerek kalmadan yan giriş olarak kullanılan bir veya daha fazla başvuru verisi veya veri kümesi.
  • outputOutputFileDatasetConfig: Çıkış verilerinin depolanacağı dizin yolunu temsil eden nesne.
  • arguments: Kullanıcı betiğine geçirilen bağımsız değişkenlerin listesi. Bunları giriş betiğinizde almak için unknown_args kullanın (isteğe bağlı).
  • allow_reuse: Aynı ayarlar/girişlerle çalıştırıldığında adımın önceki sonuçları yeniden kullanıp kullanmaması. Bu parametre ise False, işlem hattı yürütmesi sırasında bu adım için her zaman yeni bir çalıştırma oluşturulur. (isteğe bağlı; varsayılan değer. True)
from azureml.pipeline.steps import ParallelRunStep

parallelrun_step = ParallelRunStep(
    name="predict-digits-mnist",
    parallel_run_config=parallel_run_config,
    inputs=[input_mnist_ds_consumption],
    output=output_dir,
    allow_reuse=True
)

Uzak bağlamdan betiklerde hata ayıklama

Bir puanlama betiğini yerel olarak hata ayıklamaktan gerçek bir işlem hattında puanlama betiğinde hata ayıklamaya geçiş zor bir sıçrama olabilir. Portalda günlüklerinizi bulma hakkında bilgi için uzak bağlamdan betiklerde hata ayıklama hakkında makine öğrenmesi işlem hatları bölümüne bakın. Bu bölümdeki bilgiler ParallelRunStep için de geçerlidir.

Örneğin, günlük dosyası 70_driver_log.txt ParallelRunStep kodunu başlatan denetleyiciden bilgiler içerir.

ParallelRunStep işlerinin dağıtılmış yapısı nedeniyle, birkaç farklı kaynaktan günlükler vardır. Ancak, üst düzey bilgiler sağlayan iki birleştirilmiş dosya oluşturulur:

  • ~/logs/job_progress_overview.txt: Bu dosya, şu ana kadar oluşturulan mini toplu işlemlerin (görevler olarak da bilinir) sayısı ve şu ana kadar işlenen mini toplu işlemlerin sayısı hakkında üst düzey bir bilgi sağlar. Bu sonunda işin sonucunu gösterir. İş başarısız olursa hata iletisini ve sorun giderme işleminin nereden başlatılacağını gösterir.

  • ~/logs/sys/master_role.txt: Bu dosya, çalışan işin asıl düğümünü (orchestrator olarak da bilinir) sağlar. Görev oluşturma, ilerleme izleme, çalıştırma sonucunu içerir.

EntryScript yardımcısı ve yazdırma deyimleri kullanılarak giriş betiğinden oluşturulan günlükler aşağıdaki dosyalarda bulunur:

  • ~/logs/user/entry_script_log/<node_id>/<process_name>.log.txt: Bu dosyalar, EntryScript yardımcısı kullanılarak entry_script'dan yazılan günlüklerdir.

  • ~/logs/user/stdout/<node_id>/<process_name>.stdout.txt: Bu dosyalar, entry_script stdout(örneğin, print deyimi) günlükleridir.

  • ~/logs/user/stderr/<node_id>/<process_name>.stderr.txt: Bu dosyalar entry_script stderr günlükleridir.

Betiğinizdeki hataların kısa bir şekilde anlaşılması için:

  • ~/logs/user/error.txt: Bu dosya betiğinizdeki hataları özetlemeye çalışır.

Betiğinizdeki hatalar hakkında daha fazla bilgi için şunları yapabilirsiniz:

  • ~/logs/user/error/: Giriş betiği yüklenirken ve çalıştırılırken oluşan özel durumların tam yığın izlemelerini içerir.

Her düğümün puan betiğini nasıl yürüttüğü hakkında tam bilgi sahibi olmanız gerektiğinde, her düğümün tek tek işlem günlüklerine bakın. İşlem günlükleri, çalışan düğümlerine göre gruplandırılmış klasörde bulunabilir sys/node :

  • ~/logs/sys/node/<node_id>/<process_name>.txt: Bu dosya, bir çalışan tarafından alınan veya tamamlanan her mini toplu işlem hakkında ayrıntılı bilgi sağlar. Her mini toplu iş için bu dosya şunları içerir:

    • Çalışan işleminin IP adresi ve PID'i.
    • Toplam öğe sayısı, başarıyla işlenen öğe sayısı ve başarısız öğe sayısı.
    • Başlangıç saati, süre, işlem zamanı ve çalıştırma yöntemi zamanı.

Ayrıca, her düğüm için kaynak kullanımına ilişkin düzenli aralıklarla yapılan denetimlerin sonuçlarını da görüntüleyebilirsiniz. Günlük dosyaları ve kurulum dosyaları şu klasördedir:

  • ~/logs/perf: Saniye cinsinden denetim aralığını değiştirmek için ayarlayın --resource_monitor_interval . Varsayılan aralık , 600yaklaşık 10 dakikadır. İzlemeyi durdurmak için değerini olarak 0ayarlayın. Her <node_id> klasör şunları içerir:

    • os/: Düğümde çalışan tüm işlemler hakkında bilgi. Bir denetim bir işletim sistemi komutu çalıştırır ve sonucu bir dosyaya kaydeder. Linux'ta komutu şeklindedir ps. Windows'da kullanın tasklist.
      • %Y%m%d%H: Alt klasör adı saate kadar olan süredir.
        • processes_%M: Dosya, denetim süresinin dakikasıyla biter.
    • node_disk_usage.csv: Düğümün ayrıntılı disk kullanımı.
    • node_resource_usage.csv: Düğümün kaynak kullanımına genel bakış.
    • processes_resource_usage.csv: Her işlemin kaynak kullanımına genel bakış.

Kullanıcı betiğimden uzak bir bağlamdan Nasıl yaparım? günlük kaydı?

ParallelRunStep, process_count_per_node temelinde bir düğümde birden çok işlem çalıştırabilir. Düğümdeki her işlemden günlükleri düzenlemek ve print ve log deyimini birleştirmek için aşağıda gösterildiği gibi ParallelRunStep günlükçüsünü kullanmanızı öneririz. EntryScript'ten bir günlükçü alır ve günlüklerin portaldaki günlüklerde /kullanıcı klasöründe gösterilmesini sağlarsınız.

Günlükçü kullanan örnek bir giriş betiği:

from azureml_user.parallel_run import EntryScript

def init():
    """Init once in a worker process."""
    entry_script = EntryScript()
    logger = entry_script.logger
    logger.info("This will show up in files under logs/user on the Azure portal.")


def run(mini_batch):
    """Call once for a mini batch. Accept and return the list back."""
    # This class is in singleton pattern and will return same instance as the one in init()
    entry_script = EntryScript()
    logger = entry_script.logger
    logger.info(f"{__file__}: {mini_batch}.")
    ...

    return mini_batch

Python'dan logging gelen ileti nereye havuza alınıyor?

ParallelRunStep, kök günlükçüde bir işleyici ayarlar ve bu da iletiyi öğesine havuza logs/user/stdout/<node_id>/processNNN.stdout.txtalır.

logging varsayılan değer düzeyine INFO göre belirlenir. Varsayılan olarak, aşağıdaki INFO düzeyler gibi DEBUGgösterilmez.

Portalda görünmesi için bir dosyaya nasıl yazabilirim?

Klasördeki logs dosyalar karşıya yüklenir ve portalda gösterilir. Aşağıdaki gibi bir klasör logs/user/entry_script_log/<node_id> alabilir ve yazmak için dosya yolunuzu oluşturabilirsiniz:

from pathlib import Path
from azureml_user.parallel_run import EntryScript

def init():
    """Init once in a worker process."""
    entry_script = EntryScript()
    log_dir = entry_script.log_dir
    log_dir = Path(entry_script.log_dir)  # logs/user/entry_script_log/<node_id>/.
    log_dir.mkdir(parents=True, exist_ok=True) # Create the folder if not existing.

    proc_name = entry_script.agent_name  # The process name in pattern "processNNN".
    fil_path = log_dir / f"{proc_name}_<file_name>" # Avoid conflicting among worker processes with proc_name.

Yeni işlemlerde günlük nasıl işlenir?

Modül ile subprocess giriş betiğinizde yeni işlemler oluşturabilir, giriş/çıkış/hata kanallarına bağlanabilir ve dönüş kodlarını alabilirsiniz.

Önerilen yaklaşım işlevi ile capture_output=Truekullanmaktırrun(). hatalar içinde logs/user/error/<node_id>/<process_name>.txtgösterilir.

kullanmak Popen()istiyorsanız, stdout/stderr dosyasını aşağıdaki gibi dosyalara yeniden yönlendirmelisiniz:

from pathlib import Path
from subprocess import Popen

from azureml_user.parallel_run import EntryScript


def init():
    """Show how to redirect stdout/stderr to files in logs/user/entry_script_log/<node_id>/."""
    entry_script = EntryScript()
    proc_name = entry_script.agent_name  # The process name in pattern "processNNN".
    log_dir = Path(entry_script.log_dir)  # logs/user/entry_script_log/<node_id>/.
    log_dir.mkdir(parents=True, exist_ok=True) # Create the folder if not existing.
    stdout_file = str(log_dir / f"{proc_name}_demo_stdout.txt")
    stderr_file = str(log_dir / f"{proc_name}_demo_stderr.txt")
    proc = Popen(
        ["...")],
        stdout=open(stdout_file, "w"),
        stderr=open(stderr_file, "w"),
        # ...
    )

Not

Çalışan işlemi aynı işlemde "sistem" kodunu ve giriş betiği kodunu çalıştırır.

Hayır stdout veya stderr belirtilmemişse, girdi betiğinizde ile Popen() oluşturulan bir alt işlem, çalışan işleminin ayarını devralır.

stdoutve stderr logs/sys/node/<node_id>/processNNN.stderr.txtöğesine yazarlogs/sys/node/<node_id>/processNNN.stdout.txt.

Çıktı dizinine bir dosya yazıp portalda görüntülemek Nasıl yaparım??

Çıktı dizinini sınıfından EntryScript alıp yazabilirsiniz. Yazılan dosyaları görüntülemek için Azure Machine Learning portalındaki Çalıştır görünümünde Çıkışlar + günlükler sekmesini seçin. Veri çıkışları bağlantısını seçin ve iletişim kutusunda açıklanan adımları tamamlayın.

Giriş betiğinizde şu örnekte olduğu gibi kullanın EntryScript :

from pathlib import Path
from azureml_user.parallel_run import EntryScript

def run(mini_batch):
    output_dir = Path(entry_script.output_dir)
    (Path(output_dir) / res1).write...
    (Path(output_dir) / res2).write...

Arama tablosu içeren dosya veya dosyalar gibi bir yan girişi tüm çalışanlarıma nasıl geçirebilirim?

Kullanıcı, ParalleRunStep'in side_inputs parametresini kullanarak betiklere başvuru verilerini geçirebilir. side_inputs olarak sağlanan tüm veri kümeleri her çalışan düğümüne bağlanır. Kullanıcı bağımsız değişken geçirerek bağlama konumunu alabilir.

Başvuru verilerini içeren bir Veri Kümesi oluşturun, yerel bir bağlama yolu belirtin ve çalışma alanınıza kaydedin. parametresine side_inputs ParallelRunStepgeçirin. Ayrıca, bağlı yoluna arguments kolayca erişmek için bölümüne yolunu ekleyebilirsiniz.

Not

FileDatasets'i yalnızca side_inputs için kullanın.

local_path = "/tmp/{}".format(str(uuid.uuid4()))
label_config = label_ds.as_named_input("labels_input").as_mount(local_path)
batch_score_step = ParallelRunStep(
    name=parallel_step_name,
    inputs=[input_images.as_named_input("input_images")],
    output=output_dir,
    arguments=["--labels_dir", label_config],
    side_inputs=[label_config],
    parallel_run_config=parallel_run_config,
)

Bundan sonra çıkarım betiğinizde (örneğin, init() yönteminizde) aşağıdaki gibi erişebilirsiniz:

parser = argparse.ArgumentParser()
parser.add_argument('--labels_dir', dest="labels_dir", required=True)
args, _ = parser.parse_known_args()

labels_path = args.labels_dir

Hizmet sorumlusu kimlik doğrulaması ile giriş veri kümelerini kullanma

Kullanıcı, çalışma alanında kullanılan hizmet sorumlusu kimlik doğrulaması ile giriş veri kümelerini geçirebilir. ParallelRunStep'te bu tür bir veri kümesinin kullanılması, ParallelRunStep yapılandırmasını oluşturmak için bu veri kümesinin kaydedilmesini gerektirir.

service_principal = ServicePrincipalAuthentication(
    tenant_id="***",
    service_principal_id="***",
    service_principal_password="***")

ws = Workspace(
    subscription_id="***",
    resource_group="***",
    workspace_name="***",
    auth=service_principal
    )

default_blob_store = ws.get_default_datastore() # or Datastore(ws, '***datastore-name***')
ds = Dataset.File.from_files(default_blob_store, '**path***')
registered_ds = ds.register(ws, '***dataset-name***', create_new_version=True)

İlerleme Durumunu Denetleme ve Analiz Etme

Bu bölüm, ParallelRunStep işinin ilerleme durumunu denetleme ve beklenmeyen davranışın nedenini denetleme hakkındadır.

İş ilerleme durumunu denetleme

StepRun'un genel durumuna bakmanın yanı sıra, zamanlanmış/işlenmiş mini toplu işlemlerin sayısı ve çıkış oluşturma işleminin ilerleme durumu içinde ~/logs/job_progress_overview.<timestamp>.txtgörüntülenebilir. Dosya günlük olarak döndürülür, en son bilgiler için en büyük zaman damgasına sahip olanı de kontrol edebilirsiniz.

Bir süre ilerleme yoksa neleri denetlemeliyim?

Herhangi bir özel durum olup olmadığını görmek için adresine gidebilirsiniz ~/logs/sys/errror . Yoksa, giriş betiğinizin uzun sürmesi olasıdır; zaman alan bölümü bulmak için kodunuzda ilerleme bilgilerini yazdırabilir veya klasörün altında adlı bir profil dosyası oluşturmak için öğesine ekleyebilirsiniz"--profiling_module", "cProfile".arguments ParallelRunStep <process_name>.profile ~/logs/sys/node/<node_id>

bir iş ne zaman durur?

iptal edilmediyse, iş şu durumda durur:

  • Tamamlandı. Tüm mini toplu işlemler işlendiyse ve mod için append_row çıkış oluşturulduysa.
  • Başarısız oldu. içinde Parameters for ParallelRunConfig aşılırsa error_threshold veya iş sırasında sistem hatası oluşursa.

Hatanın kök nedeni nerede bulunur?

Nedeni ve ayrıntılı hata günlüğünü bulmak için müşteri adayını ~logs/job_result.txt izleyebilirsiniz.

Düğüm hatası iş sonucunu etkileyecek mi?

Belirlenen işlem kümesinde başka kullanılabilir düğümler varsa olmaz. Düzenleyici yeni bir düğüme yeni bir düğüm başlatır ve ParallelRunStep bu tür bir işleme dayanıklıdır.

Giriş betiğindeki işlev başarısız olursa init ne olur?

ParallelRunStep' in, iş hatasını çok uzun süre geciktirmeden geçici sorunlardan kurtarma şansı vermek için belirli bir süre yeniden deneme mekanizması vardır, mekanizma aşağıdaki gibidir:

  1. Bir düğüm başladıktan init sonra tüm aracılarda başarısız olmaya devam ederse, hatalardan sonra 3 * process_count_per_node denemeyi durdururuz.
  2. İş başladıktan sonra tüm init düğümlerin tüm aracıları başarısız olmaya devam ederse, iş 2 dakikadan uzun süre çalışıyorsa ve hatalar varsa 2 * node_count * process_count_per_node denemeyi durdururuz.
  3. Tüm aracılar saniyeler içinde init 3 * run_invocation_timeout + 30 takılı kalırsa, çok uzun süre ilerleme olmaması nedeniyle iş başarısız olur.

OutOfMemory'de ne olacak? Nedenini nasıl kontrol ederim?

ParallelRunStep, mini toplu işlemi işlemek için geçerli denemeyi hata durumuna ayarlar ve başarısız işlemi yeniden başlatmayı dener. Bellek tüketen işlemi bulmak için denetleyebilirsiniz ~logs/perf/<node_id> .

Neden çok fazla processNNN dosyam var?

ParallelRunStep, anormal şekilde çıkılanların yerine yeni çalışan işlemleri başlatır ve her işlem günlük olarak bir processNNN dosya oluşturur. Ancak, kullanıcı betiğinin işlevi sırasında init özel durum nedeniyle işlem başarısız olduysa ve hatanın sürekli tekrarlanması 3 * process_count_per_node durumunda yeni çalışan işlemi başlatılmaz.

Sonraki adımlar