빅모델 시대의 이기종 컴퓨팅 플랫폼

가이드

이 기사는 2023년 2월 QCon 글로벌 소프트웨어 개발 회의(베이징 스테이션)에서 AI 인프라를 주제로 동명의 주제 공유에서 편집한 것입니다. 여러분과 만날 ChatGPT, Bard, "Wen Xin Yi Yan" 등의 애플리케이션은 모두 각 제조사에서 출시한 대형 모델을 기반으로 하고 있습니다. GPT-3에는 1,750억 개의 매개변수가 있고 Wenxin 대형 모델에는 2,600억 개의 매개변수가 있습니다. 예를 들어 NVIDIA GPU A100을 사용하여 GPT-3를 교육하면 이론적으로 단일 카드의 경우 32년이 걸리고 킬로칼로리 규모의 분산 클러스터는 다양한 최적화 후에도 교육을 완료하는 데 여전히 34일이 필요합니다. 이 연설에서는 컴퓨팅 파워 월, 스토리지 월, 단일 머신 및 클러스터 고성능 네트워크 설계, 그래프 액세스 및 백엔드 가속, 모델 분할 및 매핑 등과 같은 인프라에 대한 대규모 모델 교육의 과제를 소개했습니다. Shared Baidu 인텔리전트 클라우드의 응답 방법 및 엔지니어링 관행은 프레임워크에서 클러스터까지 풀 스택 인프라를 구축하고 소프트웨어와 하드웨어를 결합하고 대규모 모델의 엔드 투 엔드 교육을 가속화했습니다.

지난 2년 동안 빅 모델은 AI 기술 아키텍처에 가장 큰 영향을 미쳤다. 대규모 모델 생성, 반복 및 진화 과정에서 기본 인프라에 새로운 문제가 발생합니다.

오늘의 나눔은 크게 네 부분으로 나뉘는데, 첫 번째 부분은 비즈니스 관점에서 빅모델이 가져온 주요 변화를 소개하는 것입니다. 두 번째 부분은 대형 모델 시대에 인프라에 대형 모델 훈련이 제기하는 문제와 Baidu Smart Cloud가 어떻게 대응하는지에 관한 것입니다. 세 번째 부분은 대규모 모델과 플랫폼 구축의 요구를 결합하고 Baidu Smart Cloud가 만든 소프트웨어와 하드웨어의 공동 최적화를 설명합니다. 네 번째 부분은 대규모 모델의 향후 개발과 인프라에 대한 새로운 요구 사항에 대한 Baidu Smart Cloud의 생각입니다.

1. GPT-3, 대형 모델 시대를 열다

대형 모델의 시대를 연 GPT-3는 다음과 같은 특징을 가지고 있습니다.

첫 번째 특징은 모델의 매개변수가 크게 개선되었다는 점입니다. 단일 모델이 1,750억 개의 매개변수에 도달하여 정확도가 크게 향상되었습니다. 왼쪽 그림에서 모델 매개변수가 점점 더 많아짐에 따라 모델의 정확도도 향상되고 있음을 알 수 있습니다.

오른쪽 그림은 더 충격적인 특징을 보여줍니다. 사전 훈련된 1,750억 개의 매개변수 모델을 기반으로 적은 수의 샘플로만 훈련하면 되며, 대규모 샘플 훈련을 사용한 후에 BERT 효과에 접근할 수 있습니다. 이는 모델의 규모가 커짐에 따라 모델의 성능과 모델의 다양성이 향상될 수 있음을 어느 정도 반영합니다.

또한 GPT-3는 수학적 계산, 독해, 여러 차례의 질문 및 답변과 같은 작업에서 어느 정도의 다재다능함을 보여줍니다. 지출.

이로 인해 대형 모델은 전체 AI 연구 개발 모델에도 새로운 변화를 가져왔습니다. 앞으로는 큰 모델을 먼저 사전 교육한 다음 특정 작업에 대해 적은 수의 샘플로 미세 조정을 수행하여 좋은 교육 결과를 얻을 수 있습니다. 지금처럼 모델을 교육하는 대신 각 작업을 처음부터 완전히 반복하고 교육해야 합니다.

Baidu는 매우 일찍 대형 모델 훈련을 시작했고 2600억 개의 매개변수를 가진 Wenxin 대형 모델이 2021년에 출시되었습니다. 이제 Stable Diffusion, AIGC Vincent graph, 그리고 최근 인기를 끌고 있는 채팅로봇 ChatGPT 등 사회 전체가 주목하고 있는 만큼, 대형모델 시대가 도래했음을 실감하게 됩니다.

제조사들도 대형 모델 관련 제품을 내놓고 있는데, 구글은 바드를 얼마 전에 내놓았고, 바이두는 3월 곧 '문신이옌'을 내놓을 예정이다.

대규모 모델 학습의 다른 특성은 무엇입니까?

대형 모델에는 스케일링 법칙이 있습니다. 왼쪽 그림과 같이 모델의 매개변수 스케일과 훈련 데이터가 증가할수록 효과가 점점 더 좋아집니다.

그러나 여기에는 매개변수가 충분히 커야 하고 데이터 세트가 전체 매개변수의 교육을 지원하기에 충분하다는 전제가 있습니다. 그 결과 계산량이 기하급수적으로 증가합니다. 일반 소형 모델의 경우 단일 기계와 단일 카드를 수행할 수 있습니다. 그러나 대규모 모델의 경우 교육 볼륨에 대한 요구 사항에는 교육을 지원하기 위한 대규모 리소스가 필요합니다.

GPT-3를 예로 들면, 1,750억 개의 매개변수가 있는 모델이며 좋은 효과를 달성하기 위해 지원하려면 3,000억 단어의 훈련이 필요합니다. 계산은 논문에서 314 ZFLOP로 추정됩니다. NVIDIA GPU A100과 비교할 때 카드는 여전히 312 TFLOPS AI 컴퓨팅 성능에 불과하며 중간의 절대값은 9자릿수 차이가 납니다.

