[Triton] debuginfo 테스트 단순화 — subprocess 제거
PR 링크: triton-lang/triton#8350 상태: Merged | 변경: +54 / -66
들어가며
Triton의 test_triton_debuginfo_on 테스트는 LLVM IR에 디버그 정보(dbg_value, DILocalVariable)가 올바르게 생성되는지 검증한다. 기존에는 환경변수 설정을 위해 별도의 Python subprocess를 spawn하는 방식이었는데, 이는 느리고 복잡했다. 이 PR은 pytest의 monkeypatch와 parametrize를 사용하여 같은 프로세스 안에서 테스트하도록 개선한다.
핵심 코드 분석
Before
def test_triton_debuginfo_on():
envs = [
{lineInfoKey: None, diLocalVarKey: None, "hasDbgInfo": False},
{lineInfoKey: None, diLocalVarKey: "1", "hasDbgInfo": hasOrigLineInfo},
# ...
]
_run_test = lambda test_env: subprocess.run([
"python3", os.path.dirname(...) + "/test_debuginfo_helper.py"
], env=test_env, capture_output=True, text=True)
for env in envs:
test_env = os.environ.copy()
# ... env 설정 ...
checkDbgInfo(str(_run_test(test_env).stdout), hasDbgInfo=env["hasDbgInfo"])
별도 helper 스크립트(test_debuginfo_helper.py)를 subprocess로 실행하고 stdout을 파싱했다.
After
@pytest.mark.parametrize("lineInfoKey, diLocalVarKey, hasDbgInfo", [
(None, None, False),
(None, "1", "infer"),
("0", "1", True),
("1", "1", False),
("0", "0", False),
("1", "0", False),
])
def test_triton_debuginfo_on(lineInfoKey, diLocalVarKey, hasDbgInfo, device, monkeypatch):
if lineInfoKey is not None:
monkeypatch.setenv(lineInfoKeyName, lineInfoKey)
# ...
add_kernel.device_caches.clear()
h = add_kernel[grid](x, y, output, n_elements, BLOCK_SIZE=1024)
checkDbgInfo(h.asm['llir'], hasDbgInfo)
monkeypatch.setenv로 환경변수를 설정하고, 커널의 asm['llir']에서 직접 LLVM IR을 검사한다. test_debuginfo_helper.py는 삭제되었다.
왜 이게 좋은가
- 속도 향상: subprocess spawn 오버헤드가 없어져 테스트가 빨라진다
- 단순성: 파일 2개(테스트 + 헬퍼)가 1개로 줄었다
- pytest 통합:
parametrize덕분에 각 환경변수 조합이 독립적인 테스트 케이스로 표시된다 - 신뢰성: stdout 파싱 대신
h.asm['llir']을 직접 검사하여 더 안정적이다
정리
테스트 코드도 프로덕션 코드와 마찬가지로 유지보수 대상이다. subprocess 기반 테스트는 디버깅이 어렵고 CI 환경에서 flaky해지기 쉽다. pytest의 monkeypatch는 환경변수 조작이 필요한 테스트를 깔끔하게 작성하는 좋은 방법이다.
참고 자료
이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 코드 분석 내용은 실제 PR diff를 기반으로 합니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [Triton] TMEM Store 레이아웃 변환 최적화 — FlexAttention 성능 복구
- 현재글 : [Triton] debuginfo 테스트 단순화 — subprocess 제거
- 다음글 [Open WebUI] 파일 쿼리 시 필요한 컬럼만 조회하여 성능 개선
댓글