본문으로 건너뛰기

[Triton] 서드파티 패키지 다운로드를 setup.py에서 CMake로 이동

들어가며

Triton 개발 시 대부분의 빌드는 ninja로 수행하지만, LLVM 해시나 NVIDIA 툴체인 버전이 변경되면 pip install을 다시 실행해야 했다. 이 PR은 서드파티 의존성 다운로드를 CMake로 이동시켜 ninja만으로 전체 빌드가 가능하도록 개선한다.

핵심 코드 분석

Before

서드파티 패키지(LLVM, JSON 등)는 setup.py에서만 다운로드 가능했다. 개발 중 LLVM 해시가 변경되면:

  1. pip install -e python 재실행 필요
  2. 빌드 실패 시 원인 파악이 어려움

After

CMake에서 Python 헬퍼를 호출하여 자동으로 의존성을 관리한다:

find_package(Python3 REQUIRED COMPONENTS Interpreter)
set(TRITON_THIRD_PARTY_CMAKE_VARS_FILE "${CMAKE_CURRENT_BINARY_DIR}/triton-third-party-vars.cmake")
execute_process(
  COMMAND
    ${Python3_EXECUTABLE}
    "${CMAKE_CURRENT_SOURCE_DIR}/python/build_helpers.py"
    write_thirdparty_cmake_vars
    ${TRITON_BUILD_HELPER_COMMON_ARGS}
    --output "${TRITON_THIRD_PARTY_CMAKE_VARS_FILE}"
    --packages llvm json
  WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
  COMMAND_ERROR_IS_FATAL ANY
)
include("${TRITON_THIRD_PARTY_CMAKE_VARS_FILE}")

CMAKE_CONFIGURE_DEPENDS로 관련 파일 변경을 감시한다:

set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
    "${CMAKE_CURRENT_SOURCE_DIR}/python/build_helpers.py"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmake/llvm-hash.txt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmake/json-version.txt"
)

build_helpers.py에는 캐시 경로 관리, 오프라인 빌드 지원, LLVM/JSON/NVIDIA 툴체인 다운로드 로직이 추가되었다(+460줄).

왜 이게 좋은가

  • 개발 속도 향상: LLVM 해시 변경 시 ninja만 실행하면 자동으로 새 LLVM을 다운로드/빌드한다.
  • 오프라인 빌드: TRITON_OFFLINE_BUILD 옵션으로 네트워크 없는 환경에서도 빌드할 수 있다.
  • 구성 재사용: CMake 변수 파일(triton-third-party-vars.cmake)로 경로 정보를 관리한다.

정리

+617/-290 변경으로, 빌드 시스템의 DX(Developer Experience)를 크게 개선했다. pip 재실행 없이 ninja만으로 개발하는 워크플로우를 가능하게 한 품질 향상 PR이다.

참고 자료


이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 코드 분석 내용은 실제 PR diff를 기반으로 합니다.

댓글