대규모 신경망 훈련을 위한 기술 PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.

대규모 신경망 훈련 기법

대규모 신경망 훈련 기법

대규모 신경망은 최근 AI 발전의 핵심이지만 이를 훈련하는 것은 단일 동기화 계산을 수행하기 위해 GPU 클러스터를 조정해야 하는 어려운 엔지니어링 및 연구 과제입니다. 클러스터 및 모델 크기가 커짐에 따라 기계 학습 실무자는 많은 GPU에서 모델 훈련을 병렬화하기 위해 점점 더 다양한 기술을 개발했습니다. 언뜻 보기에는 이러한 병렬 처리 기술을 이해하는 것이 어려워 보일 수 있지만 계산 구조에 대한 몇 가지 가정만 있으면 이러한 기술이 훨씬 더 명확해집니다. 그 시점에서 여러분은 네트워크처럼 A에서 B로 불투명한 비트를 왕복하는 것뿐입니다. 패킷 주변에서 셔틀을 전환합니다.

데이터 병렬성

대규모 신경망 훈련 기법

파이프라인 병렬화

대규모 신경망 훈련 기법

텐서 병렬성

대규모 신경망 훈련 기법

전문가 병렬성

대규모 신경망 훈련 기법

데이터 병렬성

대규모 신경망 훈련 기법

파이프라인 병렬화

대규모 신경망 훈련 기법

텐서 병렬성

대규모 신경망 훈련 기법

전문가 병렬성

대규모 신경망 훈련 기법

XNUMX계층 모델에 대한 다양한 병렬화 전략의 예시. 각 색상은 하나의 레이어를 나타내고 점선은 서로 다른 GPU를 구분합니다.

병렬 처리 없음

신경망 훈련은 반복적인 과정입니다. 모든 반복에서 우리는 모델의 레이어 데이터 배치의 각 훈련 예제에 대한 출력을 계산합니다. 그런 다음 다른 패스가 진행됩니다. 뒤로 레이어를 통해 각 매개변수가 최종 출력에 미치는 영향을 계산하여 전파합니다. 경사도 각 매개변수에 대해. 배치, 매개변수 및 일부 매개변수별 최적화 상태에 대한 평균 기울기는 다음과 같은 최적화 알고리즘에 전달됩니다. 아담, 다음 반복의 매개변수(데이터 성능이 약간 향상되어야 함)와 새로운 매개변수별 최적화 상태를 계산합니다. 훈련이 데이터 배치에 대해 반복됨에 따라 모델은 점점 더 정확한 출력을 생성하도록 발전합니다.

다양한 병렬 처리 기술은 다음을 포함하여 다양한 차원에 걸쳐 이 교육 프로세스를 분할합니다.

  • 데이터 병렬 처리 - 다른 GPU에서 배치의 다른 하위 집합을 실행합니다.
  • 파이프라인 병렬 처리 - 서로 다른 GPU에서 모델의 서로 다른 레이어를 실행합니다.
  • 텐서 병렬 처리 - GPU 간에 분할되는 행렬 곱셈과 같은 단일 작업에 대한 수학을 나눕니다.
  • 전문가 혼합 - 각 레이어의 일부만 사용하여 각 예제를 처리합니다.

(이 게시물에서는 GPU를 사용하여 신경망을 훈련한다고 가정하지만 다른 GPU를 사용하는 경우에도 동일한 아이디어가 적용됩니다. 신경망 가속기.)

데이터 병렬성

데이터 병렬 훈련이란 동일한 매개변수를 여러 GPU(종종 "작업자"라고 함)에 복사하고 동시에 처리할 서로 다른 예제를 할당하는 것을 의미합니다. 데이터 병렬 처리만으로는 모델이 단일 GPU 메모리에 적합해야 하지만, 매개변수의 많은 중복 복사본을 저장하는 비용으로 많은 GPU의 컴퓨팅을 활용할 수 있습니다. 즉, 사용 사이에 매개변수를 일시적으로 CPU 메모리로 오프로드하는 등 GPU에서 사용할 수 있는 효과적인 RAM을 늘리는 전략이 있습니다.

