이 공유에서는 AI 모델 훈련 과정의 주요 성능 병목 현상과 이러한 병목 현상에 대한 현재의 주요 가속 솔루션 및 기술 원리를 체계적으로 분석하고 이와 관련하여 Baidu Intelligent Cloud의 몇 가지 실제 결과를 소개합니다.
오늘 공유는 크게 세 부분으로 구성됩니다.
먼저 AI 훈련을 가속화해야 하는 이유, 즉 전반적인 배경과 출발점이 무엇인지 소개하겠습니다.
두 번째 부분에서는 AI 교육의 가능성을 체계적으로 분석합니다. 실제 훈련 과정 직면하게 될 성능 병목 문제와 이러한 문제를 해결하기 위한 현재의 주요 가속 솔루션을 소개합니다.
세 번째 부분에서는 Baidu Baige 플랫폼의 AI 훈련 가속 제품군 AIAK-훈련의 실제 효과를 소개합니다. 훈련.
AI 시스템에서 모델 생산부터 적용까지의 프로세스에는 일반적으로 오프라인 훈련과 추론 배포의 두 단계가 포함됩니다.
오프라인 훈련 단계는 모델을 생성하는 과정입니다. 사용자는 자신의 작업 시나리오에 따라 모델 훈련에 필요한 데이터 세트와 신경망 알고리즘을 준비해야 합니다.
알고리즘은 많은 변수와 매개변수를 포함하는 매우 복잡한 비볼록 수학 함수로 이해될 수 있습니다. 모델 훈련 과정은 실제로 신경망 모델의 매개변수를 학습하는 것입니다.
모델 훈련이 시작된 후 데이터를 읽은 다음 순방향 계산을 위해 모델로 전송하고 실제 값과의 오류가 계산됩니다. 그런 다음 역계산을 수행하여 매개변수 기울기를 얻고 마지막으로 매개변수를 업데이트합니다. 훈련에는 여러 차례의 데이터 반복이 포함됩니다.
훈련이 완료된 후 훈련된 모델을 저장한 다음 모델을 온라인에 배포하고 사용자의 실제 입력을 받아들인 다음 순방향 계산을 통해 추론을 완료합니다.
따라서 훈련이든 추론이든 핵심은 데이터 계산입니다. 컴퓨팅 효율성을 높이기 위해 훈련과 추론은 일반적으로 GPU와 같은 이기종 가속 칩을 통해 수행됩니다.
또한, 딥러닝 모델의 개발 역사로 볼 때, 모델 정확도의 상한선을 계속해서 돌파하기 위해 실제로 모델 매개변수의 수가 급속히 늘어나고 있습니다. 그러나 매개변수 수가 많을수록 계산이 더 복잡해집니다.
아래 그림의 왼쪽은 공개 논문에서 가져온 것입니다. 이 요약을 보면 2010년 이전에는 모델의 계산량이 약 20개월 만에 두 배로 늘어났음을 알 수 있습니다. 2010년부터 2015년까지 기존 모델 계산은 5~6개월마다 두 배로 늘어났습니다. 2015년 이후에는 대규모 모델 학습 추세가 나타나며 계산량이 10~100배 증가했습니다.
모델 교육에는 컴퓨팅 성능과 인프라에 대한 요구 사항이 점점 더 높아지고 있습니다. 교육에는 더 많은 컴퓨팅 성능이 필요하고 시간이 더 오래 걸리므로 리소스 비용도 더 많이 듭니다. 여기에는 모델 학습 비용이 매우 높다는 것을 반영하는 일부 논문이나 연구에서 공개된 비용 데이터가 나열되어 있습니다.
따라서 어떻게 모델 훈련을 안정적으로 진행하는지, 지속적으로 비용을 절감하고 효율성을 높이는 방법이 중요합니다.
이런 맥락에서 Baidu Intelligent Cloud는 AI 시나리오를 위한 통합 소프트웨어 및 하드웨어 솔루션 제공을 목표로 Baidu Baige·AI 이기종 컴퓨팅 플랫폼을 출시했습니다. AI 컴퓨팅, AI 스토리지, AI 가속 및 AI 컨테이너의 4계층 기술 스택을 통해 상위 수준 비즈니스 시나리오의 요구 사항을 충족합니다.
성능 가속화에 대해 생각할 때 가장 먼저 떠오르는 것은 더 나은 하드웨어를 사용하는 것일 수 있습니다.
이로 인해 어느 정도 성능이 향상되지만 대부분의 경우 하드웨어의 컴퓨팅 성능이 완전히 활용되지 않을 수 있습니다. 핵심 이유는 훈련 코드의 실행 효율성이 최적 또는 더 나은 상태로 조정되지 않았기 때문입니다.
따라서 특정 모델 알고리즘을 사용하기로 결정할 때 더 나은 리소스 효율성과 교육 효율성을 달성하려면 의식적으로 이를 최적화해야 합니다. 그러나 여기에는 많은 기술적인 과제도 있습니다.
이러한 과제는 모델 훈련 성능 조정에 큰 영향을 미쳤기 때문에 추상적이고 사용하기 쉬운 인터페이스를 통해 최적화 비용을 줄이고 소프트웨어 및 하드웨어 협업 최적화 방법을 완벽하게 활용하고자 AIAK-Training 가속 제품군을 출시했습니다. Baidu Smart Cloud에서 고객의 모델 훈련 성능을 가속화하세요.
AIAK-Training의 구체적인 효과를 소개하기 전에 먼저 훈련 가속화를 주제로 핵심 기술 아이디어와 솔루션 원리를 소개합니다.
모델 훈련 최적화 자체는 소프트웨어와 하드웨어의 포괄적인 작업이고 기술 스택이 상대적으로 복잡하기 때문에 오늘의 콘텐츠에서는 핵심 아이디어를 모두 다룰 수는 없습니다.
먼저 현재 모델 학습 솔루션을 살펴보겠습니다. 과거 개발 단계에서 모델 훈련 솔루션에는 두 가지 주요 변화가 있었습니다. 하나는 단일 카드 훈련에서 분산 훈련으로의 변화이고, 다른 하나는 데이터 병렬 훈련에서 다차원 하이브리드 병렬 훈련으로의 변화입니다. 여기서 핵심 추진 포인트는 훈련 데이터의 양과 모델 매개변수의 양입니다.
여기서 가장 널리 사용되는 것은 데이터 병렬성입니다. 데이터 병렬 방식에서는 데이터 세트를 여러 부분으로 균등하게 나눈 다음 전체 모델을 각 카드에 저장하고 분할된 하위 데이터 세트를 독립적으로 병렬로 처리합니다.
예를 들어 모델 매개변수 수가 충분히 크면 매개변수 수가 수백억 또는 수천억에 도달하고 단일 카드로는 전체 모델을 맞출 수 없습니다. 여기서도 모델 병렬성 또는 하이브리드 병렬 솔루션을 사용합니다. 데이터 병렬성과 모델 병렬성이 모두 나타납니다.
모델 병렬성은 모델을 여러 카드로 분할하고 각 카드에 모델의 일부를 배치합니다. 여기서 Tensor는 계층 내 분할 또는 계층 간 분할과 같은 다양한 분할 방법에 따라 세분화됩니다. 파이프라인 병렬 접근 방식.
일반 모델 훈련에서는 데이터 병렬화가 더 많이 사용되기 때문에 성능 최적화 아이디어를 소개하기 위해 데이터 병렬성을 예로 집중하겠습니다.
우리는 먼저 소프트웨어와 하드웨어의 전반적인 관점에서 단일 카드 훈련 과정에 존재하는 성능 오버헤드를 이해합니다.
아래 그림의 왼쪽은 소프트웨어 관점에서 본 우리의 훈련 과정입니다. 단일 카드 학습 프로세스에는 주로 데이터 읽기, 데이터 전처리, 순방향 계산 출력 및 손실 계산, 각 레이어 매개변수의 기울기를 얻기 위한 손실 함수에 따른 역방향 계산, 마지막으로 기울기에 따라 모델 매개변수 업데이트가 포함됩니다. 훈련이 수렴될 때까지 이 과정을 계속합니다.
아래 그림의 오른쪽은 단순화된 노드 하드웨어 토폴로지 다이어그램입니다. 상단은 데이터 저장소로, 로컬 저장소 또는 네트워크 저장소일 수 있습니다. 그 다음에는 CPU와 메모리가 있습니다. 0부터 7까지 번호가 매겨진 여러 개의 PCIe 스위치를 통해 CPU에 연결된 8개의 GPU 카드가 있으며, 8개의 카드는 NVSwitch를 통해 상호 연결됩니다. 컴퓨팅 인스턴스마다 하드웨어 토폴로지가 다릅니다.
따라서 단일 카드 관점에서 보면 주로 I/O, CPU 전처리, CPU와 GPU 간 데이터 복사, GPU 계산 등에 오버헤드가 발생합니다.
그럼 데이터 병렬 처리 과정을 살펴보겠습니다.
아래 그림의 왼쪽은 여전히 훈련의 주요 프로세스이고 오른쪽은 3머신 24카드 트레이닝 클러스터의 하드웨어 토폴로지를 보여줍니다. 3개의 머신은 네트워크를 통해 상호 연결됩니다.
또한 이전 부분에서 데이터 병렬화에서는 각 장치가 순방향 및 역방향 계산 프로세스를 병렬 및 독립적으로 수행한다는 점을 소개했습니다. 따라서 각 학습 프로세스는 앞서 언급한 단일 카드 학습에서도 성능 오버헤드 문제에 직면하게 됩니다.
데이터 병렬 처리가 단일 카드 훈련과 수학적으로 동일하도록 하려면 반복 프로세스 중에 각 카드의 모델 매개변수가 항상 일관되도록 해야 합니다. 한편, 각 GPU 카드의 모델 매개변수의 초기화 상태를 일관되게 만드는 것이 필요합니다. 이는 일반적으로 훈련 시작 전에 첫 번째 카드의 매개변수 상태를 다른 카드에 브로드캐스팅하여 수행됩니다.
학습 중에는 기기마다 처리하는 데이터가 다르기 때문에 순방향 계산으로 얻은 모델 손실 값도 다릅니다. 따라서 모델마다 기울기를 역방향으로 계산한 후 기울기를 평균화하는 것도 필요합니다. 매개변수는 최종 그라데이션 값으로 업데이트되어 반복 프로세스 중에 각 카드의 모델 매개변수가 일관되게 유지되도록 합니다.
그라디언트 평균화에는 노드 내 카드 간 통신은 물론 노드 간 네트워크 통신 오버헤드를 포함한 통신 프로세스가 포함됩니다. 여기서의 통신에는 동기식 통신과 비동기식 통신이 포함됩니다. 그러나 모델 훈련의 융합을 보장하기 위해 일반적으로 동기식 통신 솔루션이 사용되며 후속 최적화 작업도 동기식 통신을 기반으로 수행됩니다.
위에서 볼 수 있듯이 단일 카드 훈련과 비교할 때 데이터 병렬 처리는 주로 추가 통신 오버헤드를 추가합니다.
위의 분석을 통해 우리는 AI 훈련 가속화가 단순히 업무의 특정 측면이 아니라 데이터 로딩, 모델 계산, 분산 통신 등 시스템 차원에서 종합적으로 고려되어야 함을 알 수 있습니다. 여기서 언급하는 데이터 로딩에는 데이터 I/O, 전처리, 메모리 복사 및 기타 프로세스가 포함됩니다.
특정 최적화 실습에서 최적화할 모델이 주어지면 모델 학습을 가속화한다는 것은 학습의 전체 처리량(초당 학습할 수 있는 샘플 수)을 지속적으로 향상시키는 것을 의미합니다. 이 과정에서 일반적으로 단일 카드의 훈련 처리량을 먼저 분석할 수 있습니다. 단일 카드의 훈련 처리량이 향상되면 단일 카드에서 여러 카드로 확장하여 훈련 가속 비율을 향상시키는 방법을 확인할 수 있습니다. 여러 카드.
우선, 단일 카드 훈련 최적화, 궁극적인 최적화 목표는 모든 시간을 GPU 컴퓨팅에 소비하는 것이며 가속기 활용률은 100%입니다. 물론 실제로 이 상태를 완전히 달성하는 것은 어렵지만 이 지표에 따라 작업을 안내하거나 측정할 수 있습니다.
단일 카드 성능 최적화의 핵심은 두 부분으로 구성됩니다.
그런 다음 단일 카드에서 여러 카드로 확장하면 목표는 선형 가속 비율을 달성하는 방법입니다. 선형 가속도 비율의 지표는 단순히 훈련을 1카드에서 2카드로 확장할 때 훈련 성능이 단일 카드의 2배인지 여부를 의미합니다.
여기서 핵심은 분산 통신 효율성을 최적화하는 것입니다. 한편으로는 하드웨어 수준의 최적화인 반면, 실제 통신에서는 네트워크의 대역폭 리소스를 어떻게 활용할 것인지 고려해야 합니다. 의사소통 과정을 숨길 수 있는지 여부 등
아래에서는 이러한 측면에 대해 자세히 설명하겠습니다.
첫 번째는 데이터 로딩 최적화입니다.
데이터로더를 인스턴스화한 후에는 데이터로더를 계속 반복하여 모델 교육을 위한 데이터 배치를 읽습니다.
여기서 최적화가 이루어지지 않으면 아래 그림의 상단과 같이 실제로는 각 배치의 데이터 로딩 과정과 각 배치의 모델 훈련 과정이 연속적으로 진행됩니다. GPU 관점에서는 데이터 로딩으로 인한 계산 공백이 발생하고, 컴퓨팅 리소스에 시간 낭비가 발생하게 됩니다.
앞서 언급한 것처럼 데이터 읽기의 효율성을 직접적으로 향상시키기 위해 더 나은 하드웨어를 사용하는 것 외에 어떻게 최적화할 수 있을까요?
실제로 AI 훈련 과정에서 데이터 액세스에는 두 가지 주요 기능이 있습니다.
우선 데이터로더의 기존 최적화 솔루션을 잘 활용해야 합니다. 먼저 num_workers 하이퍼파라미터를 합리적으로 설정하고 여러 프로세스를 통해 데이터를 읽어야 합니다. 호스트 메모리. 두 번째는 호스트 메모리에서 GPU 메모리로 복사하는 것인데, 이는 고정된 메모리 메커니즘을 통해 가속화될 수 있습니다.
고정 메모리 가속의 주요 원리를 간략하게 소개하겠습니다. 메모리 데이터에는 페이징 가능 메모리와 고정 메모리의 두 가지 유형이 있습니다. 페이징 가능 메모리의 데이터는 디스크로 스왑 아웃될 수 있습니다. 이 경우 H2D를 실행할 때 먼저 디스크에서 메모리로 읽은 다음 메모리에서 비디오 메모리로 복사해야 할 수도 있습니다. 또한 페이징 가능한 메모리 데이터를 GPU 메모리로 복사할 때 임시 고정 메모리 버퍼를 먼저 생성하고 페이징 가능한 메모리의 데이터를 고정 메모리로 복사한 다음 GPU로 전송해야 하며, 이 작업에도 추가 데이터 전송 작업이 필요합니다.
그러나 위 솔루션을 활성화했을 때 스토리지 시스템에서 호스트 메모리로의 프리페칭만 구현하여 호스트에서 장치로의 데이터 복사 속도가 빨라졌습니다. 그러나 호스트에서 장치로의 메모리 복사와 실제 계산 커널은 여전히 GPU에서 직렬로 실행됩니다. 즉, GPU에는 여전히 작은 시간 차이가 있습니다.
AIAK는 이 문제를 해결하기 위해 추가 최적화를 수행하여 H2D와 순방향 계산의 중첩을 실현할 수 있습니다.
데이터 병렬 시나리오에서 주의해야 할 점은 데이터를 균등하게 분할해야 한다는 것입니다.
각 학습 프로세스에 할당된 데이터의 균형이 맞지 않으면 계산량이 달라지며, 이로 인해 각 프로세스의 순방향 계산과 역방향 계산이 완료되는 시간이 달라지게 됩니다. 그러면 계산을 먼저 완료하는 프로세스가 달라집니다. 역방향 프로세스에서는 먼저 그라데이션 통신 링크에 들어가지만 Allreduce 통신은 동기식 통신 작업이므로 모든 프로세스가 동시에 시작되고 종료되어야 하므로 먼저 통신을 시작한 프로세스는 다른 모든 프로세스를 기다립니다. 통신 작업을 함께 완료하기 전에 AllReduce를 시작하는 프로세스도 있습니다. 다양한 속도로 인해 리소스 유휴 문제가 발생합니다.
이 문제를 해결하려면 각 프로세스에서 동일한 배치 크기를 사용하여 데이터를 읽어야 하며 각 배치의 데이터 양이 균형을 이루어야 합니다. 이미지 데이터는 일반적으로 훈련을 위해 고정된 크기인 반면, NLP 모델은 특수한 처리가 필요할 수 있는 가변 길이 명령문을 처리해야 합니다. 예를 들어 데이터를 동일한 길이로 채우거나 샘플 길이를 정렬하여 균등하게 배포할 수 있습니다. .
다음은 컴퓨팅 효율성의 최적화를 소개합니다.
계산에는 정방향, 역방향 및 매개변수 업데이트가 포함됩니다. 계산 최적화의 목표는 이기종 하드웨어의 컴퓨팅 성능을 최대한 활용하는 것입니다. 이상적인 상황은 GPU 칩의 실제 컴퓨팅 성능이 이론상 최고 수준에 도달하도록 하는 것입니다.
먼저 단일 연산자의 관점에서 분석해 보겠습니다. GPU에서 계산 작업을 준비할 때 단순화된 프로세스에는 4가지 단계가 있습니다.
연산자에서 완전한 모델 훈련으로 확장할 때 많은 계산 커널을 지속적으로 실행해야 하기 때문에 커널 실행으로 인한 커널 계산과 중간 결과 읽기 및 쓰기 사이에 계산 공백 문제가 많이 발생하게 됩니다.
위에서 알 수 있듯이 모델 컴퓨팅 효율성을 최적화하려면 메모리 액세스 최적화, 계산 최적화, 기타 오버헤드 최적화까지 포괄적인 고려가 필요합니다.
메모리 액세스 최적화는 주로 비디오 메모리와 컴퓨팅 장치 간의 데이터 전송 시간을 줄이는 방법을 고려합니다. 운영자 구현의 관점에서 볼 때 공유 메모리와 같은 더 빠른 저장소로 데이터를 이동하고 글로벌 메모리에 대한 액세스를 줄여 메모리 액세스 시간을 절약하는 등 GPU 저장소 계층 구조를 잘 활용해야 합니다. 또는 계산 명령과 메모리 액세스 명령을 적절히 겹쳐서 계산 메모리 액세스 비율을 향상시킵니다. 단일 연산자에서 다중 연산자로 확장할 때 중간 결과의 읽기 및 쓰기를 줄이는 방법도 고려해야 합니다. 이 문제는 일반적으로 연산자 융합을 통해 최적화될 수 있습니다. 작업을 여러 개의 덩어리로 나누거나 GPU 병렬 컴퓨팅을 활용하지 못해 병렬성이 낮아집니다. 또한, 결합된 명령어 세트를 사용하지 않아 컴퓨팅 효율성이 낮아지거나, 텐서 코어와 같은 고성능 컴퓨팅 유닛을 사용하지 않아 리소스가 낭비될 가능성도 있습니다. 다양한 문제는 다양한 최적화 방법에 해당합니다.전문가 경험을 바탕으로 손으로 쓴 융합 연산자를 사용하여 모델의 비효율적인 작업을 분석하는 방법입니다. GPU에서는 주로 CUDA 연산자 연구 및 개발에 관한 것이며 여기에는 특정 임계값이 있습니다. AIAK-Training은 일반적인 모델 구조나 고객 요구 사항을 기반으로 효율적이고 최적화된 운영자 구현을 제공합니다.
또 다른 방법은 솔루션을 컴파일하고 최적화하는 것입니다. 컴퓨팅 최적화는 컴파일을 통해 수행되며 코드가 자동으로 생성되므로 다양한 하드웨어에서 수동으로 최적화하는 비용이 줄어듭니다. 그러나 현재의 많은 컴파일 솔루션은 추론에 더욱 최적화되어 있으며 교육 솔루션은 여전히 급속한 발전 과정에 있습니다. 그러나 궁극적인 성능이라는 관점에서 볼 때 필기 융합 운영자의 작업은 앞으로도 여전히 뗄래야 뗄 수 없을 것입니다.
다음에서는 연산자 융합의 실제 사례를 소개합니다. 첫 번째는 일반적인 모델 네트워크 구조의 최적화입니다.아래 그림은 SwinTransformer 모델의 핵심 모듈 WindowAttention에 대한 계산 융합 최적화를 보여줍니다.
WindowAttention 구조, 핵심 연산식은 아래 그림과 같습니다. 계산 과정에서 7개의 계산 커널을 순차적으로 실행해야 합니다. 일부 재구성 및 기타 변환 작업과 함께 총 10개의 커널을 실행해야 합니다. 성능 분석을 통해 실제 실행 과정에서 실행 커널의 간격 중복 오버헤드가 전체 시간의 80% 이상을 차지하여 이 모듈에 대한 최적화 공간이 큰 것으로 나타났습니다.
이러한 커널을 하나로 융합하면 전체 모듈의 실행 시간이 392마이크로초에서 13마이크로초로 줄어들고 단일 연산자가 30배 가속화됩니다. 전체 모델의 학습 효율성이 엔드 투 엔드(end-to-end) 20% 이상 가속화되었습니다.
이 최적화의 핵심 아이디어는 주로 세 가지입니다:
아래 그림은 FCOS3D 모델에서 좌표 압축 연산을 최적화한 데이터 연산 융합의 예입니다.
성능 분석을 통해 이 작업 중에 GPU 공백이 많이 발생하고 GPU 활용도가 낮은 것으로 나타났습니다. 이 작업의 주요 기능은 3D-Tensor를 인덱스를 기반으로 2D-Tensor로 압축하는 것입니다. 네이티브 구현에서는 먼저 호스트 측에서 인덱스가 생성된 후 H2D 복사가 수행되고 마지막으로 Tensor 압축이 완료되므로 추가 복사 및 대기 오버헤드가 발생합니다.
이를 위해 우리는 이 작업 부분을 다시 구현했습니다. 핵심 아이디어는 모든 작업을 GPU로 마이그레이션하고, GPU에서 직접 Tensor의 인덱스 생성 및 압축을 완료하고, CPU 참여를 줄이고, 불필요한 CPU를 방지하는 것입니다. -GPU 메모리 복사 사이.
단일 연산자의 실행 시간이 9.69밀리초에서 32마이크로초로 단축되어 전체 모델의 엔드투엔드 훈련이 10% 이상 향상됩니다.
다음으로 계산의 병렬성을 향상하고 GPU 병렬 컴퓨팅의 장점을 최대한 활용하는 컴퓨팅 최적화의 또 다른 아이디어를 몇 가지 실제 사례를 통해 소개하겠습니다. .
일부 모델에서는 일부 작업이 순차적으로 수행되는 것을 발견했습니다. 예를 들어, 일부 타겟 감지 모델에서는 손실 계산 프로세스 중에 일부 작업이 배치에 따라 수행되지 않고 각 그림이나 샘플에 대한 루프가 수행됩니다. 우리가 원하는 성과를 달성하세요.
YOLOv7의 SimOTA 작업을 예로 들어보겠습니다. 기본 구현에서는 배치의 각 이미지가 for 루프를 통해 탐색된 다음 이미지의 gtbox에 대해 SimOTA 라벨 할당이 수행됩니다. 이러한 직렬 구현으로 인해 이 작업 부분에서는 GPU 활용이 매우 비효율적입니다.
각 사진을 처리할 때 데이터 간에 종속성은 없습니다. 따라서 우리가 수행한 작업 중 하나는 직렬 계산을 배치 병렬 계산으로 변경하고 데이터 배치에 대한 레이블 할당을 병렬화하여 계산의 이 부분의 효율성을 높이는 것입니다.
최종 효과에서 SimOTA 작업 시간은 384밀리초에서 69밀리초로 감소했고 컴퓨팅 효율성은 5.5배 증가했으며 전체 모델의 엔드투엔드 훈련 효율성은 18% 이상 증가했습니다.
모델 훈련 과정 중에 매개변수 업데이트와 같은 다른 유사한 시나리오가 있습니다. 매개변수가 업데이트되면 기본적으로 각 매개변수는 루프를 통해 순회되며, 각 매개변수는 매개변수 업데이트를 위해 Cuda 커널을 시작한 후 순차적으로 실행합니다.
이러한 상황을 고려하여 AIAK는 매개변수 업데이트 연산자를 융합하여 매개변수를 일괄 업데이트하고 커널 실행 횟수를 크게 줄일 수 있는 FusedOptimizer의 최적화도 추가했습니다.
다음에서는 주로 CPU Launch Kernel의 오버헤드를 줄이기 위한 또 다른 최적화 방법인 CUDA Graph를 소개합니다.
CUDA 그래프는 CUDA 10 버전에 도입된 기능으로, 단일 CPU 실행 작업을 통해 여러 GPU 커널을 단일 단위로 캡슐화할 수 있으므로 CPU 실행 커널의 오버헤드가 줄어듭니다.
아래 그림과 같이 기본적으로 CPU는 여러 커널을 순차적으로 실행해야 합니다. 커널 계산 시간이 상대적으로 짧은 경우 커널 간의 실행 간격으로 인해 성능 병목 현상이 발생할 수 있습니다. CUDA 그래프를 사용하면 그래프를 작성하는 데 약간의 추가 시간만 투자하면 되며, 이후 그래프를 내보내면 실제 실행 중에 커널 간의 간격을 크게 줄일 수 있습니다.
이제 많은 프레임워크에 CUDA 그래프에 대한 지원이 추가되었으며 K는 일부 코드를 삽입하여 이 기능을 활성화할 수 있습니다. 그러나 동적 형상을 지원하지 않거나, 동적 제어 흐름을 지원하지 않거나, 프로세스 중 CPU 작업을 캡처할 수 없는 등 몇 가지 사용 제한이 있습니다. 모델 상황에 따라 이 최적화 기능을 사용해 볼 수 있습니다.
다음은 Tensor Core 컴퓨팅 유닛을 최대한 활용하기 위한 마지막 계산 최적화 방법입니다.
GPU에는 일반적으로 여러 SM이 포함되어 있으며 각 SM에는 다양한 데이터 유형의 컴퓨팅 코어와 다양한 스토리지 리소스가 포함되어 있습니다. 아래 그림의 왼쪽에는 NVIDIA A100 SM의 개략도가 나와 있습니다. SM에는 64개의 FP32 CUDA 코어와 4개의 Tensor 코어가 포함되어 있습니다.
모델 훈련 중에는 FP32 CUDA Core 계산이 기본적으로 주로 사용되며, Tensor Core는 Volta 시리즈 GPU에서 도입된 특수 하드웨어 실행 장치로 주로 행렬 또는 컨볼루션 작업의 효율성을 높이는 데 사용됩니다.
한 번에 두 개의 스칼라에 대해서만 계산을 수행할 수 있는 FP32 CUDA Core에 비해 Tensor Core는 한 번에 두 개의 행렬에 대해 계산을 수행할 수 있으므로 Tensor Core의 계산 처리량은 FP32 CUDA Core보다 훨씬 높습니다.
A100에서 Tensor Core는 딥 러닝 훈련을 위해 다양한 부동 소수점 데이터 유형을 지원하며 FP16, BF16 및 TF32 모드가 포함될 수 있습니다.
TF32는 주로 단정밀도 교육 시나리오에 사용됩니다. FP32 교육과 비교하여 동일한 메모리 액세스 대역폭 요구 사항을 유지하면서 이론적 컴퓨팅 처리량은 8배 증가합니다.
FP16/BF16은 주로 혼합 정밀도 훈련 시나리오에 사용됩니다. FP32 훈련에 비해 메모리 액세스 요구 사항은 절반으로 줄어들고 이론적인 컴퓨팅 처리량은 16배 증가합니다.
Tensor Core를 사용하면 프로그래밍에 기본 cublas 또는 cuda 인터페이스를 사용할 수 있습니다. 알고리즘 개발자의 경우 프레임워크에서 제공되는 TF32 교육 또는 혼합 정밀도 교육 솔루션을 사용하는 것이 더 간단합니다.
첫 번째는 TF32 훈련 모드로, TF32는 Ampere에서 선보였습니다.
TF32에는 부동 소수점 수 표현에서 8개의 지수 비트, 10개의 가수 비트 및 1개의 부호 비트가 있습니다. 지수 비트는 FP32와 동일하다. 즉, 데이터 표현 범위는 동일하지만 가수 비트는 FP32보다 낮고 FP16과 동일하다.
TF32는 개방형 숫자형이 아니라 Tensor Core의 계산 모드라는 점에 유의해야 합니다. 즉, 사용자가 TF32형 부동 소수점 숫자를 직접 생성할 수 없습니다.
TF32가 활성화되면 Tensor Core는 행렬이나 컨볼루션 연산을 계산할 때 자동으로 FP32를 TF32로 변환합니다. 계산이 완료된 후에도 출력 데이터 유형은 여전히 FP32 유형입니다.
TF32 훈련은 일부 프레임워크 버전에서 기본적으로 활성화됩니다. 일부 프레임워크 버전에서는 환경 변수 또는 매개변수 구성을 통해 수동으로 활성화해야 할 수도 있습니다. 자세한 내용은 프레임워크의 사용 설명서를 참조하세요.
단, TF32의 정확도 범위는 FP32에 비해 줄어들기 때문에 실제 학습 시 모델의 수렴 정확도에 미치는 영향에 주의해야 합니다.
혼합 정밀도 훈련은 모델 정확도 손실을 최소화하면서 FP32 및 FP16 혼합 정밀도를 사용하는 훈련을 의미합니다.
혼합 정밀 훈련의 주요 이점은 FP32 훈련에 비해 메모리 요구 사항이 줄어들고 더 큰 네트워크를 훈련하거나 더 큰 배치 크기를 사용할 수 있다는 것입니다. 더 적은 메모리 대역폭을 사용하면 데이터 전송 속도가 빨라질 수 있고, 반정밀도 계산도 수학 연산이 더 빨라질 수 있습니다.
그러나 FP16의 지수 비트와 가수 비트의 범위는 FP32의 범위, 수치 표현 범위 및 가수 비트의 범위보다 작습니다. 실제 사용 시 표현 범위가 좁아 수치 오버플로 문제가 발생하거나, 정밀도가 부족하여 반올림 오류가 발생할 수 있습니다.
유사한 문제를 최적화하기 위해 혼합 정밀도 교육 솔루션에는 몇 가지 핵심 기술 작업이 있습니다.
현재 모든 프레임워크는 혼합 정밀도를 지원합니다. AIAK-Training 구성 요소는 NVIDIA Apex에 AMP O2 혼합 정밀도 모드를 추가로 도입하여 훈련 속도를 높이기 위해 더 많은 계산을 FP16으로 더욱 적극적으로 전송합니다. 기본 O1 모드와 비교하면 속도가 더욱 향상되지만 정확도가 영향을 받을 수 있으므로 특정 모델을 사용하여 검증해야 합니다.
AIAK-Training은 토치 앰프의 기본 사용과 호환되는 사용 방법을 제공하여 O2 모드를 쉽게 활성화할 수 있습니다.
커뮤니케이션 최적화에 대해 소개하겠습니다. 이것도 매우 큰 주제이고 많은 내용이 포함됩니다.
앞서 언급했듯이 단일 카드에서 여러 카드로 확장하려면 여러 카드 간의 일부 데이터 동기화가 필요하기 때문에 통신은 주로 분산 교육에 도입됩니다.
다음 그림에는 통신 최적화를 위한 전체 아키텍처가 나열되어 있습니다.
먼저 커뮤니케이션 전략 차원의 최적화 아이디어를 살펴보겠습니다. 첫 번째는 커뮤니케이션 숨겨진 최적화입니다.
데이터 병렬화에서는 훈련의 역과정에서 기울기 동기화 통신이 수행되며, 역방향으로 기울기를 계산한 후 전역 기울기 평균을 수행할 수 있습니다.
메커니즘 최적화가 이루어지지 않으면 역계산과 통신이 순차적으로 진행되어 계산에 시간차가 발생하게 됩니다.
역방향 과정에서 이전 그라디언트의 통신과 다음 그라디언트의 계산 사이에 데이터 종속성이 없기 때문에 이전 그라디언트의 통신과 다음 그라디언트의 계산을 병렬화하여 두 작업의 시간 소모를 줄일 수 있습니다. . 서로 겹쳐서 통신 시간의 일부를 숨깁니다.
구현 수준에서 통신 및 계산 연산자는 일반적으로 서로 다른 Cuda 스트림에 예약되어 구현되며, 계산 연산자는 서로 다른 스트림에 예약되어 동시에 실행될 수 있습니다. . 실행을 통해 그라디언트 통신과 역방향 계산의 병렬 중첩을 달성합니다.
현재 이 최적화 기능은 프레임워크에서 기본적으로 활성화되어 있습니다.
둘째, 커뮤니케이션 통합 최적화입니다.
기본적으로 모델의 각 그라데이션은 통신 작업을 시작해야 합니다. 단일 그래디언트의 크기가 상대적으로 작은 경우 작은 데이터 패킷이 실제로 통신될 때 네트워크 대역폭 활용도가 매우 낮고 통신 성능이 저하됩니다.
통신 융합은 하나의 통신에 대해 여러 기울기를 융합하는 것입니다. 통신 오버헤드 모델 분석을 통해 대역폭 활용도를 향상시킬 수 있을 뿐만 아니라 통신의 초기화 지연 시간도 줄일 수 있습니다.
현재 많은 분산 교육 프레임워크는 기본적으로 그라데이션 융합 전략을 지원합니다. 일부 구현에서는 통신 순서를 먼저 결정하기 위해 그라데이션 협상이 필요하지만 다른 구현에서는 정적 통신 버케팅을 직접 사용합니다.
프레임워크는 기본적으로 통신 융합을 지원하지만 일반적으로 그라디언트 융합의 크기는 매개변수를 통해 구성할 수 있습니다. 사용자는 물리적 환경 및 모델의 요구에 따라 적절한 융합 임계값을 조정할 수 있으며 더 나은 이점을 얻을 수 있습니다.
저대역폭 TCP 환경과 같이 네트워크 대역폭이 낮은 교육 시나리오에서는 그라데이션 동기화 지연이 교육의 주요 성능 병목 현상이 될 수 있습니다.
통신 빈도 감소 최적화를 위한 가장 간단한 아이디어는 배치 크기를 늘려 각 반복에서 더 많은 데이터가 사용되도록 하는 것입니다. 이는 반복 횟수를 줄여 통신량이 줄어드는 것을 의미합니다.
그러나 배치 크기가 클수록 모델 수렴 정확도가 떨어지거나 수렴 속도가 느려질 수 있습니다. 유사한 문제에 대해 업계에서는 계층을 통해 학습률을 적응적으로 조정하여 유사한 문제를 완화할 수 있는 LARS 및 LAMB와 같은 최적화 알고리즘도 제안했습니다. AIAK-Training도 지원을 추가했습니다.
배치 크기를 늘리려면 비디오 메모리가 충분하면 배치 크기 슈퍼 매개변수를 직접 조정할 수 있습니다. 비디오 메모리가 부족한 경우 그라데이션 누적을 통해 여러 그라데이션 통신을 건너뛸 수도 있으며 이는 실제로 배치 크기를 늘리는 것과 같습니다.
다음에서는 통신 토폴로지의 최적화 솔루션인 계층적 토폴로지 통신을 소개합니다. 이는 또한 기계 간 네트워크 대역폭이 상대적으로 낮은 상황을 목표로 합니다.
계층적 통신을 통해 기계 내의 높은 상호 연결 대역폭을 최대한 활용하는 동시에 기계 간 낮은 네트워크 대역폭의 영향을 약화시킬 수 있습니다.
이 통신 솔루션은 AIAK에서도 구현되었습니다. 25Gbps TCP 환경에서 SwinTransformer 교육을 위해 4개의 머신과 32개의 카드를 테스트했으며, 계층화된 AllReduce를 통해 성능을 85%까지 가속화할 수 있습니다.
마지막으로 기본 통신 라이브러리 수준의 최적화인 GPU Direct RDMA 통신 기술을 도입합니다. 이 기술을 사용하려면 RDMA 네트워크를 지원하는 하드웨어 환경이 필요합니다.
RDMA 통신을 통해 로컬 애플리케이션은 원격 애플리케이션의 사용자 모드 가상 메모리를 직접 읽고 쓸 수 있으며, CPU의 참여가 필요한 전송 요청 제출의 초기 단계를 제외한 전체 통신 프로세스는 네트워크에 의해 완료됩니다. 카드 하드웨어가 필요하지 않으며 메모리 복사, 시스템 인터럽트 및 소프트웨어 처리가 필요하지 않으므로 극도로 낮은 대기 시간과 높은 대역폭을 달성할 수 있습니다.
GPU 시나리오에서 GPU Direct RDMA 기술은 GPU 비디오 메모리에 직접 액세스할 수 있는 RDMA 지원을 추가하여 통신 중에 GPU 비디오 메모리와 호스트 메모리 간에 데이터가 앞뒤로 복사되는 것을 방지하고 시스템 간 통신 지연을 더욱 줄입니다.
그러나 실제 사례에서는 일부 사용자가 RDMA 환경을 구입했지만 실제로 GDR 기술을 사용하지 않아 통신 효율성이 떨어지는 것을 발견했습니다. 여기에는 몇 가지 주요 구성 항목이 나열되어 있습니다. 비슷한 문제가 있는 경우 문제를 해결하고 순서대로 설정할 수 있습니다.
현재 주요 성능 최적화 아이디어와 솔루션 중 일부를 소개했습니다. 전반적으로 I/O 최적화, 컴퓨팅 최적화, 통신 최적화에 관계없이 가장 간단한 최적화 아이디어는 주로 작업 자체를 최적화하는 방법인지 여부입니다. 작업이 발생하는 횟수나 작업을 다른 프로세스와 병렬화하여 오버헤드를 숨길 수 있는지 여부 등을 줄일 수 있습니다.
이를 올바르게 활성화하려면 각 사용자가 프레임워크의 엔지니어링 구현 원리를 명확하게 이해해야 합니다. 훈련 최적화 비용을 단순화하기 위해 AIAK-Training Acceleration 패키지를 구축했습니다.
AIAK-Training은 데이터 로딩, 모델 계산, 통신 등에 관한 전체 링크 최적화 기능을 구축합니다. 동시에 이 최적화 기능을 간단하고 사용하기 쉬운 인터페이스로 캡슐화합니다. 사용자는 몇 가지를 삽입할 수 있습니다. 비교할 수 있는 코드 라인 편리한 통합 사용. 동시에 우리는 사용자가 효과적인 최적화 전략을 선택할 수 있도록 자동으로 전략 조합 최적화 메커니즘을 구축하고 있습니다.
특정 용도에서는 가속 라이브러리 구성 요소를 독립적으로 설치 및 배포할 수도 있고, 우리가 제공하는 컨테이너 이미지를 직접 사용할 수도 있습니다.
다음은 구체적인 적용 사례입니다.
아래 그림과 같이 주로 데이터로더의 최적화를 위한 것입니다. 이 시나리오에서는 모델이 상대적으로 작고 데이터 세트 크기도 상대적으로 작으며 순수 계산 속도가 실제로 더 빠릅니다. 그러나 크로스 EPOCH 데이터 로딩 시간이 상대적으로 길어서 I/O 시간이 많이 소요됩니다. 주요 병목 현상.
AIAK에서 제공하는 프로세스 재사용 및 전체 프리페치 메커니즘을 사용하여 전체 모델 학습이 166% 가속화됩니다.
아래 사진은 모델계산 최적화 사례입니다.
Transformer 클래스 모델 교육 시나리오, 실제 교육 중 통신 확장성은 선형에 가깝고 I/O 시간 소모 비율도 매우 낮으며 컴퓨팅이 주요 성능 병목 현상입니다.
이 모델에 대해 AIAK-Training은 주요 구조의 연산자 융합, 혼합 정밀도, 대규모 배치 튜닝 등을 포함하여 일련의 계산 수준 최적화를 수행했으며 전체 모델의 훈련 효율성이 169% 증가했습니다. .
아래 그림의 사례는 주로 통신 수준 최적화를 적용하여 클라우드 TCP 환경에서 낮은 대역폭 네트워크에 대한 최적화 전략을 가능하게 하며 resnet50, bert 및 vgg16과 같은 일부 클래식 모델에서는 다음을 통해 가속화될 수 있습니다. 26%~78%.
자율 주행 시나리오에서 일반적인 2D 비전, 3D 비전, LiDAR 및 사전 융합 모델에 대한 일련의 모델 교육 성능 최적화를 수행했으며 교육 성능이 49%~391% 가속화되었습니다. .
위 내용은 AI 훈련 가속 원리 분석 및 엔지니어링 실무 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!