Azure Machine Learning 환경이란?

Azure Machine Learning 환경은 기계 학습이 이루어지는 환경을 캡슐화한 것입니다. 학습 및 점수 매기기 스크립트와 관련된 Python 패키지 및 소프트웨어 설정을 지정합니다. 환경은 다양한 컴퓨팅 대상에서 재현 가능하고 감사 가능하며 이식 가능한 기계 학습 워크플로를 가능하게 하는 Machine Learning 작업 영역 내에서 관리되고 버전이 지정된 엔터티입니다.

개체를 사용하여 다음을 Environment 수행할 수 있습니다.

  • 학습 스크립트를 개발합니다.
  • 대규모 모델 학습을 위한 Azure Machine Learning 컴퓨팅에서 동일한 환경을 재사용합니다.
  • 동일한 환경을 사용하여 모델을 배포합니다.
  • 기존 모델이 학습된 환경을 다시 확인합니다.

다음 다이어그램에서는 작업 구성(학습의 경우)과 추론 및 배포 구성(웹 서비스 배포의 경우)에서 하나의 Environment 개체를 사용하는 방법을 보여 줍니다.

Diagram of an environment in machine learning workflow

환경, 컴퓨팅 대상 및 학습 스크립트는 작업 구성인 학습 작업의 전체 사양을 구성합니다.

환경 유형

환경은 크게 ‘큐레이팅’, ‘사용자 관리’, ‘시스템 관리’의 세 가지 카테고리로 나눌 수 있습니다.

큐레이팅된 환경은 Azure Machine Learning에서 제공하며 기본적으로 작업 영역에서 사용할 수 있습니다. 큐레이팅된 환경은 있는 그대로 사용할 수 있도록 다양한 기계 학습 프레임워크를 시작하는 데 도움이 되는 Python 패키지 및 설정 컬렉션이 포함되어 있습니다. 이와 같이 미리 만들어진 환경에서는 배포 시간을 단축할 수 있습니다. 큐레이팅된 환경은 AzureML 레지스트리에서 호스트됩니다. 전체 목록은 azureml 레지스트리의 환경을 참조하세요.

사용자 관리 환경에서는 사용자가 사용자 환경을 설정하고 컴퓨팅 대상에 학습 스크립트에 필요한 모든 패키지를 설치해야 합니다. 또한 모델 배포에 필요한 종속성을 포함해야 합니다. 사용자 관리 환경은 이미지 구체화를 AzureML에 위임하는 BYOC(Bring Your Own Container) 또는 Docker 빌드 컨텍스트일 수 있습니다.

Conda를 통해 Python 환경을 자동으로 관리하려는 경우 시스템 관리 환경을 사용합니다. 새 conda 환경은 기본 docker 이미지를 토대로 conda 사양에서 구체화됩니다.

환경 만들기 및 관리

Azure Machine Learning Python SDK, Azure Machine Learning CLI, Azure Machine Learning 스튜디오의 환경 페이지 및 VS Code 확장과 같은 클라이언트에서 환경을 만들 수 있습니다. 필요한 경우 모든 클라이언트에서 기본 이미지, Dockerfile 및 Python 계층을 사용자 지정할 수 있습니다.

특정 코드 샘플은 환경 사용 방법의 "환경 만들기" 섹션을 참조하세요.

또한 환경은 작업 영역을 통해 쉽게 관리할 수 있으며 다음을 수행할 수 있습니다.

  • 환경을 등록합니다.
  • 작업 영역에서 학습 또는 배포에 사용할 환경을 가져옵니다.
  • 기존 환경을 편집하여 환경의 새 인스턴스를 만듭니다.
  • 시간 경과에 따른 환경의 변경 내용을 확인하여 재현 가능성을 확인합니다.
  • 사용자 환경에서 자동으로 Docker 이미지를 빌드합니다.

“익명” 환경은 실험 제출 시 작업 영역에 자동으로 등록됩니다. 이러한 환경은 나열되지 않지만 버전으로 검색할 수 있습니다.

코드 샘플은 환경을 사용하는 방법의 "환경 관리" 섹션을 참조하세요.

환경 빌드, 캐싱, 재사용

Azure Machine Learning은 환경 정의를 Docker 이미지로 빌드합니다. 또한 환경을 이후 학습 작업 및 서비스 엔드포인트 배포에서 재사용할 수 있도록 캐시합니다. 학습 스크립트를 원격으로 실행하려면 Docker 이미지를 만들어야 합니다. 기본적으로 AzureML은 작업 영역에 대한 전용 컴퓨팅 집합이 없는 경우 사용 가능한 작업 영역 서버리스 컴퓨팅 할당량 에서 이미지 빌드 대상을 관리합니다.

참고 항목

AzureML 작업 영역의 모든 네트워크 제한에는 전용 사용자 관리형 이미지 빌드 컴퓨팅 설정이 필요할 수 있습니다. 작업 영역 리소스를 보호하려면 단계를 따르세요.

환경을 사용하여 작업 제출

환경을 사용하여 원격 작업을 처음 제출하거나 환경 인스턴스를 수동으로 만들 때 Azure Machine Learning은 제공된 사양에 대한 이미지를 빌드합니다. 결과 이미지는 작업 영역과 연결된 컨테이너 레지스트리 인스턴스에 캐시됩니다. 큐레이팅된 환경은 이미 AzureML 레지스트리에 캐시되어 있습니다. 작업 실행이 시작될 때 이미지는 관련 컨테이너 레지스트리에서 컴퓨팅 대상에 의해 검색됩니다.