각 데이터 병렬 작업자가 매개변수의 복사본을 업데이트할 때 각 작업자가 계속해서 유사한 매개변수를 갖도록 조정해야 합니다. 가장 간단한 접근 방식은 작업자 간의 차단 통신을 도입하는 것입니다. (1) 각 작업자의 기울기를 독립적으로 계산합니다. (2) 작업자의 평균 기울기; (3) 각 작업자에 대해 동일한 새 매개변수를 독립적으로 계산합니다. (2) 단계는 훈련 처리량을 손상시킬 수 있는 상당한 양의 데이터(작업자 수와 매개변수 크기에 비례)를 전송해야 하는 차단 평균입니다. 다양한 비동기식 동기화 체계 이 오버헤드를 제거하지만 학습 효율성을 떨어뜨립니다. 실제로 사람들은 일반적으로 동기식 접근 방식을 고수합니다.

파이프라인 병렬화

파이프 라인 병렬 훈련할 때 GPU에서 모델의 순차적 청크를 분할합니다. 각 GPU는 매개변수의 일부만 보유하므로 동일한 모델이 GPU당 비례적으로 더 적은 메모리를 소비합니다.

큰 모델을 연속적인 레이어 청크로 분할하는 것은 간단합니다. 그러나 레이어의 입력과 출력 사이에는 순차적 종속성이 있으므로 순진한 구현은 작업자가 이전 시스템의 출력이 입력으로 사용되기를 기다리는 동안 많은 유휴 시간으로 이어질 수 있습니다. 이러한 대기 시간 청크를 "버블"이라고 하며, 이는 유휴 기계에서 수행할 수 있는 계산을 낭비합니다.

대규모 신경망 훈련 기법 앞으로
대규모 신경망 훈련 기법 뒤로
대규모 신경망 훈련 기법 그라디언트 업데이트
대규모 신경망 훈련 기법 유휴
대규모 신경망 훈련 기법

모델이 계층별로 4개의 파티션으로 수직으로 분할되는 순진한 파이프라인 병렬 처리 설정의 그림입니다. 작업자 1은 네트워크의 첫 번째 레이어(입력에 가장 가까운)의 모델 매개변수를 호스팅하고 작업자 4는 레이어 4(출력에 가장 가까운)를 호스팅합니다. "F", "B" 및 "U"는 각각 정방향, 역방향 및 업데이트 작업을 나타냅니다. 아래 첨자는 작업이 실행되는 작업자를 나타냅니다. 데이터는 순차적 종속성으로 인해 한 번에 한 작업자가 처리하므로 유휴 시간의 큰 "거품"이 발생합니다.

각 작업자가 한 번에 데이터 요소의 하위 집합만 처리하도록 함으로써 거품 비용을 줄이기 위해 데이터 병렬 처리의 아이디어를 재사용할 수 있으므로 새로운 계산을 대기 시간과 교묘하게 겹칠 수 있습니다. 핵심 아이디어는 하나의 배치를 여러 마이크로 배치로 나누는 것입니다. 각 마이크로 배치는 비례적으로 처리 속도가 빨라야 하며 각 작업자는 다음 마이크로 배치가 사용 가능한 즉시 작업을 시작하므로 파이프라인 실행이 빨라집니다. 충분한 마이크로 배치로 작업자는 단계의 시작과 끝에서 최소한의 기포로 대부분의 시간을 활용할 수 있습니다. 그라디언트는 마이크로 배치에서 평균화되며 모든 마이크로 배치가 완료된 후에만 매개변수에 대한 업데이트가 발생합니다.

모델이 분할되는 작업자 수는 일반적으로 다음과 같이 알려져 있습니다. 파이프라인 깊이.

