우리는 업무를 위해 언어 모델을 지속적으로 교육하고 있습니다. 우리 팀은 다른 작업을 위해 선택한 수십 개의 다른 비디오 카드를 사용합니다: 어딘가에 강력한 DGX 스테이션이 필요하며 어딘가에는 RTX 2080Ti와 같은 오래된 게임 카드로 충분합니다. 모델 교육을 위한 최적의 GPU를 선택하면 프로세스의 속도와 비용 효율성 모두에 큰 영향을 미칠 수 있습니다.
흥미로운 점은 기계 학습을 위한 GPU 비교가 포함된 기사가 인터넷에 꽤 많이 있지만 언어 모델 교육을 위한 속도에 초점을 맞춘 기사는 거의 없다는 것입니다. 대부분 추론 테스트만 발견됩니다. 새로운 H100 칩이 출시되었을 때 NVidia의 보고서에 따르면 훈련에서는 A100보다 최대 9배 빠르지만 우리 작업의 경우 새 카드는 이전 카드보다 90% 더 빨랐습니다. 이에 비해 당사의 클라우드 제공업체는 이러한 GPU 간에 2 배의 가격 차이가 있었기 때문에 비용을 절약하기 위해 새로운 H100 으로 전환할 필요가 없었습니다.
그 외에도 우리는 8 개의 A100 80GB 그래픽 카드로 구성되고 한 달에 10 천 달러가 드는 DGX 스테이션을 테스트했습니다. 테스트 후, 이 역의 가격 / 성능 비율이 우리에게 전혀 적합하지 않다는 것이 분명해졌으며이 돈으로 우리는 66 x RTX 3090 을 취할 수 있으며 총합이 훨씬 더 유용 할 것입니다.
우리의 번역 언어 모델에는 최대 5억 개의 매개변수(평균 1억~3억 개)가 있습니다. 매개변수 수를 크게 늘리면 DGX의 가격/성능 비율이 더 좋아질 가능성이 있습니다. 현재 우리는 모든 변형을 한 번에 모든 언어 간에 번역할 수 있는 대형 언어 모델을 훈련하지 않고, 각 언어 쌍에 대해 별도의 언어 모델을 사용합니다. 영어-독일어. 이러한 각 모델은 120~300Mb를 사용합니다.
서로 다른 언어가 인터넷에서 서로 다른 양의 데이터를 가지고 있다는 점은 주목할 가치가 있습니다. 예를 들어 스페인어의 경우 번역이 포함된 5 억 개의 문장을 찾을 수 있지만 티베트어와 같은 희귀 언어에 대한 모델을 교육할 때는 사용 가능한 데이터를 기반으로 기계 학습 작업을 위한 특정 GPU를 선택해야 합니다. 영어에서 스페인어로의 번역 모델을 만들기 위해 우리는 4 x RTX 4500 및 256GB RAM이있는 서버를 사용합니다. 동시에,티베트어는 16GB RAM 으로 RTX 2080 Ti 에서 훈련될 수 있는데,이는 신경망의 복잡성을 증가시키고 결과적으로 소량의 데이터로 더 강력한 서버를 가져가는 것이 말이 되지 않기 때문이다.

