AI 시스템 구축: 성능 개선 – GPU Concurrency

ㅁ 성능 개선

ㅇ 정의:
GPU Concurrency는 GPU 내 여러 연산(계산, 데이터 전송 등)을 동시에 실행하여 전체 처리 속도를 높이는 기법을 의미한다.

ㅇ 특징:
– 연산과 데이터 이동을 병렬로 수행하여 대기 시간을 줄인다.
– CUDA Streams, Multi-GPU 환경에서의 작업 분할 등을 활용한다.
– GPU 메모리 대역폭과 스케줄링 최적화가 중요하다.

ㅇ 적합한 경우:
– 대규모 배치 데이터 처리 시 GPU 자원을 최대한 활용해야 하는 경우
– 모델 학습 중 데이터 로딩과 전처리를 GPU 연산과 겹쳐 실행해야 하는 경우
– 실시간 추론 서비스에서 지연 시간을 최소화해야 하는 경우

ㅇ 시험 함정:
– GPU Concurrency는 단순히 GPU 여러 개를 쓰는 것과 혼동하기 쉽다(OX 문제에서 주의)
– CPU-GPU 간 전송 속도가 병목이 될 수 있다는 점을 간과하기 쉽다
– 모든 연산이 병렬화 가능한 것은 아니다

ㅇ 시험 대비 “패턴 보기” 예시:
– O: “GPU Concurrency는 연산과 데이터 전송을 겹쳐 실행하여 처리 효율을 높인다.”
– X: “GPU Concurrency는 GPU 개수를 늘려서만 성능을 향상시키는 방법이다.”
– O: “CUDA Streams는 GPU Concurrency 구현에 사용될 수 있다.”
– X: “GPU Concurrency는 CPU 연산을 GPU로 옮기는 것과 동일하다.”

ㅁ 추가 학습 내용

GPU Concurrency를 효과적으로 구현하기 위해서는 다음 개념을 이해해야 한다.
비동기 실행(asynchronous execution)은 CPU와 GPU가 동시에 작업을 수행하도록 하여 자원 활용도를 높이는 방식이다. 이를 위해 CUDA Stream을 사용하면 여러 작업을 병렬로 실행할 수 있고, CUDA Event는 작업 완료 시점을 측정하거나 동기화하는 데 활용된다. Memory Pinned 기술은 페이지 고정 메모리를 사용해 CPU와 GPU 간 데이터 전송 속도를 향상시킨다.

TensorFlow나 PyTorch에서는 DataLoader의 prefetch와 num_workers 설정을 통해 데이터 로딩과 GPU 연산을 겹쳐 수행할 수 있으며, 이를 GPU 연산 overlap 기법과 병행하면 성능 향상 효과가 크다.

시험에서는 GPU Concurrency, Data Parallelism, Model Parallelism의 차이를 자주 묻는다.
GPU Concurrency는 단일 GPU 내에서 여러 연산을 겹쳐 수행하는 기법이고, Data Parallelism은 동일한 모델을 여러 GPU에 복제하여 서로 다른 데이터 배치를 병렬 처리하는 방식이다. Model Parallelism은 모델의 서로 다른 부분을 여러 GPU에 나눠서 처리하는 방법이다.

또한 GPU Concurrency 최적화 시에는 PCIe 대역폭, NVLink 지원 여부, GPU 메모리 용량이 성능에 큰 영향을 미친다는 점을 이해해야 한다.

답글 남기기

Your email address will not be published. Required fields are marked *.

*
*