728x90
- 베이스라인에서 FP16을 사용하여 Data를 불러왔음 -> FP16은 Floating Point 16을 말하고 뒤에 숫자 16은 정밀도를 말하는 것같다. 만약 FP32라고 한다면 32bit를 이용하여 실수를 저장하고 FP64라고 하면 64bit를 이용하여 실수를 저장한다. 그러니까 FP16을 사용하면 더 적은 bit를 사용하게되서 저장 공간도 절약되고 연산 속도도 빨라지는 것 같다. 하지만 정밀도에서는 당연히 떨어질 것이다.
- amp.gradscaler -> 특정 연산에 대한 forward pass에 float16 입력이 있는 경우 해당 연산에 대한 backward pass는 float16 gradient를 생성한다. 크기가 작은 gradient 값은 float16에서 표현할 수 없다. 이러한 값은 0(underflow)으로 flush되므로 해당 매개 변수에 대한 업데이트가 손실된다. 이런 underflow를 방지하기위해 'gradient scaling'은 네트워크의 loss에 scale factor를 곱하고 scaling된 손실에 대한 backward pass를 호출한다. 그런 다음 네트워크를 통해 역방향으로 흐르는 gradient는 동일한 요소로 확장된다. 즉, gradient 값은 크기가 더 크므로 0으로 flush되지 않는다고 한다. -> scale(outputs)로 scale factor를 곱하고 step(optimizer)로 inf/NaN가 없을 경우 scaling하지 않은 gradient를 사용하고 있을 경우 step을 건너뛴다. 그리고 update로 scale factor를 update하는데 이전 optimizer 단계를 건너뛴 경우 줄이고 건너뛰지 않으면 증가시킨다.
- mixed precision training -> 처리 속도를 높이기 위한 FP16 연산과 정확도 유지를 위한 FP32 연산을 섞어 학습하는 방법이다. 사용 조건으로 Tensor Core를 이용하여 FP16 연산이 가능한 Volta 이상의 NVIDIA 그래픽 카드 (V100, RTX2080ti) 등이 있다. -> torch.autocast가 이런 mixed precision으로 실행될 수 있도록하는 역할을 해준다. -> autocast 활성화된 지역에 들어갈 때 Tensor는 모든 유형이 될 수 있다. -> autocast는 손실 계산을 포함하여 네트워크의 forward pass만 래핑해야한다. autocast에서 backward pass는 권장되지 않는다고 한다.
- 기존 베이스라인은 1epoch에 79초(train+val)가 걸림
728x90
'Boostcamp AI Tech' 카테고리의 다른 글
[실험 일지 Day-78] P Stage - 모델 최적화(경량화) (0) | 2021.12.06 |
---|---|
[실험 일지 Day-77] P Stage - 모델 최적화(경량화) (0) | 2021.12.06 |
[Boostcamp Day-76] 작은 모델, 좋은 파라미터 찾기 AutoML 이론 (0) | 2021.12.06 |
[Boostcamp Day-75] 최적화 소개 및 강의 개요 (0) | 2021.12.06 |
[주말 실험 일지 - 토] P Stage - OCR (0) | 2021.11.22 |