포워드 패스 동안 작업자는 레이어 청크의 출력(활성화라고 함)을 다음 작업자에게 보내기만 하면 됩니다. 역방향 패스 동안에는 해당 활성화의 그래디언트만 이전 작업자에게 보냅니다. 이러한 패스를 예약하는 방법과 마이크로 배치에 걸쳐 기울기를 집계하는 방법에 대한 큰 디자인 공간이 있습니다. 지파이프 각 작업자 프로세스가 순방향 및 역방향을 연속적으로 통과한 다음 끝에서 동기적으로 여러 마이크로 배치의 그라디언트를 집계합니다. 파이프 드림 대신 각 작업자가 정방향 및 역방향 전달을 교대로 처리하도록 예약합니다.

대규모 신경망 훈련 기법 앞으로
대규모 신경망 훈련 기법 뒤로
대규모 신경망 훈련 기법 업데이트
대규모 신경망 훈련 기법 유휴
지파이프

대규모 신경망 훈련 기법

파이프 드림

대규모 신경망 훈련 기법

배치당 4개의 마이크로 배치를 사용하는 GPipe 및 PipeDream 파이프라이닝 계획 비교. 마이크로 배치 1-8은 두 개의 연속 데이터 배치에 해당합니다. 이미지에서 "(숫자)"는 작업이 수행되는 마이크로 배치를 나타내며 아래 첨자는 작업자 ID를 나타냅니다. PipeDream은 오래된 매개변수로 일부 계산을 수행하여 더 많은 효율성을 얻습니다.

텐서 병렬성

파이프라인 병렬 처리는 모델을 레이어별로 "수직"으로 분할합니다. 레이어 내에서 특정 작업을 "수평적으로" 분할하는 것도 가능합니다. 텐서 병렬 훈련. 많은 현대 모델의 경우(예: 변신 로봇), 계산 병목 현상은 활성화 배치 행렬에 큰 가중치 행렬을 곱하는 것입니다. 행렬 곱셈 행과 열 쌍 사이의 내적(dot product)으로 생각할 수 있습니다. 서로 다른 GPU에서 독립적인 내적을 계산하거나, 서로 다른 GPU에서 각 내적의 일부를 계산하고 결과를 요약하는 것이 가능합니다. 어느 전략을 사용하든 가중치 매트릭스를 동일한 크기의 "샤드"로 분할하고, 각 샤드를 다른 GPU에 호스팅하고, 해당 샤드를 사용하여 전체 매트릭스 제품의 관련 부분을 계산한 후 나중에 결과를 결합하기 위해 통신할 수 있습니다.

하나의 예입니다 메가 트론 -LM이는 Transformer의 self-attention 및 MLP 레이어 내에서 행렬 곱셈을 병렬화합니다. PTD-P 텐서, 데이터 및 파이프라인 병렬 처리를 사용합니다. 파이프라인 일정은 각 장치에 여러 개의 비연속적인 레이어를 할당하여 더 많은 네트워크 통신 비용으로 버블 오버헤드를 줄입니다.

때때로 네트워크에 대한 입력은 교차 통신에 비해 높은 수준의 병렬 계산으로 차원에 걸쳐 병렬화될 수 있습니다. 시퀀스 병렬 처리 입력 시퀀스가 ​​시간에 따라 여러 하위 예제로 분할되어 계산이 더 세분화된 크기의 예제로 진행되도록 하여 피크 메모리 소비를 비례적으로 줄이는 아이디어 중 하나입니다.

전문가 혼합(MoE)

와 더불어 전문가 혼합(MoE) 접근 방식에서는 네트워크의 일부만 하나의 입력에 대한 출력을 계산하는 데 사용됩니다. 한 가지 예시적인 접근 방식은 많은 가중치 세트를 갖는 것이며 네트워크는 추론 시간에 게이팅 메커니즘을 통해 사용할 세트를 선택할 수 있습니다. 이것은 증가된 계산 비용 없이 더 많은 매개변수를 가능하게 합니다. 네트워크가 각 전문가에게 전문적인 계산과 기술을 할당하는 방법을 배우기를 희망하면서 각 가중치 세트를 "전문가"라고 합니다. 서로 다른 전문가를 서로 다른 GPU에서 호스팅할 수 있으므로 모델에 사용되는 GPU 수를 확장할 수 있는 명확한 방법을 제공합니다.