따라서 대형 모델의 계산, 교육 및 진화를 더 잘 지원하기 위해 인프라를 설계하고 개발하는 방법이 매우 중요한 문제가 되었습니다.

2. 대규모 모델 인프라 파노라마

대형 모델을 위한 Baidu Smart Cloud 인프라의 파노라마입니다. 하드웨어와 소프트웨어를 결합하여 프레임워크에서 클러스터까지 포괄하는 풀스택 인프라입니다.

대규모 모델에서 인프라는 더 이상 기본 하드웨어 및 네트워크와 같은 기존 인프라만 다루지 않습니다. 또한 모든 관련 리소스를 인프라 범주로 가져와야 합니다.

특히, 대략적으로 여러 수준으로 나뉩니다.

  • 최상위 레이어는 내부 및 외부 게시 모델과 일부 지원 구성 요소를 포함하는 모델 레이어입니다. 예를 들어 Baidu의 비행 패들 PaddlePaddle 및 Fleet, Fleet은 비행 패들 에 대한 분산 전략 입니다. 동시에 PyTorch와 같은 오픈 소스 커뮤니티에는 DeepSpeed/Megatron과 같은 PyTorch 프레임워크를 기반으로 하는 일부 대규모 모델 교육 프레임워크 및 가속 기능이 있습니다.

  • 프레임워크에서 우리는 AI 오퍼레이터 가속화, 통신 가속화 등을 포함하여 가속화 라이브러리의 관련 기능도 개발할 것입니다.

  • 다음은 부분 리소스 관리 또는 부분 클러스터 관리의 일부 관련 기능입니다.

  • 맨 아래에는 독립형 단일 카드, 이기종 칩 및 네트워크 관련 기능과 같은 하드웨어 리소스가 있습니다.

위는 전체 인프라의 파노라마입니다. 오늘은 AI 프레임워크부터 시작하여 가속화 계층과 하드웨어 계층으로 확장하여 Baidu Smart Cloud의 일부 특정 작업을 공유하는 데 중점을 둘 것입니다.

먼저 최고의 AI 프레임워크부터 시작하십시오.

단일 카드에 대한 기존의 작은 모델 교육의 경우 교육 데이터를 사용하여 순방향 및 역방향 기울기를 지속적으로 업데이트하여 전체 교육을 완료할 수 있습니다. 대형 모델의 교육에는 컴퓨팅 성능 벽과 스토리지 벽이라는 두 가지 주요 과제가 있습니다.

컴퓨팅 파워 벽은 314 ZFLOPs 컴퓨팅 파워가 필요한 GPT-3의 모델 교육을 완료하려는 경우 단일 컴퓨팅 파워에 대해 너무 긴 시간의 문제를 해결하기 위해 분산 방법을 사용하는 방법을 말하지만 단일 카드는 312 TFLOPS 컴퓨팅 파워. . 결국 하나의 카드로 모델을 훈련시키는 데 32년이 걸리며 이는 분명히 실현 가능하지 않습니다.

다음은 수납장입니다. 이것은 더 큰 모델에 대한 더 큰 도전입니다. 단일 카드가 모델을 보유할 수 없는 경우 모델에 일부 세분화 방법이 있어야 합니다.

예를 들어, 1000억 수준의 대형 모델(매개 변수, 학습 중간 값 등 포함)을 저장하려면 2TB의 저장 공간이 필요한 반면 단일 카드의 최대 비디오 메모리는 현재 80GB에 불과합니다. 따라서 대형 모델을 교육하려면 단일 카드가 적합하지 않은 문제를 해결하기 위해 몇 가지 분할 전략이 필요합니다.

첫 번째는 단일 카드의 컴퓨팅 성능 부족 문제를 해결하는 컴퓨팅 파워 월입니다.

매우 간단하고 가장 친숙한 아이디어는 교육 샘플을 다른 카드로 자르는 데이터 병렬 처리입니다. 전반적으로 현재 우리가 관찰하고 있는 대규모 모델 교육 프로세스는 주로 동기식 데이터 업데이트 전략을 채택합니다.

스토리지 벽 문제에 대한 솔루션에 초점이 맞춰져 있습니다. 관건은 모델 세분화의 전략과 방법이다.

첫 번째 슬라이싱 방법은 파이프라인 병렬 처리입니다.

아래 그림의 예를 사용하여 설명하겠습니다. 모델의 경우 여러 레이어로 구성되어 있으며 학습할 때는 정방향을 먼저 수행한 다음 역방향을 수행합니다. 예를 들어 그림에서 0, 1, 2의 세 레이어는 하나의 카드에 들어갈 수 없으므로 레이어로 나눈 후 이 모델의 일부 레이어를 첫 번째 카드에 배치합니다. 예를 들어 아래 그림에서 녹색 영역은 GPU 0을 나타내고 빨간색 영역은 GPU 1을 나타냅니다. 처음 몇 개의 레이어를 GPU 0에 놓고 다른 몇 개의 레이어를 GPU 1에 놓을 수 있습니다. 데이터가 흐르면 먼저 GPU 0에서 두 번 정방향을 수행한 다음 GPU 1에서 한 번 정방향 및 역방향으로 한 번 수행한 다음 GPU 0으로 돌아가서 두 번 역방향을 수행합니다. 이 프로세스는 특히 파이프라인과 유사하므로 파이프라인 병렬 처리라고 합니다.

그러나 파이프라인 병렬 처리에는 파이프라인 버블이라는 주요 문제가 있습니다. 데이터 사이에 종속성이 있고 그라디언트는 이전 레이어의 계산에 따라 달라지므로 데이터 흐름 과정에서 거품이 생성되어 공허함을 유발합니다. 이러한 문제에 대응하여 서로 다른 미니 배치의 실행 전략을 조정하여 거품의 비움 시간을 줄입니다.

