본문으로 건너뛰기

[triton] 손상된 캐시 파일에 대한 방어적 처리 추가

PR 링크: triton-lang/triton#8923 상태: Merged | 변경: +12 / -4

들어가며

Triton은 컴파일된 커널을 디스크에 캐시합니다. 이 캐시는 JSON 파일로 저장되는데, 예기치 않은 종료(kill, OOM 등)로 인해 파일이 손상될 수 있습니다. 손상된 JSON을 읽으려 하면 json.JSONDecodeError가 발생하여 커널 컴파일 자체가 실패합니다. 이 PR은 손상된 캐시를 graceful하게 처리합니다.

핵심 코드 분석

Before:

def get_group(self, filename: str) -> Optional[Dict[str, str]]:
    grp_filepath = self._make_path(grp_filename)
    with open(grp_filepath) as f:
        grp_data = json.load(f)  # 손상 시 예외 발생

After:

def get_group(self, filename: str) -> Optional[Dict[str, str]]:
    grp_filepath = self._make_path(grp_filename)
    try:
        with open(grp_filepath) as f:
            grp_data = json.load(f)
    except Exception:
        # exit on corrupted cache.
        return None

FileCacheManagerRemoteCacheBackend 두 곳 모두에 동일한 패턴을 적용합니다.

왜 이게 좋은가

캐시 miss를 반환(return None)하면 Triton은 단순히 커널을 다시 컴파일하므로, 정합성 문제 없이 복구됩니다. 이는 fail-safe 접근법으로, 캐시 손상이 컴파일 실패로 이어지지 않도록 보장합니다. 프로덕션 환경에서는 디스크 공간 부족, 동시 접근, 비정상 종료 등 다양한 이유로 캐시가 손상될 수 있으므로 이런 방어적 처리가 필수적입니다.

정리

JSON 캐시 파일 읽기에 try-except를 추가하여 손상된 파일을 캐시 miss로 처리하고, 재컴파일을 통해 자동 복구되도록 개선했습니다.

참고 자료

이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.

댓글

관련 포스트

PR Analysis 의 다른글