플로라도의 data workout

딥러닝 FLOPs의 의미 본문

기초 노트/VisionAI

딥러닝 FLOPs의 의미

플로라도 2024. 5. 2. 00:50

 

딥러닝 모델들의 논문을 보다 보면 벤치마크 표에서 제시되는 것이 크게 네가지가 있는데,
 
학습 방법및 하이퍼파라미터 튜닝과 모델 버전에 따른
(1)모델의 이름,
그리고 task에 해당하는 성능지표를 통해 측정한 (2)정확도
(3)파라미터의 갯수, (4)FLOPs 가 그것이다.
 
 
모델의 정확도와 효율성은 일반적으로 trade-off관계에 있기 때문에, 정확도 뿐만 아니라 파라미터의 갯수와 FLOPs로 모델의 효율성을 같이 나타내려고 한다.
이 때 모델의 효율성은 파라미터의 갯수와 FLOPs 두가지로 나타내게 되는데 
파라미터의 갯수는 모델의 가중치(weight)와 bias term을 모두 포함한 수를 의미하고, 대게는 모델의 capacity를 의미하며 모델의 학습관점에서는 VRAM과 직접적으로 연관되는 부분이다.
 
 
딥러닝에서 사용되는 FLOPs는 FLoating point OPerations의 약자로 모델의 연산량을 나타낸다.
마지막 단어의 영문s가 소문자인것에 특히 유의해야되는데, 이것은 하드웨어의 성능을 측정하는데 사용되는 단위인 FLOPS (Floating Point Operations Per Second) 와 다른 개념이기 때문이다.
모델의 연산량이기 때문에 주로 모델의 학습 및 추론에 걸리는 시간과 직접적으로 연관된다.
 


1. 일반적인 FLOPS (Floating Point Operations Per Second)

   - 일반적인 컴퓨팅에서 FLOPS는 컴퓨터 또는 프로세서가 초당 수행할 수 있는 부동소수점 연산의 최대 횟수를 의미한다. 이는 컴퓨터의 하드웨어 성능을 나타내는 지표로, 고성능 컴퓨팅이나 벤치마킹에서 자주 사용된다.
   - 예를 들어 고성능 서버 또는 GPU의 성능 벤치마크표에서 주로 볼 수 있다.
 

2. 딥러닝에서의 FLOPs (FLoaitng point OPerations)  

- 딥러닝에서 FLOPs는 특정 신경망 모델이 하나의 입력(input)을 처리하는 데 필요한 부동소수점 연산의 총 횟수를 의미한다. 이는 모델의 복잡성과 필요한 계산량을 측정하는 데 사용되며, 더 많은 FLOPs는 일반적으로 더 높은 계산 비용을 의미한다.
 
따라서 둘은 단어는 비슷하지만 의미하는 바는 정반대를 띈다고 볼 수 있다. 이때문에 처음에 FLOPs를 검색했을 때 헷갈렸던 적이 있던 것 같다.
 
 
 
예를 들어, 컨볼루션 연산의 FLOPs를 구하는 방식은 다음과 같다.

$$ 
\text{FLOPs} = H \times W \times K^2 \times N \times C 
$$

H : 출력 피처 맵의 높이(height)
W : 출력 피처 맵의 너비(width)
K : 커널의 크기 (KxK의 커널 형태 가정)
N : 출력 피처 맵의 수 또는 필터의 수)
C :입력 채널의 수


각 요솟값에 대해 곱셈의 연산을 고려하여 FLOPs를 구하게 된다.
(컨볼루션 연산은 각 가중치와 입력과의 곱을한 후, 이를 모조리 더하는 과정인데 대게는 덧셈 대비 곱셈의 연산이 압도적임으로 덧셈을 생략하여 FLOPs를 표현한다고 한다.)