DL 컴파일러 퍼징에서 알려진 결함을 억제하기 위한 패턴 기반 그래프 합성
요약
본 논문은 딥러닝 컴파일러의 버그를 찾는 퍼징(Fuzzing) 과정에서 이미 발견된 결함이 반복적으로 유발되는 문제를 해결하기 위해 Reprise라는 새로운 DL 컴파일러 퍼저를 제안합니다. Reprise는 알려진 결함을 의미론적 그래프 패턴으로 증류하고, 이 패턴을 완성하는 노드를 재생성하여 테스트 생성 단계에서부터 결함 유발을 회피하도록 설계되었습니다.
핵심 포인트
- Reprise는 알려진 결함을 의미론적 그래프 패턴으로 포착합니다.
- 그래프 합성 과정 중 알려진 패턴의 재구성을 통해 버그 재유발을 방지합니다.
- TVM 및 PyTorch Inductor에서 충돌 보고서를 대폭 감소시키는 효과를 보였습니다.
- 기존 퍼저 대비 분기 커버리지와 테스트 실행 수에 큰 영향을 주지 않았습니다.
퍼징(Fuzzing)은 딥러닝(DL) 컴파일러의 버그를 찾는 데 효과적이지만, 기존의 퍼저들은 이미 발견한 오류들을 반복적으로 유발합니다. 현재의 퍼저들은 생성된 프로그램을 다양화하고, 다운스트림 도구들이 사후에 버그 보고서를 중복 제거하지만, 어느 쪽도 퍼저가 알려진 결함을 재유발하는 프로그램을 생성하는 것을 막지는 못합니다. 우리는 테스트 생성 과정에서 알려진 결함 보고서를 억제하는 DL 컴파일러 퍼저인 Reprise를 제시합니다. Reprise는 로컬 연산자 시그니처를 가진 통일된 중간 표현(UIR)으로 그래프를 구축하는 의도적으로 가벼운 생성기를 사용합니다. 프로그램 다양화 대신, Reprise는 발견된 각 결함을 해당 결함을 유발하는 데 필요한 연산자, 값 제약 조건, 그래프 컨텍스트 및 데이터 흐름을 포착하는 의미론적 그래프 패턴(semantic graph pattern)으로 증류합니다. 그래프 합성 과정 중, 알려진 패턴을 완성하는 모든 노드를 재생성하여 컴파일 및 실행 전에 알려진 결함 유발이 회피되도록 합니다. 우리는 TVM, PyTorch Inductor, ONNX Runtime의 세 가지 DL 컴파일러에 대해 Reprise를 평가했습니다. 비유도(unguided) 변형과 비교했을 때, 지배적인 알려진 결함을 위해 작성된 패턴은 TVM에서 충돌 보고서를 90.2% (254개에서 25개로) 감소시켰고, PyTorch Inductor에서는 93.8% (594개에서 37개로) 감소시켰습니다. 이 과정에서 분기 커버리지(branch coverage)는 유사했으며 실행된 테스트 수는 1.0~17.9% 적었습니다. 이러한 결과는 구성당 한 번의 실행을 기반으로 하며, 패턴이 증류된 결함에 관한 것입니다. Reprise는 또한 세 컴파일러 전반에서 이전에 알려지지 않았던 25개의 버그를 발견했으며, 그중 7개는 수정되었고 12개가 개발자들에 의해 추가로 확인되었습니다. 복제 패키지는 [11]에서 제공되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 arXiv cs.PL (Programming Languages)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기