Řešení potíží s třídou ParallelRunStep
PLATÍ PRO: Python SDK azureml v1
V tomto článku se dozvíte, jak řešit potíže s chybami pomocí třídy ParallelRunStep ze sady Azure Machine Learning SDK.
Obecné tipy pro řešení potíží s kanálem najdete v tématu Řešení potíží s kanály strojového učení.
Místní testování skriptů
Váš ParallelRunStep se spouští jako krok v kanálech ML. Skripty můžete chtít otestovat místně jako první krok.
Požadavky na vstupní skript
Vstupní skript pro funkci ParallelRunStep
musí obsahovat run()
funkci a volitelně obsahuje init()
funkci:
init()
: Tuto funkci použijte pro jakoukoli nákladnou nebo běžnou přípravu na pozdější zpracování. Můžete ho například použít k načtení modelu do globálního objektu. Tato funkce bude volána pouze jednou na začátku procesu.Poznámka:
Pokud vaše
init
metoda vytvoří výstupní adresář, zadejte toparents=True
aexist_ok=True
. Metodainit
se volá z každého pracovního procesu na každém uzlu, na kterém je úloha spuštěná.run(mini_batch)
: Funkce se spustí pro každoumini_batch
instanci.mini_batch
:ParallelRunStep
vyvolá metodu run a předá metodě seznam nebo knihovnu pandasDataFrame
jako argument. Každá položka v mini_batch bude cesta k souboru, pokud je vstup neboFileDataset
pandasDataFrame
, pokud je vstup .TabularDataset
response
: metoda run() by měla vrátit knihovnu pandasDataFrame
nebo pole. Pro append_row output_action se tyto vrácené prvky připojí do společného výstupního souboru. Pro summary_only se obsah prvků ignoruje. U všech výstupních akcí každý vrácený výstupní prvek označuje jeden úspěšný spuštění vstupního prvku ve vstupní mini-batch. Ujistěte se, že je do výsledku spuštění zahrnutých dostatek dat pro mapování vstupu na výsledek spuštění výstupu. Výstup spuštění se zapíše do výstupního souboru a není zaručeno, že bude v pořádku. K mapování na vstup byste měli použít nějaký klíč ve výstupu.Poznámka:
Jeden výstupní prvek je očekáváno pro jeden vstupní prvek.
%%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
Pokud máte jiný soubor nebo složku ve stejném adresáři jako skript pro odvozování, můžete na něj odkazovat vyhledáním aktuálního pracovního adresáře. Pokud chcete importovat balíčky, můžete do složky sys.path
balíčku připojit také složku .
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>
Parametry pro ParallelRunConfig
ParallelRunConfig
je hlavní konfigurace pro ParallelRunStep
instanci v rámci kanálu Azure Machine Learning. Použijete ho k zabalení skriptu a konfiguraci nezbytných parametrů, včetně všech následujících položek:
entry_script
: Uživatelský skript jako místní cesta k souboru, který se bude spouštět paralelně na více uzlech. Pokudsource_directory
je k dispozici, použijte relativní cestu. V opačném případě použijte jakoukoli cestu, která je na počítači přístupná.mini_batch_size
: Velikost minidávkové dávky předané do jednohorun()
volání. (volitelné; výchozí hodnota je10
soubory proFileDataset
a1MB
proTabularDataset
.)- Jedná
FileDataset
se o počet souborů s minimální hodnotou1
. Do jedné minidávkové dávky můžete zkombinovat více souborů. - Pro
TabularDataset
, je to velikost dat. Příklady hodnot jsou1024
,1024KB
,10MB
a1GB
. Doporučená hodnota je1MB
. Minidávkové dávkyTabularDataset
nikdy nepřekračují hranice souborů. Pokud máte například .csv soubory s různými velikostmi, nejmenší soubor je 100 kB a největší je 10 MB. Pokud nastavítemini_batch_size = 1MB
, soubory s velikostí menší než 1 MB se budou považovat za jednu minidávku. Soubory s velikostí větší než 1 MB se rozdělí do několika mini dávek.Poznámka:
TabularDatasets zálohované SQL nelze rozdělit na oddíly. TabularDatasets z jednoho souboru parquet a skupiny s jedním řádkem nelze rozdělit na oddíly.
- Jedná
error_threshold
: Počet selhání záznamů aTabularDataset
selhání souborů,FileDataset
které by se měly během zpracování ignorovat. Pokud počet chyb pro celý vstup překročí tuto hodnotu, úloha se přeruší. Prahová hodnota chyby je určená pro celý vstup, nikoli pro jednotlivé minidávkové dávky odeslané dorun()
metody. Rozsah je[-1, int.max]
. Tato-1
část označuje ignorování všech selhání během zpracování.output_action
: Jedna z následujících hodnot označuje, jak bude výstup uspořádán:summary_only
: Uživatelský skript uloží výstup.ParallelRunStep
použije výstup pouze pro výpočet prahové hodnoty chyby.append_row
: Pro všechny vstupy se ve výstupní složce vytvoří pouze jeden soubor, který připojí všechny výstupy oddělené řádkem.
append_row_file_name
: Chcete-li přizpůsobit název výstupního souboru pro append_row output_action (volitelné; výchozí hodnota jeparallel_run_step.txt
).source_directory
: Cesty ke složkám, které obsahují všechny soubory ke spuštění na cílovém výpočetním objektu (volitelné).compute_target
: Podporuje se pouzeAmlCompute
.node_count
: Počet výpočetníchuzlůchchchprocess_count_per_node
: Počet pracovních procesů na uzel pro paralelní spuštění vstupního skriptu. Pro počítač s GPU je výchozí hodnota 1. U počítače s procesorem je výchozí hodnota počet jader na uzel. Pracovní proces bude opakovaně volatrun()
předáním mini dávky, kterou získá. Celkový počet pracovních procesů ve vaší úloze jeprocess_count_per_node * node_count
, který rozhoduje o maximálním počtu paralelníchrun()
spuštění.environment
: Definice prostředí Pythonu. Můžete ho nakonfigurovat tak, aby používal existující prostředí Pythonu nebo nastavil dočasné prostředí. Definice také zodpovídá za nastavení požadovaných závislostí aplikace (volitelné).logging_level
: Log verbosity. Hodnoty při zvyšování podrobností jsou:WARNING
,INFO
aDEBUG
. (volitelné; výchozí hodnota jeINFO
)run_invocation_timeout
: Časovýrun()
limit vyvolání metody v sekundách. (volitelné; výchozí hodnota je60
)run_max_try
: Maximální počet vyzkoušenírun()
pro minidávku. Chyba Arun()
se nezdařila, pokud je vyvolán výjimka, nebo se porun_invocation_timeout
dosažení nevrací žádná hodnota (nepovinná, výchozí hodnota je3
).
Můžete zadat mini_batch_size
, , node_count
, process_count_per_node
, logging_level
run_invocation_timeout
a jako PipelineParameter
, run_max_try
tak, aby při opětovném odeslání spuštění kanálu můžete doladit hodnoty parametrů. V tomto příkladu použijete PipelineParameter
a mini_batch_size
Process_count_per_node
tyto hodnoty změníte při opětovném odeslání jiného spuštění.
Viditelnost zařízení CUDA
Pro výpočetní cíle vybavené grafickými procesory se proměnná CUDA_VISIBLE_DEVICES
prostředí nastaví v pracovních procesech. V AmlCompute najdete celkový počet zařízení GPU v proměnné AZ_BATCHAI_GPU_COUNT_FOUND
prostředí, která je nastavena automaticky. Pokud chcete, aby každý pracovní proces měl vyhrazený GPU, nastavte process_count_per_node
na počítači stejný počet zařízení GPU. Každý pracovní proces přiřadí jedinečnému indexu CUDA_VISIBLE_DEVICES
. Pokud se pracovní proces z nějakého důvodu zastaví, použije další spuštěný pracovní proces vydaný index GPU.
Pokud je celkový počet zařízení GPU menší než process_count_per_node
, pracovní procesy se přiřadí index GPU, dokud se všechny nepoužije.
Vzhledem k celkovému počtu zařízení GPU je 2 a process_count_per_node = 4
jako příklad bude mít proces 0 a proces 1 index 0 a 1. Proces 2 a 3 nebude mít proměnnou prostředí. Pro knihovnu používající tuto proměnnou prostředí pro přiřazení GPU nebude proces 2 a 3 obsahovat gpu a nebude se pokoušet získat zařízení GPU. Pokud se proces 0 zastaví, uvolní index GPU 0. Dalším procesem, který je procesem 4, bude mít přiřazený index GPU 0.
Další informace najdete v tématu CUDA Pro Tip: Řízení viditelnosti GPU pomocí CUDA_VISIBLE_DEVICES.
Parametry pro vytvoření ParallelRunStep
Vytvořte ParallelRunStep pomocí skriptu, konfigurace prostředí a parametrů. Zadejte cílový výpočetní objekt, který jste už připojili ke svému pracovnímu prostoru jako cíl provádění skriptu pro odvozování. Slouží ParallelRunStep
k vytvoření kroku kanálu pro odvozování dávky, který přijímá všechny následující parametry:
name
: Název kroku s následujícími omezeními pojmenování: jedinečný, 3–32 znaků a regulární výraz ^[a-z]([-a-z0-9]*[a-z0-9])?$.parallel_run_config
: ObjektParallelRunConfig
, jak je definováno dříve.inputs
: Jedna nebo více datových sad Azure Machine Learning s jedním typem, které se mají rozdělit pro paralelní zpracování.side_inputs
: Nejméně jedna referenční data nebo datové sady používané jako vstupy na straně, aniž by bylo nutné dělit oddíly.output
: ObjektOutputFileDatasetConfig
představující cestu k adresáři, ve kterém budou uložena výstupní data.arguments
: Seznam argumentů předaných uživatelskému skriptu. Pomocí unknown_args je můžete načíst do vstupního skriptu (volitelné).allow_reuse
: Určuje, jestli má krok při spuštění použít předchozí výsledky se stejnými nastaveními nebo vstupy. Pokud jeFalse
tento parametr, při provádění kanálu se pro tento krok vždy vygeneruje nové spuštění. (volitelné; výchozí hodnota jeTrue
.)
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
)
Ladění skriptů ze vzdáleného kontextu
Přechod z ladění bodovacího skriptu místně na ladění hodnoticího skriptu ve skutečném kanálu může být obtížné přeskočit. Informace o vyhledání protokolů na portálu najdete v části kanály strojového učení o ladění skriptů ze vzdáleného kontextu. Informace v této části platí také pro ParallelRunStep.
Soubor protokolu 70_driver_log.txt
například obsahuje informace z kontroleru, který spouští kód ParallelRunStep.
Vzhledem k distribuované povaze úloh ParallelRunStep existují protokoly z několika různých zdrojů. Vytvoří se však dva konsolidované soubory, které poskytují základní informace:
~/logs/job_progress_overview.txt
: Tento soubor poskytuje základní informace o počtu minidávek (označovaných také jako úkoly) vytvořených doposud a počtu dosud zpracovaných minidávek. Na tomto konci se zobrazí výsledek úlohy. Pokud úloha selhala, zobrazí se chybová zpráva a kde spustit řešení potíží.~/logs/sys/master_role.txt
: Tento soubor poskytuje zobrazení hlavního uzlu (označovaného také jako orchestrátor) spuštěné úlohy. Zahrnuje vytvoření úlohy, sledování průběhu, výsledek spuštění.
Protokoly vygenerované ze vstupního skriptu pomocí pomocné rutiny EntryScriptu a příkazů print se nacházejí v následujících souborech:
~/logs/user/entry_script_log/<node_id>/<process_name>.log.txt
: Tyto soubory jsou protokoly zapsané z entry_script pomocí pomocné rutiny EntryScriptu.~/logs/user/stdout/<node_id>/<process_name>.stdout.txt
: Tyto soubory jsou protokoly z příkazu stdout (například příkaz print) entry_script.~/logs/user/stderr/<node_id>/<process_name>.stderr.txt
: Tyto soubory jsou protokoly ze stderru entry_script.
Stručné porozumění chybám ve vašem skriptu je:
~/logs/user/error.txt
: Tento soubor se pokusí shrnout chyby ve skriptu.
Další informace o chybách ve skriptu najdete tady:
~/logs/user/error/
: Obsahuje úplné trasování zásobníku výjimek vyvolaných při načítání a spouštění vstupního skriptu.
Pokud potřebujete úplné znalosti o tom, jak každý uzel spustil skript skóre, podívejte se na jednotlivé protokoly procesů pro každý uzel. Protokoly procesů najdete ve sys/node
složce seskupené podle pracovních uzlů:
~/logs/sys/node/<node_id>/<process_name>.txt
: Tento soubor obsahuje podrobné informace o každé minidávce při vyzvednutí nebo dokončení pracovníkem. Pro každou minidávku tento soubor obsahuje:- IP adresa a PID pracovního procesu.
- Celkový počet položek, počet úspěšně zpracovaných položek a počet neúspěšných položek.
- Čas spuštění, doba trvání, zpracování a čas spuštění metody.
Můžete také zobrazit výsledky pravidelných kontrol využití prostředků pro každý uzel. Soubory protokolů a instalační soubory jsou v této složce:
~/logs/perf
: Nastaví--resource_monitor_interval
se změna intervalu kontroly v sekundách. Výchozí interval je600
, což je přibližně 10 minut. Pokud chcete monitorování zastavit, nastavte hodnotu na0
hodnotu . Každá<node_id>
složka obsahuje:os/
: Informace o všech spuštěných procesech v uzlu. Při jedné kontrole se spustí příkaz operačního systému a výsledek se uloží do souboru. V Linuxu jeps
příkaz . Ve Windows použijtetasklist
.%Y%m%d%H
: Název podsložky je čas na hodinu.processes_%M
: Soubor končí minutou času kontroly.
node_disk_usage.csv
: Podrobné využití disku uzlu.node_resource_usage.csv
: Přehled využití prostředků uzluprocesses_resource_usage.csv
: Přehled využití prostředků jednotlivých procesů
Návody protokol z mého uživatelského skriptu ze vzdáleného kontextu?
ParallelRunStep může spouštět více procesů na jednom uzlu na základě process_count_per_node. Pokud chcete uspořádat protokoly z jednotlivých procesů na uzlu a kombinovat příkazy tisku a protokolu, doporučujeme použít logger ParallelRunStep, jak je znázorněno níže. Získáte protokolovací nástroj z EntryScriptu a protokoly se zobrazí ve složce logs/user na portálu.
Ukázkový vstupní skript pomocí protokolovacího nástroje:
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
Kam zpráva z jímky Pythonu logging
umožňuje?
ParallelRunStep nastaví obslužnou rutinu v kořenovém protokolovacím nástroji, který potopí zprávu na logs/user/stdout/<node_id>/processNNN.stdout.txt
.
logging
výchozí hodnota je nastavená na INFO
úroveň. Ve výchozím nastavení se úrovně níže INFO
nezobrazí, například DEBUG
.
Jak můžu na portálu zapisovat do souboru, který se má zobrazit?
Soubory ve logs
složce se nahrají a zobrazí se na portálu.
Můžete získat složku logs/user/entry_script_log/<node_id>
, například níže, a vytvořit cestu k souboru pro zápis:
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.
Jak zpracovat přihlášení k novým procesům?
V vstupním skriptu můžete vytvořit nové procesy pomocí subprocess
modulu, připojit se k jejich vstupním/výstupním/chybovým kanálům a získat jejich návratové kódy.
Doporučeným přístupem je použít run()
funkci s capture_output=True
. Chyby se zobrazí v logs/user/error/<node_id>/<process_name>.txt
souboru .
Pokud chcete použít Popen()
, měli byste přesměrovat stdout/stderr na soubory, například:
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"),
# ...
)
Poznámka:
Pracovní proces spustí "systémový" kód a kód vstupního skriptu ve stejném procesu.
Pokud není stdout
zadáno nebo stderr
není zadáno, zdědí podproces vytvořený ve Popen()
vstupním skriptu nastavení pracovního procesu.
stdout
bude zapisovat do logs/sys/node/<node_id>/processNNN.stdout.txt
a stderr
do logs/sys/node/<node_id>/processNNN.stderr.txt
.
Návody zapsat soubor do výstupního adresáře a pak ho zobrazit na portálu?
Výstupní adresář můžete získat z EntryScript
třídy a zapisovat do něj. Pokud chcete zobrazit zapsané soubory, vyberte v kroku Zobrazení Spustit na portálu Azure Machine Learning kartu Výstupy a protokoly . Vyberte odkaz Výstupy dat a pak proveďte kroky popsané v dialogovém okně.
Použijte EntryScript
ve vstupním skriptu, například v tomto příkladu:
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...
Jak můžu předat vedlejší vstup, například soubor nebo soubory obsahující vyhledávací tabulku, všem svým pracovníkům?
Uživatel může předat referenční data skriptu pomocí side_inputs parametru ParalleRunStep. Všechny datové sady poskytované jako side_inputs se připojí ke každému pracovnímu uzlu. Uživatel může získat umístění připojení předáním argumentu.
Vytvořte datovou sadu obsahující referenční data, zadejte místní cestu připojení a zaregistrujte ji ve svém pracovním prostoru. Předejte ho parametru side_inputs
vašeho ParallelRunStep
souboru . Kromě toho můžete přidat jeho cestu do oddílu arguments
, abyste měli snadný přístup k jeho připojené cestě.
Poznámka:
FileDatasets používejte jenom pro side_inputs.
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,
)
Potom k němu můžete přistupovat ve skriptu pro odvozování (například v metodě init() následujícím způsobem:
parser = argparse.ArgumentParser()
parser.add_argument('--labels_dir', dest="labels_dir", required=True)
args, _ = parser.parse_known_args()
labels_path = args.labels_dir
Jak používat vstupní datové sady s ověřováním instančního objektu?
Uživatel může předat vstupní datové sady s ověřováním instančního objektu použitým v pracovním prostoru. Použití takové datové sady v ParallelRunStep vyžaduje, aby byla datová sada zaregistrovaná pro vytvoření konfigurace ParallelRunStep.
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)
Jak zkontrolovat průběh a analyzovat
V této části se dozvíte, jak zkontrolovat průběh úlohy ParallelRunStep a zkontrolovat příčinu neočekávaného chování.
Jak zkontrolovat průběh úlohy?
Kromě pohledu na celkový stav StepRun lze počet naplánovaných/zpracovaných minidávek a průběh generování výstupu zobrazit v ~/logs/job_progress_overview.<timestamp>.txt
souboru . Soubor se každý den obměňuje, můžete zkontrolovat, jestli je v nejnovějším časovém razítku největší časové razítko.
Co mám zkontrolovat, jestli nějakou dobu nedochází k žádnému pokroku?
Můžete se ~/logs/sys/errror
podívat, jestli nedošlo k nějaké výjimce. Pokud žádný neexistuje, je pravděpodobné, že váš vstupní skript trvá dlouho, můžete v kódu vytisknout informace o průběhu a vyhledat časově náročnou část nebo přidat "--profiling_module", "cProfile"
do ParallelRunStep
arguments
souboru profilu s názvem pod <process_name>.profile
~/logs/sys/node/<node_id>
složkou.
Kdy se úloha zastaví?
pokud nezrušíte, úloha se zastaví se stavem:
- Dokončeno. Pokud byly všechny minidávkové dávky zpracovány a výstup se vygeneroval pro
append_row
režim. - Neúspěch.
Parameters for ParallelRunConfig
Pokuderror_threshold
dojde k překročení nebo došlo k systémové chybě během úlohy.
Kde najít původní příčinu selhání?
Pokud chcete zjistit příčinu a podrobný protokol chyb, postupujte podle pokynů ~logs/job_result.txt
.
Ovlivní selhání uzlu výsledek úlohy?
Ne, pokud jsou v určeném výpočetním clusteru k dispozici další uzly. Orchestrátor spustí nový uzel jako náhradu a ParallelRunStep je odolný vůči takové operaci.
Co se stane, když init
funkce ve vstupním skriptu selže?
ParallelRunStep má mechanismus opakování po určitou dobu, aby poskytoval šanci na obnovení z přechodných problémů bez zpoždění selhání úlohy příliš dlouho, mechanismus je následující:
- Pokud po spuštění
init
uzlu dochází u všech agentů k selhání, přestaneme se po selhání pokoušet3 * process_count_per_node
. - Pokud po spuštění
init
úlohy dochází u všech agentů všech uzlů k selhání, zastavíme se pokus o spuštění úlohy déle než 2 minuty a dojde k2 * node_count * process_count_per_node
selháním. - Pokud se všichni agenti zablokují
init
déle než3 * run_invocation_timeout + 30
sekundy, úloha se nezdaří kvůli příliš dlouhému pokroku.
Co se stane na OutOfMemory? Jak můžu zjistit příčinu?
ParallelRunStep nastaví aktuální pokus o zpracování minidávkové dávky na stav selhání a pokusí se restartovat neúspěšný proces. Můžete zkontrolovat ~logs/perf/<node_id>
proces, který využívá paměť.
Proč mám hodně souborů processNNN?
ParallelRunStep spustí nové pracovní procesy na nahrazení těch, které byly ukončeny neobvykle, a každý proces vygeneruje processNNN
soubor jako protokol. Pokud ale proces selhal kvůli výjimce během init
funkce uživatelského skriptu a že se chyba opakovaně opakuje po 3 * process_count_per_node
dobu, nebude spuštěn žádný nový pracovní proces.
Další kroky
Podívejte se na tyto poznámkové bloky Jupyter demonstrující kanály Služby Azure Machine Learning.
Nápovědu k balíčku azureml-pipeline-steps najdete v referenčních informacích k sadě SDK.
Zobrazení referenční dokumentace pro ParallelRunConfig třídy a dokumentace pro ParallelRunStep třídy.
Postupujte podle pokročilého kurzu používání kanálů s ParallelRunStep. V tomto kurzu se dozvíte, jak předat jiný soubor jako vedlejší vstup.