250-SoC PCIe 카드

백서

컨볼루션 신경망의 FPGA 가속화

개요

컨볼루션 신경망(CNN)은 복잡한 이미지 인식 문제에 매우 효과적인 것으로 나타났습니다. 이 백서에서는 인텔 OpenCL 소프트웨어 개발 키트를 사용하여 프로그래밍된 비트웨어의 FPGA 가속기 제품을 사용하여 이러한 네트워크를 가속화하는 방법에 대해 설명합니다. 그런 다음 계산 정밀도를 줄임으로써 이미지 분류 성능을 크게 향상시킬 수 있는 방법을 설명합니다. 정밀도를 낮출 때마다 FPGA 가속기는 초당 처리할 수 있는 이미지 수가 점점 더 많아집니다.

카페 통합

Caffe는 표현력, 속도, 모듈성을 염두에 두고 만들어진 딥 러닝 프레임워크입니다. 이 프레임워크는 버클리 비전 및 학습 센터와 커뮤니티 기여자들에 의해 개발되었습니다.

카페 프레임워크는 XML 인터페이스를 사용하여 특정 CNN에 필요한 다양한 처리 계층을 설명합니다. 사용자는 다양한 레이어 조합을 구현하여 주어진 요구 사항에 맞는 새로운 네트워크 토폴로지를 신속하게 생성할 수 있습니다.

이러한 레이어 중 가장 일반적으로 사용되는 레이어는 다음과 같습니다:

  • 컨볼루션: 컨볼루션 레이어는 입력 이미지를 학습 가능한 필터 세트로 컨볼루션하여 각각 출력 이미지에 하나의 특징 맵을 생성합니다.
  • 풀링: 최대 풀링은 입력 이미지를 겹치지 않는 직사각형 집합으로 분할하고 각 하위 영역에 대해 최대값을 출력합니다.
  • Rectified-Linear: Given an input value x, The ReLU layer computes the output as x if x > 0 and negative_slope * x if x <= 0.
  • 내부 제품/완전히 연결됨: 이미지가 각 점이 새 출력 벡터의 각 점에 기여하는 단일 벡터로 처리됩니다.

이 4개의 레이어를 FPGA로 포팅하면 대부분의 포워드 프로세싱 네트워크를 Caffe 프레임워크를 사용하여 FPGA에서 구현할 수 있습니다.

그림 1 : 일반적인 CNN - 컨볼루션 신경망의 예시 그림

AlexNet

AlexNet은 잘 알려져 있고 잘 사용되는 네트워크로, 무료로 제공되는 훈련된 데이터 세트와 벤치마크가 있습니다. 이 백서에서는 AlexNet CNN을 대상으로 한 FPGA 구현에 대해 설명하지만, 여기에 사용된 접근 방식은 다른 네트워크에도 동일하게 적용될 수 있습니다.

그림 2는 AlexNet CNN에 필요한 다양한 네트워크 레이어를 보여줍니다. 5개의 컨볼루션 레이어와 3개의 완전히 연결된 레이어가 있습니다. 이 레이어는 이 네트워크의 처리 시간 중 99% 이상을 차지합니다. 각 컨볼루션 레이어에는 11×11, 5×5, 3×3의 3가지 필터 크기가 있습니다. 서로 다른 컨볼루션 레이어에 최적화된 다른 레이어를 생성하는 것은 비효율적입니다. 적용되는 필터의 수와 입력 이미지의 크기에 따라 각 레이어의 계산 시간이 다르기 때문입니다. 처리되는 입력 및 출력 특징의 수에 따라 계산 시간이 달라집니다. 그러나 각 컨볼루션에는 처리하는 레이어 수와 픽셀 수가 다릅니다. 컴퓨팅 집약적인 레이어에 적용되는 리소스를 늘리면 각 레이어가 동일한 시간 내에 완료되도록 균형을 맞출 수 있습니다. 따라서 한 번에 여러 이미지를 처리할 수 있는 파이프라인 프로세스를 생성하여 사용되는 로직의 효율성을 극대화할 수 있습니다. 즉, 대부분의 처리 요소는 대부분의 시간 동안 바쁩니다.

그림 2 : AlexNet CNN - 컨볼루션 신경망

표 1은 이미지넷 네트워크의 각 계층에 필요한 계산을 보여줍니다. 이 표를 보면 5×5 컨볼루션 레이어가 다른 레이어보다 더 많은 컴퓨팅을 필요로 한다는 것을 알 수 있습니다. 따라서 이 레이어가 다른 레이어와 균형을 맞추려면 FPGA에 더 많은 처리 로직이 필요합니다.

