자동 병렬성을 소개하기 전에 자동 병렬성이 왜 필요한지 생각해 볼까요? 한편으로는 다양한 모델 구조가 있고, 다른 한편으로는 다양한 병렬 전략이 있으며 일반적으로 둘 사이에는 다대다 매핑 관계가 있습니다. 다양한 작업 요구 사항을 충족하기 위해 통합 모델 구조를 구현할 수 있다고 가정하면 병렬 전략이 이 통합 모델 구조에서 수렴을 달성할 수 있을까요?
대답은 '아니오'입니다. 왜냐하면 병렬 전략은 모델 구조와 관련될 뿐만 아니라 모델의 규모 및 사용되는 실제 기계 리소스와도 밀접한 관련이 있기 때문입니다. 이는 자동 병렬 처리의 가치를 반영합니다. 그 목표는 사용자에게 모델과 사용된 시스템 리소스가 제공된 후 사용자가 효율적인 실행을 위해 더 나은 또는 최적의 병렬 전략을 선택하도록 자동으로 돕는 것입니다.
다음은 제가 관심을 갖고 있는 몇 가지 작업 목록입니다. 완전하지 않을 수도 있습니다. 자동 병렬 처리의 현재 상태와 역사에 대해 토론하고 싶습니다. 이는 대략 여러 차원으로 나누어집니다. 첫 번째 차원은 완전 자동과 반자동으로 구분되는 자동 병렬성 수준이고, 두 번째 차원은 각 계층 또는 각 연산자에 대한 병렬 전략을 제공하는 병렬 세분성입니다. 세 번째는 SPMD(Single Program Multiple Data) 병렬성과 파이프라인 병렬성의 두 가지 범주로 단순화된 표현 능력입니다. 다섯 번째는 지원 하드웨어로, 관련 작업에서 지원하는 하드웨어의 종류와 양이 가장 많다. 그 중 빨간색으로 표시된 부분은 주로 플라잉 패들의 자동 병렬 개발에 대한 깨달음 포인트입니다.
병렬 세분성은 거친 것에서 세밀한 것까지의 개발 프로세스임을 알 수 있습니다. 표현 능력은 상대적으로 단순한 SPMD에서 매우 일반적인 SPMD 및 파이프라인 방법까지입니다. ; 지원되는 모델은 단순한 CNN부터 RNN, 더 복잡한 GPT까지 다양합니다. 비록 여러 머신과 여러 카드를 지원하지만 전체 규모는 그리 크지 않습니다.
반자동 병렬화의 경우 병렬 세분성은 기본적으로 연산자를 기반으로 하며 표현 기능은 간단한 SPMD부터 완전한 SPMD까지 다양하며 파이프라인의 병렬 전략, 모델 지원 규모는 수천억에 이릅니다. 그리고 사용되는 하드웨어의 양은 킬로칼로리 수준에 도달합니다.
프레임워크 관점에서 볼 때 기존 프레임워크는 기본적으로 이미 이 반자동 모드를 지원하거나 지원할 계획이며 병렬 세분성도 기본적으로 연산자 세분성 및 표현 기능으로 발전했음을 알 수 있습니다. 모두 SPMD와 Pipeline의 완전한 표현을 사용하고 있으며 다양한 모델과 다양한 하드웨어를 지향하고 있습니다.
다음은 몇 가지 개인적인 생각을 요약한 것입니다.
첫 번째 요점은 분산 전략이 기본 표현에서 점차적으로 통합된다는 것입니다.
② 두 번째 포인트인 반자동은 점차적으로 프레임워크의 분산 프로그래밍 패러다임이 될 것이며, 완전 자동은 특정 시나리오와 경험적 규칙을 기반으로 탐구하고 구현될 것입니다.
3 세 번째 포인트는 궁극적인 엔드투엔드 성능을 달성하는 것인데, 이를 위해서는 병렬 전략과 최적화 전략의 공동 튜닝이 필요합니다.
일반적으로 전체 분산 교육에는 4가지 특정 프로세스가 포함됩니다. 첫 번째는 모델 분할입니다. 수동 병렬화이든 자동 병렬화이든 모델을 병렬화할 수 있는 여러 작업으로 나누어야 합니다. 두 번째는 학습에 필요한 장비 리소스를 직접 구축하거나 준비할 수 있습니다. 그 다음에는 분할된 작업을 해당 리소스에 배치하는 작업 배치(또는 작업 매핑)가 있으며, 마지막으로 각 장치의 작업이 메시지를 통해 병렬로 실행되고 동기화되는 것을 의미하는 분산 실행이 있습니다. 의사소통.
일부 현재 주류 솔루션에는 몇 가지 문제가 있습니다. 한편으로는 분산 교육 과정의 일부만 고려하거나 프로세스의 일부에만 집중할 수 있습니다. 두 번째는 전문가의 규칙에 너무 많이 의존한다는 점입니다. 모델 세분화 및 리소스 할당과 같은 경험적 측면에서는 교육 과정 전반에 걸쳐 작업 및 리소스에 대한 인식이 부족합니다.
Feipiao가 설계한 엔드투엔드 적응형 분산 교육 아키텍처는 4가지 프로세스를 완전히 고려하고 다섯 번째 프로세스, 즉 탄력적 스케줄링을 추가합니다. 우리의 핵심 디자인 개념은 주로 다음 세 가지 사항을 포함합니다:첫째, 컴퓨팅과 리소스는 통일된 방식으로 표현되며 컴퓨팅과 리소스는 똑같이 중요합니다. 종종 사람들은 모델을 분할하는 방법에 대해 더 관심을 가지지만 리소스에 대한 관심은 적습니다. 한편으로는 통합 분산 컴퓨팅 그래프를 사용하여 다양한 병렬 전략을 표현하는 한편, 통합 분산 리소스 그래프를 사용하여 동형을 나타낼 수 있는 다양한 기계 리소스를 모델링합니다. 또한 이종 리소스 연결 관계를 나타낼 수도 있습니다. 리소스 자체의 컴퓨팅 및 저장 기능도 포함됩니다.
두 번째, 모듈 간의 분리를 극대화하는 것 외에도 논리적 분할을 물리적 배치 및 분산 실행에서 분리하여 다양한 클러스터 리소스에서 다양한 모델의 효율적인 실행을 더 잘 실현할 것입니다.
세 번째, 엔드투엔드 적응은 분산 교육과 관련된 포괄적인 프로세스를 다루며 글로벌 대표 모델을 사용하여 병렬 전략 또는 리소스 배치에 대한 적응형 결정을 이끌어 수동 맞춤형 결정을 최대한 대체합니다.
위 사진에서 하늘색 테두리 부분은 이번 리포트에서 소개한 자동병렬 관련 작업입니다.
1. 통합 분산 컴퓨팅 그래프첫 번째는 통합 분산 컴퓨팅 그래프입니다. 통합의 목적은 다양한 기존 병렬 전략을 통합된 방식으로 표현하여 자동화된 처리에 도움이 되도록 하는 것입니다. 우리 모두 알고 있듯이 직렬 계산 그래프는 다양한 모델을 나타낼 수 있습니다. 마찬가지로 직렬 계산 그래프를 기반으로 각 연산자와 텐서에 분산 속성을 추가하여 분산 계산 그래프 역할을 합니다. 이러한 세분화된 접근 방식은 기존을 나타낼 수 있습니다. 병렬 전략은 의미론이 더욱 풍부해지고 일반화되며 새로운 병렬 전략을 나타낼 수도 있습니다. 분산 컴퓨팅 그래프의 분산 속성에는 주로 세 가지 정보 측면이 포함됩니다. 1) 텐서를 분할하는 방법 또는 연산자를 분할하는 방법을 나타내야 합니다. 2) 분산 컴퓨팅에 사용되는 리소스를 나타내야 합니다. 분할하려면 결과 텐서 또는 연산자가 리소스에 매핑됩니다. 직렬 컴퓨팅 그래프와 비교하여 분산 컴퓨팅 그래프에는 직렬 텐서와 유사한 분산 텐서, 분산 재배열과 유사한 분산 연산자, 계산 그래프에 고유한 세 가지 기본 개념이 있습니다.
(1) 분산 텐서먼저 분산 텐서에 포함된 정보의 세 가지 측면을 소개합니다.
① 직렬 텐서 정보: 주로 텐서 모양, dtype 등과 같은 일부 메타 정보가 포함되어 있습니다. 일반적으로 실제 계산에는 직렬 텐서의 인스턴스화가 필요하지 않습니다. ② ProcessMesh: 프로세스의 카르테션 토폴로지는 DeviceMesh와 달리 ProcessMesh를 사용하는 이유가 주로 물리적 장치에서 논리적 프로세스를 분리하여 보다 효율적인 작업 매핑을 촉진하기 위한 것임을 나타냅니다. 3 ShardSpec: 은 직렬 텐서의 각 차원을 분할하는 데 사용되는 ProcessMesh의 차원을 나타내는 데 사용됩니다. 자세한 내용은 아래 그림의 예를 참조하세요.
2차원 6*12 텐서와 3*2 ProcessMesh가 있다고 가정합니다(첫 번째 차원은 x, 두 번째 차원은 y, 요소는 프로세스 ID). ShardSpec이 [None, None]인 경우 텐서의 0차원과 2차원이 분할되지 않고 각 프로세스에 전체 텐서가 있음을 의미합니다. ShardSpec이 ['x', 'y']인 경우 ProcessMesh의 x축은 텐서의 0차원을 자르는 데 사용되고 ProcessMesh의 y축은 텐서의 1차원을 자르는 데 사용된다는 의미입니다. , 각 프로세스는 2*6 크기의 로컬 텐서를 갖습니다. 즉, ProcessMesh와 ShardSpec 및 텐서가 분할되기 전의 시리얼 정보를 통해 해당 프로세스에 대한 텐서의 분할 상황을 표현하는 것이 가능하다.
분산 연산자 표현은 직렬 연산자 정보, 입력 및 출력 텐서의 분산 속성을 포함한 분산 텐서를 기반으로 합니다. 마찬가지로, 분산 텐서는 여러 슬라이싱 방법에 해당할 수 있습니다. 분산 연산자의 분산 속성은 서로 다르며 서로 다른 슬라이싱 방법에 해당합니다. 예를 들어 직사각형 곱셈 Y=X*W 연산자를 사용하면 입력 및 출력 분포 속성이 다른 경우 서로 다른 분산 연산자 구현에 해당합니다(분포 속성에는 ProcessMesh 및 ShardSpec이 포함됨). 분산 연산자의 경우 입력 및 출력 텐서의 ProcessMesh는 동일합니다.
마지막은 분산 재배열인데, 소스 텐서와 대상을 처리하기 위해 분산 컴퓨팅 그래프가 반드시 갖춰야 할 개념이다. 분산 속성이 다른 상황 텐서의. 예를 들어 계산에 두 개의 연산자가 있는데, 이전 연산자는 y의 분산 속성을 사용하는 다음 연산자와 다릅니다(그림에서 다른 색상으로 표시됨). 이를 통신을 통해 수행하기 위한 리샤드 작업 텐서 분산 재배열의 핵심은 생산과 소비 간의 불일치를 처리하는 것입니다.
불일치의 주요 원인은 세 가지입니다. 1) 데이터와 계산의 분리를 지원하므로 이를 사용하는 텐서와 연산자는 서로 다른 분포 속성을 갖습니다. 2) 사용자 정의 레이블 분포 수식 속성, 사용자를 지원합니다. 3) 분산 연산자의 기본 구현이 제한되어 있습니다. 입력 또는 출력 분산 속성이 지원되지 않으면 분산 재배열도 통과해야 합니다.
통합 분산 컴퓨팅 그래프의 세 가지 기본 개념을 소개한 후, 통합 분산 리소스 그래프의 주요 설계 고려 사항을 살펴보겠습니다. ) 이기종 클러스터를 지원합니다. 이는 클러스터가 CPU, GPU 및 XPU 리소스를 가질 수 있음을 의미합니다. 2) 대역폭 또는 지연과 같은 연결 기능의 정량화를 포함하여 클러스터의 계층적 연결 관계를 포괄하는 토폴로지 연결을 나타냅니다. ) 장치의 저장 및 컴퓨팅 기능을 포함하여 장치 자체의 모델링. 위의 설계 요구 사항을 충족하기 위해 클러스터를 사용하여 여러 개의 동형 DeviceMesh가 포함된 분산 리소스를 나타냅니다. 각 DeviceMesh에는 장치 링크로 구성된 그래프가 포함됩니다.
위 그림에는 GPU 머신 2대와 XPU 머신 2대 등 4대의 머신이 있는 것을 볼 수 있습니다. 2개의 GPU 머신에는 하나의 동형 DeviceMesh가 사용되고, 2개의 XPU 머신에는 또 다른 동형 DeviceMesh가 사용됩니다. 고정 클러스터의 경우 DeviceMesh는 고정되어 있으며 사용자는 ProcessMesh를 작동합니다. 이는 DeviceMesh의 추상화로 이해될 수 있습니다. 사용자는 마음대로 모양을 바꾸고 슬라이스할 수 있으며 최종적으로 ProcessMesh 프로세스는 DeviceMesh 장치에 균일하게 매핑됩니다.
텐서와 연산자를 기반으로 한 기존의 세분화된 분산 컴퓨팅 그래프 표현을 사용하여 기존 병렬 전략은 물론 향후 나타날 수 있는 새로운 병렬 전략을 다룰 수 있습니다. 데이터 병렬성은 데이터 텐서의 배치 차원을 분할하는 것입니다. 모델은 무게 관련 치수를 병렬로 분할합니다. 파이프라인 병렬성은 다양한 ProcessMesh로 표현되는데, 이는 보다 유연한 파이프라인 병렬성으로 표현될 수 있습니다. 예를 들어 파이프라인 단계는 여러 파이프라인 단계를 연결할 수 있으며, 서로 다른 단계에서 사용되는 ProcessMesh의 모양은 다를 수 있습니다. 일부 다른 프레임워크의 파이프라인 병렬 처리는 유연하지도 않고 다재다능하지도 않은 단계 번호 또는 배치를 통해 달성됩니다. 하이브리드 병렬성은 데이터 병렬성, 텐서 모델 병렬성, 파이프라인 병렬성을 혼합한 것입니다.
전면은 플라잉 패들의 자동 병렬 아키텍처 디자인과 몇 가지 추상적인 개념의 도입입니다. 이전 기반을 기반으로 2계층 FC 네트워크 예를 사용하여 플라잉 패들 자동 병렬 처리의 내부 구현 프로세스를 소개하겠습니다.
위 사진은 플라잉 패들의 전체 자동 병렬 흐름도입니다. 먼저 순방향, 역방향 및 업데이트 하위 그래프를 포함하는 완전한 계산 그래프를 얻기 위해 직렬 순방향 계산 그래프를 기반으로 역방향 생성을 수행합니다. 그러면 네트워크의 각 텐서와 각 연산자의 분산 속성을 명확히 할 필요가 있습니다. 반자동 유도 방법이나 완전 자동 검색 방법을 사용할 수 있습니다. 본 보고서에서는 소수의 사용자 라벨을 기반으로 라벨이 지정되지 않은 다른 텐서 및 연산자의 분산 속성을 도출하는 반자동 도출 방법을 주로 설명합니다. 분포 속성을 통해 파생된 후 직렬 계산 그래프의 각 텐서 및 각 연산자는 고유한 분산 속성을 갖습니다. 분산 속성을 기반으로 직렬계산 그래프를 먼저 자동 분할 모듈을 통해 SPMD 병렬성을 지원하는 논리적 분산계산 그래프로 변환한 후, 분산 재배열을 통해 파이프라인 병렬성을 지원하는 논리적 분산계산 그래프를 구현합니다. 생성된 논리적 분산 컴퓨팅 그래프는 물리적 매핑을 통해 물리적 분산 컴퓨팅 그래프로 변환됩니다. 현재는 하나의 프로세스와 하나의 장치에 대한 일대일 매핑만 지원됩니다. 마지막으로 물리적 분산 컴퓨팅 그래프는 실제 작업 종속성 그래프로 변환되어 실제 실행을 위해 비동기 실행기로 전달됩니다.
분산 속성 파생은 계산 그래프에서 일부 텐서 및 연산자의 분산 속성을 고려하여 다른 모든 텐서 및 연산자를 자동으로 완성하는 것입니다. . 예는 두 개의 Matmul 계산입니다. 사용자는 두 개의 매개변수 분산 속성만 표시했습니다. 이는 W1이 프로세스 0과 1에서 열 절단을 수행하고 W2가 프로세스 2와 3에서 행 절단을 수행함을 의미합니다. 서로 다른 두 가지 ProcessMesh 사용이 있음을 나타냅니다. .
분산 속성 파생은 두 단계로 나뉩니다. 1) 먼저 ProcessMesh 전송을 수행하여 파이프라인 분할을 구현합니다. 2) 그런 다음 ShardSpec 전송을 수행하여 단계 내에서 SPMD 분할을 구현합니다. ProcessMesh 파생은 플라잉 패들 선형 프로그램 lR을 사용하고 정적 프로그램 순서에 따라 파생을 위해 가장 가까운 선택 전략을 사용합니다. 즉, 두 개의 ProcessMesh가 있는 경우 하나는 더 크고 다른 하나는 더 작습니다. 더 큰 것이 최종 ProcessMesh로 선택됩니다. ShardSpec 파생은 Flying Paddle SSA Graph IR을 사용하여 파생을 위한 정방향 및 역방향 데이터 흐름 분석을 수행합니다. 데이터 흐름 분석을 사용할 수 있는 이유는 ShardSpec 의미론이 데이터 흐름 분석의 Semilattice 속성을 만족하기 때문입니다. 데이터 흐름 분석은 이론적으로 정방향 분석과 역방향 분석을 결합하여 계산 그래프의 모든 위치 표시 정보를 한 방향으로만 전파하는 것이 아니라 전체 계산 그래프에 전파할 수 있습니다.
분산 속성 파생을 기반으로 직렬 계산 그래프의 각 텐서 및 연산자는 고유한 분산 속성을 가지므로 분산 속성 Segmentation을 기반으로 계산 그래프를 자동으로 추론할 수 있습니다. 예시에 따르면, 단일 머신 직렬 계산 그래프는 Rank0, Rank1, Rank2, Rank3의 4가지 계산 그래프로 변환됩니다.
간단히 말하면, 각 연산자를 순회하고, 연산자의 입력과 출력을 먼저 텐서로 나눈 다음, 각 연산자를 계산하여 나눕니다. Tensor 분할은 Distributed Tensor 개체를 사용하여 Local Tensor 개체를 구성하는 반면, 연산자 분할은 Distributed Operator 개체를 사용하여 실제 입력 및 출력의 분포 속성을 기반으로 해당 분산 구현을 선택합니다. 단일 머신 프레임워크를 커널 프로세스로 전환합니다.
이전의 자동 분할을 통해서는 SPMD 병렬성을 지원하는 분산 컴퓨팅 그래프만 얻을 수 있었습니다. 파이프라인 병렬 처리를 지원하려면 분산 재배열을 통해 처리해야 하므로 적절한 리샤드 작업을 삽입하여 예제의 각 순위가 완전히 독립적인 계산 그래프를 갖게 됩니다. 왼쪽 그림의 Rank0의 Y는 Rank2의 Y와 동일하지만 ProcessMesh가 다르기 때문에 생산과 소비의 분포 속성이 일치하지 않으므로 Reshard도 삽입해야 합니다.
Flying Paddle은 현재 두 가지 유형의 분산 재배열을 지원합니다. 첫 번째 범주는 동일한 ProcessMesh에서 더 일반적인 소스 텐서 분포와 대상 텐서 분포이지만 소스 텐서 분포와 대상 텐서 분포는 서로 다른 슬라이싱 방법을 사용합니다(즉, ShardSpec이 다릅니다). 두 번째 범주는 원본 텐서 분포와 대상 텐서가 서로 다른 ProcessMesh에 분산되어 있으며 ProcessMesh 크기가 다를 수 있다는 것입니다. 예를 들어 그림의 사례 2의 경우 0-5 프로세스와 6-9 프로세스입니다. 통신을 최대한 줄이기 위해 Flying Paddle은 Reshard 작업에서도 관련 최적화를 수행합니다.
분산재배열 후 논리적인 분산컴퓨팅 그래프를 얻는데, 이때 프로세스와 구체적인 장치 매핑은 아직 결정되지 않았습니다. 논리적 분산 컴퓨팅 그래프와 기존에 통합된 자원 표현 그래프를 기반으로 여러 매핑 솔루션(구체적으로 어떤 장치에 프로세스가 매핑되어 있는지) 중에서 최적의 매핑 솔루션을 찾는 물리적 매핑 작업이 수행됩니다.
여기 탐욕스러운 규칙을 기반으로 한 비교적 간단한 구현이 있습니다. 먼저 프로세스 간 인접 테이블을 구축하고 에지는 통신량을 나타내고 노드는 장치 요구 사항을 나타냅니다. 그런 다음 에지는 통신 대역폭을 나타내고 노드는 장치 컴퓨팅 및 장치 요구 사항을 나타냅니다. 메모리. 프로세스 R을 무작위로 선택하여 요구 사항을 충족하는 장치 D에 배치합니다. 배치한 후 R과 통신량이 가장 많은 프로세스를 선택하여 D가 위치한 머신의 다른 장치에 배치합니다. 모든 프로세스 매핑이 완료될 때까지 메서드가 사용됩니다. 매핑 과정에서는 선택한 장치가 프로세스 그래프에서 요구하는 장치 유형과 일치하는지 여부뿐 아니라 필요한 계산량과 메모리도 확인해야 합니다.
물리적 매핑 이후 획득한 물리적 분산 네트워크를 기반으로 실제 작업 종속성 그래프를 구축합니다. 그림의 예는 계산 그래프의 정방향, 역방향 및 업데이트 역할을 기반으로 작업 종속성 그래프를 작성하는 것입니다. 동일한 역할을 가진 연산자는 작업을 형성합니다. 마이크로 배치 최적화를 지원하기 위해 작업 종속성 그래프는 여러 작업 인스턴스 종속성 그래프를 생성합니다. 각 인스턴스는 동일한 계산 논리를 가지지만 서로 다른 메모리를 사용합니다. 현재 Flying Paddle은 계산 그래프 역할을 기반으로 작업 그래프를 자동으로 작성하지만 사용자는 적절한 세분성에 따라 작업 구성을 사용자 정의할 수 있습니다. 각 프로세스는 작업 다중 인스턴스 종속성 그래프를 갖게 된 후 Actor 모드를 기반으로 비동기적으로 실행되며 메시지 중심 방식을 통해 1F1B 실행 스케줄링이 자동으로 실현될 수 있습니다.
위의 전체 프로세스를 기반으로 비교적 완전한 기능을 갖춘 자동 병렬화를 구현했습니다. 그러나 병렬 전략만으로는 더 나은 엔드투엔드 성능을 얻을 수 없으므로 이에 상응하는 최적화 전략도 추가해야 합니다. 플라잉 패들의 자동 병렬화를 위해 자동 분할 전과 네트워크 분할 후에 몇 가지 최적화 전략을 추가할 것입니다. 이는 일부 최적화는 직렬 논리로 구현하는 것이 더 자연스럽고 일부 최적화는 분할 후에 구현하기가 더 쉽기 때문입니다. 관리 메커니즘을 통해 플라잉 패들의 자동 병렬화에서 병렬 전략과 최적화 전략의 자유로운 조합을 보장할 수 있습니다.
지원실습을 아래와 같이 소개합니다.
첫 번째는 인터페이스입니다. 어떻게 구현되든 사용자는 궁극적으로 인터페이스를 통해 제공되는 자동 병렬 기능을 사용하게 됩니다. 사용자의 분산 요구사항을 해체하면 모델 네트워크 분할, 자원 표현, 분산 데이터 로딩, 분산 실행 프로세스 제어, 분산 저장 및 복구 등이 포함됩니다. 이러한 요구 사항을 충족하기 위해 우리는 사용 편의성과 유연성을 결합한 엔진 클래스를 제공합니다. 사용 편의성 측면에서 높은 수준의 API를 제공하고 맞춤형 콜백을 지원할 수 있으며 분산 프로세스가 사용자에게 투명합니다. 유연성 측면에서 분산 데이터 로더 구성, 자동 병렬 그래프 절단 및 실행, 기타 인터페이스를 포함한 하위 수준 API를 제공하여 사용자가 보다 세밀하게 제어할 수 있습니다. 두 사람은 shard_tensor, shard_op, 저장 및 로드와 같은 인터페이스를 공유합니다.
shard_op 및 shard_tensor라는 두 가지 레이블이 지정된 인터페이스가 있습니다. 그 중 shard_op 은 단일 연산자 또는 전체 모듈을 표시할 수 있으며 함수형 공식입니다. 위의 그림은 아주 간단한 사용예입니다. 먼저, Flying Paddle의 기존 API를 사용하여 직렬 네트워크를 수행합니다. 여기서는 비침해적인 분산 속성 표시를 위해 shard_tensor 또는 shard_op를 사용합니다. 그런 다음 자동 병렬 엔진을 구축하고 모델 관련 정보 및 구성을 전달합니다. 이때 사용자에게는 두 가지 옵션이 있는데, 하나는 fit /evaluate/predict 고차 인터페이스를 직접 사용하는 것이고, 다른 하나는 dataloader+prepare+run 인터페이스를 사용하는 것입니다. Fit 인터페이스를 선택하는 경우 사용자는 데이터 세트만 전달하면 프레임워크가 자동으로 분산 데이터 세트를 로드하고 병렬 프로세스를 자동으로 컴파일하며 분산 교육을 실행합니다. 데이터로더+준비+실행 인터페이스를 선택하면 사용자는 분산 데이터 로딩, 자동 병렬 컴파일 및 분산 실행을 분리하여 더 나은 단일 단계 디버깅이 가능합니다.
PaddleFleetX는 사용 편의성과 고성능을 갖춘 엔드투엔드 원스톱 대형 모델 제품군으로, 자동 병렬화를 지원합니다. 사용자가 플라잉 패들의 자동 병렬 종단 간 기능을 사용하려면 직렬 동적 그래프 모델 네트워크만 제공하면 됩니다. 사용자의 동적 그래프 직렬 네트워크를 획득한 후 내부 구현에서는 플라잉 패들 동적-정적 모듈을 사용하여 동적 그래프 단일 카드 네트워크를 정적 그래프 단일 카드 네트워크로 변환한 다음 자동으로 병렬로 컴파일하고 최종적으로 분산을 수행합니다. 훈련. . 추론 생성 중에 사용되는 기계 리소스는 훈련 중에 사용되는 리소스와 다를 수 있습니다. 내부 구현에서는 매개변수 및 네트워킹의 적응형 매개변수 분할도 수행합니다. 현재 PaddleFleetX의 자동 병렬 처리는 일반적으로 사용되는 병렬 전략과 최적화 전략을 다루고, 생성된 작업의 경우 While 제어 흐름의 자동 분할도 지원합니다.
자동 평행 비행 패들에 대해서는 아직 많은 작업이 진행 중입니다. 현재 기능은 다음과 같은 측면으로 요약될 수 있습니다.
먼저, 통합 분산 컴퓨팅 그래프는 완전한 SPMD 및 파이프라인 분산 전략을 지원할 수 있으며, 스토리지와 컴퓨팅의 분리된 표현을 지원할 수 있습니다.
둘째, 통합 분산 리소스 그래프는 이기종 리소스 모델링을 지원할 수 있습니다. 그리고 표현; 구성 요소는 플라잉 패들의 엔드투엔드 적응형 분산 아키텍처를 지원합니다.
병렬은 일반적으로 두 가지 분야(명확한 구분 없이)로 나눌 수 있습니다. 하나는 전통적인 분산 컴퓨팅이고 다른 하나는 전통적인 고성능 컴퓨팅입니다. 둘 다 고유한 장점과 단점. 전통적인 분산 컴퓨팅을 기반으로 하는 대표적인 프레임워크는 MPMD(Multiple Program-Multiple Data) 병렬 모드에 중점을 두고 탄력성과 내결함성을 잘 지원할 수 있는 TensorFlow입니다. 일반적으로 직렬 글로벌 관점에서 프로그래밍을 사용합니다. 전통적인 고성능 컴퓨팅을 기반으로 하는 대표적인 프레임워크는 SPMD(Single Program-Multiple Data) 모드에 더 중점을 두고 사용자가 물리적 클러스터에 직접 직면해야 하는 PyTorch입니다. 프로그래밍하고 모델 자체를 분할하는 일을 담당하며 적절한 커뮤니케이션을 삽입하면 사용자 요구 사항이 더 높아집니다. 자동 병렬성 또는 적응형 분산 컴퓨팅은 이 둘의 조합으로 볼 수 있습니다. 물론, 서로 다른 아키텍처는 서로 다른 설계 우선순위를 가지며 실제 요구 사항에 따라 가중치를 적용해야 합니다. 우리는 플라잉 패들 적응형 아키텍처가 두 분야의 장점을 모두 고려할 수 있기를 바랍니다.
위 내용은 Flying Paddle은 이기종 시나리오에서 자동 병렬 처리를 위해 설계되고 실행됩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!