이상은 이 문제를 바라보는 알고리즘 엔지니어나 프레임워크 엔지니어의 관점이다. 인프라 엔지니어의 관점에서 우리는 인프라에 가져올 다양한 변화에 대해 더 우려하고 있습니다.

여기서는 통신 의미론에 중점을 둡니다. 이는 정방향과 역방향 사이에 있으며 고유한 활성화 값과 기울기 값을 전달해야 하므로 추가 보내기/받기 작업이 발생합니다. 그리고 Send/Receive는 point-to-point이므로 이 문서의 뒷부분에서 솔루션에 대해 언급할 것입니다.

위는 저장소의 벽인 파이프라인 병렬 처리를 허무는 첫 번째 병렬 모델 세분화 전략입니다.

두 번째 세분화 방법은 너무 큰 단일 레이어 매개변수 문제를 해결하는 텐서 병렬 처리입니다.

모델에 많은 계층이 있지만 계층 중 하나는 계산 집약적입니다. 이때 이 레이어의 계산량은 기계간 또는 카드간 공동으로 계산될 것으로 예상합니다. 알고리즘 엔지니어의 관점에서 솔루션은 서로 다른 입력을 여러 부분으로 나눈 다음 서로 다른 부분을 사용하여 부분 계산을 수행하고 마지막으로 집계를 수행하는 것입니다.

하지만 인프라 엔지니어 입장에서는 이 과정에서 어떤 추가 작업이 도입될지 여전히 주목하고 있습니다. 방금 언급한 시나리오에서 추가 연산은 그래프에서 f와 g입니다. f와 g는 무엇을 의미합니까? 정방향으로 할 때 f는 불변 연산이고 x는 f를 통해 투명하게 전달되며 일부 계산은 나중에 수행할 수 있습니다. 그러나 마지막에 결과가 집계되면 전체 값을 전달해야 합니다. 이 경우 g의 연산을 도입할 필요가 있다. g는 출력 z가 두 카드에서 동일한 데이터를 얻을 수 있도록 두 개의 서로 다른 값을 의미론적으로 집계하는 AllReduce의 작업입니다.

따라서 인프라 엔지니어의 관점에서 볼 때 추가 AllReduce 통신 작업을 도입하는 것을 볼 수 있습니다. 이 작업의 통신 트래픽은 여전히 ​​상대적으로 큽니다. 그 이유는 매개변수가 상대적으로 크기 때문입니다. 기사 뒷부분에서 대처 방법에 대해서도 언급하겠습니다.

스토리지의 벽을 허물 수 있는 두 번째 최적화 방법입니다.

슬라이싱의 세 번째 방법은 그룹화 매개변수 슬라이싱입니다 . 이 방법은 데이터 병렬화에서 메모리 중복성을 어느 정도 줄입니다. 기존 데이터 실행에서 각 카드에는 고유한 모델 매개변수와 최적화 상태가 있습니다. 각각의 교육 프로세스 중에 동기화 및 업데이트가 필요하므로 이러한 상태는 다른 카드에 완전히 백업됩니다.

위의 과정에서 사실상 동일한 데이터와 매개변수가 서로 다른 카드에 중복 저장됩니다. 대형 모델에는 매우 높은 저장 공간 요구 사항이 있기 때문에 이러한 중복 저장은 허용되지 않습니다. 이 문제를 해결하기 위해 모델 매개변수를 분할하고 매개변수의 일부만 각 카드에 유지합니다.

계산이 정말로 필요한 경우 시간과 공간을 맞바꿉니다. 먼저 매개변수를 동기화한 다음 계산이 완료된 후 중복 데이터를 폐기합니다. 이러한 방식으로 비디오 메모리에 대한 수요를 더욱 압축할 수 있으며 기존 시스템에서 교육을 더 잘 수행할 수 있습니다.

마찬가지로 인프라 엔지니어의 관점에서 브로드캐스트와 같은 통신 작업을 도입해야 하며 통신 내용은 이러한 옵티마이저의 상태와 모델의 매개 변수입니다.

위는 저장 벽을 허물기 위한 세 번째 최적화 방법입니다.

위에서 언급한 메모리 최적화 방법 및 전략 외에도 모델 계산량을 줄이는 또 다른 방법이 있습니다.

데이터의 양이 충분히 크면 모델의 매개변수가 많을수록 모델의 정확도가 높아집니다. 그러나 매개변수가 증가함에 따라 계산량도 증가하여 더 많은 리소스가 필요하고 동시에 계산 시간도 길어집니다.

그렇다면 매개변수 스케일이 변경되지 않은 상태에서 계산량을 줄이는 방법은 무엇입니까? 솔루션 중 하나는 특정 조건(즉, 오른쪽 그림의 게이팅 계층 또는 라우팅 계층이라고 함)에 따라 일부 매개 변수를 선택하고 활성화하는 조건부 컴퓨팅입니다.

예를 들어 오른쪽 그림에서 파라미터를 세 부분으로 나누고 모델의 조건에 따라 전문가 네트워크 2에서 계산을 위해 파라미터의 일부만 활성화합니다. 전문가 1과 전문가 3의 일부 매개변수는 계산되지 않습니다. 이렇게 하면 파라미터 스케일을 확보하면서 계산량을 줄일 수 있습니다.

위는 계산량을 줄이기 위해 조건부 계산을 기반으로 한 방법입니다.

위의 방법을 기반으로 업계 에서는 모델을 여러 전문가로 추상화하고 카드마다 다른 샘플을 처리하는 혼합 전문가 모델을 제안했습니다 . 특히 일부 라우팅 선택 항목이 모델 계층에 삽입된 다음 이 선택 항목에 따라 매개 변수 중 일부만 활성화됩니다. 동시에 다른 전문가의 매개 변수는 다른 카드에 보관됩니다. 이런 식으로 샘플 배포 과정에서 계산을 위해 다른 카드에 할당됩니다.

