백서

이진 가중 신경망 추론의 FPGA 가속화

교통 체증에 라벨이 부착된 차량의 BWNN 비디오 스크린샷

YOLOv3의 특징 중 하나는 단일 이미지에서 다중 객체를 인식하는 것입니다. 이 네트워크는 제한된 엣지 환경에 적응하는 데 어려움을 겪을 수 있는 더 복잡하고 정교한 접근 방식이었기 때문에 이 네트워크를 사용했습니다.

오늘날의 FPGA는 데이터센터와 엣지 환경 모두에서 수요가 빠르게 증가하고 있습니다. 이는 성능의 향상, 보다 간편한 FPGA 개발 툴의 사용, 특정 애플리케이션에 맞게 하드웨어 가속을 조정할 수 있는 유연성에 대한 필요성이 커지고 있기 때문입니다. 종종 CPU와 함께 작동하는 FPGA 가속기 솔루션은 최종 사용자의 요구 사항에 맞는 유연한 애플리케이션 성능에 중점을 둔 이기종 컴퓨팅 접근 방식의 일부입니다.

이 백서에서는 이러한 애플리케이션인 최신 머신 러닝 기반 이미지 인식 시스템(YOLOv3)을 이용한 교통 모니터링에 대해 설명합니다. 이 애플리케이션은 인텔 스트라틱스 10 FPGA가 장착된 비트웨어 520N 가속기 보드에 OpenCL을 사용하여 적용되었습니다. 주요 FPGA 드라이버로 언급된 세 가지 측면, 즉 CPU 대비 성능, HDL 대신 OpenCL을 사용한 개발 용이성, 최소 전력/리소스를 사용하도록 애플리케이션을 조정할 수 있는 유연성(단일 비트 이진 가중치를 포함한 가변 계산 정밀도)을 검토합니다.

머신 러닝에 대한 수요 증가

불과 10년 전까지만 해도 인공 지능은 학계, 연구 기관, 공상 과학의 영역에 머물러 있었습니다. 비교적 최근에 머신 러닝(ML) 기술이 실제 애플리케이션 문제를 해결하기 위해 실용적이고 경제적으로 대규모로 적용될 수 있다는 사실을 깨닫게 되면서 시장 참여자들의 생태계가 활기를 띠게 되었습니다.

그러나 머신 러닝의 획기적인 발전 소식은 데이터 세트의 학습 단계와 추론 단계, 즉 알 수 없는 입력이 추론된 출력으로 변환되는 '런타임' 모두에서 문제 해결을 위해 매우 계산량이 많은 접근 방식이라는 현실과 비교하여 신중하게 검토해야 합니다. 머신 러닝 애플리케이션의 학습 단계는 데이터센터에서 몇 시간 또는 며칠에 걸쳐 제약 없이 한 번만 수행하면 되지만, 실시간 추론은 시스템 에지에 있는 제약된 하드웨어 플랫폼을 사용하여 몇 분의 1초 안에 수행해야 하는 경우가 많습니다.

이 백서의 PDF 버전

머신 러닝의 도입이 확대되려면 최신 머신 러닝 라이브러리를 애플리케이션 요구사항에 맞게 하드웨어에 빠르게 구현할 수 있는 추론 솔루션이 개발되어야 합니다.

유연한 FPGA

머신 러닝 추론에 필요한 실리콘 개수(따라서 전력)를 줄이는 한 가지 접근 방식은 계산의 동적 범위를 줄이는 것입니다. 예를 들어 32비트에서 16비트로 부동 소수점 연산을 줄이면 인식 정확도에서 애플리케이션 성능이 약간만 저하되지만 하드웨어 요구 사항을 크게 줄일 수 있습니다.

더 나아가면 어떨까요? 필요한 비트 수가 단일 바이너리 비트까지 줄어들면 하드웨어 패브릭이 필요한 것만 사용하도록 조정되기 때문에 FPGA가 뛰어난 성능을 발휘할 수 있습니다. 또한 프로젝트 내에서 가변 정밀도를 사용할 수 있으며, 필요한 경우 Stratix 10 FPGA의 강화된 부동 소수점 DSP 로직 블록을 사용할 수도 있습니다. FPGA를 사용하면 설계자가 다양한 툴을 사용하여 하드웨어를 애플리케이션 요구 사항에 가장 적합하게 조정할 수 있습니다.