대규모 신경망 훈련 기법

전문가 혼합(MoE) 레이어의 그림. 중 2개만 n 전문가는 게이팅 네트워크에 의해 선택됩니다. (이미지 출처: Shazeer 외, 2017)

지샤드 MoE 레이어만 여러 TPU 장치에 분할되고 다른 레이어는 완전히 복제되는 방식으로 MoE Transformer를 최대 600억 개의 매개변수로 확장합니다. 스위치 변압기 하나의 입력을 단일 전문가에게 라우팅하여 더 높은 희소성을 가진 수조 개의 매개변수로 모델 크기를 확장합니다.

기타 메모리 절약 설계

점점 더 커지는 신경망 훈련을 더 다루기 쉽게 만들기 위한 다른 많은 계산 전략이 있습니다. 예를 들어:

  • 그래디언트를 계산하려면 많은 장치 RAM을 소모할 수 있는 원래 활성화를 저장해야 합니다. 체크포인트 (활성화 재계산이라고도 함)은 활성화의 하위 집합을 저장하고 역방향 패스 동안 중간 활성화를 적시에 재계산합니다. 이것은 최대 하나의 추가 전체 정방향 패스의 계산 비용으로 많은 메모리를 절약합니다. 또한 다음을 통해 컴퓨팅과 메모리 비용 간에 지속적으로 균형을 맞출 수 있습니다. 선택적 활성화 재계산, 이는 저장 비용이 상대적으로 더 비싸지만 계산 비용은 더 저렴한 활성화의 하위 집합을 검사하는 것입니다.

  • 혼합 정밀 훈련 낮은 정밀도의 숫자를 사용하여 모델을 훈련시키는 것입니다(가장 일반적으로 FP16). 최신 가속기는 정밀도가 낮은 숫자로 훨씬 더 많은 FLOP 수에 도달할 수 있으며 장치 RAM도 절약할 수 있습니다. 적절한 주의를 기울이면 결과 모델의 정확도가 거의 손실되지 않을 수 있습니다.

  • 오프 로딩 사용하지 않는 데이터를 CPU나 다른 장치 간에 일시적으로 오프로드하고 나중에 필요할 때 다시 읽는 것입니다. 순진한 구현은 훈련 속도를 많이 늦추지만 정교한 구현은 데이터를 미리 가져오므로 장치가 데이터를 기다릴 필요가 없습니다. 이 아이디어의 한 구현은 제로 사용 가능한 모든 하드웨어에서 매개변수, 그라디언트 및 옵티마이저 상태를 분할하고 필요에 따라 구체화합니다.

  • 메모리 효율적인 옵티마이저 최적화 프로그램에 의해 유지되는 실행 상태의 메모리 공간을 줄이기 위해 제안되었습니다.같은 아다팩터.

  • 압축 네트워크에 중간 결과를 저장하는 데에도 사용할 수 있습니다. 예를 들어, 요점 역방향 패스를 위해 저장된 활성화를 압축합니다. DALL · E 동기화하기 전에 그라디언트를 압축합니다.


OpenAI에서는 기본 인프라에서 실제 문제에 대한 배포에 이르기까지 대규모 모델을 교육하고 개선하고 있습니다. 특히 확장 및 응용 연구 팀과 관련된 이 게시물의 아이디어를 실행에 옮기고 싶다면 채용!


감사의
초안에 대한 피드백을 주신 Nikolas Tezak, Sam Altman, Daniel Gackle, Ilya Sutskever 및 Steven Adler에게 감사드립니다. 커뮤니케이션과 디자인을 담당한 Justin Jay Wang, Bianca Martin, Steve Dowling에게 감사드립니다.

타임 스탬프 :

더보기 OpenAI