하지만 인프라 엔지니어의 관점에서 우리는 이 과정에서 All2All 운영이 도입되었음을 발견했습니다. 아래 오른쪽 그림과 같이 0, 1, 2, 3과 같은 샘플이 여러 Device에 저장되어 있습니다. 장치의 값은 계산에 적합한 카드 또는 계산에 적합한 전문가를 나타냅니다. 예를 들어, 0은 0번 전문가, 즉 0번 카드 등으로 계산하기에 적합함을 의미한다. 각 카드는 저장된 데이터를 계산하기에 적합한 사람을 결정합니다.예를 들어 1번 카드는 일부 매개변수가 0번 카드의 계산에 적합하고 다른 매개변수는 1번 카드의 계산에 적합하다고 판단합니다. 그런 다음 다음 작업은 샘플을 다른 카드에 배포하는 것입니다.

위의 작업 후 0번 카드의 샘플은 모두 0이고 1번 카드의 샘플은 모두 1입니다. 위의 과정을 통신에서는 All2All이라고 합니다. 인프라 엔지니어의 관점에서 볼 때 이 작업은 상대적으로 과중한 작업이므로 이를 기반으로 몇 가지 관련 최적화를 수행해야 합니다. 또한 다음 텍스트에서 더 자세히 소개합니다.

이 모드에서 우리가 관찰한 현상 중 하나는 혼합 전문가 모드를 사용하면 동일한 매개 변수의 모델에서 방금 언급한 다양한 병렬 전략 및 하이브리드 중첩 전략만큼 훈련 정확도가 좋지 않다는 것입니다. 실제 상황에.

방금 몇 가지 병렬 전략을 소개한 다음 Baidu Smart Cloud의 내부 사례를 공유하겠습니다.

Paddle을 사용하여 2,600억 개의 매개변수가 있는 대규모 모델을 학습하고 최적화된 Transformer 클래스의 일부 레이어를 쌓았습니다. 예를 들어 파이프라인 병렬 전략을 사용하여 트랜스포머 계층에 따라 모델을 수직으로 슬라이스할 수 있습니다. Cross-cutting은 모델 병렬 전략/텐서 병렬 전략을 사용하여 Transformer 내부의 MetaMul과 같은 큰 행렬 곱셈의 계산을 분할하는 것입니다. 동시에 데이터 병렬화의 수직적 최적화와 데이터 병렬화에서 그룹화 모델 파라미터 세분화의 비디오 메모리 최적화로 보완했습니다. 위의 네 가지 방법을 통해 플라잉 패 들의 4D 하이브리드 병렬 훈련 프레임워크를 도입했습니다 .

1,000억 매개변수 모델의 훈련 구성에서 우리는 머신에서 8개의 카드를 사용하여 텐서 병렬 처리를 수행하고 동시에 데이터 병렬 처리와 협력하여 일부 그룹화 매개 변수 세분화 작업을 수행합니다. 동시에 여러 기계 그룹을 사용하여 2,600억 개의 모델 매개변수를 전달하는 병렬 파이프라인을 형성합니다. 마지막으로 모델의 월별 교육을 완료하기 위해 분산 컴퓨팅에 데이터 병렬 방법을 사용합니다.

위는 전체 모델 병렬 매개 변수 모델 병렬 전략의 실제 전투입니다.

다음으로 인프라의 관점으로 돌아가 모델 교육에서 다양한 세분화 전략의 통신 및 컴퓨팅 성능 요구 사항을 평가해 보겠습니다.

표에서와 같이 1,000억 개의 매개변수 규모에 따라 다양한 세분화 방법에 필요한 통신 트래픽과 컴퓨팅 시간을 나열합니다. 전체 훈련 과정의 관점에서 볼 때 가장 좋은 효과는 계산 과정과 의사 소통 과정이 서로 완전히 덮이거나 겹칠 수 있다는 것입니다.

이 표에서 클러스터, 하드웨어, 네트워크 및 전체 통신 모드에 대한 1000억 매개변수 모델의 요구 사항을 추론할 수 있습니다. 3000억 단어를 사용하여 1024개의 A100 카드에서 훈련된 약 1750억 개의 매개변수가 있는 모델을 기반으로 전체 종단간 훈련을 완료하는 데 34일이 걸립니다.

위는 하드웨어 측면에 대한 우리의 평가입니다.

하드웨어 요구 사항에 따라 다음 단계는 독립 실행형 및 네트워크 수준을 선택하는 것입니다.

독립 실행형 수준에서 많은 수의 AllReduce 및 Broadcast 작업이 머신에서 수행되어야 하므로 머신이 고성능 고대역폭 연결을 지원할 수 있기를 바랍니다. 그래서 우리는 당시 모델 선택에서 가장 진보된 A100 80G 패키지를 사용했고, 8개의 A100을 사용하여 단일 기계를 구성했습니다.

또한 외부 네트워크 연결 방식에서 가장 중요한 것은 토폴로지 연결 방식이다. 우리는 네트워크 카드와 GPU 카드가 가능한 한 동일한 PCIe 스위치 아래에 있을 수 있고 전체 훈련 과정 동안 카드 간의 상호 작용의 처리량 병목 현상이 대칭적인 방식으로 더 잘 줄어들 수 있기를 바랍니다. 동시에 CPU의 PCIe 루트 포트를 통과하지 않도록 하십시오.

 

독립형에 대해 이야기한 후 클러스터 네트워크의 설계를 살펴보겠습니다.

먼저 요구 사항을 평가해 보겠습니다. 우리의 비즈니스 기대가 End-to-End 모델 교육을 1개월 이내에 완료하는 것이라면 단일 작업 교육에서는 킬로칼로리 수준, 대형 모델에서는 10,000칼로리 수준에 도달해야 합니다. 훈련 클러스터. 따라서 네트워크 설계 과정에서 다음 두 가지 사항을 고려해야 합니다.