내부 곱셈 레이어에는 곱셈을 더할 때마다 고유한 계수가 필요한 n 대 n 매핑이 있습니다. 내부 곱셈 레이어는 일반적으로 컨볼루션 레이어보다 훨씬 적은 연산이 필요하므로 로직의 병렬화가 덜 필요합니다. 이 시나리오에서는 내적 곱셈 레이어를 호스트 CPU로 옮기고 FPGA는 컨볼루션에 집중하는 것이 좋습니다.

FPGA 로직 영역

FPGA 디바이스에는 DSP와 ALU 로직의 두 가지 처리 영역이 있습니다. DSP 로직은 곱셈 또는 덧셈 연산자를 위한 전용 로직입니다. 이는 부동 소수점 큰(18×18비트) 곱셈에 ALU 로직을 사용하면 비용이 많이 들기 때문입니다. DSP 연산에서 곱셈의 공통성을 감안하여 FPGA 공급업체는 이를 위한 전용 로직을 제공했습니다. 인텔은 한 걸음 더 나아가 부동 포인터 연산을 수행하도록 DSP 로직을 재구성할 수 있도록 했습니다. CNN 처리 성능을 높이려면 FPGA에서 구현되는 곱셈의 수를 늘려야 합니다. 한 가지 접근 방식은 비트 정확도를 낮추는 것입니다.

 빈 제목

표 1: ImageNet 레이어 계산 요구 사항

비트 정확도

대부분의 CNN 구현은 다양한 레이어 계산에 부동소수점 정밀도를 사용합니다. CPU 또는 GPGPU 구현의 경우 부동 소수점 IP가 칩 아키텍처의 고정된 부분이기 때문에 문제가 되지 않습니다. FPGA의 경우 논리 요소가 고정되어 있지 않습니다. 인텔의 Arria 10 및 Stratix 10 디바이스에는 고정 소수점 곱셈으로도 사용할 수 있는 부동 소수점 DSP 블록이 내장되어 있습니다. 각 DSP 구성 요소는 실제로 두 개의 분리된 18×19비트 곱셈으로 사용할 수 있습니다. 18비트 고정 로직을 사용하여 컨볼루션을 수행하면 단정밀도 부동 소수점에 비해 사용 가능한 연산자 수가 두 배로 늘어납니다.

그림 3 : Arria 10 부동 소수점 DSP 구성

정밀도가 낮은 부동 소수점 처리가 필요한 경우 반정밀도를 사용할 수 있습니다. 이 경우 FPGA 패브릭의 추가 로직이 필요하지만, 낮은 비트 정밀도가 여전히 적절하다고 가정하면 가능한 부동 소수점 계산의 수가 두 배로 늘어납니다.

이 백서에서 설명하는 파이프라인 접근 방식의 주요 장점 중 하나는 파이프라인의 여러 단계에서 정확도를 변경할 수 있다는 점입니다. 따라서 리소스가 필요한 곳에만 사용되므로 설계의 효율성이 높아집니다.

CNN의 애플리케이션 허용 오차에 따라 비트 정밀도를 더 줄일 수 있습니다. 곱셈의 비트 폭을 10비트 이하로 줄일 수 있는 경우(20비트 출력) FPGA ALU 로직만 사용하여 곱셈을 효율적으로 수행할 수 있습니다. 이는 FPGA DSP 로직만 사용할 때보다 곱셈 가능 횟수가 두 배로 늘어납니다. 일부 네트워크는 더 낮은 비트 정밀도에도 내성이 있을 수 있습니다. FPGA는 필요한 경우 단일 비트까지 모든 정밀도를 처리할 수 있습니다.

AlexNet에서 사용하는 CNN 레이어의 경우, 10비트 계수 데이터는 단정밀도 부동 소수점 연산에 비해 1% 미만의 오류를 유지하면서 간단한 고정 소수점 구현을 위해 얻을 수 있는 최소한의 감소량인 것으로 확인되었습니다.

Arria 10 고정점 DSP 구성 블록 다이어그램

그림 4 : Arria 10 고정점 DSP 구성

CNN 컨볼루션 레이어

슬라이딩 윈도우 기법을 사용하면 메모리 대역폭을 매우 적게 사용하는 컨볼루션 커널을 생성할 수 있습니다.

그림 5는 각 픽셀을 여러 번 재사용할 수 있도록 FPGA 메모리에 데이터를 캐시하는 방법을 보여줍니다. 데이터 재사용량은 컨볼루션 커널의 크기에 비례합니다.

각 입력 레이어가 CNN 컨볼루션 레이어의 모든 출력 레이어에 영향을 미치기 때문에 여러 입력 레이어를 동시에 처리할 수 있습니다. 이렇게 하면 레이어를 로드하는 데 필요한 외부 메모리 대역폭이 증가합니다. 이러한 증가를 완화하기 위해 계수를 제외한 모든 데이터는 FPGA 디바이스의 로컬 M20K 메모리에 저장됩니다. 디바이스의 칩 메모리 용량에 따라 구현할 수 있는 CNN 레이어 수가 제한됩니다.

