> For the complete documentation index, see [llms.txt](https://lswkim322.gitbook.io/til/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lswkim322.gitbook.io/til/til-ml/boostcamp/p-stage/1.md).

# (1강) 최적화 소개 및 강의 개요

## 1. Introduction(경량화)

### 1.1. 경량화의 목적

#### 1) On device AI

전자기기 등에 올라가서 사용되는 AI 기술

* 스마트폰, 애플워치, IoT 기기 등
* Power, RAM Memory, Storage, Computing power등의 제한이 있음

#### 2) AI on cloud (or Server)

* 한 요청의 소요시간, 단위 시간당 처리가능한 요청수가 제한된다.
* 같은 자원으로 더 적은 latency와 더 큰 throughput이 된다면 더 좋다!

#### 3) Computation as a key component of AI progress

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FWAVtkLkFdC2UPSkAixwW%2Fimage.png?alt=media\&token=ba96e3dc-83cf-4a04-8369-eedc5b8da091)

* 모델 학습에 들어가는 연산이 3, 4개월마다 두배로 증가해왔음.
* 2012 -> 2018 300,000배가 증가함

#### 경량화는?

* 모델의 연구와는 별개로, 산업에 적용되기 위해서 거쳐야하는 과정
* 요구조건(하드웨어종류, latency제한, 요구throughput, 성능)들간의 trade-off를 고려하여 모델경량화/최적화를 수행

### 1.2. 경량화 분야 소개

#### 경량화, 최적화의 대표적인 종류

* 네트워크 구조 관점
  1. Efficient Architecture Design(+AutoML; Neural Architecture Search(NAS))
  2. Network Pruning - 학습된 네트워크의 중요도가 낮은 파라미터를 제거해보자!
  3. Knowledge Distillation - 작은 규모로 전달해서 사용해보자
  4. Matrix/Tensor Decomposition - 작은 Mat, Tensor를 사용해보자
* Hardware 관점
  1. Network Quantization - float32 가 아닌 더 작은 타입으로 사용하기
  2. Network Compiling - 네트워크 자체를 컴파일하는 과정

#### Efficient Architecture Design

* 매년 쏟아져 나오는 블록 모듈들
* 각 모듈 블록마다 특성이 다름(성능, 파라미터수, 연산횟수, ...)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FivIKYna8o70ZEUh2At26%2Fimage.png?alt=media\&token=386a418b-bf62-460c-8713-0986a840a238)

* 원의 크기: 파라미터 갯수
* x: 연산횟수, y: accuracy
* x값이 작은 것이 경량화에 특화된 모듈들을 디자인 하는 것.

#### Efficient Architecture Design; AutoML, Neural Architecture Search

* software 1.0: 사람이 짜는 모듈

  사람이 명백한 과정을 주어주고 작성을 하는 것.
* software 2.0: 알고리즘이 찾는 모듈

  사람이 목적을 제시해주면 그걸 동작하게하는 모델을 찾고 네트워크를 학습하는 알고리즘

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FTSLey4sC01umlFTbEbMl%2Fimage.png?alt=media\&token=49370785-5373-42ee-941f-cfb8ef0042db)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FZDLef2ForE4qEpFeUbNI%2Fimage.png?alt=media\&token=c1c83f89-9875-4fc1-956a-802db90773b6)

* 사람의 직관보다 상회하는 성능의 모듈들을 찾아낼 수 있다!

#### Network Pruning (찾은 모델 줄이기)

* 중요도가 낮은 파라미터를 제거하는 것
* 좋은 중요도를 정의, 찾는 것이 주요 연구토픽 중 하나 (e.g.L2norm이 크면, loss gradient 크면 등등)
* 크게 structured/unstructured pruning으로 나뉘어짐

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FpAIpwbud3jt7IxgdOvl5%2Fimage.png?alt=media\&token=2a5891f5-940b-4668-aeab-527f7de1b6e4)

* **Structured pruning**
  * 파라미터를 그룹 단위로 pruning 하는 기법들을 총칭(그룹: channel / filter, layer 등)
  * Dense computation에 최적화된 소프트웨어 또는 하드웨어에 적합한 기법
  * 중요도(channel scaling factors)가 낮은 파라미터를 제거해주는 것!

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FdUeTv1qjkDSUW72nu7f3%2Fimage.png?alt=media\&token=87536373-7735-4070-901e-52f9e294ae10)

* **UnStructured pruning**

  * 파라미터 각각을 독립적으로 pruning하는 기법
  * Pruning을 수행할수록 네트워크 내부의 행렬이 점차 희소(sparse)됨
  * Structured Pruning과 달리 sparse computation에 최적화된 소프트웨어 또는 하드웨어에 적합한 기법

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FLr68D6SyYwTnlQDmrjPN%2Fimage.png?alt=media\&token=2a7fda1f-cc43-4540-9fef-9b8e2a18d357)

#### Knowledge distillation

