[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
FileCacheManager와 RemoteCacheBackend 두 곳 모두에 동일한 패턴을 적용합니다.
왜 이게 좋은가
캐시 miss를 반환(return None)하면 Triton은 단순히 커널을 다시 컴파일하므로, 정합성 문제 없이 복구됩니다. 이는 fail-safe 접근법으로, 캐시 손상이 컴파일 실패로 이어지지 않도록 보장합니다. 프로덕션 환경에서는 디스크 공간 부족, 동시 접근, 비정상 종료 등 다양한 이유로 캐시가 손상될 수 있으므로 이런 방어적 처리가 필수적입니다.
정리
JSON 캐시 파일 읽기에 try-except를 추가하여 손상된 파일을 캐시 miss로 처리하고, 재컴파일을 통해 자동 복구되도록 개선했습니다.
참고 자료
이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [CPython] CPython RemoteUnwinder 프레임 캐싱으로 메모리 읽기 최적화
- 현재글 : [triton] 손상된 캐시 파일에 대한 방어적 처리 추가
- 다음글 [triton] Triton에서 Ragged Mode를 위한 X Scale Swizzling 최적화
댓글