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, bunuparents=True
veexist_ok=True
belirtin.init
yöntemi, işin çalıştığı her düğümdeki her çalışan işleminden çağrılır.run(mini_batch)
: İşlev hermini_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 pandasDataFrame
geçirir. mini_batch'deki her girdi, giriş bir ise birFileDataset
dosya yolu veya bir pandasDataFrame
olacaktırTabularDataset
.response
: run() yöntemi bir pandasDataFrame
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.path
de 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. Varsasource_directory
göreli bir yol kullanın. Aksi takdirde, makinede erişilebilen herhangi bir yolu kullanın.mini_batch_size
: Tekrun()
bir çağrıya geçirilen mini toplu iş boyutu. (isteğe bağlı; varsayılan değer ve1MB
içinFileDataset
TabularDataset
dosyalardır10
.)- için
FileDataset
, en az değerine sahip dosya sayısıdır1
. Birden çok dosyayı tek bir mini toplu işlemde birleştirebilirsiniz. - için
TabularDataset
, verilerin boyutuna göre belirlenir. Örnek değerler :1024
,1024KB
,10MB
ve1GB
. Önerilen değerdir1MB
. 'denTabularDataset
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ızmini_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.
- için
error_threshold
: ve için kayıt hatalarınınTabularDataset
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öneliktirrun()
. 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ızcaAmlCompute
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ırrun()
. İşinizdeki toplam çalışan işlemi sayısı,process_count_per_node * node_count
paralel olarak yürütülecek en fazla çalışan sayısınarun()
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
,INFO
veDEBUG
. (isteğe bağlı; varsayılan değer )INFO
run_invocation_timeout
: Saniyelerrun()
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()
. Birrun()
özel durum oluşturulursa veya ulaşıldığındarun_invocation_timeout
hiçbir şey döndürülmezse başarısız olur (isteğe bağlı; varsayılan değer olur3
).
bir logging_level
node_count
process_count_per_node
iş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 PipelineParameter
belirtebilirsiniz.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_FOUND
otomatik 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_DEVICES
benzersiz 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_node
küçü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_config
ParallelRunConfig
: 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.output
OutputFileDatasetConfig
: Çı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 iseFalse
, 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 ,600
yaklaşık 10 dakikadır. İzlemeyi durdurmak için değerini olarak0
ayarlayı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 şeklindedirps
. Windows'da kullanıntasklist
.%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.txt
alır.
logging
varsayılan değer düzeyine INFO
göre belirlenir. Varsayılan olarak, aşağıdaki INFO
düzeyler gibi DEBUG
gö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=True
kullanmaktırrun()
. hatalar içinde logs/user/error/<node_id>/<process_name>.txt
gö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.
stdout
ve 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
ParallelRunStep
geç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>.txt
gö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ırsaerror_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:
- Bir düğüm başladıktan
init
sonra tüm aracılarda başarısız olmaya devam ederse, hatalardan sonra3 * process_count_per_node
denemeyi durdururuz. - İş 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 varsa2 * node_count * process_count_per_node
denemeyi durdururuz. - 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
Azure Machine Learning işlem hatlarını gösteren bu Jupyter not defterlerine bakın
azureml-pipeline-steps paketiyle ilgili yardım için SDK başvurusuna bakın.
ParallelRunConfig sınıfı için başvuru belgelerini ve ParallelRunStep sınıfı belgelerini görüntüleyin.
ParallelRunStep ile işlem hatlarını kullanmayla ilgili gelişmiş öğreticiyi izleyin. Öğreticide başka bir dosyanın yan giriş olarak nasıl geçirilebilecekleri gösterilmektedir.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin