CNN 가속화 (CNN-Acceleration)
요약
본 프로젝트는 CUDA와 OpenCL을 활용하여 CNN의 순전파(forward propagation) 단계를 가속화하는 것을 목표로 합니다. NVIDIA, AMD GPU 및 FPGA 플랫폼에서 성능 평가가 가능하며, C++ 컴파일러, CUDA 8 Toolkit, CMake 등의 개발 환경 설정과 빌드 과정에 대한 상세한 지침을 제공합니다.
핵심 포인트
- CUDA와 OpenCL을 이용해 CNN 순전파 가속화 구현
- NVIDIA, AMD GPU 및 FPGA 플랫폼에서 성능 평가 가능
- C++ 컴파일러, CUDA 8 Toolkit, CMake 등 개발 환경 필수
- Hunter 패키지 관리자와 CMake를 사용한 빌드 과정 안내
코드 가속화
본 프로젝트의 목표는 두 가지입니다. 첫째, CUDA와 OpenCL을 사용하여 Convolutional Neural Network (CNN) 알고리즘의 순전파(forward propagation) 단계를 가속화하는 것입니다. 둘째, NVIDIA, AMD GPU 및 FPGA 플랫폼에서 그 성능을 평가하는 것입니다.
CNN 및 MNIST
제공된 모델은 60,000개의 예시(훈련 세트 이미지)를 사용하여 학습되었으며, 제공된 테스트 데이터는 10,000개의 배치별 질의(테스트 세트 이미지)입니다. 이 CNN의 예상 정확도는 제공된 테스트 데이터셋에서 ~87%입니다.
데이터셋과 모델은 MNIST database에서 가져왔습니다.
시스템 요구 사항 및 프로젝트 빌드
본 프로젝트는 C++ 컴파일러, CUDA 8 Toolkit, 그리고 OpenCL 1.2 이상을 필요로 합니다.
CUDA 8 Toolkit은 CUDA Download 페이지에서 다운로드할 수 있습니다. CUDA Toolkit 설치 방법 지침은 Quick Start page에서 확인할 수 있습니다. 또한, Windows, Linux, 그리고 OSX용 설치 가이드와 지원되는 C 컴파일러 목록은 CUDA Toolkit Documentation Page에서도 찾을 수 있습니다.
C 컴파일러 및 CUDA 8 Toolkit 외에도, 타겟 IDE 및 컴파일러를 위한 빌드 스크립트를 생성하려면 CMake 3.1 이상이 필요합니다.
CUDA 및 OpenCL 버전 빌드
CUDA 및 OpenCL 버전을 빌드하려면 Hunter 패키지 관리자와 Cmake를 사용해야 합니다. 필요한 라이브러리(주로 HDF5)를 설치하세요.
프로젝트를 $PROJECT_DIR에 체크아웃했다고 가정하고, 다음 명령어 시퀀스를 실행합니다:
cd $PROJECT_DIR/cuda_implementation/
mkdir build
cd build
...
이 과정은 프로젝트에 필요한 소프트웨어를 다운로드합니다 (더 자세한 내용은 hunter 문서를 참조하십시오). 시스템이 _HDF5_를 컴파일하는 동안 일부 경고 메시지가 표시될 수 있지만, 이는 무시해도 됩니다. CMake 실행 후에는 Makefile이 생성되므로, 이를 사용하여 프로젝트 빌드(make)를 수행할 수 있습니다.
make
OpenCL 버전을 실행하려면 동일한 명령어 순서를 openCL_implementation 디렉토리에서 실행해야 합니다.
만약 make를 사용하지 않을 계획이라면, XCode, Visual Studio 등 프로젝트 구성을 생성할 수 있는 cmake -G 옵션을 검토하십시오. 또한 디버깅 및/또는 최적화를 활성화/비활성화하기 위해 빌드 유형을 변경해야 할 수도 있습니다.
다른 라이브러리를 사용해야 하는 경우, [CMakeLists.txt]를 수정하고 해당 라이브러리들을 target_link_libraries (그리고 아마도 include_directories) 섹션에 추가해야 합니다. CMake 명령어에 대한 문서는 문서 페이지에서 찾을 수 있습니다.
OpenCL 표준을 사용한 FPGA 버전 빌드
FPGA 버전은 Intel이 제공하는 수정된 OpenCL 라이브러리를 사용해야 하므로, Intel이 제공하는 Makefile을 사용하는 것이 더 합리적입니다.
빌드의 첫 단계는 어떤 보드가 사용 가능한지 확인하는 것입니다. 다음 명령어가 사용 가능한 모든 보드를 나열합니다:
aoc --list-boards
OpenCL 커널을 보드에서 실행하도록 컴파일하기
cd $PROJECT_DIR/fpgaOpenCL_implementation/
aoc device/cnn.cl -o bin/cnn.aocx --board <보드>
에뮬레이터용 OpenCL 커널 컴파일하기
cd $PROJECT_DIR/fpgaOpenCL_implementation/
aoc -march=emulator device/cnn.cl -o bin/cnn.aocx --board <보드>
OpenCL 호스트 코드 컴파일하기
프로젝트를 $PROJECT_DIR에 체크아웃했다고 가정하고, 다음 명령어 순서를 실행하십시오:
cd $PROJECT_DIR/fpgaOpenCL_implementation/
make
이렇게 하면 FPGA 버전의 코드를 실행할 수 있는 실행 파일이 포함된 bin 폴더가 생성됩니다.
코드 실행 방법
구현한 내용을 작은 배치 크기부터 테스트하여 정확성을 확인하세요. 선호하는 언어(예: python)를 사용하여 data/test100.hdf5 파일을 더 작은 청크로 파싱할 수 있습니다. 쿼리 개수 2, 10, 100에 대한 데이터는 data 폴더의 data/test2.hdf5, data/test10.hdf5, data/test100.hdf5에 제공됩니다. 입력하는 데이터 파일은 명령어 라인에서 지정한 batch_size와 동일한 배치 크기를 가지고 있는지 확인하세요.
코드를 실행하려면 프로젝트의 특정 버전이 있는 build 또는 bin 디렉토리에 있어야 합니다.
CUDA 버전
./cuda_CNN ../../data/test10.hdf5 ../../data/model.hdf5 10
OpenCL 버전
./openCL_CNN ../../data/test10.hdf5 ../../data/model.hdf5 10
온보드 FPGA 버전
./fpga_CNN ../../../data/test10.hdf5 ../../../data/model.hdf5 10
에뮬레이터 사용 FPGA 버전
CL_CONTEXT_EMULATOR_DEVICE_ALTERA=1 ./fpga_CNN ../../../data/test10.hdf5 ../../../data/model.hdf5 10
결과 (Results)
The following are the results on a Tesla P100 GPU as of 2017년 4월 22일.
CUDA 버전
test10: 15.9631 milliseconds
test100: 17.6193 milliseconds
testfull: 524.852 milliseconds
OpenCL 버전
test10: 3.28717 milliseconds
test100: 3.76949 milliseconds
testfull: 34.1698 milliseconds
온보드 FPGA 버전
이 버전을 테스트하려면 FPGA 보드가 있는 시스템에 접근해야 합니다.
에뮬레이터 사용 FPGA 버전
test10: 7423.32 milliseconds
test100: 68188.2 milliseconds
testfull: 시간 초과 (TIMES OUT)
참고: FPGA 버전의 결과가 OpenCL 및 CUDA 버전의 코드 결과와 일치하려면 주요 최적화 작업이 필요합니다.
문제 보고 (Reporting Issues)
프로젝트에 대한 모든 문제나 제안은 GitHub issue manager를 사용해 주십시오.
사용된 리소스 (Resources Used)
- University of Illinois: ECE 408 staff
- Fei Deng
- Cmake Documentation
- Hunter
- Hunter Documentation
- Rancehpp
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub ML Hardware의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기