Equivalence Checking of ML GPU Kernels
이 논문은 수작업, 컴파일러 또는 LLM에 의해 최적화된 머신러닝 연산의 정확성을 형식적으로 검증하는 최초의 사운드하고 완전한(sound and complete) GPU 커널 동등성 검사기인 Volta를 소개한다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
현대 인공지능의 거대하고 보이지 않는 기계 장치 속에서, 가장 중요한 작업은 클라우드가 아니라 GPU라고 불리는 특수 컴퓨터 칩에서 일어납니다. 이 칩들은 수백만 개의 작은 계산을 동시에 수행하도록 설계되었는데, 이는 현재 코드를 작성하고, 언어를 번역하며, 예술을 생성하는 대규모 언어 모델을 훈련하는 데 필수적인 요소입니다. 이러한 모델들을 유용할 만큼 빠르게 구동하기 위해, 엔지니어들은 GPU가 데이터를 어떻게 이동시키고 수학 연산을 수행해야 하는지 정확히 알려주는 '커널(kernel)'이라 불리는 매우 특화된 명령어를 작성해야 합니다. 지난 몇 년 동안 기업들은 인간 엔지니어보다 더 빠른 작업 방식을 찾기 위해 인공지능 자체를 사용하여 이러한 커널을 작성하기 시작했습니다. 그러나 이러한 속도에는 위험이 따릅니다. AI나 컴파일러가 코드를 더 빠르게 재작성할 때, 의도치 않게 미묘한 오류를 도입할 수 있기 때문입니다. 이러한 오류는 컴퓨터가 잘못된 답을 내놓게 하거나, 더 심각하게는 표준적인 테스트로는 찾아내기가 거의 불가능한 방식으로 소리 없이 시스템을 충돌시킬 수 있습니다. 핵심적인 문제는 이 칩들이 수천 개의 작업 스레드를 동시에 실행한다는 점이며, 만약 이들이 완벽하게 조율되지 않으면 서로의 영역을 침범하여, 결과가 사건이 발생하는 예측 불가능한 순서에 따라 달라지는 '경쟁 상태(race condition)'를 유발할 수 있다는 것입니다.
연구진은 이 문제를 해결하기 위해 '볼타(Volta)'라고 불리는 새로운 도구를 개발했습니다. 새로운 버전의 커널이 올바른지 추측하는 대신, 볼타는 두 버전이 동일한 결과를 생성한다는 것을 수학적으로 증명하는 형식 검증기(formal verifier) 역할을 합니다. 연구진은 참조 커널(신뢰할 수 있는 원본 버전)과 최적화된 커널(새롭고 더 빠른 버전)의 저수준 명령어를 입력받아 심볼릭 엔진(symbolic engine)으로 실행하는 시스템을 구축했습니다. 엔진은 코드에 특정 숫자를 입력하여 결과값을 확인하는 대신, 입력을 추상적인 기호로 취급합니다. 엔진은 코드가 취할 수 있는 모든 가능한 경로를 추적하며, 데이터가 수천 개의 병렬 스레드를 통해 어떻게 이동하고 스레드들이 서로 어떻게 동기화되는지를 추적합니다. 만약 코드가 충돌을 일으킬 수 있는 방식으로 메모리에 접근하려고 시도하거나, 스레드들이 서로를 기다리며 영원히 갇혀 버린다면, 이 도구는 즉시 오류를 표시합니다. 코드가 문제없이 실행되면, 도구는 두 커널의 최종 출력을 복잡한 수학적 표현식으로 변환하고, 입력되는 특정 숫자와 관계없이 그 표현식들이 근본적으로 동일한지 확인합니다.
연구진은 행렬 곱셈, 컨볼루션(convolutions), 그리고 대규모 언어 모델을 구동하는 어텐션 메커니즘을 포함한 다양한 실제 머신러닝 작업에 대해 볼타를 테스트했습니다. 그들은 이 도구가 수작업으로 최적화된 커널, 컴파일러에 의해 최적화된 커널, 심지어 대규모 언어 모델에 의해 생성된 커널까지 성공적으로 검증할 수 있음을 발견했습니다. 한 사례에서는 13차례의 자동 개선 과정을 거쳐 최적화된 AI 생성 커널을 조사했습니다. 볼타는 이 AI 생성 코드가 원래의 인간이 작성한 참조 모델과 수학적으로 동일함을 확인하여, 공격적인 최적화가 논리 구조를 깨뜨리지 않았음을 증명했습니다. 또한 이 도구는 다른 방법들이 놓친 오류를 잡아냄으로써 그 가치를 입증했습니다. 예를 들어, 수천 명의 개발자가 수년간 사용해 온 유명하고 널리 인용되는 GPU 프로그래밍 튜토리얼에서 데이터 경합(data races)을 감지했습니다. 이러한 오류는 표준 테스트로는 거의 포착되지 않는 매우 특정한 타이밍 조건에서만 나타나기 때문에 숨겨져 있었습니다. 도구는 또한 AI가 생성한 커널에서 존재하지 않는 메모리 위치의 데이터를 읽으려고 시도하는 버그를 식별했습니다. 현재의 하드웨어는 이 실수를 무시하고 지나갔지만, 연구진은 이 코드가 근본적으로 안전하지 않으며 미래의 기기에서는 실패할 수 있음을 보여주었습니다.
이 접근 방식의 강점은 수천 개의 스레드가 동작을 조율해야 하는 GPU 프로그래밍의 독특한 복잡성을 다룰 수 있는 능력에 있습니다. 기존의 도구들은 단일 스레드 프로그램이나 고수준의 수학적 연산은 확인할 수 있었지만, GPU의 거대한 병렬성을 관리 가능한 단위로 분해하는 데 어려움을 겪었습니다. 볼타는 머신러닝에서 흔히 나타나는 구조적 패턴, 즉 스레드의 수와 데이터의 크기가 사전에 알려져 있다는 가정을 통해 이를 극복합니다. 이 프레임워크 내에서, 도구는 스레드가 적절히 동기화되지 않을 경우 경쟁 상태가 존재함을 확실히 증명할 수 있으며, 두 프로그램이 동일한 심볼릭 결과를 생성한다면 서로 동등하다는 것을 증명할 수 있습니다. 연구진은 이 도구가 수십만 개의 명령어를 포함하는 커널에 대해서도 불과 몇 초 또는 몇 분 만에 이러한 속성을 검증할 수 있음을 보여주었습니다. 또한 그들은 도구의 수학적 논리가 건전(sound)하다는 것을 증명했는데, 이는 도구가 두 프로그램이 같다고 판정했다면, 모든 가능한 입력에 대해 실제로 같다는 것을 의미합니다.
이 연구는 인공지능 개발을 더욱 안전하고 신뢰할 수 있게 만드는 데 있어 중요한 진전을 의미합니다. 기업들이 모델을 구동하는 코드를 생성하기 위해 자동화된 시스템에 점점 더 의존함에 따라, 그 코드를 점검할 엄격한 방법이 필수적이 되었습니다. 연구진은 제한된 시나리오만을 확인할 수 있는 단순한 테스트를 넘어, 정당성을 보장하는 방법론으로 나아가는 것이 가능하다는 것을 보여주었습니다. 최적화된 커널의 동등성을 검증함으로써, 볼타는 개발자들이 조용한 버그를 도입할 두려움 없이 더 빠르고 공격적인 최적화를 사용할 수 있는 확신을 줍니다. 이 도구는 현재 사용 가능하며, 연구진은 코드와 그 배후의 증명 과정을 공개하여 다른 이들이 이 토대 위에 구축할 수 있도록 했습니다. 비록 이 도구가 아직 모든 유형의 GPU 코드를 다루지는 못하지만, 현대 머신러닝을 이끄는 대다수의 커널을 성공적으로 처리하며 고성능 컴퓨팅 코드의 자동 생성에 대한 새로운 신뢰의 기준을 제시하고 있습니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.