실행 기록 시작, 모니터링 및 추적
적용 대상: Python SDK azureml v1
적용 대상: Azure CLI ml extension v1
Python v1용 Azure Machine Learning SDK 및 Machine Learning CLI는 학습 및 실험용으로 실행을 모니터링, 구성 및 추적하는 다양한 방법을 제공합니다. ML 실행 기록은 설명 가능하고 반복 가능한 ML 개발 프로세스의 중요한 부분입니다.
팁
스튜디오 사용에 대한 자세한 내용은 스튜디오를 사용하여 실행 추적, 모니터링 및 분석을 참조하세요.
Azure Machine Learning SDK v2를 사용하는 경우 다음 문서를 참조하세요.
이 문서에서는 다음 작업을 수행하는 방법을 보여 줍니다.
- 실행 성능 모니터링
- 실행에 태그 지정 및 찾기
- 실행 기록 검색
- 실행 취소 또는 실패
- 자식 실행 만들기
- 메일 알림을 통해 실행 상태 모니터링
팁
Azure Machine Learning Service 및 연결된 Azure 서비스를 모니터링하는 방법에 대한 정보를 찾는다면 Azure Machine Learning 모니터링 방법을 참조하세요. 웹 서비스로 배포된 모델을 모니터링하는 방법에 대한 정보를 찾고 있는 경우 모델 데이터 수집 및 Application Insights로 모니터링을 참조하세요.
필수 조건
다음 항목이 필요합니다.
Azure 구독 Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다. 지금 Azure Machine Learning 평가판 또는 유료 버전을 사용해 보세요.
Python용 Azure Machine Learning SDK(버전 1.0.21 이상) 최신 버전의 SDK를 설치하거나 업데이트하려면 SDK 설치 또는 업데이트를 참조하세요.
Azure Machine Learning SDK 버전을 확인하려면 다음 코드를 사용합니다.
print(azureml.core.VERSION)
Azure CLI 및 Azure Machine Learning용 CLI 확장
Important
이 문서의 일부 Azure CLI 명령에서는
azure-cli-ml
또는 v1(Azure Machine Learning용 확장)을 사용합니다. v1 확장에 대한 지원은 2025년 9월 30일에 종료됩니다. v1 확장은 이 날짜까지 설치하고 사용할 수 있습니다.2025년 9월 30일 이전에
ml
또는 v2 확장으로 전환하는 것이 좋습니다. v2 확장에 대한 자세한 내용은 Azure ML CLI 확장 및 Python SDK v2를 참조하세요.
실행 성능 모니터링
실행 및 해당 로깅 프로세스 시작
적용 대상: Python SDK azureml v1
azureml.core 패키지에서 작업 영역, 실험, 실행 및 ScriptRunConfig 클래스를 가져와서 실험을 설정합니다.
import azureml.core from azureml.core import Workspace, Experiment, Run from azureml.core import ScriptRunConfig ws = Workspace.from_config() exp = Experiment(workspace=ws, name="explore-runs")
start_logging()
메서드를 사용하여 실행 및 해당 로깅 프로세스를 시작합니다.notebook_run = exp.start_logging() notebook_run.log(name="message", value="Hello from run!")
실행 상태 모니터링
적용 대상: Python SDK azureml v1
get_status()
메서드를 사용하여 실행 상태를 가져옵니다.print(notebook_run.get_status())
실행에 대한 실행 ID, 실행 시간 및 기타 세부 정보를 가져오려면
get_details()
메서드를 사용합니다.print(notebook_run.get_details())
실행이 성공적으로 완료되면
complete()
메서드를 사용하여 완료됨으로 표시합니다.notebook_run.complete() print(notebook_run.get_status())
Python의
with...as
디자인 패턴을 사용하는 경우 실행이 범위를 벗어나는 경우 자동으로 완료됨으로 표시합니다. 실행을 완료됨으로 표시할 때 수동으로 할 필요가 없습니다.with exp.start_logging() as notebook_run: notebook_run.log(name="message", value="Hello from run!") print(notebook_run.get_status()) print(notebook_run.get_status())
실행에 태그 지정 및 찾기
Azure Machine Learning에서는 속성과 태그를 사용하여 실행을 구성하고 중요한 정보에 대한 실행을 쿼리할 수 있습니다.
속성 및 태그 추가
적용 대상: Python SDK azureml v1
실행에 검색할 수 있는 메타데이터를 추가하려면
add_properties()
메서드를 사용합니다. 예를 들어 다음 코드는 실행에"author"
속성을 추가합니다.local_run.add_properties({"author":"azureml-user"}) print(local_run.get_properties())
속성은 변경할 수 없으므로 감사를 위해 영구 레코드를 만듭니다. 다음 코드 예제 결과에서는 이전 코드에서
"author"
속성 값으로 이미"azureml-user"
을 추가했으므로 오류가 발생합니다.try: local_run.add_properties({"author":"different-user"}) except Exception as e: print(e)
속성과 달리 태그는 변경 가능합니다. 실험의 소비자에게 검색 가능하고 의미 있는 정보를 추가하려면
tag()
메서드를 사용합니다.local_run.tag("quality", "great run") print(local_run.get_tags()) local_run.tag("quality", "fantastic run") print(local_run.get_tags())
간단한 문자열 태그를 추가할 수도 있습니다. 이러한 태그가 태그 사전에 키로 표시되는 경우, 값은
None
입니다.local_run.tag("worth another look") print(local_run.get_tags())
쿼리 속성 및 태그
특정 속성 및 태그와 일치하는 실행 목록을 반환하기 위해 실험 내에서 실행을 쿼리할 수 있습니다.
적용 대상: Python SDK azureml v1
list(exp.get_runs(properties={"author":"azureml-user"},tags={"quality":"fantastic run"})) list(exp.get_runs(properties={"author":"azureml-user"},tags="worth another look"))
실행 취소 또는 실패
오류가 발생하거나 실행을 완료하는 데 시간이 너무 오래 걸리는 경우 실행을 취소할 수 있습니다.
적용 대상: Python SDK azureml v1
SDK를 사용하여 실행을 취소하려면 cancel()
메서드를 사용합니다.
src = ScriptRunConfig(source_directory='.', script='hello_with_delay.py')
local_run = exp.submit(src)
print(local_run.get_status())
local_run.cancel()
print(local_run.get_status())
실행이 완료되었지만 오류가 포함된 경우(예: 잘못된 학습 스크립트를 사용한 경우) fail()
메서드를 사용하여 실패로 표시할 수 있습니다.
local_run = exp.submit(src)
local_run.fail()
print(local_run.get_status())
자식 실행 만들기
적용 대상: Python SDK azureml v1
다른 하이퍼 매개 변수 튜닝 반복의 경우와 같이 관련 실행을 함께 그룹화하는 자식 실행을 만듭니다.
참고 항목
자식 실행은 SDK를 사용해야만 만들 수 있습니다.
이 코드 예제에서는 hello_with_children.py
스크립트를 사용하여 child_run()
메서드를 활용하여 제출된 실행 내에서 5개의 자식 실행 일괄 처리를 만듭니다.
!more hello_with_children.py
src = ScriptRunConfig(source_directory='.', script='hello_with_children.py')
local_run = exp.submit(src)
local_run.wait_for_completion(show_output=True)
print(local_run.get_status())
with exp.start_logging() as parent_run:
for c,count in enumerate(range(5)):
with parent_run.child_run() as child:
child.log(name="Hello from child run", value=c)
참고 항목
범위 밖으로 이동하면 자식 실행이 완료됨으로 자동 표시됩니다.
많은 자식 실행을 효율적으로 만들려면 create_children()
메서드를 사용합니다. 각 생성 시 네트워크 호출이 발생하므로, 실행 일괄 처리를 만드는 것이 하나씩 생성하는 것보다 효율적입니다.
자식 실행 제출
자식 실행은 부모 실행에서 제출할 수도 있습니다. 이렇게 하면 부모 및 자식 실행의 계층 구조를 만들 수 있습니다. 부모 실행이 없는 자식 실행은 만들 수 없습니다. 부모 실행은 자식 실행을 시작하는 것 말고는 아무 작업도 수행하지 않지만 계층 구조를 만들 때 필요합니다. 모든 실행의 상태는 독립적입니다. 하나 이상의 자식 실행이 취소되거나 실패한 경우에도 부모는 "Completed"
성공 상태로 있을 수 있습니다.
자식 실행에서 부모 실행과 다른 실행 구성을 사용할 수 있습니다. 예를 들어, 부모가 성능이 떨어지는 CPU 기반 구성을 사용하는 동안 자식은 GPU 기반 구성을 사용할 수 있습니다. 또 다른 일반적인 방법은 각 자식에게 다른 인수 및 데이터를 전달하는 것입니다. 자식 실행을 사용자 지정하려면 자식 실행에 대한 ScriptRunConfig
개체를 만듭니다.
Important
부모 실행에서 원격 컴퓨팅으로 자식 실행을 제출하려면 먼저 부모 실행 코드의 작업 영역에 로그인해야 합니다. 기본적으로 원격 실행의 실행 컨텍스트 개체는 자식 실행을 제출할 자격 증명을 포함하지 않습니다. 서비스 주체 또는 관리 ID 자격 증명을 사용하여 로그인합니다. 인증에 대한 자세한 정보는 인증 설정을 참조하세요.
코드는 다음과 같습니다.
"gpu-cluster"
작업 영역에서ws
이름이 지정된 컴퓨팅 리소스를 검색합니다.- 자식
ScriptRunConfig
개체에 전달될 다른 인수 값을 반복합니다. - 사용자 지정 컴퓨팅 리소스 및 인수를 사용하여 새 자식 실행을 만들고 제출합니다.
- 모든 자식 실행이 완료될 때까지 차단합니다.
# parent.py
# This script controls the launching of child scripts
from azureml.core import Run, ScriptRunConfig
compute_target = ws.compute_targets["gpu-cluster"]
run = Run.get_context()
child_args = ['Apple', 'Banana', 'Orange']
for arg in child_args:
run.log('Status', f'Launching {arg}')
child_config = ScriptRunConfig(source_directory=".", script='child.py', arguments=['--fruit', arg], compute_target=compute_target)
# Starts the run asynchronously
run.submit_child(child_config)
# Experiment will "complete" successfully at this point.
# Instead of returning immediately, block until child runs complete
for child in run.get_children():
child.wait_for_completion()
동일한 구성, 인수 및 입력을 사용하여 여러 자식 실행을 효율적으로 만들려면 create_children()
메서드를 사용합니다. 각 생성 시 네트워크 호출이 발생하므로, 실행 일괄 처리를 만드는 것이 하나씩 생성하는 것보다 효율적입니다.
자식 실행 내에서 부모 실행 ID를 볼 수 있습니다.
## In child run script
child_run = Run.get_context()
child_run.parent.id
자식 실행 쿼리
특정 부모의 자식 실행을 쿼리하려면 get_children()
메서드를 사용합니다.
recursive = True
인수를 사용하면 자식 및 손자의 중첩 트리를 쿼리할 수 있습니다.
print(parent_run.get_children())
부모 또는 루트 실행에 로그
Run.parent
필드를 사용하여 현재 자식 실행을 시작한 실행에 액세스할 수 있습니다. Run.parent
를 사용하는 일반적인 사용 사례는 로그 결과를 한 장소에 결합하는 것입니다. 자식 실행은 비동기적으로 실행되며 자식 실행이 완료될 때까지 부모가 대기하는 능력 이상의 순서나 동기화는 보장되지 않습니다.
# in child (or even grandchild) run
def root_run(self : Run) -> Run :
if self.parent is None :
return self
return root_run(self.parent)
current_child_run = Run.get_context()
root_run(current_child_run).log("MyMetric", f"Data from child run {current_child_run.id}")
메일 알림으로 실행 상태 모니터링
Azure Portal의 왼쪽 탐색 모음에서 모니터 탭을 선택합니다.
진단 설정을 선택하고 +진단 설정 추가를 선택합니다.
진단 설정에서
- 범주 세부 정보 아래 AmlRunStatusChangedEvent를 선택합니다.
- 대상 세부 정보에서 Log Analytics 작업 영역으로 보내기를 선택하고 구독 및 Log Analytics 작업 영역을 지정합니다.
참고 항목
Azure Log Analytics 작업 영역은 Azure Machine Learning Service 작업 영역과는 다른 유형의 Azure 리소스입니다. 해당 목록에 옵션이 없는 경우 Log Analytics 작업 영역을 만들 수 있습니다.
로그 탭에서 새 경고 규칙을 추가합니다.
예제 Notebook
이 문서의 개념을 보여 주는 Notebook은 다음과 같습니다.
로깅 API에 대한 자세한 정보는 로깅 API Notebook을 참조하세요.
Azure Machine Learning SDK를 사용하여 실행을 관리하는 방법에 대한 자세한 정보는 실행 Notebook 관리를 참조하세요.
다음 단계
- 실험에 대한 메트릭을 로그하는 방법에 대한 자세한 정보는 학습 실행 중의 로그 메트릭을 참조하세요.
- Azure Machine Learning에서 리소스와 로그를 모니터링하는 방법을 알아보려면 Azure Machine Learning 모니터링을 참조하세요.