첫째, 파이프라인에서 Send/Receive의 point-to-point 동작을 충족시키기 위해서는 P2P 지연을 줄여야 합니다.

둘째, AI 훈련에서 네트워크 측 트래픽이 동일한 카드의 AllReduce 작업에 집중되어 있기 때문에 통신 처리량도 높기를 바랍니다.

이 커뮤니케이션 필요를 위해. 오른쪽과 같은 3계층 CLOS 아키텍처의 토폴로지를 설계했습니다. 전통적인 방법과 비교할 때 이 토폴로지의 가장 중요한 점은 8개의 가이드 레일을 최적화하여 서로 다른 기계에서 동일한 번호를 가진 카드 통신의 점프 횟수를 가능한 한 작게 만드는 것입니다.

CLOS 아키텍처에서 맨 아래 계층은 Unit입니다. 각 유닛에는 20대의 머신이 있으며, 각 머신의 동일한 번호의 GPU 카드를 해당 번호의 동일한 TOR 그룹에 연결합니다. 이런 방식으로 단일 유닛의 동일한 번호의 모든 카드는 단 하나의 홉으로 통신을 완료할 수 있으므로 동일한 번호의 카드 간의 통신을 크게 향상시킬 수 있습니다.

그러나 하나의 장치에 총 160개의 카드가 있는 기계가 20대뿐이어서 대형 모델 교육에 대한 요구 사항을 충족할 수 없습니다. 그래서 두 번째 레이어인 Leaf 레이어를 디자인했습니다. 리프 계층은 서로 다른 단위의 동일한 번호를 가진 카드를 동일한 리프 그룹의 스위칭 장치에 연결하여 동일한 번호의 카드를 상호 연결하는 문제를 여전히 해결합니다. 이 레이어를 통해 20개의 장치를 다시 연결할 수 있습니다. 지금까지 총 3200개의 카드로 400대의 기계를 연결할 수 있었습니다. 이러한 3200개 카드 클러스터의 경우 동일한 번호의 두 카드 간의 통신은 최대 3개의 홉을 홉핑하여 실현할 수 있습니다.

번호가 다른 카드의 통신을 지원하려면 어떻게 해야 합니까? 번호가 다른 카드 간의 통신 문제를 해결하기 위해 상단에 Spine 레이어를 추가했습니다.

이러한 3계층 아키텍처를 통해 AllReduce 작업에 최적화된 3200개의 카드를 지원하는 전체 아키텍처를 구현했습니다. IB의 네트워크 장비에 있는 경우 아키텍처는 16000 카드 규모를 지원할 수 있으며 이는 현재 IB 박스형 네트워킹의 최대 규모이기도 합니다.

CLOS 아키텍처를 Dragonfly, Torus 등과 같은 다른 네트워크 아키텍처와 비교했습니다. 이에 비해 이 아키텍처의 네트워크 대역폭은 더 충분하고 노드 간 홉 수가 더 안정적이어서 예측 가능한 훈련 성능을 추정하는 데 매우 유용합니다.

위는 독립형에서 클러스터 네트워크에 이르기까지 일련의 구축 아이디어입니다.

3. 소프트웨어와 하드웨어 결합의 공동 최적화

대규모 모델 교육은 하드웨어를 구입하고 교육을 완료하기 위해 배치하는 것을 의미하지 않습니다. 또한 하드웨어와 소프트웨어의 공동 최적화가 필요합니다.

먼저 계산 최적화에 대해 이야기해 보겠습니다. 대형 모델의 교육은 전체적으로 여전히 계산 집약적인 프로세스입니다. 컴퓨팅 최적화 측면에서 현재의 많은 아이디어와 아이디어는 정적 그래프의 다중 백엔드 가속을 기반으로 합니다. Paddle , PyTorch, TensorFlow 등 사용자가 구성한 그래프는 먼저 그래프 캡처를 통해 동적 그래프를 정적 그래프로 변환한 다음 정적 그래프를 백엔드에 입력하여 가속화합니다.

아래 그림은 전체 정적 그래프 기반 다중 백엔드 아키텍처를 보여주며, 다음 부분**으로 나뉩니다. **

첫 번째는 동적 그래프를 정적 그래프로 변환하는 그래프 액세스입니다.

두 번째는 서로 다른 백엔드를 통해 타이밍 기반 최적화 기능을 제공하는 다중 백엔드 액세스 방식입니다.

세 번째는 그래프 최적화입니다.정적 그래프에 대한 일부 계산 최적화 및 그래프 변환을 수행하여 컴퓨팅 효율성을 더욱 향상시켰습니다.

마지막으로 일부 사용자 지정 연산자를 사용하여 전체 대형 모델의 교육 프로세스 속도를 높일 것입니다.

아래에서 따로 소개하도록 하겠습니다.

대형 모델의 교육 아키텍처에서 첫 번째 부분은 그래프 액세스입니다. AI 프레임워크에서 그래프를 설명할 때 보통 정적 그래프와 동적 그래프로 나뉜다.

정적 그래프는 사용자가 그래프를 실행하기 전에 구성한 다음 실제 입력과 함께 실행하는 것입니다. 이러한 특성과 결합하여 일부 컴파일 최적화 또는 일정 최적화를 계산 프로세스 중에 미리 수행할 수 있으므로 교육 성능을 더 향상시킬 수 있습니다.

그러나 이에 상응하는 것은 동적 그래프의 구축 과정이다. 사용자는 임의의 코드를 작성하고 작성 프로세스 중에 동적으로 실행됩니다. 예를 들어 PyTorch는 사용자가 명령문을 작성한 후 관련 실행 및 평가를 수행합니다. 사용자에게 이 접근 방식의 장점은 개발 및 디버그가 쉽다는 것입니다. 그러나 실행기 또는 가속 프로세스의 경우 볼 때마다 작업의 작은 부분이기 때문에 최적화가 잘 이루어지지 않습니다.

