엔비디아, GPU 자원 분할 기능 공개
최근 30일 조회수 — 좋아요 —핵심 요약
그린 컨텍스트는 한 프로세스의 여러 작업에 SM과 워크큐를 명시적으로 배정해 간섭을 줄인다.
엔비디아(NVIDIA)가 한 GPU 프로세스 안에서 여러 작업에 실행 자원을 나눠 주는 ‘그린 컨텍스트(Green Contexts)’ 활용법을 공개했다. 그린 컨텍스트는 애플리케이션이 GPU 실행 자원의 일부를 직접 선택하고, 해당 자원을 쓸 작업을 명시적으로 지정하는 기능이다. 드라이버 API에는 CUDA 12.4부터 들어갔으며, CUDA 13.1부터는 런타임 API에서도 사용할 수 있다.1
이 기능이 겨냥하는 것은 지연시간에 민감한 연산자와 처리량 중심의 백그라운드 커널, 데이터 전처리와 모델 추론처럼 성격이 다른 작업을 한 프로세스에서 동시에 실행하는 경우다. 기존에는 각 구성 요소가 같은 GPU 자원을 두고 예측하기 어려운 방식으로 간섭할 수 있었다. 전통적인 CUDA 컨텍스트는 생성 비용이 크고 하드웨어 컨텍스트 전환 부담이 있으며, 하나의 주요 작업이 GPU를 점유하던 시기의 사용 방식을 전제로 설계됐다.1
그린 컨텍스트의 핵심은 SM(Streaming Multiprocessor) 분할이다. 특정 SM 묶음을 그린 컨텍스트에 할당하면, 그 컨텍스트를 통해 제출한 작업을 지정된 SM에서 실행할 수 있다. 서로 다른 작업이 같은 연산 유닛을 놓고 경쟁하지 않도록 실행 영역을 나누는 방식이다. 여기에 워크큐 자원도 별도로 배정할 수 있다. 기존 모델에서는 독립적인 스트림 작업이 같은 내부 워크큐에 연결돼, 실행 자원이 남아 있어도 의도하지 않은 직렬화가 발생할 수 있었다. 워크큐를 명시적으로 마련하면 이런 거짓 의존성을 줄이고 예상한 동시성을 표현할 수 있다.1
프로그래밍 방식도 암묵적 상태에서 명시적 지정으로 바뀐다. 기존 런타임 코드는 cudaSetDevice()로 현재 장치를 고른 뒤 스트림을 만들었고, 스트림의 실행 대상은 생성 당시 스레드의 장치·컨텍스트 상태에서 결정됐다. 그린 컨텍스트에서는 cudaGreenCtxCreate()가 반환한 cudaExecutionContext_t 핸들을 cudaExecutionCtxStreamCreate()에 넘겨 스트림의 실행 자원을 직접 정한다. 생성과 삭제가 가볍고, 이 과정에서 관계없는 GPU 작업이 암묵적으로 동기화되지 않는다는 점도 다중 작업 구성에 유리하다.1
다만 엔비디아가 공개한 예제는 설명을 위해 오류 검사를 생략했다. 실제 코드에서는 모든 런타임 API 반환값과 커널 실행 오류, cudaStreamSynchronize() 같은 동기화 호출에서 나타나는 비동기 오류까지 확인해야 한다.1
Footnotes
읽기 목록은 이 브라우저에 저장됩니다.
출처
- Control How Your GPU Shares Work with Green Contexts | NVIDIA Technical Blog — NVIDIA Technical Blog
이 글은 위 출처를 근거로 자동 생성된 뒤 발행됐습니다. 원문을 함께 확인해 주세요. 교차 보도 없이 단독 출처로 작성됐습니다.