DeepFreeze 는 PPA를 모델링하고 Fixynn 프로젝트를 위해 RTL을 생성하는 데 사용되는 도구입니다. 스크립트는 텐서 플로 그래프에서 RTL을 생성하고 해당 디자인을 합성/시뮬레이션하기 위해 포함됩니다. 비 텐서 플로 그래프로 작업하려면 VerilogGenerator 객체에 공급하기 위해 고유 한 계층 데이터 구조를 작성해야합니다 (예를 들어 gen_verliog.py
의 끝 참조).
맥락에서 심해에 대한 설명을 포함하여 Fixynn 에 대한 자세한 내용은 다음 논문을 참조하십시오. Fixynn : 전송 학습을 통한 모바일 컴퓨터 비전을위한 효율적인 하드웨어.
이 도구는 Python 2.7.15 및 Tensorflow 1.10.1을 사용하여 구축 및 테스트되었습니다.
필요한 파이썬 패키지는 멍청하고 텐서 플로입니다. 설치하려면 :
pip install numpy tensorflow
cd deep_freeze/
bash run.sh
RTL 생성 또는 모델링을위한 모델을 추가하려면 다음을 제공해야합니다.
mobilenet_base
가 https://github.com/tensorflow/models/blob/mas고정 네트워크의 각 계층은 생성 된 Verilog 모듈 또는 필기 모듈의 매개 변수화 된 인스턴스화로 정의됩니다. 훈련 가능한 변수가있는 모든 레이어가 생성되고 다른 모든 레이어는 인스턴스화됩니다. 훈련 가능한 변수는 가변적 인 정밀도로 RTL에 하드 코딩되며 고정 된 스칼라로 합성 설계로 구현됩니다. 프로그래밍 가능한 가속기의 MAC 장치에서 전통적으로 구현되는 것은 고정식 스칼라로 구성된 다음 고정 가중 디자인의 캐리 스브이브 가산기 트리로 구성됩니다. 이것은 에너지가 매우 효율적이지만 넓은 실리콘 영역이 필요합니다. 실리콘 영역은 고정 변수의 누버와 대략 선형으로 자랍니다.
고정 데이터 패스의 높은 활용을 달성하기 위해 우리는 파이프 라인 층을 완전히 함께합니다. 이를 위해서는 층 간의 버퍼링 활성화가 필요합니다. 라인 버퍼를 사용하여 층의 전체 활성화를 버퍼링하지 않을 수 있습니다. 이 기사는 어떤 라인 버퍼 및 사용 방법에 대한 기본 설명을 제공합니다.
라인 버퍼의 구현은 SRAM 버퍼와 레지스터 버퍼의 두 부분으로 구성됩니다. SRAM은 한 번에 소비해야 할만큼 많은 행에 활성화를 저장합니다 (다음 커널의 높이와 같습니다). 레지스터 버퍼는 SRAM 버퍼를 따라 다음 MXN 커널에 대한 MXN 활성화를 저장합니다. 이것은 SRAM 버퍼에서 불필요한 판독 값을 제거합니다.
레이어에 필요한 SRAM 크기는 IM_HEIGHT * IM_WIDTH * NCHANNELS * NBITS
입니다. 이것은 크기 NCHANNELS * NBITS
의 IM_HEIGHT * IM_WIDTH
단어로 나뉩니다. 레지스터 버퍼 크기는 K_HEIGHT * K_WIDTH * NCHANNELS * NBITS
입니다.
하드웨어에서 레이어를 고정하면 다양한 공격적인 최적화 (모델 설계에서 하드웨어 최적화 및 최적화 모두)를위한 기회가 제공됩니다.
네트워크 아키텍처의 개선으로 인해 하드웨어 PPA가 개선 될 수 있습니다. 예를 들어, 깊이 분리 가능한 층은 무게가 8-9x 적은 전통적인 컨볼 루션 층과 유사한 정확도를 달성 할 수 있습니다. 이 레이어는 면적 비용 감소로 인해 Fixynn에서 매우 잘 작동합니다. 모델 크기를 줄이거 나 정확도를 향상시키는 다른 기술은 Fixynn에 도움이 될 수 있습니다.
실리콘으로 가중치를 고정하면 특정 값의 복잡성 감소로부터 이익을 얻을 수 있습니다. 제로 값 가중치는 한 가지 예입니다. 오버 헤드없이 하드웨어에서 명시 적으로 제거 할 수 있습니다. 이것은 가지 치기를 특히 강력하고 매력적으로 만듭니다.
또한, 해밍 중량이 낮은 값, 즉 이진 표현의 0이 아닌 비트 수는 고정 하드웨어로 구현하기에 저렴합니다. 고정 스칼라는 일련의 교대와 추가로 구현되기 때문입니다. 고정 된 멀티 플리 랜드의 0 비트 비트가 적 으면 교대가 적고 추가됩니다. 합성 도구는 또한 수를 나타내는 데 필요한 총 비트 수에 비해 높은 해밍 중량의 값을 활용할 수 있습니다. 예를 들어, 스칼라 x * 239
(해밍 중량 = 7, nbits = 8)는 하드웨어에서 x << 8 - x << 5
로 구현 될 수 있습니다.
고해상도 이미지의 경우 라인 버퍼의 각 행에는 상당한 SRAM이 필요합니다. 한 번에 한 줄의 일부만 버퍼링하고 이미지를 여러 번 통과 시켜이 SRAM의 일부를 제거 할 수 있습니다. 이는 제어 하드웨어 증가 비용과 라인 버퍼 범위의 경계에서 활성화의 중복 계산 비용이 발생합니다. 이 중복 계산은 고정 가중 하드웨어가 매우 효율적이기 때문에 최소한의 에너지 및 대기 시간이 발생합니다.
모든 1x1 커널은 이전 레이어에 의해 생성 된 활성화를 직접 소비 할 수 있기 때문에 프리 값으로 버퍼가 필요하지 않습니다. 이로 인해 깊이와 점별 컨벤션 사이의 버퍼링이 필요하지 않은 깊이별 분리 가능한 층을 초래합니다. 따라서 우리는이 두 작업을 하나의 캄빈 블록에 융합시킬 수 있습니다.
Conv2D 층은이 설계에 효과적이며, 무게 재사용이 높기 때문에 비교적 낮은 면적 비용이 발생합니다. 밀도가 높은 층은 무게 재사용을 나타내지 않습니다. 따라서 조밀 한 층은 매우 비효율적 인 영역을 사용합니다. 또한 밀도가 높은 층은 라인 버퍼링을 허용하지 않으므로 레지스터 영역이 상당히 넓습니다.
SYSML 2019 ( sysml_2019/
참조)에 대한 우리의 작업은 완전히 고정 된 CNN 기능 추출기를 탐색합니다. 이 기능 추출기의 PPA는 CONV2D 층 만 포함하기 때문에 훌륭합니다. 고정 하드웨어로 구현 된 전체 네트워크는 밀도가 높은 레이어가 요구하는 영역 비용을 지불해야합니다. 이것은 작은 IoT 모델에 허용 될 수 있습니다.
CNN은 일반적으로 프론트 엔드 레이어가 많은 입력 픽셀과 소수의 커널을 갖는 동작을 나타내는 반면, 백엔드 레이어는 입력 픽셀이 적고 많은 수의 커널이 있습니다. 이로 인해 SRAM 영역이 네트워크 파이프 라인의 전면으로 집중되어 있으며 조합 영역은 네트워크 파이프 라인의 뒷면에 집중됩니다.
1x1보다 큰 스트라이드를 갖는 모든 층은 이미지 당 소비하는 것보다 활성화 픽셀이 적습니다. 예를 들어, 100x100 이미지에서 2x2를 가로 지르는 풀 2D 층은 50x50 이미지를 생성하며, 이는 픽셀의 4 배 감소입니다. 이로 인해 활성 사이클 수의 1/4 배를 갖는 다음 층이 발생합니다 (층당 각 출력 픽셀은 1 사이클이 필요합니다). 이는 다운 샘플링이 많은 매우 깊은 네트워크 파이프 라인이 프론트 엔드 레이어에 의해 크게 병목 현상을 일으켜 백엔드 레이어의 활용도가 낮음을 의미합니다.
이 통찰력은 하드웨어로 잘 변환되는 모델을 선택하는 데 도움이됩니다. 특정 아키텍처는 활성화의 초기 다운 샘플링을 수행하여 총 MAC의 총 MAC 수 (모델 크기 비용)를 줄임으로써 CPU의 대기 시간을 줄입니다 (FD-Mobilenet 참조). Fixynn에서 구현 된 모델은 반대의 트레이드 오프를 만들고자합니다. 계산 비용으로 매개 변수 수를 줄이기 위해 (영역이 실제 시스템의 성능의 주요 제한이므로).
하드웨어에서 CNN의 일부를 고치면 다른 목적으로 해당 하드웨어를 재사용하기가 어렵습니다. SYSML 2019에 대한 우리의 작업은이 트레이드 오프를 탐구하고 어느 정도의 고정 하드웨어가 다양한 모델로 일반화 할 수 있음을 보여줍니다. 향후 작업은 약간의 프로그래밍 가능성을 추가하여 고정 하드웨어의 일반화를 더욱 향상시키는 데 중점을 둘 것입니다 (여전히 고정 중량 하드웨어의 효율성으로부터 이점이 있습니다).
sram_controller.sv
수정하여 SAME
패딩에 대한 지원을 추가하십시오flatten.sv
구현하십시오.ker_size
의 데이터가 SRAM에 기록되면 SRAM 논리를 개선하여 활성화를 소비하기 시작합니다.이 도구를 활용 한 출판 된 작품은 SYSML 2019 및 Neurips 2018 Op-Device ML 워크숍에서 발표되었습니다. 전체 논문은 Fixynn의 Arxiv에서 찾을 수 있습니다 : 전송 학습을 통한 모바일 컴퓨터 비전을위한 효율적인 하드웨어.
이 깊은 여파가 연구에 유용하다고 생각되면 다음 Bibtex를 사용하여 우리를 인용하십시오.
@article{fixynn,
title={FixyNN: Efficient Hardware for Mobile Computer Vision via Transfer Learning},
author={Whatmough, Paul and Zhou, Chuteng and Hansen, Patrick and Venkataramanaiah, Shreyas Kolala and Seo, Jae-Sun and Mattina, Matthew},
journal={SysML},
year={2019}
}
Patrick Hansen, ARM ML Research Lab, Boston, MA
Shreyas Kolala Venkataramanaiah, 애리조나 주립 대학
Paul Whatmough, Arm ML Research Lab, Boston, MA
이 프로젝트는 MIT 라이센스에 따라 라이센스가 부여됩니다. 자세한 내용은 라이센스 파일을 참조하십시오.