실제로 저희 연구는 가중치를 두 개의 값으로만 이진화하여 이진 가중치만을 사용하여 머신러닝을 수행하는 데 중점을 두고 있습니다: +1과 -1의 두 가지 값으로만 이원화됩니다. 많은 이미지 기반 머신 러닝 애플리케이션이 컨볼루션 신경망(CNN)이라고 통칭하는 일련의 컨볼루션 연산을 사용하지만, 이 새로운 CNN 변형은 보다 구체적으로 이진 가중 신경망(BWNN)으로 알려져 있습니다. 컨볼루션 레이어와 완전히 연결된 레이어의 모든 고정 소수점 곱셈 연산을 정수 덧셈으로 축소합니다.

저자 정보

리처드 챔벌레인은 비트웨어의 시스템 아키텍트입니다. Richard는 FPGA의 고급 프로그래밍에 대한 폭넓은 경험을 바탕으로 OpenCL 개발 프로젝트를 담당하고 있습니다. 그는 고객에게 새로운 설계를 위한 최적의 하드웨어 및 개발 접근 방식에 대해 정기적으로 조언하거나 CPU 또는 GPU와 같은 다른 시스템 유형에 기반한 설계를 조정합니다.

빈 제목

이 연구의 또 다른 핵심 요소는 520N의 OpenCL 지원을 사용하여 하드웨어 개발 프로세스를 소프트웨어와 유사한 툴 흐름으로 추상화했다는 점입니다. 이를 통해 최신 애플리케이션 라이브러리를 하드웨어 가속화의 기반으로 사용할 수 있으므로 기존 HDL 방식을 사용하여 특정 디바이스와 ML 라이브러리를 타겟팅하는 데 걸리는 수개월 또는 그 이상의 시간을 단축할 수 있습니다(이 기간 동안 더 나은 성능의 최신 ML 라이브러리가 출시될 수 있음). 예를 들어, 이 백서는 유니티가 BittWare Arria 10 기반 보드인 385A-SoC에서 OPERA 프로젝트를 위해 수행한 작업에서 비롯되었습니다. 유니티 개발팀은 해당 디바이스에서 훨씬 더 크고 빠른 스트라틱스 10의 패브릭으로 OpenCL 코드를 빠르게 옮겼습니다.

가변 정밀도, 부동 소수점용 DSP 사용, OpenCL을 사용한 개발이 결합되어 애플리케이션 맞춤형 하드웨어 솔루션이면서도 소프트웨어와 같은 개발 속도를 제공합니다.

바이너리 신경망

CNN 네트워크 내에서 컨볼루션을 처리하려면 수백만 개의 계수를 저장하고 처리해야 합니다. 전통적으로 이러한 각 계수는 완전한 단정밀도 표현으로 저장됩니다. 연구원들은 필요한 저장 공간과 메모리 대역폭 요구량을 줄이면서 전체 정확도를 크게 변경하지 않고도 계수를 반정밀로 줄일 수 있음을 입증했습니다. 현재 사용 가능한 대부분의 사전 학습된 CNN 모델은 부분적으로 감소된 정밀도를 사용합니다.

그러나 이러한 계수의 훈련에 다른 접근 방식을 사용하면 비트 정확도를 단일 비트에 스케일링 계수를 더한 값으로 줄일 수 있습니다(참조). 훈련 중에 부동 소수점 계수는 값이 모든 입력 계수의 평균보다 크거나 작은지를 나타내는 이진 값으로 변환됩니다. 이는 이진 표기법에서 1,0으로 표현할 수 있습니다(그림 1). 그런 다음 컨볼루션의 출력에 평균을 곱합니다.

BWNN 변환 가중치 그림

그림 1: 가중치를 바이너리로 변환(평균 = 0.12)

FPGA 최적화

첫째, 가중치를 이진화하면 외부 메모리 대역폭과 스토리지 요구 사항이 32배 감소합니다. 각 내부 메모리 블록은 1비트에서 32비트 범위의 포트 폭을 갖도록 구성할 수 있으므로 FPGA 패브릭은 이러한 이진화의 이점을 활용할 수 있습니다. 따라서 가중치 저장을 위한 내부 FPGA 리소스가 크게 줄어들어 작업 병렬화를 위한 더 많은 공간을 확보할 수 있습니다.