Docker 이미지로 환경 빌드

특정 환경 정의에 대한 이미지가 AzureML 작업 영역과 연결된 컨테이너 레지스트리 인스턴스에 아직 없는 경우 새 이미지가 빌드됩니다. 시스템 관리 환경의 경우 이미지 빌드는 다음 두 단계로 구성됩니다.

  1. 기본 이미지 다운로드 및 Docker 단계 실행
  2. 환경 정의에 지정된 Conda 종속성에 따라 Conda 환경 빌드

사용자 관리 환경의 경우 제공된 Docker 컨텍스트는 그대로 빌드됩니다. 이 경우 기본 이미지에 포함하거나 사용자 지정 Docker 단계를 지정하여 Python 패키지를 설치해야 합니다.

이미지 캐싱 및 재사용

다른 작업에 동일한 환경 정의를 사용하는 경우 Azure Machine Learning은 작업 영역과 연결된 컨테이너 레지스트리에서 캐시된 이미지를 다시 사용합니다.

캐시된 이미지의 세부 정보를 보려면 Azure Machine Learning 스튜디오의 환경 페이지를 확인하거나 MLClient.environments를 사용하여 환경을 가져오고 조사합니다.

캐시된 이미지를 재사용할지, 새 이미지를 빌드할지 여부를 결정하기 위해, Azure Machine Learning은 환경 정의에서 해시 값을 계산하고 이를 기존 환경의 해시와 비교합니다. 해시는 환경에 대한 고유 식별자 역할을 하며 환경 정의에 기반합니다.

  • 기본 이미지
  • 사용자 지정 docker 단계
  • Python 패키지

해시는 환경 이름 또는 버전의 영향을 받지 않습니다. 환경의 이름을 바꾸거나 다른 환경과 동일한 설정 및 패키지를 사용하여 새 환경을 만드는 경우 해시 값은 동일하게 기본. 그러나 Python 패키지 추가 또는 제거 또는 패키지 버전 변경과 같은 환경 정의 변경으로 인해 결과 해시 값이 변경됩니다. 환경에서 종속성 또는 채널의 순서를 변경하면 해시가 변경되며 새 이미지 빌드도 필요합니다. 마찬가지로 큐레이팅된 환경을 변경하면 사용자 지정 환경이 생성됩니다.

참고 항목

환경 이름을 변경하지 않고 큐레이팅된 환경에 대한 로컬 변경 내용을 제출할 수 없습니다. “AzureML-” 및 “Microsoft” 접두사는 큐레이팅된 환경 전용으로 예약되어 있으며 이름이 둘 중 하나로 시작하는 경우 작업 제출이 실패합니다.

환경의 계산된 해시 값은 작업 영역 컨테이너 레지스트리의 해시 값과 비교됩니다. 일치 항목이 있는 경우 캐시된 이미지가 끌어오고 사용되고, 그렇지 않으면 이미지 빌드가 트리거됩니다.

다음 다이어그램은 세 가지 환경 정의를 보여 줍니다. 그중 두 가지는 이름과 버전은 다르지만 동일한 기본 이미지와 Python 패키지가 있습니다. 따라서 해시 및 해당하는 캐시된 이미지는 동일합니다. 세 번째 환경의 Python 패키지와 버전은 다르므로, 해시 및 캐시된 이미지도 달라집니다.

Diagram of environment caching and Docker images

작업 영역 컨테이너 레지스트리의 실제 캐시된 이미지에는 끝에 나타나는 해시와 비슷한 azureml/azureml_e9607b2514b066c851012848913ba19f 이름이 있습니다.

Important

  • 고정되지 않은 패키지 종속성이 있는 환경을 만드는 경우(예: numpy) 환경은 환경이 만들어질 때 사용 가능한 패키지 버전을 사용합니다. 일치하는 정의를 사용하는 모든 향후 환경은 원래 버전을 사용합니다.

    패키지를 업데이트하려면 이미지를 다시 빌드하려는 버전 번호를 지정합니다. 그 예로 numpynumpy==1.18.1로 변경하는 경우를 들 수 있습니다. 중첩된 종속성 포함한 새 종속성이 설치되어 이전에 작업 중인 시나리오가 중단될 수 있습니다.

  • 환경 정의와 같이 mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04 고정되지 않은 기본 이미지를 사용하면 태그가 업데이트될 때마다 latest 이미지를 다시 작성할 수 있습니다. 이를 통해 이미지는 최신 패치와 시스템 업데이트를 수신하게 됩니다.

이미지 패치

Microsoft는 알려진 보안 취약성에 대해 기본 이미지를 패치할 책임이 있습니다. 지원되는 이미지에 대한 업데이트는 2주 간격으로 출시되며, 최신 버전의 이미지보다 30일 이전인 패치가 적용되지 않은 취약성이 없음을 보장합니다. 패치된 이미지는 변경 불가능한 새 태그로 릴리스되고 :latest 태그는 패치된 이미지의 최신 버전으로 업데이트됩니다.

새로 패치된 이미지를 사용하려면 연결된 Azure Machine Learning 자산을 업데이트해야 합니다. 예를 들어 관리되는 온라인 엔드포인트로 작업할 때 패치된 이미지를 사용하려면 엔드포인트를 다시 배포해야 합니다.

고유한 이미지를 제공하는 경우 이미지를 업데이트하고 이를 사용하는 Azure Machine Learning 자산을 업데이트해야 합니다.

기본 이미지에 대한 자세한 내용은 다음 링크를 참조하세요.

다음 단계