* 학습된 큰 네트워크를 작은 네트워크의 학습 보조로 사용하는 방법
* soft targets(soft outputs)에는 ground truth보다 더 많은 정보를 담고 있음

  (e.g. 특정상황에서 레이블 간의 유사도 등등)

  자동차와 자전거가 있다. 앞에 있는 차가 자전거를 싣고 있다면 혼동이 생길 수 있다. 여기서 teacher 모델을 사용하게 되면 soft하게 label이 표현 가능하다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2Fa1oNPG6TjJskBUBRTvL1%2Fimage.png?alt=media\&token=cfdb4892-bc6f-4d1e-9639-0a792606aa20)

* **연산**
  * Student network와 ground truth label의 cross-entropy&#x20;
  * teacher network와 student network의 inference결과에 대한 KLDloss로 구성

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FVWckSLsjglPFmSUFRm8O%2Fimage.png?alt=media\&token=9b6c28bb-049e-49d4-a36e-e82c224039fc)

* $$T$$는 large teacher network의 출력을 smoothing(soften)하는 역할을 한다.
* $$\alpha$$는 두 loss의 균형을 조절하는 파라미터다.

#### Matrix / Tensor decomposion

* 하나의 Tensor를 작은 tensor들의  operation들의 조합(합, 곱)으로 표현하는 것
* Cp decomposition: rank 1 vector들의 outer product의 합으로 tensor를 approximation

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FhhhcWLBJPm3N2K3sN8kP%2Fimage.png?alt=media\&token=84431994-2f3e-4a30-bc42-fc4e51d16777)

#### Network Quantization

* 일반적인 float32 데이터타입의 Network의 연산과정을 그보다 작은 크기의 데이터타입  (e.g.float16,int8,…)으로 변환하여 연산을 수행

  ![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FDxig0xaxCrZZqAJDJRg8%2Fimage.png?alt=media\&token=e2abd6ed-ff95-45ee-91d6-dfd8f52ece9b)
* Quantization Error가 발생할 수 있다. (Dequantize시 정확히 일치한 값이 나오지 않음)
* 효과

  * 사이즈: 감소
  * 성능: 약간하락
  * 속도: Hardware 지원 여부 및 사용 라이브러리에 따라 다름(향상추세)
  * Int8 quantization 예시 (CPU inference, 속도는 pixel2 스마트폰에서 측정됨)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FeSfhJ8seNnWA7zKho4ak%2Fimage.png?alt=media\&token=7d3d3f70-3b68-4e26-8533-67032b854ce9)

#### Network Compiling🌟

* 학습이 완료된 Network를 deploy하려는 target hardware에서 inference가 가능하도록 compile하는것(+최적화가 동반)
* 사실상 속도에 가장 큰 영향을 미치는 기법
* e.g.TensorRT(NVIDIA), Tflite(Tensorflow), TVM(apache),…
* 각 compile library마다 성능차이가 발생

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2F4ZSAXqsKufZqzOxHEuS8%2Fimage.png?alt=media\&token=4f2369f3-5e5a-4371-b958-adeef9fceacf)

컴파일 라이브러리에 따라 성능에 차이가 있다.

* Compile과정에서, layer fusion(graph optimization)등의 최적화가 수행됨
* 예를들어 tf의 경우 200개의 rule이 정의되어 있음

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FNjOIWou41SYXn1kBWW8t%2Fimage.png?alt=media\&token=83b18dc9-cd32-4fb8-ab13-22f1365a2d2c)

* Framework와 hardware backends사이의 수 많은 조합
* HW마다 지원되는 core, unit수, instruction set, 가속 라이브러리 등이 다름
* Layer fusion의 조합에 따라 성능차이가 발생(동일회사의 hw임에도)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FBWkCZ3cMUmjXJoaB8kj2%2Fimage.png?alt=media\&token=30cdf490-df72-45f0-98fe-9743edd7ce8b)![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FABMHejFlJVAm8RK8w0oG%2Fimage.png?alt=media\&token=ed83f185-a31d-4f38-b217-8e634128c394)

* AutoML로graph의좋은fusion을찾아내자
* e.g.AutoTVM(Apache)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2Fs7iZhkGk3FwLD6GsmNEH%2Fimage.png?alt=media\&token=68c7b411-22ef-47dd-af27-8c0270797495)

## 2. 강의 목표, 구성

경량화의 일련의 과정을 경험해보는 것! 경량화, 최적화는 넓은 분야이며, 특정 주제들은 구체적이고 지엽적이기 마련이다. 다양한 분야를 경험하기에 broad한 topic을 준비.

* AutoML
* Matix / Tensor Decomposition
* Network Quantization
* Network Compliling

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FN3DiT0H8KJeTYJCeL0CM%2Fimage.png?alt=media\&token=1e3eca76-99d0-402d-9129-c2d5208a07aa)

> 최적화라는 성능의 효율을 향상시키는 것에 관심이 많았기에 흥미로은 기법들이 눈에 보였다. 재밋을것 같은 과정!
