실행 기록 시작, 모니터링 및 추적

Python용 Azure Machine Learning SDK, Machine Learning CLIAzure Machine Learning 스튜디오는 학습 및 실험용으로 실행을 모니터링, 구성 및 추적하는 다양한 방법을 제공합니다. ML 실행 기록은 설명 가능하고 반복 가능한 ML 개발 프로세스의 중요한 부분입니다.

이 문서에서는 다음 작업을 수행하는 방법을 보여 줍니다.

  • 실행 성능 모니터링하기.
  • 실행 표시 이름을 추가합니다.
  • 사용자 지정 보기 만들기.
  • 실행 설명을 추가하기.
  • 태그 및 찾기 실행하기.
  • 실행 기록 검색하기.
  • 취소 또는 실패 실행하기.
  • 자식 실행 만들기.
  • 이메일 알림을 통해 실행 상태를 모니터링하기.

Azure Machine Learning Service 및 연결된 Azure 서비스를 모니터링하는 방법에 대한 정보를 찾는다면 Azure Machine Learning 모니터링 방법을 참조하세요. 웹 서비스로 배포된 모델을 모니터링하는 방법에 대한 정보를 찾고 있는 경우 모델 데이터 수집Application Insights로 모니터링을 참조하세요.

사전 요구 사항

다음 항목이 필요합니다.

실행 성능 모니터링

  • 실행 및 해당 로깅 프로세스 시작

    1. 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")
      
    2. start_logging() 메서드를 사용하여 실행 및 해당 로깅 프로세스를 시작합니다.

      notebook_run = exp.start_logging()
      notebook_run.log(name="message", value="Hello from run!")
      
  • 실행 상태 모니터링

    • 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())
      

실행 표시 이름

실행 표시 이름은 실행을 위해 제공할 수 있는 선택적인 사용자 지정이 가능한 이름입니다. 실행 표시 이름을 편집하려면 다음을 수행합니다.

  1. 실행 목록으로 이동합니다.

  2. 실행을 선택하여 실행 세부 정보 페이지에서 표시 이름을 편집합니다.

  3. 실행 표시 이름을 편집하려면 편집 단추를 선택합니다.

Screenshot: edit the display name

사용자 지정 보기

스튜디오에서 실행을 보려면 다음을 수행합니다.

  1. 실험 탭으로 이동합니다.

  2. 모든 실험을 선택하여 실험에서 모든 실행을 보거나 모든 실행을 선택하여 작업 영역에서 제출된 모든 실행을 봅니다.

모든 실행’ 페이지에서 태그, 실험, 컴퓨팅 대상 등을 기준으로 실행 목록을 필터링하여 작업을 보다 효율적으로 구성하고 범위를 지정할 수 있습니다.

  1. 비교할 실행을 선택하거나 차트를 추가하거나 필터를 적용하여 페이지에 대 한 사용자 지정을 수행합니다. 이러한 변경 내용을 사용자 지정 보기로 저장할 수 있으므로 작업으로 쉽게 돌아갈 수 있습니다. 작업 영역 권한이 있는 사용자는 편집하거나 사용자 지정 보기를 볼 수 있습니다. 또한 공유 보기를 선택하여 향상된 공동 작업을 위해 팀 구성원과 사용자 지정 보기를 공유합니다.

  2. 실행 로그를 보려면 출력 + 로그 탭에서 특정 실행을 선택하고 실행에 대 한 진단 및 오류 로그를 확인할 수 있습니다.

Screenshot: create a custom view

실행 설명

실행에 더 많은 컨텍스트 및 정보를 제공하기 위해 실행에 실행 설명을 추가할 수 있습니다. 실행 목록에서 이러한 설명을 검색하고 실행 목록에 열로 실행 설명을 추가할 수도 있습니다.

실행에 대한 실행 세부 정보 페이지로 이동하고 편집이나 연필 아이콘을 선택하여 실행에 대한 설명을 추가, 편집 또는 삭제합니다. 실행 목록의 변경 내용을 유지하려면 기존 사용자 지정 보기나 새 사용자 지정 보기에 대한 변경 내용을 저장합니다. Markdown 형식은 아래와 같이 이미지를 포함하고 딥 링크 설정을 허용하는 실행 설명에서 지원됩니다.

Screenshot: create a run description

태그 및 찾기 실행

Azure Machine Learning에서는 속성과 태그를 사용하여 실행을 구성하고 중요한 정보에 대한 실행을 쿼리할 수 있습니다.

  • 속성 및 태그 추가

    실행에 검색할 수 있는 메타데이터를 추가하려면 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())
    
  • 쿼리 속성 및 태그

    특정 속성 및 태그와 일치하는 실행 목록을 반환하기 위해 실험 내에서 실행을 쿼리할 수 있습니다.

    list(exp.get_runs(properties={"author":"azureml-user"},tags={"quality":"fantastic run"}))
    list(exp.get_runs(properties={"author":"azureml-user"},tags="worth another look"))
    

취소 또는 실패 실행

오류가 발생하거나 실행을 완료하는 데 시간이 너무 오래 걸리는 경우 실행을 취소할 수 있습니다.

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())

자식 영역 만들기

다른 하이퍼 매개 변수 튜닝 반복의 경우와 같이 관련 실행을 함께 그룹화하는 자식 실행을 만듭니다.

참고

자식 실행은 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 개체를 만듭니다.

중요

부모 실행에서 원격 컴퓨팅으로 자식 실행을 제출하려면 먼저 부모 실행 코드의 작업 영역에 로그인해야 합니다. 기본적으로 원격 실행의 실행 컨텍스트 개체는 자식 실행을 제출할 자격 증명을 포함하지 않습니다. 서비스 주체 또는 관리 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}")

이메일 알림으로 실행 상태 모니터링

  1. Azure Portal의 왼쪽 탐색 모음에서 모니터 탭을 선택합니다.

  2. 진단 설정을 선택하고 +진단 설정 추가를 선택합니다.

    Screenshot of diagnostic settings for email notification

  3. 진단 설정에서

    1. 범주 세부 정보 아래 AmlRunStatusChangedEvent를 선택합니다.
    2. 대상 세부 정보에서 Log Analytics 작업 영역으로 보내기를 선택하고 구독Log Analytics 작업 영역을 지정합니다.

    참고

    Azure Log Analytics 작업 영역Azure Machine Learning Service 작업 영역과는 다른 유형의 Azure 리소스입니다. 해당 목록에 옵션이 없는 경우 Log Analytics 작업 영역을 만들 수 있습니다.

    Where to save email notification

  4. 로그 탭에서 새 경고 규칙을 추가합니다.

    New alert rule

  5. Azure Monitor를 사용하여 로그 경고를 만들고 관리하는 방법을 참조하세요.

노트북 예제

이 문서의 개념을 보여 주는 노트북은 다음과 같습니다.

  • 로깅 API에 대한 자세한 정보는 로깅 API 노트북을 참조하세요.

  • Azure Machine Learning SDK를 사용하여 실행을 관리하는 방법에 대한 자세한 정보는 실행 노트북 관리를 참조하세요.

다음 단계