임베디드시스템
2D Convolution +General Matrix Multiply (GEMM)
비숑주인
2024. 11. 20. 13:03
CNNs와 CUDA 프로그래밍: 핵심 개념과 최적화 전략
1. CNNs: Convolutional Neural Networks
- CNN은 시각적 이미지를 분석하는 데 가장 널리 사용되는 인공신경망의 한 종류이다.
- 주요 구성 요소:
- Convolutional Layers: 입력 이미지에서 특징을 추출.
- Pooling Layers: 공간 크기를 줄이고 연산량을 감소.
-
- 모든 입력 뉴런과 출력 뉴런이 완전히 연결.
- 네트워크의 마지막 부분에 위치하며, 분류 또는 회귀 같은 최종 작업을 수행.Fully Connected Layer(완전 연결층):
- 이전 레이어에서 추출된 고차원 특징을 기반으로 최종 출력을 계산.
- Convolutional Layers: 입력 이미지에서 특징을 추출.
2. im2col: Lowering 기법
- 문제점: 모든 이미지를 필터로 슬라이드하는 다중 루프는 매우 느리다.
- 해결책: im2col은 입력 데이터를 펼쳐 행렬로 변환하고, 행렬 곱셈(GEMM)을 사용하여 컨볼루션을 수행하는 방식이다.
- 장점:
- 효율적인 메모리 접근.
- 고성능 라이브러리를 활용한 빠른 연산.
3. TB: Thread Blocks
- Thread Block:
- CUDA에서 사용되는 프로그래밍 추상화로, 여러 개의 스레드 그룹을 나타냄.
- 스레드는 직렬 또는 병렬로 실행 가능하며, 효율적인 프로세스 및 데이터 매핑을 위해 Thread Block으로 묶인다.
- SIMT(Single Instruction Multiple Threads):
- 모든 스레드는 동일한 명령어를 실행하며, Warp 단위(보통 32개의 스레드)로 나뉘어 실행된다.
Thread Block는 소프트웨어, Warp은 하드웨어다.
- 쓰레드 블록: 프로그래밍 모델 상의 병렬 작업 단위로, 공유 메모리 사용, 동기화를 통한 데이터 협력 및 스케일 아웃을 위한 추상화 레벨 제공.
- 워프: 하드웨어가 실제 명령어 실행을 관리하는 최소 단위로, 효율적인 명령어 발행과 실행을 위해 존재. 워프 레벨에서 명령어가 발행되므로, 쓰레드 다이버전스(divergence)가 발생하면 워프 내에서 비효율성이 생길 수 있다.
4. 최적화 전략
- Thread Block 설계:
- Thread Block과 Grid 크기를 조정하여 자원 활용을 극대화.
- 배치 처리(Batch Inference):
- 여러 입력 데이터를 한 번에 처리하여 병렬성을 극대화.
- 효과: 비배치 처리보다 훨씬 빠른 결과를 도출.
5. 실습 예제: 행렬 곱셈 CUDA 구현
- 목표:
- CPU와 GPU에서 행렬 곱셈 구현.
- GPU의 병렬성을 활용하여 성능 개선.
- 단계:
- 입력 행렬을 호스트에서 디바이스로 복사.
- Thread Block과 Grid 크기 설정.
- CUDA 커널을 작성하여 행렬 곱셈 수행.
- 결과를 디바이스에서 호스트로 복사.
- CPU 결과와 비교하여 정확성 검증.