3×3 컨볼루션을 위한 슬라이딩 창 그림

그림 5 : 3×3 컨볼루션을 위한 슬라이딩 창

그림 6 : OpenCL 글로벌 메모리 대역폭(AlexNet)

사용 가능한 M20K 리소스의 양에 따라 단일 FPGA에 전체 네트워크를 장착하는 것이 항상 가능한 것은 아닙니다. 이 경우 고속 직렬 인터커넥트를 사용하여 여러 FPGA를 직렬로 연결할 수 있습니다. 이렇게 하면 충분한 리소스를 사용할 수 있을 때까지 네트워크 파이프라인을 확장할 수 있습니다. 이 접근 방식의 주요 장점은 성능을 극대화하기 위해 배치에 의존하지 않으므로 지연 시간이 매우 짧아 지연 시간이 중요한 애플리케이션에 중요하다는 것입니다.

레이어 간에 걸리는 시간을 동일하게 맞추려면 구현된 병렬 입력 레이어의 수와 병렬로 처리되는 픽셀 수를 조정해야 합니다.

그림 9: Alexnet의 5×5 컨볼루션 레이어에 대한 리소스

대부분의 CNN 기능은 단일 M20K 메모리에 적합하며, 수천 개의 M20K가 FPGA 패브릭에 내장되어 있으므로 병렬로 컨볼루션 기능을 사용할 수 있는 총 메모리 대역폭은 초당 10테라바이트 정도입니다.

그림 7 : Arria 10 GX1150 / Stratix 10 GX2800 리소스

그림 8: 여러 FPGA를 통한 CNN 네트워크 확장

그림 9는 48개의 병렬 커널이 있는 Alexnet의 5×5 컨볼루션 레이어에 필요한 리소스를 Intel Arria10 FPGA의 단정밀도 및 16비트 고정 소수점 버전 모두에 대해 나열한 것입니다. 이 수치에는 OpenCL 보드 로직이 포함되어 있지만, 낮은 정밀도가 리소스에 미치는 이점을 보여줍니다.

완전히 연결된 레이어

완전히 연결된 레이어를 처리하려면 각 요소에 고유한 계수가 필요하므로 병렬 처리가 증가함에 따라 빠르게 메모리에 구속됩니다. 컨볼루션 레이어와 보조를 맞추는 데 필요한 병렬 처리의 양은 FPGA의 오프칩 메모리를 빠르게 포화시킬 수 있으므로 입력 레이어의 단계를 일괄 처리하거나 정리할 것을 제안합니다.

내부 제품 레이어의 요소 수가 적기 때문에 일괄 처리에 필요한 스토리지 양이 컨볼루션 레이어에 필요한 스토리지 양에 비해 적습니다. 레이어를 일괄 처리하면 일괄 처리된 각 레이어에 동일한 계수를 사용할 수 있으므로 외부 메모리 대역폭이 줄어듭니다.

가지 치기는 입력 데이터를 학습하고 임계값 이하의 값을 무시하는 방식으로 작동합니다. 완전히 연결된 레이어는 CNN 네트워크의 후반 단계에 배치되므로 가능한 많은 기능이 이미 제거된 상태입니다. 따라서 가지치기를 사용하면 필요한 작업량을 크게 줄일 수 있습니다.

리소스

네트워크의 핵심 리소스 드라이버는 각 계층의 출력을 저장하는 데 사용할 수 있는 온칩 M20K 메모리의 양입니다. 이 양은 일정하며 달성한 병렬 처리의 양과 무관합니다. 여러 FPGA를 통해 네트워크를 확장하면 사용 가능한 총 M20K 메모리 양이 증가하므로 처리할 수 있는 CNN의 깊이도 증가합니다.

빈 제목

결론

FPGA 패브릭의 고유한 유연성 덕분에 특정 네트워크 설계에 필요한 최소값으로 로직 정밀도를 조정할 수 있습니다. CNN 계산의 비트 정밀도를 제한하면 초당 처리할 수 있는 이미지 수를 크게 늘려 성능을 개선하고 전력을 절감할 수 있습니다.

FPGA 구현의 비배칭 접근 방식은 물체 인식에 단일 프레임 지연 시간을 허용하므로 짧은 지연 시간이 중요한 상황에 이상적입니다. 예: 물체 회피.

이 접근 방식을 AlexNet에 사용하면(레이어 1에 단정밀도, 나머지 레이어에 16비트 고정 사용) 각 이미지를 단일 Arria 10 FPGA로 약 1.2밀리초, 두 개의 FPGA를 직렬로 연결하면 0.58밀리초 안에 처리할 수 있습니다.