Concurrent Scheduling of High-Level Parallel Programs on Multi-GPU Systems
이 논문은 멀티 GPU 시스템에서 SYCL 프로그램을 위한 복잡한 메모리 및 통신 분석을 크리티컬 패스(critical path) 밖으로 이동시키기 위해 Celerity 런타임 내의 인스트럭션 그래프 스케줄링을 도입하며, 이를 통해 최대 128개의 GPU에 걸쳐 강력한 스케일링(strong scaling)을 달성하는 동시 실행과 최적화된 메모리 할당을 가능하게 합니다.
원본 논문은 CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
현대의 슈퍼컴퓨터는 단순히 수십 년 전 기계들의 더 빠른 버전이 아닙니다. 그것들은 함께 작동하는 수천 개의 특화된 프로세서들의 거대한 집합체입니다. 이러한 거대한 시스템을 최대한 활용하기 위해, 과학자들은 어떤 계산의 어느 부분이 어떤 프로세서로 가야 하는지, 그리고 데이터가 그들 사이에서 어떻게 이동해야 하는지를 자동으로 결정할 수 있는 소프트웨어에 의존합니다. 이는 소프트웨어가 실제 작업을 방해하지 않으면서 메모리와 통신을 관리해야 하기 때문에 매우 어려운 작업입니다. 만약 시스템이 데이터를 어디에 둘지 또는 어떻게 일관성을 유지할지를 결정하는 데 너무 많은 시간을 소비한다면, 강력한 프로세서들은 유휴 상태로 머물며 에너지와 시간을 낭비하게 됩니다. 과제는 컴퓨터가 생각하느라 멈추지 않도록 충분히 빠르게 이러한 결정을 내려, 작업의 흐름을 강물의 흐름처럼 매끄럽게 유지하는 것입니다.
인스브루크 대학교의 연구진은 많은 그래픽 처리 장치(GPU)를 갖춘 시스템의 이러한 스케줄링 문제를 해결하는 새로운 방법을 개발했습니다. 이 칩들은 방대한 양의 병렬 작업을 처리하도록 설계되었지만, 수백 개의 칩을 조정하려면 정교한 관리자가 필요합니다. 연구팀은 '명령어 그래프 스케줄링(instruction-graph scheduling)'이라 불리는 방법을 도입했는데, 이는 컴퓨터가 수행해야 할 모든 개별 연산에 대한 상세하고 낮은 수준의 지도를 만드는 역할을 합니다. 시스템이 각 단계가 필요할 때마다 즉석에서 결정을 내리는 대신, 메모리 할당, 데이터 전송 및 실제 계산을 포함하는 완전한 계획을 구축합니다. 이 계획은 컴퓨터가 이미 이전 작업들을 수행하고 있는 동안 생성되므로, 스케일러가 현재의 흐름을 방해하지 않고 다음 단계를 예측하고 준비할 수 있게 해줍니다.
이 접근 방식의 핵심은 소프트웨어가 작업을 바라보는 관점의 변화에 있습니다. 이전에는 시스템이 고수준의 작업 목록을 생성한 다음, 실행할 시간이 되었을 때 메모리 복사와 같은 구체적인 세부 사항을 파악했습니다. 이는 시스템이 계산 도중에 의존성을 분석하기 위해 멈춰야 했기 때문에 종종 지연을 초قع했습니다. 새로운 방법은 각 작업을 특정 메모리 블록 할당이나 이웃 프로세서로의 작은 데이터 전송과 같은 가장 작은 구성 요소로 분해합니다. 이러한 작은 단계들을 하나의 연결된 그래프로 배열함으로써, 시스템은 어떤 단계들이 동시에 일어날 수 있는지 정확히 파악할 수 있습니다. 이를 통해 컴퓨터는 계산과 통신을 중첩할 수 있으며, 이는 한 쪽이 끝나기를 기다린 후에 다른 쪽이 시작되는 것이 아니라, 칩이 숫자를 계산하는 동안 데이터가 프로세서 사이를 이동할 수 있음을 의미합니다.
이 아이디어를 테스트하기 위해 연구진은 복잡한 시뮬레이션을 GPU 클러스터에서 실행하도록 설계된 Celerity라는 소프트웨어 프레임워크에 이 시스템을 통합했습니다. 그들은 새로운 스케줄러가 표준 버전과 비교하여 얼마나 잘 작동하는지 확인하기 위해 세 가지 서로 다른 과학 애플리케이션을 실행했습니다. 한 애플리케이션은 수십억 개의 입자 사이의 중력을 시뮬레이션했고, 다른 하나는 소리가 방 안에서 어떻게 반사되는지를 모델링했으며, 세 번째는 매질을 통해 파동이 어떻게 이동하는지를 추적했습니다. 각 경우에 그들은 GPU를 추가함에 따라 프로그램이 얼마나 빨라지는지, 즉 '강한 스케일링(strong scaling)' 지표를 측정했습니다. 결과는 새로운 접근 방식이 특히 프로세서 수가 많아질수록 기존 시스템보다 일관되게 우수한 성능을 보였다는 것을 보여주었습니다. 128개의 GPU가 있는 시스템에서, 새로운 스케줄러는 방 시뮬레이션 애플리케이션을 기존 방식보다 두 배 이상 빠르게 실행했으며, 입자 시뮬레이션에서도 상당한 속도 향상을 보였습니다.
이 연구의 핵심 혁신은 메모리 사용과 관련된 특정 문제를 해결하는 '스케줄러 룩어헤드(scheduler lookahead)' 기술입니다. 많은 시뮬레이션에서 프로그램이 저장해야 하는 데이터의 양은 단계마다 변할 수 있습니다. 이러한 변화를 예측할 방법이 없다면, 소프트웨어는 작은 메모리 블록을 할당했다가 곧바로 그것이 너무 작다는 것을 발견하고, 더 큰 블록을 할당한 뒤 모든 데이터를 복사해야 하는 상황에 직면할 수 있습니다. 이 크기 조정 과정은 느리며 귀중한 시간을 낭비할 수 있습니다. 새로운 시스템은 다가올 작업들을 미리 내다봄으로써 메모리 요구 사항이 증가하고 있는지 확인합니다. 만약 데이터 크기가 증가할 것이라는 패턴을 감지하면, 시스템은 최종적으로 필요한 크기를 알 때까지 메모리 할당을 기다려 비용이 많이 드는 크기 조정 단계를 완전히 피합니다. 이는 데이터가 꾸준히 증가하는 애플리케이션에서 특히 효과적이며, 시스템이 한 번에 정확한 양의 메모리를 할당할 수 있게 해줍니다.
연구진은 또한 계획하는 작업과 실행하는 작업을 분리하는 시스템 아키텍처를 구축했습니다. 그들은 이러한 상세한 명령어 그래프를 구축하는 데만 전념하는 전용 스레드, 즉 별도의 실행 라인을 만들었습니다. 한편, 다른 스레드들은 GPU에서 명령어의 실제 실행을 담당합니다. 이러한 분리는 다음 단계를 계획하는 과정이 현재 진행 중인 단계에 방해가 되지 않도록 보장합니다. 두 프로세스는 나란히 실행되며, 계획된 명령을 실행기로 전달하는 효율적인 큐(queue)를 통해 통신합니다. 이 설계는 시스템이 대기하는 시간을 최소화하여, GPU가 다음 작업을 결정하기 위해 소프트웨어가 생각하는 동안 유휴 상태로 있는 대신 유용한 작업에 계속 집중할 수 있도록 합니다.
실험은 이탈리아의 레오나르도(Leonardo) 슈퍼컴퓨터에서 수행되었으며, 이 기계는 수천 개의 프로세서와 고속 연결망을 갖추고 있습니다. 연구팀은 자신들의 결과가 실제 시나리오에서도 유효함을 보장하기 위해 실제 과학 코드를 사용했습니다. 그들은 새로운 방법이 데이터를 저장할 수 있는 근본적인 한계나 문제의 크기를 바꾸지는 않지만, 그 작업이 분산되는 효율성을 크게 개선한다는 것을 발견했습니다. 개선은 데이터 접근 패턴이 복잡하거나 변하는 애플리케이션에서 가장 눈에 띄었으며, 시스템이 통신 및 메모리 관리에 소요되는 시간을 더 잘 숨길 수 있었기 때문입니다. 계산 단계가 매우 짧은 애플리케ка이션의 경우, 새로운 스케줄러는 오버헤드를 줄여 많은 수의 프로세서에서도 시스템이 효율적으로 스케일링될 수 있도록 유지했습니다.
이 연구는 슈퍼컴퓨터 내부의 물류를 관리하는 방식이 하드웨어 자체의 원시적인 힘만큼 중요하다는 것을 보여줍니다. 스케줄링의 무거운 짐을 임계 경로(critical path) 밖으로 옮겨 병렬 프로세스로 전환함으로써, 연구진은 이러한 거대한 기계들을 최고 효율로 계속 가동하는 것이 가능하다는 것을 입증했습니다. 명령어 그래프 접근 방식은 현대의 병렬 프로그램에 존재하는 복잡한 의존성 네트워크를 시각화하고 관리하는 방법을 제공하며, 한때 병목 현상이었던 것을 매끄러운 파이프라인으로 바꾸어 놓았습니다. 슈퍼컴퓨터가 규모와 복잡성을 키워감에 따라, 이러한 기술은 과학자들이 자신들의 투자를 최대한 활용하여 이전에는 너무 크거나 느려서 다룰 수 없었던 문제들을 해결할 수 있도록 하는 데 필수적일 것입니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.