그래픽 프로세서 및 이론적인 수치 선택
언어 모델 교육은 OpenNMT-tf 프레임워크를 사용하여 내부 Data Studio 플랫폼에서 진행되었습니다. 이 단계에는 데이터 준비, 모델 교육 및 참조 번역을 통한 모델 비교가 포함되었습니다. 교육 중에 FP32 대신 FP16 을 사용하면 번역 품질을 저하시키지 않고 언어 모델의 교육 시간을 크게 줄일 수 있었지만 모든 GPU가 이를 지원하지는 않았습니다.
그래픽 프로세서를 선택할 때 처리 능력(TFLOPS), 비디오 메모리(VRAM), GPU 벤치마크 결과, 라이브러리 및 프레임워크 지원, 예산 및 기타 요소(그래픽 카드 크기 및 폼 팩터, 전력 요구 사항, 냉각 및 시스템과의 호환성). 텍스트 생성 모델을 교육할 때 언어마다 리소스의 양이 다르다는 점도 염두에 두어야 합니다. 예를 들어, 1 바이트는 라틴 언어의 경우 한 문자, 키릴 언어의 경우 2 바이트, 상형 문자가 포함된 언어의 경우 3 바이트를 인코딩하는 데 사용됩니다. 그래픽 카드의 특성을 이해하는 것은 학습 과정의 속도에 큰 영향을 미칩니다.
사용 된 GPU의 관점에서 모델을 훈련 할 때, 비디오 카드는 사용 기간에 따라 두 그룹으로 나뉘었다: 학습 속도의 첫 번째 측정을하는 데 사용 된 초기 비디오 카드와 현재 사용중인 카드. 이러한 그래픽 카드의 주요 특징은 각각 표 1과 표 2에서 확인할 수 있습니다.
표 1 - 이전에 사용된 그래픽 프로세서 및 해당 기술 매개변수
Number of GPUs | GPU | VRAM, G | CUDA | FP16, TFLOPS | FP32, TFLOPS |
---|---|---|---|---|---|
1 | Tesla V100-SXM2 | HBM2, 16 | 7.0 | 31.33 | 16.31 |
2 | Tesla V100-SXM2 | HBM2, 32 | 7.0 | 31.33 | 15.67 |
1 | RTX 4060 Ti | GDDR6, 8 | 8.9 | 22.06 | 22.06 |
1 | Nvidia A40 | GDDR6, 48 | 8.6 | 37.42 | 37.42 |
2 | Nvidia A40 | GDDR6, 96 | 8.6 | 37.42 | 37.42 |
1 | Nvidia A100 | HBM2, 40 | 8.0 | 77.97 | 19.49 |
1 | Nvidia A100 | HBM2, 80 | 8.0 | 77.97 | 19.49 |
1 | Nvidia RTX A6000 | GDDR6, 48 | 8.6 | 38.71 | 38.71 |
1 | Nvidia A10 | GDDR6, 24 | 8.6 | 31.24 | 31.24 |
8 | Nvidia A10 | GDDR6, 192 | 8.6 | 31.24 | 31.24 |
1 | Nvidia H100 | HBM3, 80 | 9.0 | 204.9 | 51.22 |
노트
1. CUDA가 7.0보다 크면 FP16을 사용하면 CUDA 버전과 그래픽 카드 자체의 특성에 따라 훈련 속도가 향상됩니다.
2. 그래픽 카드의 사양에 FP16 대 FP32 성능 비율이 1 대 1보다 크다고 표시되면 혼합 정밀도를 사용하여 사양에 지정된 양만큼 훈련 속도를 높일 수 있습니다. 예를 들어 Quadro RTX 6000의 경우 FP16 TFLOPS 값 32.62(2:1)는 운동 속도를 최소 2배(실제로는 2.4배) 향상시킵니다
표 2 - 현재 사용되는 GPU 모델 및 주요 특성
Number of GPUs in use | GPU | VRAM, G | CUDA | FP16, TFLOPS | FP32, TFLOPS |
---|---|---|---|---|---|
1 | Quadro RTX 6000 | GDDR6, 24 | 7.5 | 32.62 | 16.31 |
2 | Quadro RTX 6000 | GDDR6, 48 | 7.5 | 32.62 | 16.31 |
4 | Quadro RTX 6000 | GDDR6, 96 | 7.5 | 32.62 | 16.31 |
2 | Nvidia TITAN RTX | GDDR6, 48 | 7.5 | 32.62 | 16.31 |
4 | Nvidia RTX A4500 | GDDR6, 96 | 8.6 | 23.65 | 23.65 |
1 | Nvidia GeForce RTX 3090 | GDDR6X, 24 | 8.6 | 35.58 | 35.58 |
1 | Nvidia GeForce RTX 3070 | GDDR6, 8 | 8.6 | 20.31 | 20.31 |
* - FP16,TFLOPS 및 FP32 에 대한 값,TFLOPS 는 GPU 당 사양에서 가져옵니다
GPU 교육 및 테스트 프로세스
모델은 18개의 GPU 세트를 사용하여 훈련되었습니다. 신경망 훈련 과정에서 우리는 수많은 언어 쌍 (백 개 이상의 언어) 을 사용했습니다. GPU 테스트는 특정 작업에 가장 적합한 하드웨어를 식별하는 데 도움이 되었습니다. 언어 쌍을 훈련하는 동안 다음과 같은 신경망 매개변수가 기초로 사용되었습니다:
- vocab 크기 = 30 000
- = 768 단위
- 레이어 = 6
- 머리 = 16
- 내부 치수 = 4 096
먼저 표 1을 기반으로 첫 번째 그룹에 속한 GPU를 특성화해 보겠습니다. 대략 1,000단계의 속도와 100,000개 단위의 배치 크기 배수로 모델을 훈련하는 데 소요되는 분 및 초 단위의 시간이 지표 비교의 기초로 사용됩니다.
첫 번째 그룹의 경우 속도 측정이 다음을 사용하여 수행되었음을 강조합니다 정렬 메커니즘과 만 사용합니다 FP32. 이 메커니즘을 사용하지 않으면 일부 서버의 학습 속도가 훨씬 빨라질 수 있습니다.
정렬 메커니즘을 사용하면 기본 텍스트와 번역된 텍스트의 하위 문자열을 일치시킬 수 있습니다. 문장의 하위 문자열이 다른 글꼴로 강조 표시될 수 있고 강조 표시와 함께 번역되어야 하는 경우 웹 페이지와 같은 형식이 지정된 텍스트를 번역해야 합니다.
위에서 언급한 신경망 매개변수를 고려하여 첫 번째 테이블의 가장 좋은 시간은 GPU Nvidia H100에서 학습 시간 22분으로 표시되었습니다 그리고 중간 시간은 동일한 브랜드 GeForce RTX 4060 Ti의 GPU에서 학습 시간 72분으로 표시되었으며 마지막 자리는 GPU Tesla V100-SXM 2에서 학습 시간 140분으로 표시되었습니다.
GPU 테스트에는 학습 곡선이 20분 28초인 Nvidia A10 카드 8장, 학습 곡선이 56분인 Nvidia A40 카드 2장, 86분인 Tesla V100-SXM 카드 2장이 있었습니다. 동일한 GPU 시리즈의 여러 카드를 동시에 적용하면 모델의 교육 프로세스 속도를 높이고 더 높은 용량을 가진 GPU와 거의 동일한 시간을 보여줄 수 있지만 이러한 기술은 재정적으로나 절차적으로 충분히 합리적이지 않을 수 있습니다. 학습 속도 측정 결과는 표 3에서 확인할 수 있습니다.
표 3 - 이전에 사용된 그래픽 맵에 대한 교육 시간 측정
Using the alignment mechanism | |||
---|---|---|---|
Effective batch size = 100 000 | |||
FP 32 | |||
Number of GPUs in use | GPU | Approximate speed (min. sec), 1,000 steps | Batch size in use |
8 | Nvidia A10 | 20,28 | 6 250 |
1 | Nvidia H100 | 22 | 25 000 |
1 | A100 (80 Gb) | 40 | 25 000 |
1 | A100 (40 Gb) | 56 | 15 000 |
2 | Nvidia A40 | 56 | 12 500 |
1 | RTX A6000 | 68,25 | 12 500 |
1 | GeForce RTX 4060 Ti | 72 | 4 167 |
1 | Nvidia A40 | 82,08 | 12 500 |
2 | Tesla V100-SXM | 86 | 4 167 |
1 | Nvidia A10 | 104,50 | 5 000 |
1 | Tesla V100-SXM2 | 140 | 4 167 |
다음으로, 현재 사용 중인 그래픽 가스 페달에 대한 비교 분석을 수행해 보겠습니다(표 2). 이 그래픽 프로세서 그룹의 경우 속도 측정은 다음을 사용하여 수행되었습니다 정렬 메커니즘은 물론 FP16 및 FP32를 사용합니다. 이 메커니즘과 혼합 정밀도를 포함한 속도 측정은 각각 아래 표 4와 5에 나와 있습니다.
따라서 이 표에서 GPU의 속도를 측정한 결과, 훈련 시간이 31분인 RTX A4500 시리즈 GPU가 1위를 차지했다고 할 수 있지만, 이러한 훈련 모델의 속도는 다음과 같이 얻어졌다는 점을 강조해야 합니다. 사용된 GPU의 단위 수를 최대 4개로 늘립니다. 이 사실을 무시하면 앞서 언급한 GPU의 훈련 속도가 훨씬 빨라져 최종 테이블에서 두 번째 위치에 놓이게 됩니다.
학습 시간이 47 분인 Quadro RTX 6000 시리즈 GPU 가 2 위를 차지했습니다. 이러한 훈련 속도는 사용된 프로세서의 장치 수인 4에 의해 반비례한다는 점에 유의해야 합니다. 그러한 GPU를 하나만 사용하면 약 3.2배의 속도 손실이 발생하고 결과적으로 약 153분이 소요되어 마지막 위치에 놓이게 됩니다.
세 번째 라인은 TITAN RTX 시리즈 GPU에서 75분 85초의 시간으로 촬영되었습니다. 이 학습 속도 점수는 2개의 프로세서를 사용하여 모델의 훈련 시간이 단축되었기 때문입니다.
1 대 수에서 훈련 속도 면에서 의심할 여지 없는 선두주자는 단연 78 분 26 초의 시간을 가진 지포스 RTX 3090 시리즈 GPU 가 될 것이다. 이 GPU의 유닛 수를 늘리면 모델 훈련 속도가 빨라지며, 이는 위에서 언급 한 모든 GPU 모델을 분명히 추월 할 것입니다. 모델 훈련 시간 측정에 대한 데이터는 표 4에서 볼 수 있습니다.
표 4 - 이전에 사용된 GPU의 언어 모델 훈련 속도 비교 분석
Using the alignment mechanism | |||
---|---|---|---|
Effective batch size = 100 000 | |||
FP 32 | |||
Number of GPUs in use | GPU | Approximate speed (min. sec), 1,000 steps | Batch size in use |
4 | Nvidia RTX A4500 | 31 | 5 000 |
4 | Quadro RTX 6000 | 47 | 6 250 |
2 | Nvidia TITAN RTX | 75,85 | 6 250 |
1 | GeForce RTX 3090 | 78,26 | 6 250 |
2 | Quadro RTX 6000 | 88 | 6 250 |
1 | GeForce RTX 3070 | 104,17 | 2 000 |
1 | Quadro RTX 6000 | 153 | 6 250 |
FP16을 사용하여 다음과 같은 훈련 속도 측정을 수행했습니다. FP32에 비해 절반 정밀도를 사용하면 모델 훈련 중에 소비되는 메모리 양을 줄이고 GPU에서의 계산을 가속화할 수 있습니다. 표현의 정확도는 FP32를 사용할 때보다 낮습니다.
앞의 표에서 FP32 를 이용한 모델의 훈련 시간을 측정해보면 신경망의 훈련 시간이 거의 두 배나 줄어들었다고 말할 수 있다. 성능 측정 결과를 바탕으로 표 4의 머신러닝 GPU 벤치마크를 통해 GPU의 위치가 크게 변하지 않았음을 확인할 수 있습니다. Quadro RTX 6000 시리즈 카드는 GeForce RTX 3090 GPU를 96초 앞지르며 5위에서 6위로 올라갔습니다. 최종 숫자는 표 5에 나와 있습니다.
표 5 - 이전에 사용된 GPU의 언어 모델 훈련 속도 비교 분석
Using the alignment mechanism | |||
---|---|---|---|
Effective batch size = 100 000 | |||
FP 16 | |||
Number of GPUs in use | GPU | Approximate speed (min. sec), 1,000 steps | Batch size in use |
4 | Nvidia RTX A4500 | 15,81 | 10 000 |
4 | Quadro RTX 6000 | 20,34 | 12 500 |
2 | Nvidia TITAN RTX | 32,68 | 6 250 |
2 | Quadro RTX 6000 | 37,93 | 10 000 |
1 | GeForce RTX 3090 | 38,89 | 10 000 |
1 | GeForce RTX 3070 | 48,51 | 2 500 |
1 | Quadro RTX 6000 | 52,56 | 10 000 |