또한 네트워크의 이진화를 통해 CNN 컨볼루션을 입력 활성화의 일련의 더하기 또는 빼기로 나타낼 수 있습니다. 가중치가 2진수 0이면 입력이 결과에서 차감되고, 가중치가 2진수 1이면 입력이 결과에 더해집니다. FPGA의 각 논리 소자에는 거의 모든 비트 길이의 정수 덧셈을 효율적으로 수행할 수 있는 추가 캐리 체인 로직이 있습니다. 이러한 구성 요소를 효율적으로 활용하면 단일 FPGA에서 수만 개의 병렬 덧셈을 수행할 수 있습니다. 이를 위해서는 부동 소수점 입력 활성화를 고정 정밀도로 변환해야 합니다. FPGA 패브릭의 유연성을 통해 고정 덧셈에 사용되는 비트 수를 조정하여 CNN의 요구 사항을 충족할 수 있습니다. 다양한 CNN의 동적 활성화 범위를 분석한 결과, 부동 소수점 등가 설계의 1% 이내로 정확도를 유지하는 데 일반적으로 8비트 정도의 비트만 필요한 것으로 나타났습니다. 정확도를 높이려면 비트 수를 늘릴 수 있습니다.

BNN 애플리케이션을 위해 조사할 수 있는 다양한 네트워크가 있으며, AlexNet과 같은 간단한 네트워크 중 하나를 선택하고 싶은 유혹을 느낄 수 있습니다. 그러나 BWNN 처리를 위한 FPGA의 효과를 실제로 이해하려면 YOLOv3와 같은 최신 네트워크를 사용하는 것이 좋습니다. 이 네트워크는 컨볼루션 레이어가 많은 대규모 컨볼루션 네트워크입니다.

YOLOv3는 딥 네트워크이며, 고정 소수점 반올림으로 인해 발생하는 오류는 AlexNet과 같은 소규모 네트워크보다 더 많은 비트가 추가되어야 합니다. FPGA 기술의 장점은 필요한 비트 수를 정확하게 수정할 수 있다는 것입니다. 저희 설계에서는 레이어 간에 전송되는 데이터를 표현하기 위해 16비트를 사용했습니다.

컨볼루션을 고정점으로 변환하고 이진화를 통해 곱셈의 필요성을 제거하면 FPGA 내에서 필요한 로직 리소스가 크게 줄어듭니다. 그러면 단일 정밀도 또는 반정밀도 구현에 비해 동일한 FPGA에서 훨씬 더 많은 처리를 수행하거나 다른 처리를 위해 FPGA 로직을 확보할 수 있습니다.

타겟 네트워크 교육

YOLOv3 네트워크는 106개의 레이어로 구성된 대규모 컨볼루션 네트워크로, 물체를 식별할 뿐만 아니라 이러한 물체 주위에 경계 상자를 배치합니다. 물체를 추적해야 하는 애플리케이션에 특히 유용합니다.

이진 가중치 네트워크는 적절하게 훈련된 경우 YOLOv3 네트워크의 정확도를 약간만 감소시킵니다. 다음 표는 재트레이닝된 YOLOv3 네트워크에 대해 얻은 결과를 보여줍니다.

이 이미지의 자전거에 대한 평균 신뢰도는 76%, 사람에 대한 신뢰도는 82%였습니다. 이를 같은 이미지의 부동 소수점과 비교하면 자전거에 대한 평균 정확도는 92%(16% 향상), 사람에 대한 평균 정확도는 88%(6% 향상)에 달합니다.

 

FPGA에서 최상의 성능을 얻으려면 FPGA에 가장 잘 매핑되는 네트워크 기능을 타겟팅하는 것이 도움이 됩니다. 이 사례에서는 네트워크가 바이너리 가중치에 대해 학습되었을 뿐만 아니라 FPGA 로직에 효율적으로 매핑되는 적절한 활성화 유형이 선택되었습니다.

 

빈 제목

Stratix 10용 설계

OpenCL은 CPU, GPGPU 및 FPGA에서 병렬 처리를 표현하는 데 널리 사용되는 언어입니다. 여기서는 인텔 FPGA OpenCL 컴파일러를 사용하여 인텔 스트라틱스 10 디바이스를 대상으로 하는 가속기를 프로그래밍했습니다. 이 백서의 대상 FPGA 가속기는 BittWare 520N 보드였습니다.