이 문제를 해결하기 위해 일반적인 아이디어는 동적 그래프와 정적 그래프를 통합하고 동적 그래프를 사용하여 개발한 다음 정적 그래프를 통해 실행하는 것입니다. 현재 우리가 보는 구현 경로는 주로 두 가지입니다.

첫 번째는 Python AST를 기반으로 정적 변환을 수행하는 것입니다. 예를 들어 사용자가 작성한 Python 소스 코드를 가져와 Python AST 트리로 변환한 다음 AST 트리를 기반으로 CodeGen을 수행합니다. 이 과정에서 Python의 동적 소스 코드는 정적 그룹 그래프의 메서드와 API를 사용하여 정적 그래프로 변환할 수 있습니다.

하지만 이 과정에서 가장 큰 문제는 파이썬 언어의 유연성인데, 이는 정적 분석이 시맨틱을 잘 이해하지 못하여 동적 이미지를 정적 이미지로 변환하는 데 실패하는 원인이 됩니다. 예를 들어, 정적 분석 과정에서 동적 유형을 유추할 방법이 없으며, 예를 들어 정적 분석은 범위의 범위를 유추할 수 없어 실제 변환 프로세스에서 빈번한 오류가 발생합니다. 따라서 정적 변환은 일부 간단한 모델 시나리오에만 적용할 수 있습니다.

두 번째 경로는 추적 또는 기호 추적을 통해 간단한 실행 및 시뮬레이션을 수행하는 것입니다. Tracer는 기록 과정에서 발생하는 일부 컴퓨팅 노드를 기록하고, 이러한 컴퓨팅 노드를 기록한 후 재생 또는 재구성을 통해 사후 전체 정적 그래프를 구성합니다. 이 방법의 장점은 일부 입력 방법을 시뮬레이션하거나 특수 구조 방법을 구성하여 전체 동적 그래프를 캡처하고 계산한 다음 보다 성공적으로 경로를 캡처할 수 있다는 것입니다.

하지만 이 과정에는 사실 몇 가지 문제가 있습니다. 입력에 의존하는 분기 또는 루프 구조의 경우 Tracer는 시뮬레이션된 입력을 구성하여 정적 그래프를 구성하므로 일부 분기로만 이동하므로 보안 문제가 발생합니다.

이러한 방법을 비교한 결과 Python의 기존 언어 유연성 하에서 이 단계에서 동적 그래프를 정적 그래프로 변환하는 것은 기본적으로 불가능한 작업임을 발견했습니다. 따라서 우리의 초점은 클라우드에서 사용자에게 보다 안전하고 사용하기 쉬운 이미지 변환 기능을 제공하는 방법으로 이동했습니다. 이 단계에서 다음과 같은 몇 가지 옵션이 있습니다.

첫 번째 솔루션은 AST 코드 교체 기반 방법을 개발하는 것입니다. 이 방법에서 Baidu Smart Cloud는 사용자에게 민감하지 않은 해당 모델 변환 및 최적화 기능을 제공합니다. 예를 들어, 사용자가 소스 코드의 일부를 입력했지만 일부 코드(그림에서 XXXX 및 YYYY로 표시됨)는 정적 이미지 캡처, 그래프 최적화 및 연산자 최적화 과정에 있습니다. 코드는 동적 그래프를 정적 그래프로 변환할 수 없거나 코드에 성능 최적화의 여지가 있습니다. 그런 다음 중간 그림과 같이 대체 코드를 작성합니다. 왼쪽에는 우리가 교체할 수 있다고 생각하는 Python 코드 조각이 있고 오른쪽에는 우리가 교체한 또 다른 Python 코드 조각이 있습니다. 그런 다음 AST 일치 방법을 사용하여 사용자의 입력과 원래 대상 패턴을 AST로 변환하고 하위 트리 트리 일치 알고리즘을 실행합니다.

이런 식으로 원래 입력된 XXXX, YYYY를 WWWW, HHHH로 변경하고 더 잘 실행될 수 있는 솔루션으로 전환하여 동적 이미지를 정적 이미지로 변환하는 성공률을 어느 정도 향상시키고 동시에 성능, 그리고 사용자가 기본적으로 둔감한 효과를 얻을 수 있습니다.

두 번째는 커뮤니티의 일부 솔루션, 특히 PyTorch 2.0에서 제안한 TorchDynamo 솔루션으로, 지금까지 본 솔루션 중 컴퓨팅 최적화에 더 적합한 솔루션입니다. 부분 그래프 캡처를 달성할 수 있으며 지원되지 않는 구조는 Python으로 대체할 수 있습니다. 이러한 방식으로 일부 하위 그래프를 백엔드로 어느 정도 내보낼 수 있으며, 그러면 백엔드는 이러한 하위 그래프에 대한 계산을 더욱 가속화할 수 있습니다.

전체 그래프를 캡처한 후 다음 단계는 실제로 컴퓨팅 가속, 즉 백엔드 가속을 시작하는 것입니다.

GPU 컴퓨팅의 타이밍 다이어그램에서 핵심 포인트는 메모리 액세스 시간과 컴퓨팅 시간이라고 생각합니다. 이번에는 다음 각도에서 가속합니다.

첫 번째는 연산자 융합입니다. 연산자 융합의 주요 이점은 커널 시작에 소요되는 시간을 줄이고 컴퓨팅 밀도를 높이며 추가 메모리 액세스를 줄이는 것입니다. 연산자의 단위 메모리 액세스당 계산 수를 계산 밀도로 정의합니다.

