Python 환경의 해석과 설치
Python transforms의 실행 환경은 conda_recipe/meta.yaml에 선언한 패키지를 바탕으로 checks에서 해석합니다. Code Repositories는 Palantir가 개발한 Conda 계열 패키지 관리자 Hawk를 사용합니다. 해석한 환경은 내부 Artifacts에 발행하여 빌드 때 사용할 수 있게 합니다.
빌드가 시작되면 환경 파일을 가져와 지정한 패키지를 설치합니다. 이 경로가 실패하면 빌드 중 Hawk로 환경을 다시 해석하는 fallback이 있습니다. 요청한 패키지와 실제 설치 결과가 다른 시점의 해석으로 바뀔 수 있으므로 실패 원인과 해석 결과를 확인해야 합니다.
패키지, 채널과 환경
패키지는 메타데이터, 라이브러리와 바이너리 등을 포함한 버전별 파일 집합입니다. 다른 패키지의 특정 버전이나 범위를 의존성으로 요구할 수 있습니다.
채널은 패키지를 보관하는 로컬 또는 원격 저장소입니다. 플랫폼 아키텍처별 디렉터리가 있고 각 디렉터리의 repodata.json에 사용 가능한 패키지를 기록합니다.
환경은 호환되는 패키지들을 설치한 디렉터리입니다. 요청한 목록뿐 아니라 그 패키지들이 다시 요구하는 전이 의존성까지 포함합니다. 실제 설치 장소는 변환의 단일 노드 또는 Spark 실행 방식에 따릅니다.
Solve 단계
Conda, Mamba와 Hawk는 다음과 같은 의존성 해석 문제를 해결합니다.
- 구성한 채널의
repodata.json을 내려받고 메모리 색인으로 처리합니다. - 요청한 패키지에서 의존성을 따라가며 후보를 찾고 불필요한 후보를 제거합니다.
- 버전 제약과 최신 후보 선호 등을 Boolean satisfiability, 즉 SAT 문제로 표현합니다.
- Solver가 함께 설치할 수 있는 조합을 선택합니다.
Workbook의 환경 설명에서는 Mamba를 볼 수 있지만 Code Repository의 현재 기본 해석 경로는 Hawk입니다. 이전 로그의 Mamba 오류와 현재 환경의 의존성 문제는 원인과 도구 이름을 구분하여 읽습니다.
Install 단계
선택한 아티팩트를 각 채널에서 내려받아 압축을 풀고, checksum 또는 파일 크기 등 설정된 방법으로 확인한 뒤 환경에 연결합니다. Solve가 성공했다고 모든 다운로드와 설치가 성공한 것은 아닙니다.
초기화가 느려지는 이유
| 원인 | 영향과 조정 |
|---|---|
| 채널 색인 증가 | 더 많은 색인을 내려받고 처리해야 합니다. 필요한 backing repository만 구성합니다. |
| 전이 의존성 증가 | 패키지의 새 버전이 더 많은 후보와 제약을 도입할 수 있습니다. 요청을 바꾸지 않아도 영향받습니다. |
| 큰 환경과 넓은 버전 범위 | Solve 비용이 패키지 수보다 더 빠르게 커질 수 있습니다. 목적별로 작은 환경을 만들고 필요한 경우 주요 패키지의 버전 후보를 좁힙니다. |
| 큰 패키지 | 다운로드, 압축 해제와 검증 비용이 크기 및 개수에 비례하여 늘어납니다. |
Python처럼 버전별 빌드가 많거나 SciPy처럼 의존 그래프가 복잡한 패키지의 제약을 좁히면 해석을 줄일 수 있습니다. 하지만 서로 맞지 않는 버전을 고정하면 해가 없어집니다. 먼저 실제로 해석되는 조합과 지원 버전을 확인합니다.
큰 패키지는 하나만으로도 시간이 걸립니다. 예를 들어 약 460 MB 규모의 패키지를 압축 해제하는 데 35초 이상 걸릴 수 있으며, PyTorch 같은 대형 패키지와 전이 의존성은 실제 설치량을 늘립니다.
관리 경로
라이브러리 추가와 잠금 파일에서 환경을 구성하고 공유 라이브러리 발행으로 공통 코드를 배포합니다. 실패는 환경 진단에서 solve, 설치와 런타임을 구분하여 조사합니다.
로컬 개발, 코드 오류와 로그, CPU 및 메모리 지표는 각각 작성 환경, 실행 로직과 자원 문제를 다룹니다.