Distiller
Distiller는 Intel에서 만든 딥러닝 모델 압축 Python 패키지 입니다.
딥러닝 모델을 잘 만드는 것도 중요하지만, 그것을 어떻게 잘 배포하는지도 중요합니다. 모델을 빠르게 실행하기 위해서 모델을 최적화가 필요합니다. FP32로 만들어진 모델을 FP16으로 압축하거나 레이어를 분석해서 불필요한 연산을 없애기도 합니다.
Distiller는 잘 알려진 모델 최적화(압축) 오픈소스입니다.
아래는 Distiller GitHub Page(https://intellabs.github.io/distiller)를 번역한 것입니다. 구글 번역기가 대부분의 번역을 했고 일부 부자연스러운 부분만 수정했지만 여전히 읽기에 부자연스러울 수 있습니다.
What is Distiller
Distiller는 신경망 압축 연구를위한 오픈 소스 Python 패키지입니다.
네트워크 압축은 신경망의 설치 공간을 줄이고 추론 속도를 높이며 에너지를 절약 할 수 있습니다. Distiller는 희소성 유도 방법 및 낮은 정밀도 산술과 같은 압축 알고리즘의 프로토타이핑 및 분석을 위한 PyTorch 환경을 제공합니다.
Distiller에는 다음이 포함됩니다.
- 가지치기(pruning), 정규화 및 양자화 알고리즘을 통합하기 위한 프레임워크 입니다.
- 압축 성능을 분석하고 평가하기 위한 도구 세트입니다.
- 최첨단 압축 알고리즘 구현의 예.
Motivation
희소 텐서는 일부 0을 포함하는 텐서이지만, 희소 텐서는 일반적으로 상당한 수의 0을 포함하는 경우에만 흥미롭습니다. 희소 신경망은 일부 희소 텐서를 사용하여 계산을 수행합니다. 이러한 텐서는 매개 변수 (가중치 및 편향) 또는 활성화 (특성 맵) 일 수 있습니다.
역) 희소텐서(sparse tenso)는 아래처럼 대부분이 0으로 채워진 Tensor
희소성에 관심있는 이유는 무엇인가?
오늘날의 신경망은 수백만 개의 가중치와 활성화로 인해 깊어지는 경향이 있습니다. 몇 가지 예는 GoogLeNet 또는 ResNet50을 참조하세요. 이러한 대규모 모델은 컴퓨팅 집약적이므로 전용 가속 하드웨어를 사용하더라도 추론 통과 (네트워크 평가)에 시간이 걸립니다. 대기 시간은 자율 주행 시스템과 같은 특정 경우에만 문제가 된다고 생각할 수 있지만 실제로 인간이 전화 및 컴퓨터와 상호 작용할 때마다 상호 작용의 대기 시간에 민감합니다. 검색 결과 나 애플리케이션 또는 웹 페이지가 로드 될 때까지 기다리는 것을 좋아하지 않으며 특히 음성 인식과 같은 실시간 상호 작용에 민감합니다. 따라서 추론 대기 시간은 종종 최소화하고 싶은 것입니다.
대형 모델은 또한 수백만 개의 매개 변수로 인해 메모리를 많이 사용합니다. 추론 결과를 계산하는 데 필요한 모든 데이터를 이동하면 에너지가 소비되며 이는 모바일 장치와 서버 환경에서 문제가 됩니다. 데이터 센터 서버 랙은 power-envelope에 의해 제한되며 ToC (총 소유 비용)는 전력 소비 및 열 특성과 관련이 있습니다. 모바일 장치 환경에서 우리는 항상 장치 배터리에 대한 전력 소비의 의미를 알고 있습니다. 데이터 센터의 추론 성능은 종종 대기 시간 및 전력 고려 사항을 접은 KPI (핵심 성과 지표)를 사용하여 측정됩니다. 초당 추론, 와트 당 추론 (추론 / 초 / 와트).
대규모 신경망의 저장 및 전송은 애플리케이션 크기에 대한 제한과 긴 애플리케이션 다운로드 시간으로 인해 모바일 장치 환경에서도 문제가됩니다.
이러한 이유로 우리는 필요한 대역폭과 계산량을 줄이기 위해 가능한 한 네트워크를 압축하고자합니다. 신경망 모델에서 정규화 또는 가지 치기를 통해 희소성을 유도하는 것은 네트워크를 압축하는 한 가지 방법입니다 (양자화는 또 다른 방법). 희소 신경망은 속도, 작은 크기 및 에너지 효율성을 약속합니다.
Smaller
희소 NN 모델 표현은 텐서 요소가 0에 의해 지배된다는 사실을 이용하여 압축 할 수 있습니다. 압축 형식 (있는 경우)은 매우 HW 및 SW에 따라 다르며 최적 형식은 텐서마다 다를 수 있습니다 (명백한 예 : 고밀도 텐서는 압축해서는 안 됨). 표현 압축이 의미를 가지려면 컴퓨팅 하드웨어가 압축 형식을 지원 해야 합니다. 압축 표현 결정은 메모리 액세스를 위한 타일 사용과 같은 알고리즘과 상호 작용할 수 있습니다. 매개 변수 텐서와 같은 데이터는 압축 된 메인 시스템 메모리에서 읽거나 쓰지만 계산이 조밀하거나 희소 할 수 있습니다. 고밀도 컴퓨팅에서는 고밀도 연산자를 사용하므로 압축 된 데이터는 결국 전체 고밀도 크기로 압축 해제 되어야 합니다. 우리가 할 수 있는 최선은 압축 된 표현을 컴퓨팅 엔진에 최대한 가깝게 가져 오는 것입니다.
반면, 희소 계산은 압축 해제가 필요하지 않은 희소 표현에서 작동합니다 (따라서 희소 표현과 압축 표현을 구분합니다). 이것은 HW에서 구현하는 간단한 문제가 아니며 종종 벡터화 된 컴퓨팅 엔진의 활용도가 낮음을 의미합니다. 따라서 특정 하드웨어 특성을 활용하는 세 번째 클래스 표현이 있습니다. 예를 들어 벡터화 된 컴퓨팅 엔진의 경우 가중치가 0 인 벡터 전체를 제거하고 계산을 건너 뛸 수 있습니다 (구조화 된 가지 치기 또는 정규화 사용).
Faster
현대 신경망의 많은 계층은 대역폭에 제한이 있습니다. 즉, 실행 대기 시간이 사용 가능한 대역폭에 의해 좌우됩니다. 본질적으로 하드웨어는 실제로 계산을 수행하는 것보다 데이터를 컴퓨팅 엔진에 가깝게 가져 오는 데 더 많은 시간을 소비합니다. 완전히 연결된 레이어, RNN 및 LSTM은 대역폭이 지배적 인 작업의 몇 가지 예입니다.
이러한 계층에 필요한 대역폭을 줄이면 즉시 속도가 빨라집니다.
일부 정리 알고리즘은 최종 정확도에 부정적인 영향을 주지 않고 네트워크에서 전체 커널, 필터 및 계층까지 정리합니다. 하드웨어 구현에 따라 이러한 방법을 활용하여 계산을 건너 뛰고 대기 시간과 전력을 줄일 수 있습니다.
More energy efficient
온칩 메모리 (예 : SRAM 또는 캐시)에 비해 오프 칩 메모리 (예 : DDR)에 액세스하는 데 2 배 더 많은 에너지를 지불하기 때문에 많은 하드웨어 설계는 다중 계층 캐시 계층 구조를 사용합니다. 이러한 온칩 캐시에 네트워크의 매개 변수와 활성화를 맞추면 필요한 대역폭, 총 추론 지연 시간에 큰 차이를 만들 수 있으며, 오프 코스에서 전력 소비를 줄일 수 있습니다.
물론 희소 또는 압축 표현을 사용하는 경우 데이터 처리량을 줄여 에너지 소비를 줄입니다.