컴퓨팅 밀도의 차이에 따라 연산자를 컴퓨팅 집약형과 메모리 집약형의 두 가지 유형으로 나눕니다. 예를 들어 GEMM은 전형적인 연산 집약적인 연산자이고 Elementwise는 전형적인 메모리 집약적인 연산자입니다. 우리는 "계산 집약적 연산자 + 메모리 집약적 연산자"와 "메모리 집약적 연산자 + 메모리 집약적 연산자" 간에 좋은 융합이 이루어질 수 있음을 발견했습니다.

우리의 목표는 GPU에서 실행되는 모든 연산자를 부분 계산 집약적인 연산자로 변환하여 컴퓨팅 성능을 최대한 활용할 수 있도록 하는 것입니다.

왼쪽은 우리의 예입니다.예를 들어 Transformer 구조에서 가장 중요한 Multihead Attention은 좋은 융합을 할 수 있습니다. 동시에 오른쪽에서 찾은 다른 모델이 있으며 공간 제한으로 인해 하나씩 나열하지 않습니다.

컴퓨팅 최적화의 또 다른 유형은 연산자 구현의 최적화입니다.

오퍼레이터 구현의 본질적인 문제는 전체 컴퓨팅 프로세스를 더 잘 실현하기 위해 컴퓨팅 로직을 칩 아키텍처와 결합하는 방법입니다. 현재 세 가지 유형의 시나리오가 있습니다.

첫 번째 범주는 손으로 쓴 연산자입니다. 관련 제조업체는 cuBLAS 및 cuDNN과 같은 운영자 라이브러리를 제공합니다. 제공하는 오퍼레이터 성능은 최고지만 지원하는 오퍼레이션이 제한적이고 커스텀 개발에 대한 지원이 상대적으로 부족합니다.

두 번째 범주는 CUTLASS와 같은 반자동 템플릿입니다. 이 방법은 오픈 소스 추상화를 만들어 개발자가 2차 개발을 수행할 수 있도록 합니다. 이것은 또한 계산 집약적 연산자와 메모리 집약적 연산자의 융합을 달성하기 위해 현재 우리가 사용하는 방법입니다.

세 번째는 검색 기반 최적화입니다. 커뮤니티에서 Halide 및 TVM과 같은 일부 컴파일 방법에 주의를 기울였습니다. 현재 이 방법은 일부 연산자에 효과적인 것으로 확인되었지만 다른 연산자에 대해서는 추가 연마가 필요합니다.

실제로는 이 세 가지 방법이 나름의 장단점이 있기 때문에 타이밍 선택을 통해 최적의 구현을 해드립니다.

컴퓨팅 최적화에 대해 이야기한 후 몇 가지 통신 최적화 방법을 공유해 보겠습니다.

첫 번째는 스위치 해시 충돌 문제의 해결입니다. 아래 그림은 우리가 한 실험으로, 32개의 카드 작업을 설정하고 매번 30번의 AllReduce 작업을 수행했습니다. 아래 그림은 우리가 측정한 통신 대역폭으로 속도가 느려질 확률이 높다는 것을 알 수 있습니다. 이것은 대규모 모델 학습에서 심각한 문제입니다.

속도 저하의 원인은 해시 충돌 때문입니다. 네트워크 설계에서 스위치는 수렴 비율이 없습니다. 즉, 네트워크 설계의 대역폭 리소스는 충분하지만 이더넷 쿼드러플 라우팅을 기반으로 하는 방법인 RoCE를 사용하기 때문에 네트워크 측의 트래픽 충돌은 여전히 ​​발생할 수 있습니다. 발생합니다.

예를 들어, 아래 그림의 예에서 녹색 기계는 서로 통신해야 하고 빨간색 기계도 서로 통신해야 합니다. 그런 다음 경로 선택 과정에서 모든 사람의 통신은 다음과 같은 이유로 동일한 대역폭을 놓고 경쟁하게 됩니다. 전체 네트워크 대역폭이 충분하더라도 로컬 네트워크 핫스팟이 여전히 형성되어 통신 성능이 저하됩니다.

우리의 솔루션은 실제로 매우 간단합니다. 전체 통신 프로세스에는 소스 IP, 소스 포트, 대상 IP 및 대상 포트의 네 가지 튜플이 있습니다. 소스 IP, 대상 IP 및 대상 포트는 고정되어 있지만 소스 포트는 조정할 수 있습니다. 이 기능을 활용하여 소스 포트를 지속적으로 조정하여 다른 경로를 선택한 다음 전체 욕심 알고리즘을 사용하여 해시 충돌 발생을 최소화합니다.

통신 최적화에서 방금 언급한 AllReduce의 일부 최적화 외에도 All2All, 특히 8개 레일에 대해 특별히 맞춤화된 네트워크에 대한 최적화를 위한 특정 공간이 있습니다.

이 네트워크는 전체 All2All의 작동에서 상위 계층 스파인 스위치에 많은 압력을 가할 것입니다. 최적화 방법은 NCCL에서 Rail-Local All2All을 사용하거나 PXN의 최적화를 사용하는 것입니다. 기계 내부의 고성능 NVLink를 통해 서로 다른 번호의 카드간 통신을 같은 번호의 카드간 통신으로 변환하는 원리입니다.

이와 같이 원래 스파인 레이어로 올라간 머신 간의 모든 네트워크 통신을 머신 내 통신으로 변환하여 TOR 레이어 또는 리프 레이어 통신만 사용하여 번호가 다른 카드의 통신을 실현할 수 있도록 하고, 성능도 향상됩니다.큰 개선이 있습니다.

또한 RoCE에서 수행된 이러한 최적화 외에도 Infiniband를 활성화하여 달성할 수 있는 또 다른 직접적인 효과가 있습니다. 예를 들어 방금 언급한 스위치 해시 충돌은 자체 적응형 라우팅으로 처리할 수 있습니다. AllReduce의 경우 Sharp와 같은 몇 가지 고급 기능도 포함되어 있어 AllReduce 컴퓨팅 작업의 일부를 네트워크 장치로 잘 오프로드하여 컴퓨팅 장치를 해제하고 컴퓨팅 성능을 향상시킬 수 있습니다. 이 방법을 통해 AllReduce의 훈련 효과를 다시 잘 향상시킬 수 있습니다.

