이 문서는 환경 초기화 프로세스에 대한 자세한 내용을 다루는 고급 안내서입니다. 초기화 성능에 영향을 줄 수 있는 기술적 고려 사항에 관심이 있는 사용자를 위한 것입니다. 일반적인 환경 관련 문제에 대한 지침은 환경 문제 해결 가이드를 참조하십시오.
Conda는 오픈 소스 언어에 구애받지 않는 패키지 및 환경 관리자입니다. Mamba는 Conda 패키지 관리자의 오픈 소스 재구현입니다. Code Repositories는 커밋 후 검사를 실행할 때 패키지 종속성을 해결하기 위해 Mamba를 사용하도록 전환했습니다. Mamba는 패키지 해결에서 Conda보다 속도 향상과 오류 메시지의 가독성 향상이 가장 주목할 만한 장점을 제공합니다.
이 페이지에서는 가장 중요한 개념을 소개하고 환경 생성 프로세스를 개요하며, 자세한 정보는 공식 Conda 문서와 Mamba 문서를 참조하십시오.
패키지는 메타데이터, 라이브러리 및/또는 바이너리를 일반적으로 포함하는 파일 모음입니다. Code Repositories는 핵심 언어 기능을 보완하기 위해 넓은 범위의 패키지(numpy
등)에 대한 접근을 제공합니다.
패키지는 버젼화되며, 거의 항상 일련의 종속성을 가지고 있습니다. 즉, 제대로 작동하려면 설치해야 하는 다른 패키지입니다. 종속성은 특정 버전의 패키지, 허용되는 버전의 범위 또는 모든 버전일 수 있습니다.
채널은 패키지가 저장되는 위치를 나타내며, 때로는 저장소라고도 합니다. 한 채널은 로컬 파일 시스템의 디렉토리가 될 수 있고, 다른 채널은 웹 서버에서 호스팅되는 디렉토리일 수 있습니다.
유형에 관계없이 각 채널은 패키지를 플랫폼 아키텍처별로 구분하는 디렉토리 트리입니다. 각 플랫폼 하위 디렉토리에는 해당 하위 디렉토리의 모든 패키지 인덱스인 repodata.json
파일이 포함됩니다.
패키지를 가져올 때 Conda는 사전 설정된 채널 집합을 검색합니다. Foundry에서 채널 관리에 대한 자세한 정보는 패키지 문서를 참조하십시오.
Conda 환경은 특정 패키지 모음을 포함하는 디렉토리입니다. 환경 구성 패널에서 지정된 패키지를 Conda에 전달하여 각 저장소에 대한 환경이 생성됩니다. Conda는 구성 및 모든 종속성을 만족하는 패키지 집합을 구성하고 저장소를 지원하는 Spark 모듈에 이러한 패키지를 설치합니다.
다음 성능 설명은 이 Anaconda 블로그 게시물을 기반으로 하며, Conda 성능에 대해 자세히 설명하지만 Mamba 구현에도 유사하게 적용됩니다. 다음 두 섹션에서는 이와 관련된 내용을 요약하고 Code Repositories와 관련된 성능 요소를 개요합니다.
환경 생성은 해결 단계와 설치 단계의 두 가지 주요 단계로 구성됩니다.
해결 단계에서 지정된 패키지 관리자인 Conda 또는 Mamba는 모든 일시적 종속성을 충족하는 패키지와 버전을 찾으려고 시도합니다. 일시적 종속성은 환경 구성 패널에 지정된 패키지의 종속성, 그 종속성의 종속성 등을 포함합니다. 이 단계에는 네 가지 단계가 포함됩니다.
repodata.json
파일을 다운로드하고 인덱스 항목을 메모리의 오브젝트로 변환합니다.해결이 성공하면 설치 단계가 다음입니다. 여기서 각 아티팩트가 적절한 채널에서 검색되고 Conda는 이를 사용하여 환경을 구성합니다. 이 단계에는 세 가지 단계가 포함됩니다.
위에서 설명한 모든 단계는 특정 상황에서 느려질 수 있습니다. 느려짐의 원인은 대개 다음 세 가지 범주 중 하나에 속합니다.
느린 초기화의 상당 부분은 Foundry 외부 요인으로 인해 발생합니다.
이러한 요인들은 외부적이고 불투명하므로 성능 저하의 근본 원인 분석을 수행하기가 어려울 수 있습니다. 채널이 최근에 크기가 커졌거나 패키지가 최신 릴리스에서 여러 개의 새로운 종속성을 선언했기 때문에 환경이 갑자기 더 오래 걸리게 될 수 있습니다.
보다 일반적으로, 느린 초기화는 환경 사양 자체에 직접 연결됩니다. 해결 단계는 환경 크기와 초과 선형적으로 확장되므로 일반적인 경험 법칙으로 패키지가 더 많은 환경은 초기화 시간이 불균형하게 길어집니다.
이러한 상황을 개선하는 두 가지 방법이 있습니다.
python
과 같은 많은 빌드가 있는 패키지와 scipy
와 같은 복잡한 종속성 그래프가 있는 패키지의 버전을 고정하는 것이 가장 효과적입니다. 이렇게 하면 Conda는 인덱스를 더욱 강력하게 줄일 수 있으며, 따라서 SAT 해결에서 패키지 버전을 고려할 필요가 없습니다.패키지 크기는 일반적으로 이 섹션의 다른 요소보다 문제가 되지 않지만, 일부 경우에는 여전히 관련이 있습니다.
단일 패키지를 다운로드하고 추출하는 것조차도 중요하지 않을 수 있습니다. 예를 들어, pytorch
패키지는 약 460MB 크기이며, 추출하는 데 35초 이상이 걸릴 수 있습니다.
다운로드, 추출 및 검증은 환경의 크기와 패키지 수에 선형적으로 확장됩니다. 종속성으로 인해 해결된 환경은 일반적으로 환경 정의에서 명시적으로 지정된 것보다 훨씬 더 많은 패키지를 포함하며, 패키지 증가로 인해 느려질 수 있습니다.
이 경우의 개선 방법은 환경 사양에 대한 제안과 유사합니다. 가능한 한 환경을 작게 유지하려고 노력하십시오.