FPGA 설계의 성능은 다음을 포함하되 이에 국한되지 않는 여러 요인에 따라 달라집니다:

  • 장치 속도 등급
  • 디자인에서 조합 로직의 깊이
  • 디자인에서 팬아웃(여러 지점 간에 공유되는 신호의 수)
  • 디바이스 과부하로 인한 라우팅 혼잡 문제
  • 글로벌 메모리 대역폭

Stratix 10 디바이스는 매우 크고 이전 디바이스보다 이러한 문제에 더 취약합니다. 다음 단락에서는 이러한 문제 중 일부에 대해 자세히 설명합니다.

커버가 없는 520N PCIe 카드

그림 2 : BittWare 520N FPGA 가속기 보드

조합 논리 깊이: 인텔 OpenCL 툴은 가능한 경우 자동으로 설계를 파이프라인화하여 Stratix 10에서 가능한 최상의 성능을 달성하기 위해 필요한 등록을 삽입합니다. 그러나 설계에 피드백이 있는 경우 등록이 항상 가능한 것은 아닙니다. 이는 일반적으로 자체 종속성이 있는 복잡한 인덱싱 요구 사항을 생성할 때 발생합니다. 따라서 가능한 경우 이러한 파이프라인 종속성을 피하기 위해 코드를 구조화해야 하며, 그렇지 않으면 설계의 클록 주파수가 이러한 경로에 의해 지배됩니다.

팬아웃: 팬아웃: 팬아웃은 소스는 하나이지만 엔드포인트가 여러 개 있는 신호를 말합니다. 이는 디바이스에서 사용할 수 있는 네트워크의 수가 한정되어 있기 때문에 라우팅 도구에 문제를 일으킬 수 있습니다. 이러한 경로가 혼잡하면 일부 신호가 혼잡 지점을 통과해야 하므로 경로가 길어지고 궁극적으로 클럭 주파수가 느려집니다. 코딩 시 설계의 여러 부분 간에 변수를 공유할 때 발생하는 영향을 인지하면 팬아웃을 줄일 수 있습니다.

인구 과잉: 가능한 한 많은 로직을 설계에 집어넣고 싶은 유혹이 있지만, 디바이스가 과밀화되면 설계 클록 주파수가 감소하기 시작하는 시점이 있습니다. 이는 FPGA 주변에서 경로를 찾으려는 많은 수의 신호로 인한 라우팅 혼잡으로 인해 발생합니다. 대형 설계가 높은 클럭 주파수에 도달하려면 파이프라인을 많이 사용하고 높은 팬아웃을 피해야 합니다.

메모리 대역폭: 로컬 FPGA 메모리에 항상 충분한 데이터를 저장할 수 있는 것은 아니며, 데이터를 딥 외부 메모리에서 쓰거나 읽어야 합니다. 520N에는 4개의 DDR4 메모리 뱅크가 있어 총 메모리 대역폭은 초당 약 98GB입니다. S10 장치의 크기를 고려할 때 이 대역폭은 모든 신경망 레이어에 데이터를 공급하기에 충분하지 않으므로 가능한 경우 입력 데이터를 재사용해야 합니다. 다행히 CNN 코드는 많은 데이터 재사용을 허용합니다. 이 문제는 비트웨어의 520N-MX 보드에 사용되는 것과 같은 Stratix 10의 HBM2 버전을 사용하면 어느 정도 완화할 수 있습니다.

궁극적으로 대부분의 디자인은 위의 두 가지를 절충한 것으로, 여기에 설명된 BNN 디자인도 예외는 아닙니다.

그림 3은 설계의 주요 처리 요소인 컨볼루션 경로를 보여줍니다. 데이터는 가능한 경우 3개의 누적 경로로 파이프라인화되었습니다. 각 컨볼루션 블록은 32×32 이진 가중치 컨볼루션 블록을 수행하며, 각 32개의 입력은 32개의 출력에서 모두 공유됩니다. 물론 이로 인해 팬아웃이 높아지지만 외부 메모리 대역폭에 대한 부담은 줄어듭니다. 96×96 컨볼루션을 32×32의 여러 블록으로 세분화하면 팬아웃 라우팅이 각 블록 내로 제한되어 설계의 전체 팬아웃을 줄일 수 있습니다. 입력 데이터는 OpenCL 파이프를 통해 각 컨볼루션 블록으로 전달되므로 컴파일러가 필요한 경우 추가 등록을 삽입할 수 있습니다.

