Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

환경 초기화의 해석, 설치와 캐시

Code Workbook은 Mamba로 패키지 의존성을 해석하고 독립적인 Conda 환경을 설치합니다. Mamba는 Conda 패키지 관리의 구현으로, 의존성 해석 속도와 오류 메시지의 가독성을 개선합니다.

패키지, 채널과 환경

패키지는 메타데이터, 라이브러리나 바이너리 등을 포함한 파일 집합입니다. 각 버전은 다른 패키지의 특정 버전, 버전 범위 또는 임의 버전을 의존성으로 요구할 수 있습니다.

채널은 패키지를 저장하는 위치입니다. 로컬 디렉터리나 웹 서버일 수 있으며 플랫폼 아키텍처별 하위 디렉터리를 가집니다. 각 디렉터리의 repodata.json이 사용 가능한 패키지의 색인입니다.

환경은 선택한 패키지들을 설치한 디렉터리입니다. Workbook의 환경 구성에서 요청한 조건과 모든 의존성을 만족하는 집합을 구한 뒤 Spark 모듈에 설치합니다.

Solve 단계

  1. 구성한 채널들의 repodata.json을 내려받아 메모리의 색인으로 처리합니다.
  2. 요청한 패키지부터 의존성을 재귀적으로 따라가며 사용 가능한 후보를 추립니다. 의존 그래프에 없는 불필요한 패키지는 제거합니다.
  3. 버전과 의존성 제약을 Boolean satisfiability, 즉 SAT 문제로 표현합니다. 가능한 최신 버전을 선호하는 선택 기준도 해석에 반영됩니다.
  4. Solver가 함께 설치할 수 있는 패키지 집합을 찾습니다.

Install 단계

해석이 성공하면 다음 순서로 환경을 구성합니다.

  1. 선택한 패키지들을 해당 채널에서 내려받고 압축을 풉니다.
  2. 설정에 따라 checksum이나 파일 크기로 내용의 유효성을 확인합니다.
  3. 패키지 파일을 환경에 연결합니다.

느려지는 원인

채널과 의존성의 변화

채널이 많거나 색인이 크면 다운로드와 처리 시간이 늘어납니다. 패키지의 새 버전이 더 많은 전이 의존성을 요구해도 후보 탐색량이 커집니다. Workbook의 요청을 바꾸지 않아도 상위 채널이나 패키지의 변화로 초기화가 느려질 수 있습니다.

환경의 크기와 제약

패키지와 후보 버전이 늘면 solve 시간이 그 증가량보다 더 빠르게 커질 수 있습니다. 필요 없는 패키지를 제거하여 작고 목적이 분명한 환경으로 구성합니다.

버전 제약으로 후보 수를 줄이는 방법도 있습니다. Python처럼 빌드가 많거나 SciPy처럼 의존 그래프가 복잡한 패키지에 특히 효과가 있을 수 있습니다. 다만 서로 맞지 않는 버전을 강하게 고정하면 해 자체가 없어질 수 있으므로 실제 해석 결과를 바탕으로 조정합니다.

패키지 크기

다운로드, 압축 해제와 검증은 패키지의 크기 및 개수에 따라 늘어납니다. 예를 들어 약 460 MB 규모의 큰 패키지 하나도 압축 해제에 35초 이상 걸릴 수 있습니다. PyTorch 같은 대형 패키지와 전이 의존성을 포함하면 직접 요청한 개수보다 실제 설치량이 훨씬 커질 수 있습니다.

Spec file 캐시

성공한 solve의 결과를 spec file에 저장하면 같은 환경을 다시 초기화할 때 해석을 건너뛰고 설치만 수행할 수 있습니다.

기본적으로 24시간 뒤 spec file을 무효화합니다. 다음 성공한 solve에서 새 파일을 만듭니다. 따라서 요청 문자열이 같아도 캐시가 만료된 뒤에는 채널의 최신 상황으로 다시 해석할 수 있습니다.

처음 보는 환경은 처음부터 해석해야 합니다. 이후 동일한 환경이 캐시되어 있을 때 재사용 효과를 얻습니다.

Conda Docker

Kubernetes가 활성화된 환경에서는 설치된 패키지를 Docker 이미지로 저장할 수 있습니다. 이후에는 필요한 패키지가 이미 있는 Spark 모듈을 요청하여 solve와 모듈 위 설치를 모두 건너뜁니다.

이미지도 기본적으로 24시간 뒤 무효화하며 다음 성공한 solve에서 새로 만듭니다.

최적화 끄기

Pre-link 또는 post-link 스크립트가 있는 일부 패키지는 이미지 기반 환경에서 런타임 문제를 일으킬 수 있습니다. 그런 환경은 구성 화면 왼쪽 아래에서 Conda Docker를 끌 수 있습니다.

이 선택은 사용한 프로필과 Workbook 브랜치의 조합에 유지됩니다. Conda Docker를 꺼도 다른 초기화 최적화는 사용할 수 있습니다.

미리 준비한 모듈

Prewarming은 Spark 모듈을 먼저 초기화하여 바로 배정할 수 있는 warm queue를 유지합니다. 프로필별로 필요한 수를 구성하면 환경 대기를 줄일 수 있습니다.

사용자 지정 환경은 공통 프로필의 warm queue나 기존 이미지와 맞지 않을 수 있습니다. 새 패키지 조합이면 일반 초기화가 필요하며, 그 환경이 성공적으로 저장된 뒤에는 실제 캐시 일치 여부에 따라 spec file 등을 재사용합니다. 모든 사용자 지정 환경이 언제나 캐시를 쓸 수 없다고 단정하거나, 기본 프로필과 같은 시작 시간을 기대하지 않습니다.