james
(최동진)
June 15, 2025, 12:53am
1
요즘 PyTorch 모델을 활용한 추론 작업을 하루에 몇 번 정도 실행하고 있는데, 가능한 한 GPU(H100)를 효율적으로 쓰고 싶어요. 단순히 특정 시간에 맞춰 실행하는 게 아니라, 예를 들면 Blob Storage에 새로운 파일이 들어오거나 API를 통해 데이터가 도착했을 때 자동으로 실행되면 좋겠어요.
처음에는 Azure VM을 특정 시간에 켜고, 일정 시간 뒤 자동으로 끄도록 설정했는데, 이 방식은 GPU 자원이 불필요하게 대기 상태로 있는 시간이 많더라고요. 그래서 가능한 한, 추론이 끝나면 자동으로 리소스를 종료하는 방식이 필요해요.
Azure Machine Learning(AML)이 이런 이벤트 기반 워크플로우에 더 잘 맞는다고 들었는데, 아직 익숙하지 않아서 어떻게 접근해야 할지 고민입니다. 개인적으로는 노트북 기반보다는 SDK나 CLI를 활용해 파이썬 스크립트를 직접 실행하고 싶고요. 필요한 데이터는 클라우드에서 불러오고, 추론 결과는 저장하는 구조로 만들되, GPU 리소스를 최대한 효율적으로 활용하는 게 목표예요.
이럴 때 Azure ML에서 어떤 구성요소를 활용해야 하는지, 전체 워크플로우를 어떻게 짜는 게 좋을지 조언해줄 수 있을까요?
CloudBro_AI
(CloudBro AI Responder)
June 16, 2025, 2:29am
2
[CloudBro AI Bot Response]
Azure ML에서 GPU 기반 추론 작업을 이벤트 기반으로 효율적으로 실행하고, 작업 완료 후 자동으로 리소스를 종료하는 워크플로우 설계에 대해 단계별로 안내드리겠습니다.
1. 요구사항 요약
PyTorch 모델 기반 GPU(H100) 추론
이벤트(예: Blob Storage에 새 파일 업로드, API 호출) 발생 시 자동 실행
2. Azure ML 핵심 컴포넌트 및 아키텍처 제안
구성요소
역할
Azure Machine Learning Compute Cluster (GPU 노드)
GPU 자원 할당 및 추론 실행 환경
Azure Blob Storage
입력 데이터 저장 및 이벤트 트리거 소스
Azure Event Grid
Blob Storage 이벤트 감지 및 이벤트 전파
Azure Functions / Azure Logic Apps
이벤트 수신 및 AML 작업 실행 트리거
Azure ML SDK (Python)
추론 스크립트 작성 및 AML 작업 제출
Azure ML Job
추론 작업 단위, 완료 시 자동 종료 가능
Azure ML Compute 자동 스케일링
작업 없을 때 노드 자동 축소 (0까지 가능)
3. 상세 워크플로우 설계
Step 1: GPU 컴퓨팅 클러스터 구성
Azure ML Compute Cluster 생성 시 GPU(H100) 노드 타입 선택
자동 스케일링 활성화 (최소 노드 수 0, 최대 필요 시 1 이상)
자동 스케일링 덕분에 작업 없으면 GPU 노드가 꺼져 비용 절감 가능
az ml compute create --name gpu-cluster --type amlcompute --min-instances 0 --max-instances 1 --size STANDARD_ND96A_V4
STANDARD_ND96A_V4는 NVIDIA H100 GPU가 탑재된 VM 시리즈입니다.
Step 2: 추론 스크립트 및 환경 준비
PyTorch 모델 로딩 및 추론 수행하는 Python 스크립트 작성
필요한 Python 환경(라이브러리 포함)을 environment.yml 또는 conda 환경으로 정의
AML SDK를 활용해 스크립트와 환경을 AML에 등록
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
from azure.ai.ml.entities import Environment, CommandJob
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)
# 환경 정의 예시
env = Environment(
name="pytorch-env",
conda_file="environment.yml",
image="mcr.microsoft.com/azureml/pytorch:1.13-ubuntu20.04-py38-cuda11.6"
)
ml_client.environments.create_or_update(env)
# 추론 작업 제출 예시
job = CommandJob(
code="./src",
command="python inference.py --input_data ${{inputs.input_data}} --output ${{outputs.output}}",
environment=env,
compute="gpu-cluster",
inputs={"input_data": Input(type="uri_file", path="azureml://datastores/workspaceblobstore/paths/input/")},
outputs={"output": Output(type="uri_folder", path="azureml://datastores/workspaceblobstore/paths/output/")}
)
ml_client.jobs.create_or_update(job)
Step 3: 이벤트 기반 자동 실행 트리거 구성
(1) Blob Storage 이벤트 감지
Blob Storage에 새 파일 업로드 시 Azure Event Grid 이벤트 발생
Event Grid가 Azure Function 또는 Logic App으로 이벤트 전파
(2) Azure Function으로 AML 작업 실행 트리거
Azure Function은 Python으로 작성 가능
Event Grid 이벤트 수신 시 Azure ML SDK를 통해 추론 작업 제출
import logging
import azure.functions as func
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
def main(event: func.EventGridEvent):
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)
# 이벤트 데이터 파싱 (예: Blob URL)
blob_url = event.get_json().get('url')
# AML 작업 제출 로직 (위 Step 2 참고)
job = ... # CommandJob 생성 및 제출
ml_client.jobs.create_or_update(job)
logging.info(f"Submitted AML job for blob: {blob_url}")
Step 4: 작업 완료 후 자동 리소스 종료
Azure ML Compute Cluster 자동 스케일링이 0으로 축소되도록 설정하면,
작업이 없으면 GPU 노드가 자동으로 종료되어 비용 절감
Step 5: 결과 저장 및 후처리
추론 결과를 Azure Blob Storage에 저장
후속 작업(알림, 데이터 적재 등)은 Azure Function 또는 Logic Apps에서 추가 처리 가능
4. 추가 팁 및 참고자료
AML Job 상태 모니터링: AML SDK의 ml_client.jobs.get(job_name)으로 상태 확인 가능
버전 관리: 모델과 추론 스크립트는 AML Model Registry에 등록해 관리 권장
테스트: 초기에는 소규모 데이터로 테스트 후 스케일업 권장
비용 최적화: GPU 노드 최소 0 설정 반드시 확인
5. 참고 링크
필요 시, Azure ML 파이프라인을 활용해 더 복잡한 워크플로우 자동화도 가능하지만, 단순 이벤트 기반 추론에는 위 구성으로 충분히 효율적인 운영이 가능합니다. 추가 궁금증 있으시면 언제든 문의 주세요!