bfloat16으로 모델 성능 개선
기본적으로 TPU는 bfloat16
값을 사용해서 행렬 곱셈 연산을 수행하고 IEEE float32
값을 사용해서 합산합니다. 정밀도가 감소된 부동 소수점 숫자를 사용하면 정확도를 손실하지 않으면서 수렴 시간을 줄일 수 있습니다.
bfloat16
및 float32
의 다이내믹 레인지는 동일합니다. 하지만 bfloat16
은 메모리 공간의 절반을 사용합니다. bfloat16
성능에 대한 자세한 내용은 딥 러닝 학습을 위한 BFLOAT16 연구를 참조하세요.
bfloat16 명시적으로 사용
TPU에서 자동 형식 변환을 사용하면 숫자 정밀도를 생각하지 않아도 되며 값을 bfloat16
으로 명시적으로 변환하여 성능을 더욱 향상시킬 수 있습니다. 값을 bfloat16
으로 명시적으로 변환하는 이유는 두 가지입니다.
값을
bfloat16
형식으로 저장하면 온칩 메모리가 절약되어 Cloud TPU가 더 큰 모델을 학습시키거나 더 큰 배치 크기를 사용할 수 있습니다.일부 작업은 메모리 대역폭에 제한을 받습니다. 즉, 메모리에서 데이터를 로드하는 데 걸리는 시간에 따라 계산 수행에 걸리는 전체 시간이 느려질 수 있습니다. 이러한 작업의 피연산자 및 출력을
bfloat16
형식으로 저장하면 전송되어야 하는 데이터 양이 줄어들어 전반적으로 속도가 향상됩니다.
시작하려면 Cloud TPU 참조 모델 중 하나로 일부 경험을 얻는 것이 좋습니다. 그런 후 프로파일링 도구 가이드 및 문제 해결 가이드에 따라 자체적으로 머신러닝 모델을 만들고 최적화하는 데 도움이 되는 세부적인 기술 정보를 확인합니다.
형식 변환 세부정보
float32
에서 bfloat16
으로 형식 변환도 XLA 컴파일러에 의해 자동으로 삽입됩니다. TPU에서 변환의 반올림 스키마는 가장 가까운 짝수로 반올림되고 inf
로 오버플로됩니다. 또한 Cloud TPU의 bfloat16
은 하위 기준을 지원하지 않으므로 변환 중에 모든 하위 정규화가 0으로 플러시됩니다.
NaN
및 inf
와 같은 특수 값은 변환 시 유지됩니다.
또한 bfloat16
에서 float32
로의 형식 변환도 XLA 컴파일러에 의해 자동으로 삽입됩니다. float32
는 bfloat16
의 모든 정확한 값을 나타낼 수 있으므로 변환은 가수 비트의 0을 16개로 패딩합니다. 변환 시 특수 값은 유지됩니다.
Cloud TPU에서 학습된 모델에서 얻은 체크포인트는 광범위한 수동 변환 없이 다른 하드웨어 플랫폼(예: 추론 또는 CPU 또는 GPU의 미세 조정)에 배포될 수 있습니다.