Azure Machine Learning 환경이란?
Azure Machine Learning 환경은 기계 학습 학습 또는 추론이 발생하는 환경의 캡슐화입니다. 학습 및 채점 스크립트와 관련된 Python 패키지 및 소프트웨어 설정을 지정합니다. 환경은 Machine Learning 작업 영역 내에서 관리되고 버전이 지정된 엔터티로, 다양한 컴퓨팅 대상에 걸쳐 재현, 감사, 이식이 가능한 기계 학습 워크플로를 사용할 수 있습니다. Environment
개체를 사용하여 다음을 수행할 수 있습니다.
- 학습 스크립트를 개발합니다.
- 대규모 모델 학습을 위한 Azure Machine Learning 컴퓨팅에서 동일한 환경을 재사용합니다.
- 동일한 환경을 사용하여 모델을 배포합니다.
- 기존 모델이 학습된 환경을 다시 확인합니다.
다음 다이어그램에서는 작업 구성(학습의 경우)과 추론 및 배포 구성(웹 서비스 배포의 경우)에서 하나의 Environment
개체를 사용하는 방법을 보여 줍니다.
환경, 컴퓨팅 대상, 학습 스크립트는 함께 작업 구성, 즉 학습 작업의 전체 사양을 구성합니다.
환경 유형
환경은 크게 ‘큐레이팅’, ‘사용자 관리’, ‘시스템 관리’의 세 가지 카테고리로 나눌 수 있습니다.
큐레이팅된 환경은 Azure Machine Learning에서 제공하며 기본적으로 작업 영역에서 사용할 수 있습니다. 큐레이팅된 환경은 있는 그대로 사용할 수 있도록 다양한 기계 학습 프레임워크를 시작하는 데 도움이 되는 Python 패키지 및 설정 컬렉션이 포함되어 있습니다. 이와 같이 미리 만들어진 환경에서는 배포 시간을 단축할 수 있습니다. 큐레이팅된 환경은 Microsoft에서 호스트하는 기계 학습 레지스트리인 AzureML 레지스트리 에서 호스트됩니다. 전체 목록은 AzureML 레지스트리의 환경을 참조하세요.
사용자 관리 환경에서는 사용자가 사용자 환경을 설정하고 컴퓨팅 대상에 학습 스크립트에 필요한 모든 패키지를 설치해야 합니다. 또한 모델 배포에 필요한 종속성을 포함해야 합니다. 사용자 관리 환경은 이미지 구체화를 Azure Machine Learning에 위임하는 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 이미지를 만들어야 합니다. 기본적으로 Azure Machine Learning은 작업 영역에 대한 전용 컴퓨팅 집합이 없는 경우 사용 가능한 작업 영역 서버리스 컴퓨팅 할당량 에서 이미지 빌드 대상을 관리합니다.
참고 항목
Azure Machine Learning 작업 영역의 모든 네트워크 제한에는 전용 사용자 관리형 이미지 빌드 컴퓨팅 설정이 필요할 수 있습니다. 작업 영역 리소스를 보호하려면 단계를 따르세요.
환경을 사용하여 작업 제출
환경을 사용하여 원격 작업을 처음 제출하거나 환경 인스턴스를 수동으로 만들 때 Azure Machine Learning은 제공된 사양에 대한 이미지를 빌드합니다. 결과 이미지는 작업 영역과 연결된 컨테이너 레지스트리 인스턴스에 캐시됩니다. 큐레이팅된 환경은 이미 Azure Machine Learning 레지스트리에 캐시되어 있습니다. 작업 실행이 시작될 때 컴퓨팅 대상은 관련 컨테이너 레지스트리에서 이미지를 검색합니다.
Docker 이미지로 환경 빌드
특정 환경 정의에 대한 이미지가 Azure Machine Learning 작업 영역과 연결된 컨테이너 레지스트리 인스턴스에 아직 없는 경우 새 이미지가 빌드됩니다. 시스템 관리형 환경의 경우 이미지 빌드는 다음 두 단계로 구성됩니다.
- 기본 이미지 다운로드 및 Docker 단계 실행
- 환경 정의에 지정된 Conda 종속성에 따라 Conda 환경 빌드
사용자 관리 환경의 경우 docker 컨텍스트 빌드를 있는 그대로 제공합니다. 이 경우 기본 이미지에 포함하거나 사용자 지정 Docker 단계를 지정하여 Python 패키지를 설치해야 합니다.
이미지 캐싱 및 재사용
다른 작업에 동일한 환경 정의를 사용하는 경우 Azure Machine Learning은 작업 영역과 연결된 컨테이너 레지스트리에서 캐시된 이미지를 다시 사용합니다.
캐시된 이미지의 세부 정보를 보려면 Azure Machine Learning 스튜디오의 환경 페이지를 확인하거나 MLClient.environments
를 사용하여 환경을 가져오고 조사합니다.
캐시된 이미지를 다시 사용할지 또는 새 이미지를 빌드할지를 결정하기 위해 Azure Machine Learning은 환경 정의에서 해시 값을 계산합니다. 그런 다음 해시를 기존 환경의 해시와 비교합니다. 해시는 환경에 대한 고유 식별자 역할을 하며 환경 정의에 기반합니다.
- 기본 이미지
- 사용자 지정 docker 단계
- Python 패키지
환경 이름 및 버전은 해시에 영향을 주지 않습니다. 환경의 이름을 바꾸거나 다른 환경과 동일한 설정 및 패키지를 사용하여 새 환경을 만드는 경우 해시 값은 동일하게 유지됩니다. 그러나 Python 패키지를 추가 또는 제거하거나 패키지 버전을 변경하는 등 환경 정의를 변경하면 결과 해시 값이 변경됩니다. 환경에서 종속성 또는 채널의 순서를 변경하면 해시가 변경되고 새 이미지 빌드가 필요합니다. 마찬가지로 큐레이팅된 환경을 변경하면 사용자 지정 환경이 생성됩니다.
참고 항목
환경 이름을 변경하지 않고 큐레이팅된 환경에 대한 로컬 변경 내용을 제출할 수 없습니다. “AzureML-” 및 “Microsoft” 접두사는 큐레이팅된 환경 전용으로 예약되어 있으며 이름이 둘 중 하나로 시작하는 경우 작업 제출이 실패합니다.
환경의 계산된 해시 값은 작업 영역 컨테이너 레지스트리의 해시와 비교됩니다. 일치 항목이 있는 경우 캐시된 이미지를 끌어오고 사용하며, 그렇지 않으면 이미지 빌드가 트리거됩니다.
다음 다이어그램은 세 가지 환경 정의를 보여 줍니다. 그 중 두 가지는 이름과 버전이 다르지만 기본 이미지와 Python 패키지가 동일하므로 동일한 해시와 해당 캐시된 이미지가 생성됩니다. 세 번째 환경의 Python 패키지와 버전은 다르므로, 해시 및 캐시된 이미지도 달라집니다.
작업 영역 컨테이너 레지스트리의 실제 캐시된 이미지에는 끝에 나타나는 해시와 비슷한 azureml/azureml_e9607b2514b066c851012848913ba19f
이름이 있습니다.
Important
고정되지 않은 패키지 종속성이 있는 환경을 만드는 경우(예:
numpy
) 환경은 환경이 만들어질 때 사용 가능한 패키지 버전을 사용합니다. 일치하는 정의를 사용하는 모든 향후 환경은 원래 버전을 사용합니다.패키지를 업데이트하려면 이미지를 다시 빌드하려는 버전 번호를 지정합니다. 그 예로
numpy
를numpy==1.18.1
로 변경하는 경우를 들 수 있습니다. 중첩된 종속성 포함한 새 종속성이 설치되어 이전에 작업 중인 시나리오가 중단될 수 있습니다.환경 정의에서
mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04
와 같은 고정되지 않은 기본 이미지를 사용하면latest
태그가 업데이트될 때마다 이미지가 다시 빌드됩니다. 이를 통해 이미지는 최신 패치와 시스템 업데이트를 수신하게 됩니다.
이미지 패치
Microsoft는 알려진 보안 취약성에 대해 기본 이미지를 패치할 책임이 있습니다. 지원되는 이미지에 대한 업데이트는 2주 간격으로 출시되며, 최신 버전의 이미지보다 30일 이전인 패치가 적용되지 않은 취약성이 없음을 보장합니다. 패치된 이미지는 변경 불가능한 새 태그로 릴리스되고 :latest
태그는 패치된 이미지의 최신 버전으로 업데이트됩니다.
새로 패치된 이미지를 사용하려면 연결된 Azure Machine Learning 자산을 업데이트해야 합니다. 예를 들어 관리형 온라인 엔드포인트로 작업할 때 패치된 이미지를 사용하려면 엔드포인트를 다시 배포해야 합니다.
고유한 이미지를 제공하는 경우 이미지를 업데이트하고 이를 사용하는 Azure Machine Learning 자산을 업데이트해야 합니다.
기본 이미지에 대한 자세한 내용은 다음 링크를 참조하세요.
관련 콘텐츠
- Azure Machine Learning에서 환경을 만들고 사용하는 방법을 알아봅니다.
- 환경 클래스에 대한 Python SDK 참조 문서를 참조하세요.