Understanding Mixed Precision Training -번역

혼합 정밀도 훈련 이해

신경망 훈련을위한 혼합 정밀도는 모델 성능에 영향을주지 않고 훈련 시간과 메모리 요구 사항을 줄일 수 있습니다.

Image for post

딥 러닝 방법론이 발전함에 따라 신경망의 크기를 늘리면 성능이 향상된다는 데 일반적으로 동의했습니다.그러나 이는 메모리 및 컴퓨팅 요구 사항에 해를 끼치며 모델 학습을 위해 증가시켜야합니다.

이것은 Google의 사전 학습 된 언어 모델의 성능을 비교하여 관점에서 볼 수 있습니다.BERT, 다양한 아키텍처 크기에서.원래종이, Google의 연구원들은 평균접착제BERT-Base 79.6 점, BERT-Large 82.1 점.2.5의이 작은 증가는 추가로 230M 매개 변수 (110M 대 340M)를 가져 왔습니다!

아르 자형계산을해도 각 매개 변수가 32 바이트의 정보 인 단 정밀도 (아래에서 자세히 설명)로 저장되면 230M 매개 변수는 메모리에서 0.92Gb와 동일합니다.이것은 그 자체로는 너무 크지 않은 것처럼 보일 수 있지만 각 훈련 반복 동안 이러한 매개 변수는 일련의 행렬 산술 단계를 거쳐 기울기와 같은 추가 값을 계산합니다.이러한 모든 추가 값은 빠르게 관리 할 수 없게 될 수 있습니다.

2017 년에 NVIDIA의 연구원 그룹은종이라는 기술을 사용하여 신경망 훈련의 메모리 요구 사항을 줄이는 방법을 자세히 설명합니다.혼합 정밀 교육 :

모델 정확도를 잃거나 하이퍼 파라미터를 수정할 필요없이 반 정밀도 부동 소수점 숫자를 사용하여 심층 신경망을 훈련하는 방법을 소개합니다.이것은 메모리 요구 사항을 거의 절반으로 줄이고 최근 GPU에서 산술 속도를 높입니다.

이 기사에서는 혼합 정밀도 훈련이 딥 러닝의 표준 알고리즘 프레임 워크에 어떻게 부합하는지와 모델 성능에 영향을주지 않고 계산 수요를 줄일 수있는 방법을 이해하는 방법을 살펴볼 것입니다.

부동 소수점 정밀도

이진 형식으로 부동 소수점 숫자를 나타내는 데 사용되는 기술 표준은 다음과 같습니다.IEEE 754, 1985 년 전기 전자 공학 연구소에서 설립.

IEEE 754에 명시된대로 2 진 16 (절반 정밀도)에서 2 진 256 (8 진 정밀도)까지 다양한 수준의 부동 소수점 정밀도가 있습니다. 여기서 “2 진”뒤의 숫자는 부동 소수점을 나타내는 데 사용할 수있는 비트 수와 같습니다.-포인트 값.

비트가 부호에 대해 예약 된 단일 비트를 사용하여 숫자의 이진 형식을 나타내는 정수 값과 달리 부동 소수점 값도 지수를 고려해야합니다.따라서 이러한 숫자를 이진 형식으로 표현하면 더 미묘하고 정밀도에 상당한 영향을 미칠 수 있습니다.

역사적으로 딥 러닝은 매개 변수를 표현하기 위해 단 정밀도 (binary32 또는 FP32)를 사용했습니다.이 형식에서 1 비트는 부호, 8 비트는 지수 (-126 ~ +127), 23 비트는 숫자로 예약되어 있습니다.반면에 반 정밀도 또는 FP16은 부호에 대해 1 비트, 지수에 대해 5 비트 (-14 ~ +14), 숫자에 대해 10을 예약합니다.

Image for post

그러나 이것은 비용이 듭니다.각각에 대한 최소 및 최대 양수, 정상 값은 다음과 같습니다.

Image for post

뿐만 아니라 모든 지수 비트가 0으로 설정된 더 작은 비정규 화 된 숫자를 나타낼 수 있습니다.FP16의 경우 절대 한계는 2 ^ (-24)입니다. 그러나 비정규 화 된 숫자가 작아 질수록 정밀도가 감소합니다.

이 기사에서 부동 소수점 정밀도의 정량적 한계를 이해하기 위해 여기서 더 깊이 들어 가지 않을 것이지만 IEEE는 포괄적 인선적 서류 비치추가 조사를 위해.

혼합 정밀 훈련

신경망 FP32의 표준 훈련 중에 증가 된 메모리 요구 사항으로 모델 매개 변수를 나타냅니다.혼합 정밀도 훈련에서 FP16은 훈련 반복 중에 가중치, 활성화 및 기울기를 저장하는 데 대신 사용됩니다.

그러나 위에서 보았 듯이 FP16이 저장할 수있는 값의 범위가 FP32보다 작고 숫자가 매우 작아 질수록 정밀도가 떨어지기 때문에 문제가 발생합니다.그 결과 계산 된 부동 소수점 값의 정밀도에 따라 모델의 정확도가 감소합니다.