컴퓨팅 및 통신의 최적화에 대한 이야기를 마쳤습니다. 이 문제를 처음부터 끝까지 살펴보겠습니다.

전체 대형 모델 교육의 관점에서 실제로 두 부분으로 나뉘는데 첫 번째 부분은 모델 코드이고 두 번째 부분은 고성능 네트워크입니다. 이 두 가지 수준에서 시급히 해결해야 할 문제가 있습니다. 여러 세분화 전략 후에 모델을 배치하는 데 가장 적합한 카드는 무엇입니까?

예를 들어 텐서 병렬화를 할 때 텐서 계산을 두 부분으로 나누어야 합니다. 블록의 계산 결과 사이에는 많은 AllReduce 연산이 필요하므로 높은 대역폭이 필요합니다.

서로 다른 기계의 두 카드에 두 개의 텐서 컷을 병렬로 넣으면 네트워크 통신이 도입되어 성능 문제가 발생합니다. 반대로 이 두 조각을 같은 기계에 넣으면 컴퓨팅 작업을 효율적으로 완료하고 교육 효율성을 높일 수 있습니다. 따라서 배치 문제의 핵심 매력은 세그먼트화된 모델과 이기종 하드웨어 간의 가장 적합하거나 가장 성능이 좋은 매핑 관계를 찾는 것입니다.

초기 모델 교육에서는 전문 경험적 지식을 기반으로 수동으로 매핑을 수행했습니다. 예를 들어, 아래 그림은 우리가 비즈니스 팀과 협력할 때 기계의 대역폭이 좋다고 생각할 때 기계에 넣는 것을 권장한다는 것을 보여줍니다. 기계실에 개선 사항이 있다고 생각되면 기계실에 두는 것이 좋습니다.

공학적 또는 체계적인 솔루션이 있습니까?

우리의 핵심 솔루션은 컴퓨팅과 커뮤니케이션을 위한 비용 모델을 구축한 다음 비용 모델을 기반으로 검색 최적화를 수행하는 것입니다. 이러한 방식으로 최적의 매핑이 생성됩니다.

전체 프로세스에서 프레임워크 측의 모델 네트워크는 먼저 추상화 및 분할되고 컴퓨팅 프레임워크 다이어그램에 매핑됩니다. 동시에 독립 실행형 및 클러스터의 컴퓨팅 및 통신 기능을 모델링하여 클러스터의 토폴로지 맵을 생성합니다.

오른쪽 그림의 왼쪽에 있는 모델에 컴퓨팅 및 통신 요구 사항이 있고 그림 오른쪽에 있는 하드웨어에 대한 컴퓨팅 및 통신 기능이 있을 때 그래프 알고리즘 또는 기타 검색을 통해 모델을 분할하고 매핑할 수 있습니다. 방법, 그리고 마지막으로 오른쪽 그림 하단에서 최적의 솔루션을 얻습니다.

실제 대형 모델 학습 과정에서 최종 성능을 2.1배 향상시킬 수 있습니다.

4. 대형 모델의 개발은 인프라의 진화를 촉진합니다.

마지막으로 대형 모델이 향후 인프라에 어떤 새로운 요구 사항을 적용할지 논의하겠습니다.

지금까지 세 가지 변경 사항이 있습니다. 첫 번째는 모델의 매개변수이며 모델 매개변수는 GPT-3의 1,750억에서 PaLM의 5,400억으로 계속 증가할 것입니다. 미래 매개변수 성장의 최종 가치에 대해서는 약 60조 매개변수 규모로 인간의 뇌를 참고할 수 있습니다.

두 번째는 멀티모달 트레이닝입니다. 앞으로 우리는 더 많은 모달 데이터를 다룰 것입니다. 다른 모달 데이터는 저장, 계산 및 비디오 메모리에 더 많은 문제를 야기합니다.

세 번째는 이기종 리소스입니다. 앞으로 우리는 점점 더 많은 이기종 자원을 갖게 될 것입니다. 교육 과정에서 다양한 유형의 컴퓨팅 성능을 더 잘 사용하는 방법도 해결해야 할 시급한 과제입니다.

동시에 비즈니스 관점에서 전체 교육 프로세스에는 다양한 유형의 작업이 있을 수 있으며 동시에 전통적인 GPT-3 교육, 강화 학습 교육 및 데이터 레이블 지정 작업이 있을 수 있습니다. 이기종 클러스터에 이러한 이기종 작업을 더 잘 배치하는 방법은 더 큰 문제가 될 것입니다.

우리는 현재 여러 가지 방법을 보았는데 그 중 하나는 통합 보기를 기반으로 한 엔드 투 엔드 최적화입니다. 이기종 리소스 클러스터 아래 배치의 작업 및 다중 작업. 탄력적 스케줄링 기능과 결합하여 클러스터 리소스의 변화를 더 잘 감지할 수 있습니다.

위에서 언급한 모든 기능은 Baidu Baige의 AI 이기종 컴퓨팅 플랫폼에 통합되었습니다.

--끝--

권장 읽기 :

부정 행위 방지 활동 장면에서 그래프 알고리즘 적용에 대해 이야기하기

서버리스: 개인화된 서비스 초상화를 기반으로 한 유연한 확장 사례

이미지 애니메이션 적용에서의 액션 분해 방법

성능 플랫폼 데이터 가속화 로드

편집 AIGC 영상 제작 공정 배치 실습

비디오 이해에 대해 이야기하는 Baidu 엔지니어

{{o.이름}}
{{이름}}

추천

출처my.oschina.net/u/4939618/blog/8590603