그림 3에 표시된 "생산자", "소비", "계수" 커널은 글로벌 메모리에서 다른 컨볼루션 블록으로 데이터를 전달합니다. 소비자 블록은 출력에서 부동소수점 활성화 함수도 수행합니다.

표 1에는 각 32×32 컨볼루션을 나타내는 1024개의 16비트 누적을 수행하는 데 필요한 리소스가 나열되어 있습니다.

BWNN 컨볼루션 예시
그림 3: 컨볼루션 파이프라인 예시

모든 입력 및 출력 기능 데이터를 저장하는 데 필요한 스토리지는 16비트 데이터를 사용하는 경우에도 FPGA 장치에서 사용할 수 있는 용량을 초과합니다. 따라서 연결된 글로벌 메모리에서 로컬 FPGA 메모리로 데이터를 일괄적으로 복사해야 하므로 병렬 컨볼루션 수가 글로벌 메모리가 지원할 수 있는 수준 이상으로 증가하면 결국 성능이 저하됩니다.

 
ALM레지스터Ops
35305 (2%)41601 (2%)2048

 

표 1 : 32×32 컨볼루션 행렬을 위한 스트라틱스 10 리소스

ogic(ALM)MHz피크 탑
OpenMP 32 스레드
(제온 CPU D-1587 1.7 GHz) 대비 속도 향상
536,122 (57%)3005.550x
표 2 : Stratix 10 G280 3×3 설계 성능

모든 입력 및 출력 기능 데이터를 저장하는 데 필요한 스토리지는 16비트 데이터를 사용하는 경우에도 FPGA 장치에서 사용할 수 있는 용량을 초과합니다. 따라서 연결된 글로벌 메모리에서 로컬 FPGA 메모리로 데이터를 일괄적으로 복사해야 하므로 병렬 컨볼루션 수가 글로벌 메모리가 지원할 수 있는 수준 이상으로 증가하면 결국 성능이 저하됩니다.

표 2는 최종 컴파일된 설계에 대한 몇 가지 통계를 제공합니다. 로직에는 PCIe 및 글로벌 메모리 인터페이스를 통한 호스트 통신에 필요한 보드 지원 패키지 리소스도 포함되어 있습니다.

다음 그림은 Arria 10과 제온 CPU를 비교했을 때 속도와 사용된 에너지당 성능을 비교한 것입니다. Stratix 10의 경우 더 많은 코어를 활용하여 속도를 더욱 향상시킬 수 있습니다.

BWNN 속도 대 CPU 차트
그림 4: CPU 대비 속도 향상
줄당 BWNN 이미지 차트
그림 5: 에너지 1줄당 이미지 수

스트라틱스 10 MX의 HBM2

새로운 BittWare 520N-MX 보드에는 인텔 Stratix 10 MX 디바이스가 탑재되어 있습니다. 이 FPGA에는 최대 512GB/s의 메모리 대역폭을 제공하는 32개의 사용자 포트가 있는 3D 적층형 고대역폭 메모리 2(HBM2)가 있습니다. 이 추가 대역폭은 설계에서 높은 팬아웃을 줄이고 외부 메모리를 위한 내부 버퍼링의 필요성을 줄이는 데 도움이 되는 다양한 아키텍처를 가능하게 합니다. MX 디바이스는 메모리 집약적 알고리즘으로 인해 복잡해질 수 있는 메모리 중재 네트워크를 간소화하여 처리를 위한 더 많은 사용자 로직을 확보하고 이전에는 불가능했던 새로운 대역폭 제한 CNN 솔루션을 가능하게 합니다.

결론

FPGA의 유연성은 다른 기술에서는 불가능하지는 않더라도 달성하기 어려운 개별 네트워크별 CNN 최적화를 위한 기회를 제공합니다. 업계에서 신경망의 이점을 깨닫기 시작하고 추론 애플리케이션의 수가 증가함에 따라 다양한 데이터 세트, 정확도 및 성능에 맞게 맞춤화된 네트워크에 대한 요구 사항도 증가할 것입니다.

미래의 광범위한 애플리케이션을 완벽하게 실현하려면 일반 API로는 충족할 수 없는 토폴로지, 특히 에지 컴퓨팅이 필요합니다. 비트웨어의 다양한 FPGA 솔루션과 CNN FPGA 최적화 전문 지식이 결합된 비트웨어는 업계가 CNN용 FPGA의 잠재력을 실현할 수 있도록 지원하는 독보적인 위치에 있습니다.