이를 방지하기 위해 가중치의 마스터 사본이 FP32에 저장됩니다.이것은 각 훈련 반복의 일부 동안 FP16으로 변환됩니다 (1 회 전진 패스, 역 전파 및 가중치 업데이트).반복이 끝나면 가중치 기울기를 사용하여 최적화 단계에서 마스터 가중치를 업데이트합니다.

Image for post

여기에서 가중치의 FP32 사본을 유지하는 이점을 볼 수 있습니다.학습률이 종종 작기 때문에 가중치 기울기를 곱하면 종종 작은 값이 될 수 있습니다.FP16의 경우 크기가 2 ^ (-24)보다 작은 숫자는 표현할 수 없기 때문에 0과 동일합니다 (FP16의 비정규 화 된 한계입니다).따라서 FP32에서 업데이트를 완료하면 이러한 업데이트 값을 유지할 수 있습니다.

FP16과 FP32를 모두 사용하기 때문에이 기술이 호출됩니다.혼합-정밀 교육.

손실 스케일링

혼합 정밀도 훈련은 대부분 정확도 유지 문제를 해결했지만 실험 결과 학습률을 곱하기 전에도 작은 기울기 값이 발생하는 경우가있었습니다.

NVIDIA 팀은 2 ^ -27 미만의 값이 주로 훈련과 관련이 없지만 보존하는 데 중요한 [2 ^ -27, 2 ^ -24) 범위의 값이 있지만 FP16 한계를 벗어난 값이 있음을 보여주었습니다.훈련 반복 동안 0으로 동일시합니다.정밀도 한계로 인해 기울기가 0과 같은이 문제를 언더 플로우라고합니다.

따라서 그들은 손실 스케일링을 제안하는데, 이는 순방향 패스가 완료된 후 역 전파 전에 손실 값에 스케일 팩터를 곱하는 프로세스입니다.그만큼연쇄 법칙모든 그라디언트가 FP16 범위 내에서 이동 한 동일한 요소에 의해 이후에 배율이 조정됨을 나타냅니다.

그래디언트가 계산되면 이전 섹션에서 설명한대로 FP32에서 마스터 가중치를 업데이트하는 데 사용되기 전에 동일한 배율로 나눌 수 있습니다.

Image for post

NVIDIA “딥 러닝 성능”선적 서류 비치, 배율 인수 선택에 대해 설명합니다.이론적으로는 오버플로로 이어질만큼 충분히 크지 않는 한 큰 스케일링 계수를 선택하는 데 단점이 없습니다.

스케일링 계수를 곱한 기울기가 FP16의 최대 제한을 초과하면 오버플로가 발생합니다.이 경우 그래디언트가 무한이되고 NaN으로 설정됩니다.신경망 훈련의 초기 시대에 다음 메시지가 나타나는 것은 비교적 일반적입니다.

그라데이션 오버플로.스킵 단계, 손실 스케일러 0 손실 스케일 감소…

이 경우 무한 기울기를 사용하여 가중치 업데이트를 계산할 수없고 향후 반복을 위해 손실 척도가 감소하므로 단계를 건너 뜁니다.

자동 혼합 정밀도

2018 년에 NVIDIA는파이 토치전화꼭대기, 여기에는 AMP (자동 혼합 정밀도) 기능이 포함되어 있습니다.이것은 PyTorch에서 혼합 정밀도 훈련을 사용하기위한 간소화 된 솔루션을 제공했습니다.

단 몇 줄의 코드로 훈련을 FP32에서 GPU의 혼합 정밀도로 이동할 수 있습니다.이것은두 가지 주요 이점:

  • 훈련 시간 단축— 훈련 시간은 모델 성능의 현저한 감소없이 1.5 배에서 5.5 배까지 감소 된 것으로 나타났습니다.
  • 메모리 요구 사항 감소— 이것은 아키텍처 크기, 배치 크기 및 입력 데이터 크기와 같은 다른 모델 요소를 증가시키기 위해 메모리를 확보했습니다.
Image for post

PyTorch 1.6부터 NVIDIA와 Facebook (PyTorch의 제작자)은이 기능을 핵심 PyTorch 코드로 옮겼습니다.torch.cuda.amp.이를 통해 버전 호환성 및 확장 빌드의 어려움과 같은 Apex 패키지를 둘러싼 몇 가지 문제점이 해결되었습니다.

이 기사에서는 AMP의 코드 구현에 대해 더 이상 설명하지 않지만 PyTorch에서 예제를 볼 수 있습니다.선적 서류 비치.

결론

부동 소수점 정밀도는 종종 간과되지만 딥 러닝 모델의 훈련에서 중요한 역할을합니다. 여기서 작은 기울기와 학습률이 증가하여 더 많은 비트를 정확하게 표현해야하는 기울기 업데이트를 생성합니다.

그러나 최첨단 딥 러닝 모델이 작업 성능 측면에서 경계를 확장함에 따라 아키텍처가 성장하고 정밀도가 훈련 시간, 메모리 요구 사항 및 사용 가능한 컴퓨팅과 균형을 이루어야합니다.

따라서 본질적으로 메모리 사용량을 절반으로 줄이면서 성능을 유지하는 혼합 정밀도 훈련의 능력은 딥 러닝의 중요한 발전입니다!

Leave a Comment