ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 논문리뷰 A Study of BFLOAT16 for Deep Learning Training
    Study/ML 2021. 8. 30. 22:16

    Abstraction & Introduction

    이 논문은 19년도에 발표된 논문으로 딥러닝 half precision 기법에서 INT16, FP16 대신 Bfloat16을 제안합니다. Bfloat16란 16bit floating 숫자로 아래 사진에 나와있듯이 FP32와 지수 부분 비트수가 같다는 특징이 있습니다. 그래서 FP32보다는 정확도는 떨어지지만 표현할수 있는 범위가 같다는 특징이 있습니다. 원래 BFloat16는 구글의 DistBelief 머신러닝 프레임워크에서 처음 제안됬습니다. 멀티 node 환경에서 shared memory의 volume을 줄이기 위해 제안된 데이터 타입으로 지금은 이제 딥러닝의 computing에 있어서 사용됩니다. 

     

    출처 - 구글 클라우드

     

     

    INT16과 FP16은 FP32보다 표현할 수 있는 값의 범위가 더 작습니다. 그래서 딥러닝의 순전파나 역전파에서 사용하기 위해서는 overflow나 underflow를 방지용으로 scaling 작업이 필요합니다. 이러한 overhead가 bfloat16의 중요성을 대두 시켰고, 이 논문에서 다양한 도메인의 모델에서 직접 Bfloat16을 실험해 보아 sota만큼의 성능을 달성할 수 있음을 증명합니다. 

     

     

     

    Emulation

     지금 21년도 기준으로, Nvidia Ampere 시리즈인 A100, Rtx 3000번대 GPU와 구글의 TPU V2, V3는 Bfloat16을 하드웨어 적으로 지원합니다. 하지만 이 논문이 발표됬을 당시에는 그러하지 않았으므로 Bfloat16 방식으로 traing을 시키기 위해 Emulation하는 방법을 사용합니다. 위 그림에서 Q는 Quantlib이라는 라이브러리로 FP32 -> BF16으로 typecasting 해주는 소프트웨어로 직접 개발하였다고 합니다. 그래서 이 Quantlib을 이용하여 input activation과 weight를 BF16으로 typecasting 시켜주고 GEMM 연산 후, Accumlation에서는 정확도를 위해 FP32 타입을 사용했다고 합니다. 이러한 방식으로 실제 실험에 사용되는 GPU는 BF16을 지원하지 않지만 동일한 결과를 내놓는 Emulation 환경을 만들었습니다.

     

     

    Result – CNN Image classification

     첫번째는 CNN 기반인 AlexNet과 ResNET-50을 ImageNet Large Scale Visual Recognition Competition (ILSVRC)을 학습시킨 결과입니다. 보시면 알겠지만 FP32와 비교했을 때, AlexNet 같은경우 0.5% 포인트 내외로 차이가 나는것을 확인할 수 있고 ResNet-50 같은 경우 동일하게 학습 되었다는 것을 확인할 수 있습니다. 이로서 CNN 도메인에서 BF16을 이용한 학습이 유효하다는 것을 확인할 수 있습니다.

     

     

    Result - Recurrent neural networks (RNN)

     
     
     

     다음으로는 언어모델에서 많이 사용되는 RNN기반의 모델들 입니다. 바이두의 DeepSpeech2와 구글의 GNMT모델에서 실험하였습니다. 평가를 위해 BLEU지표를 사용하였고 점수가 낮을수록 더 좋은 평가를 의미합니다. 비록 FP32에 비해 약간 점수가 높아진 것을 확인할 수 있지만 심각할 정도는 아닌것을 확인할 수 있습니다.

     

     

     

    GAN - DC-GAN

    다음으로는 이미지 생성 모델인 DC-GAN입니다. 사용한 평가 지표는 Inception score와 MS-SSIM를 사용하였고, 전자는 작을수록, 후자는 1에 가까울수록 더 좋은 결과를 의미합니다. BF16의 학습 결과가 성능이 약간 저하된것을 확인할 수 있지만 아주 작은 차이인것을 확인할 수 있습니다.

     

     

    GAN - SR-GAN

     다음으로는 저해상도 이미지를 고해상도로 바꿔주는 SR-GAN 모델입니다. PSNR 지표에서는 FP32가 더 좋은 성능을 보였지만 SSIM 지표에서는 BF16가 오히려 더 좋은 결과를 보이는 것을 확인할 수 있습니다.

     

     

    Industrial Scale Recommendation System

     마지막으로는 추천시스템입니다. 실험에 사용된 모델은 Deep & Cross Network, DNN recommender system 이고 평가 지표는 log loss입니다. 유저의 ad 클릭수를 예측하고 데이터와 얼마나 다른지를 나타내는 지표입니다. 이 log loss가 0.001 손실은 실사용에 못사용될정도로 큰 수치라고 합니다. 이번에에는 round-to-nearest(RND) 방법과 하위 16bit를 단순히 버리는 (TRUNC)에 각가에 대해서 실험을 한 것을 확인할 수 있습니다. 결과를 보면 단순히 0으로 치환하는것 보다 반올림을 한것이 성능이 더 좋다는 것을 확인할 수 있습니다.

     

     

    Conculsion

    이 논문에서는 BF16을 활용한 딥러닝 학습이 다양한 도메인에서 유효하다는 것을 보였고 INT16, FP16과 다르게 추가적인 scaling 작업도 필요없음을 보였습니다. 요즘 나오는 SOTA모델들을 보면 FP16 mixed precision 기법을 활용한 모델들이 많습니다. 이제 Nvidia gpu도 BF16을 지원하기 시작하였으니 FP16이 아닌 BF16을 활용하여 딥러닝 발전에 이바지 하지 않을까 저는 생각합니다.

    댓글

Designed by Tistory.