딥러닝 컴파일러를 위한 상태 기반 테스트 (Stateful Testing for Deep Learning Compilers)
요약
본 논문은 딥러닝 컴파일러의 상태 유지(stateful) 과정에서 발생하는 버그를 탐지하는 새로운 방법인 Rondo를 제안합니다. Rondo는 호출 시퀀스를 변형하며, 마르코프 체인 몬테카를로 샘플러를 사용하여 드물게 관찰되는 동작을 선호합니다. 이 방법을 통해 기존 테스트보다 높은 커버리지와 정밀도로 상태 기반 버그를 효과적으로 찾아내고, 테스트 시퀀스 길이도 단축할 수 있음을 입증했습니다.
핵심 포인트
- Rondo는 딥러닝 컴파일러의 상태 기반 버그 탐지 방법론입니다.
- 마르코프 체인 샘플링을 활용하여 드물게 발생하는 동작을 효과적으로 포착합니다.
- 총 117개의 버그 중 35개의 상태 기반 버그를 성공적으로 감지했습니다.
- 테스트 시퀀스 길이를 평균 83.34%까지 단축시키는 효율성을 보였습니다.
현대의 딥러닝 컴파일러는 모델을 지연적으로(lazily) 컴파일하고 호출 간에 아티팩트를 캐싱합니다. 유지된 컴파일러 상태는 독립적으로는 올바른지라도 나중에 수행되는 호출을 잘못되게 만들 수 있습니다. PyTorch, JAX, TensorFlow에서 공개적으로 보고된 26개의 문제에 대한 분석은 이러한 버그를 감지하려면 먼저 컴파일러 상태를 확립하고 그 다음 실패를 노출하는 시퀀스가 필요하다는 것을 보여줍니다. 우리는 각 테스트 케이스를 호출 시퀀스와 쌍을 이루는 모델로 표현하는 상태 기반 테스트 방법인 Rondo를 제시합니다. Rondo는 호출 시퀀스를 변형하며, 컴파일 동작에 의해 안내되는 마르코프 체인 몬테카를로 샘플러(Markov chain Monte Carlo sampler)를 사용하여 드물게 관찰되는 동작을 선호합니다. 이의 삼중 차분 오라클(three-way differential oracle)은 컴파일 없이 실행하는 경우, 컴파일러 상태가 초기화된 컴파일 실행, 그리고 상태가 유지된 컴파일 실행을 비교합니다. 이는 입력과 프로그램 상태를 보존하면서 동일한 호출로 재연하고 상태를 유지하거나 초기화하는 방식으로 상태 기반 버그를 확인하며, 원래의 버그를 보존하면서 시퀀스를 단축시킵니다. 우리는 24개의 일반적인 모델 아키텍처를 사용하여 네 가지 딥러닝 프레임워크에서 Rondo를 평가했습니다. Rondo는 35개의 상태 기반 버그를 포함하여 총 117개의 버그를 감지했습니다. 우리는 상태 기반 버그에 대한 18개를 포함하여 39개의 버그 보고서를 제출했으며, 개발자들은 이 중 35개 보고서(상태 기반 버그 16개 포함)를 확인하고 18개의 버그(상태 기반 버그 11개 포함)를 수정했습니다. Rondo는 비교된 방법들 중에서 가장 높은 동작 커버리지와 컴파일러 Python 소스 라인 커버리지를 달성했으며, 알람 정밀도(alarm precision)는 99.26%였습니다. 또한, 117개의 호출 시퀀스 중 44개를 단축시켜 평균적으로 이 44개 시퀀스의 길이를 83.34% 감소시켰습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 arXiv Codex (cs.SE)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기