Precision 개념

2024. 2. 18. 20:42 · 머신러닝 이모저모
목차
  1. Float32
  2. Float16
  3. Mixed precision

Bit Quantization 을 할때 알아야 할 precision 개념을 알아보자.

일단 Bit Quantization 이란 computation 과 메모리 cost를 줄이기 위해 모델의 weight 와 activation 를 표현하는 bit 수를 low-precision 으로 표현하는 방법이다.

bit 를 이용해 수를 2진수로 표현한다.

 

Float32

일반적으로 모델 학습에 사용되는 부동 소수점 default precision 은 32 이다. 그리고 inference 에서는 속도를 높이기 위해서 사용된다고 한다.

 

Float16

fp 는 floating point 라는 뜻이고 bf 는 bfloat 이다.

bf16은 주로 인공지능 분야에서 사용하는 단위로 모델 학습시 fp32 와 비교했을때 약 50% 정도 메모리 사용량을 줄일 수 있다.

 

fp16은 정밀도(precision, 얼마나 많은 bit 를 이용해 표현할 것인지) 이 낮기 때문에 모델 학습의 정확도가 떨어질 수 있고 학습으로는 적합하지않다. 그래서 inference 에서 많이 사용된다.

fp 와 bf 의 차이점은 같은 16bit 이지만 exponent 와 mantissa (fraction이라고도한다) 의 비율차이이다.

 

 

Exponent는 지수부이고 Mantissa 는 실수부이다.

bf16 은 원래 사용하던 fp32 와 같은 범위 exponent 를 사용하기 때문에 fp16 보다 더 넓은 (fp32와 같은) 범위의 수를 표현할 수 있다. 하지만 수 자체의 정밀도는 떨어진다.

 

예를 들면, (이거는 진짜로 fp32, bf16, fp16 이 아래 수 까지만 표현할 수 있다는 것은 아니다. 나도 모른다. 이진수를 계산하기 귀찮아서 그냥 대충 랜덤 수를 사용하였다..)

 

0.32423432443 x 10^12 까지 fp32가 표현할 수 있다면,

fp16 는 0.324234 x 10^12로 표현할 수 있다. 그렇지 10^12 이 너무 커서 위의 수를 표현할 수 없을 수 있는 단점이 있고,

bf16 은 0.324 x 10^12 로 근사해서 표현할 수 있다.

 

Mixed precision

Huggingface 에서는 mixed precision 이라는 옵션이 있는데,

이는 큰 모델을 효율적으로 사용(학습 및 Inference)하기 위해 32 bit 와 16 bit 를 함께 사용하는 방식이다. 초기 방법은 아래와 같은 방식을 사용한다고 한다. (현재는 더 발전했을 것이다)

 

  • 모델의 가중치는 fp32형식으로 저장하고
  • 입력 데이터는 fp16으로 변환한다.
  • fp16으로 처리하면 정밀도가 손실될 개능성이 있으므로 일장 주기마다 가중치를 fp32로 복사하여 정밀도를 보정한다.
  • Back propagation 과정에서도 fp16을 사용한다.
  • 학습이 끝나면 다시 fp32 를 사용한다.

 

Reference

https://jaeyung1001.tistory.com/m/entry/bf16-fp16-fp32%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90

 

[ML] bf16, fp16, fp32의 차이점

업무를 진행하면서 bf16, fp16, fp32에 대한 정보를 알게되었는데. 왜 사용하는지 그리고 언제 사용하는지에 대해서 좀 정리해보려고한다. https://arxiv.org/abs/1905.12322 -> 관련논문 A Study of BFLOAT16 for Deep

jaeyung1001.tistory.com

 

https://bo-10000.tistory.com/32

 

[딥러닝 논문리뷰] Mixed Precision Training (ICLR 2018)

NVIDIA와 Baidu에서 연구하고 ICLR 2018에 발표된 논문인 Mixed Precision Training을 바탕으로 정리한 글입니다. 딥러닝 학습 과정에서 Mixed Precision을 이용하여 GPU resource를 효율적으로 사용할 수 있는 방법

bo-10000.tistory.com

 

'머신러닝 이모저모' 카테고리의 다른 글

[이화여대 강의] 2. Deep Learning Software Stack 1 (1)  (0) 2024.09.20
[이화여대 강의] Orientation  (0) 2024.09.20
VScode 에서 tmux 사용하기  (0) 2024.01.03
UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount() 에러 처리  (0) 2024.01.03
GPT-2 를 seq2seq 방식으로 학습시키기  (0) 2023.12.07
  1. Float32
  2. Float16
  3. Mixed precision
'머신러닝 이모저모' 카테고리의 다른 글
  • [이화여대 강의] 2. Deep Learning Software Stack 1 (1)
  • [이화여대 강의] Orientation
  • VScode 에서 tmux 사용하기
  • UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount() 에러 처리
섬섬옥수수
섬섬옥수수
컴공 AI 개발자가 되기 위한 노역입니다
섬섬옥수수
아날로그 인간의 컴공 되기
섬섬옥수수
전체
오늘
어제
  • 분류 전체보기
    • 백준 단계별 코딩 테스트
    • KB 논문 정리
    • Memory network 논문 정리
    • LLM 관련 논문 정리
    • Python 및 Torch 코딩 이모저모
    • Clustering 관련 논문 정리
    • 머신러닝 이모저모
    • 암호학

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 이화여대
  • dependency tree
  • CUDA
  • 오블완
  • efficient and effective vocabulary expansion towards multilingual large language models
  • vocabulary expansion
  • 문제풀이
  • 심재형
  • GIT
  • 백준
  • 소프트웨어
  • eeve
  • 티스토리챌린지
  • 코딩테스트
  • constituency tree
  • 하드웨어
  • PEFT
  • 인공지능융합기반시스템개론
  • ragas
  • e5-v

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
섬섬옥수수
Precision 개념
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.