지난 10년은 딥러닝의 '황금의 10년'이었습니다. 딥러닝은 인간이 일하고 노는 방식을 완전히 바꿔 놓았고 의료, 교육, 제품 디자인 등 다양한 산업 분야에서 널리 활용되었습니다. 이는 컴퓨팅 하드웨어의 발전, 특히 GPU의 혁신과 분리될 수 없습니다.
딥 러닝 기술의 성공적인 구현은 세 가지 주요 요소에 달려 있습니다. 첫 번째는 알고리즘입니다. 심층 신경망, 컨벌루션 신경망, 역전파 알고리즘, 확률적 경사하강법 등 대부분의 딥러닝 알고리즘은 1980년대 또는 그 이전에 제안되었습니다.
두 번째는 데이터 세트입니다. 신경망을 훈련하는 데 사용되는 데이터 세트는 신경망이 다른 기술보다 뛰어난 성능을 발휘할 수 있을 만큼 충분히 커야 합니다. 21세기 초반이 되어서야 Pascal과 ImageNet과 같은 빅데이터 세트를 사용할 수 있게 되었습니다. 세 번째는 하드웨어입니다. 성숙한 하드웨어 개발을 통해서만 대규모 데이터 세트가 포함된 대규모 신경망을 훈련하는 데 필요한 시간을 합리적인 범위 내에서 제어할 수 있습니다. 업계에서는 일반적으로 보다 '합리적인' 교육 시간이 약 2주라고 생각합니다.
이 시점에서 딥러닝 분야에 초원의 불이 붙었습니다. 알고리즘과 데이터 세트가 딥 러닝의 혼합 연료로 간주된다면 GPU는 이를 촉발하는 불꽃입니다. 강력한 GPU를 사용하여 네트워크를 훈련할 수 있으면 딥 러닝 기술이 실용화됩니다.
그 이후로 딥 러닝은 다른 알고리즘을 대체했으며 이미지 분류, 이미지 감지, 음성 인식, 자연어 처리, 타이밍 분석 및 기타 분야에서 널리 사용되었습니다. 바둑과 체스에서도 볼 수 있습니다. 딥 러닝이 인간 생활의 모든 측면에 침투함에 따라 모델 훈련 및 추론의 하드웨어는 점점 더 까다로워지고 있습니다.
2012년 AlexNet의 등장부터 2016년 ResNet의 출현까지 이미지 신경망의 학습 컴퓨팅 전력 소비(페타플롭/일)는 거의 2배 증가했습니다. 2018년부터 2016년 BERT부터 최근 GPT-3까지 훈련 컴퓨팅 전력 소비가 거의 4배나 증가했습니다. 이 기간 동안 특정 기술의 발전 덕분에 신경망의 훈련 효율성이 크게 향상되어 컴퓨팅 파워가 많이 절약되었습니다. 그렇지 않으면 컴퓨팅 파워 소비 증가가 더욱 과장될 것입니다.
연구원들은 더 큰 언어 모델을 훈련하기 위해 더 큰 비지도 언어 데이터 세트를 사용하려고 합니다. 그러나 이미 4000노드 GPU 클러스터를 보유하고 있지만 합리적인 훈련 시간 내에 처리할 수 있는 작업은 여전히 매우 제한적입니다. . 즉, 딥러닝 기술의 발전 속도는 하드웨어의 발전 속도에 달려 있다는 뜻입니다.
요즘 딥 러닝 모델은 점점 더 복잡해질 뿐만 아니라 적용 범위도 점점 더 넓어지고 있습니다. 따라서 딥러닝의 성능을 지속적으로 향상시킬 필요가 있습니다. 그렇다면 딥러닝 하드웨어는 어떻게 지속적으로 개선될 수 있을까요? NVIDIA의 수석 과학자인 Bill Dally는 의심할 바 없이 이 질문에 답할 수 있는 권위를 가지고 있습니다. H100 GPU 출시 전 그는 연설에서 딥 러닝 하드웨어의 현황을 검토하고 무어의 법칙이 실패할 경우 지속적인 성능 확장을 위한 여러 가지 방향에 대해 논의했습니다. . OneFlow 커뮤니티가 이를 편집했습니다.
2012년 K20X부터 2020년 A100까지 GPU의 추론 성능이 317배로 늘어났습니다. 이것이 우리가 "황의 법칙"이라고 부르는 것이며, 이 발전 속도는 "무어의 법칙"보다 훨씬 빠릅니다.
GPU의 추론 성능이 향상되었습니다 하지만 "무어의 법칙"과 달리 "황의 법칙"에서는 GPU의 성능 향상이 공정 기술의 발전에 전적으로 의존하지 않습니다. 위 사진은 이러한 유형의 GPU를 검정색, 녹색, 파란색으로 표시하여 세 가지 다른 프로세스 기술을 사용함을 나타냅니다. 초기 K20X와 M40은 28nm 공정을 사용했고, P100, V100, Q8000은 16nm 공정을 사용했고, A100은 7nm 공정을 사용했습니다. 프로세스 기술의 발전은 GPU 성능을 원래 수준의 1.5~2배까지만 높일 수 있습니다. 전체적으로 317배나 성능이 향상된 것은 대부분 GPU 아키텍처와 회로 설계 개선에 따른 것이다.
2012년 NVIDIA는 Kepler 아키텍처 GPU를 출시했지만 이는 딥 러닝을 위해 특별히 설계되지 않았습니다. Nvidia는 2010년부터 딥 러닝에 참여하기 시작했으며 당시에는 딥 러닝을 위한 GPU 제품 맞춤화를 아직 고려하지 않았습니다.
Kepler (2012) Kepler의 목표 사용 시나리오는 이미지 처리와 고성능 컴퓨팅이지만 주로 이미지 처리에 사용됩니다. 따라서 FP32 계산(단정밀도 부동 소수점 계산) 속도가 거의 4TFLOPS에 달하고 메모리 대역폭이 250GB/s에 달하는 높은 부동 소수점 컴퓨팅 능력이 특징입니다. 케플러의 뛰어난 성능을 바탕으로 엔비디아도 자사 제품의 기준점으로 삼고 있다.
Pascal (2016)나중에 Nvidia는 2016년에 Pascal 아키텍처를 출시했는데 그 디자인은 딥러닝에 더 적합합니다. 몇 가지 연구 끝에 NVIDIA는 많은 신경망이 FP16(반정밀도 부동 소수점 계산)으로 훈련될 수 있다는 사실을 발견했습니다. 따라서 대부분의 Pascal 아키텍처 모델은 FP16 계산을 지원합니다.
아래 그림에서 이 Pascal GPU의 FP32 계산 속도는 이전 Kepler GPU보다 훨씬 높은 10.6 TFLOPS에 도달할 수 있으며, FP16 계산은 FP32보다 두 배 빠른 속도입니다.
파스칼 아키텍처는 FDP4와 같은 더 복잡한 명령어도 지원하므로 명령어 가져오기, 디코딩 및 피연산자 가져오기의 오버헤드를 8개의 산술 연산으로 분할할 수 있습니다. 두 개의 산술 연산에만 오버헤드를 할당할 수 있었던 기존 융합 곱셈-덧셈(Fuse Multiply-Add) 명령어와 비교하여 파스칼 아키텍처는 추가 오버헤드로 인한 에너지 소비를 줄이고 대신 수학 연산에 사용할 수 있습니다.
Pascal 아키텍처는 Kepler의 3배인 732GB/s의 대역폭을 갖춘 HBM 비디오 메모리도 사용합니다. 대역폭을 늘리는 이유는 메모리 대역폭이 딥러닝 성능 향상의 주요 병목 현상이기 때문입니다. 또한 Pascal은 NVLink를 사용하여 더 많은 머신과 GPU 클러스터를 연결하여 대규모 교육을 더 효과적으로 완료합니다.
NVIDIA가 딥 러닝을 위해 출시한 DGX-1 시스템은 Pascal 아키텍처를 기반으로 하는 8개의 GPU를 사용합니다.
Volta(2017) 2017년 NVIDIA는 딥 러닝에 적합한 Volta 아키텍처를 출시했습니다. Tensor Core는 딥 러닝 가속화를 위해 Volta 아키텍처에 도입되었습니다. Tensor Core는 명령어 형태로 GPU에 연결할 수 있습니다. 핵심 명령어는 HMMA(Half Precision Matrix Multiply Accumulate)로, 두 개의 4×4 FP16 행렬을 곱한 다음 그 결과를 하나의 행렬에 더합니다. FP32 행렬에서는 이런 연산이 이루어집니다. 딥러닝에서는 매우 일반적입니다. HMMA 명령어를 통해 명령어를 가져오고 디코딩하는 오버헤드는 상각을 통해 원래의 10~20%로 줄일 수 있습니다.
나머지는 부하의 문제입니다. Tensor Core의 성능을 능가하려면 부하에 대해 열심히 노력해야 합니다. Volta 아키텍처에서는 딥러닝 가속을 위해 많은 양의 에너지 소비와 공간이 사용되므로 프로그래밍 가능성을 희생하더라도 큰 성능 향상을 가져올 수 없습니다.
Volta는 메모리 대역폭이 900GB/s에 달하는 HBM 비디오 메모리도 업그레이드했으며, 클러스터를 구축할 때 대역폭을 두 배로 늘릴 수 있는 새로운 버전의 NVLink도 사용합니다. 또한 Volta 아키텍처에는 여러 GPU를 연결할 수 있는 NVSwitch도 도입되었습니다. 이론적으로 NVSwitch는 최대 1024개의 GPU를 연결하여 대규모 공유 메모리 시스템을 구축할 수 있습니다.
Turing(2018) 2018년 NVIDIA는 Turing 아키텍처를 출시했습니다. 이전 Tensor Core의 큰 성공으로 인해 NVIDIA는 Integer Tensor Core를 출시했습니다. 대부분의 신경망은 FP16으로 훈련할 수 있고 추론에는 너무 높은 정확도와 큰 동적 범위가 필요하지 않으므로 Int8을 사용하면 됩니다. 이에 NVIDIA는 Turing 아키텍처에 Integer Tensor Core를 도입하여 성능을 두 배로 높였습니다.
Turing 아키텍처는 GDDR 메모리를 사용하여 대역폭 요구 사항이 높은 NLP 모델 및 추천 시스템을 지원합니다. 당시 일부 사람들은 튜링 아키텍처의 에너지 효율성이 시중에 나와 있는 다른 가속기만큼 좋지 않다는 의문을 제기했습니다. 그러나 신중하게 계산하면 Turing 아키텍처가 실제로 에너지 효율적이라는 것을 알 수 있습니다. Turing은 G5 비디오 메모리를 사용하고 다른 가속기는 LPDDR 메모리를 사용하기 때문입니다. 제 생각에는 G5 메모리를 선택하는 것은 유사한 제품이 지원할 수 없는 높은 대역폭 요구 사항을 가진 모델을 지원할 수 있기 때문에 올바른 결정이라고 생각합니다.
튜링 아키텍처에 대해 제가 매우 자랑스럽게 생각하는 점은 Ray Tracing을 지원하는 RT Core도 탑재하고 있다는 것입니다. Nvidia는 2013년에야 RT Core 연구를 시작했고 불과 5년 후에 공식적으로 RT Core를 출시했습니다.
Ampere(2020) 2020년 NVIDIA는 Ampere 아키텍처를 출시했습니다. 이를 통해 그 해 출시된 A100은 1,200테라플롭스 이상의 추론 속도로 성능 도약을 달성할 수 있었습니다. Ampere 아키텍처의 가장 큰 장점 중 하나는 희소성을 지원한다는 것입니다. 우리는 대부분의 신경망이 희소화될 수 있다는 것을 발견했습니다. 즉, 신경망은 "가지치기"될 수 있으며 정확도에 영향을 주지 않고 많은 가중치를 0으로 설정할 수 있습니다. 그러나 서로 다른 신경망은 서로 다른 정도로 희소화될 수 있으며 이는 약간 까다롭습니다. 예를 들어, 정확도를 잃지 않으면서 컨벌루션 신경망의 밀도를 30~40%로 줄일 수 있고, 완전 연결 신경망의 밀도를 10~20%로 줄일 수 있습니다.
희소 매트릭스 패키지를 운영하는 데 드는 비용이 높기 때문에 밀도를 10% 미만으로 줄일 수 없다면 트레이드 오프가 고밀도 매트릭스 패키지를 운영하는 것만큼 좋지 않다는 것이 전통적인 견해입니다. 우리는 먼저 희소성을 연구하기 위해 스탠포드 대학과 협력했고 나중에 행렬 밀도가 50%에 도달할 때 효율적으로 실행할 수 있는 아주 좋은 기계를 만들었습니다. 그러나 우리는 파워 게이팅 측면에서 희소 행렬을 조밀한 행렬보다 더 효율적으로 만들고 싶습니다. 매트릭스를 더욱 우수하게 만드는 것은 여전히 어려운 일이며, 이것이 바로 우리가 항상 돌파하고 싶은 부분입니다.
드디어 문제를 극복하고 암페어를 개발했는데, 그 비결은 구조화된 희소성입니다.
Structured Sparse Ampere 아키텍처에서는 행렬의 4개 값마다 0이 아닌 값이 2개 이하일 수 있다고 규정합니다. 즉, 가중치는 다음과 같이 압축됩니다. 0이 아닌 값을 제거합니다. 코드워드(코드워드)를 입력하여 어떤 가중치를 유지해야 하는지 결정하고, 코드워드를 사용하여 이러한 0이 아닌 가중치에 어떤 입력 활성화를 곱해야 하는지 결정한 다음 이를 더하여 점 곱셈 연산을 완료합니다. 이 접근 방식은 매우 효율적이므로 Ampere 아키텍처가 대부분의 신경망 성능을 두 배로 높일 수 있습니다.
또한 Ampere 아키텍처에는 많은 혁신이 있습니다. 예를 들어 Ampere에는 FP32의 8비트 지수 비트와 FP16의 10비트 가수 비트를 결합한 TF32(TensorFloat-32) 형식이 내장되어 있습니다. Ampere는 BFLOAT 형식도 지원합니다. BFLOAT의 지수 비트는 FP32와 동일하고 가수 비트는 FP32보다 적으므로 FP32의 축소 버전이라고 볼 수 있습니다. 위의 모든 데이터 형식은 구조화된 스파스를 지원하므로 훈련에 FP16 및 TF32를 사용하든 추론에 Int8 및 Int4를 사용하든 구조화된 스파스가 제공하는 높은 성능을 얻을 수 있습니다.
Ampere의 양자화 능력이 점점 더 좋아지면 많은 신경망에 적용할 수 있고 고성능을 보장할 수 있습니다. Ampere에는 6개의 HBM 스택이 있으며, HBM 메모리의 대역폭도 업그레이드되어 2TB/s에 도달했습니다. 엔드 투 엔드 추론 중에 Ampere의 컴퓨팅 기능은 3.12 TOPS/W(Int8) 및 6.24 TOPS/W(Int4)에 도달할 수 있습니다.
FP32의 정밀도가 너무 높아서 산술 연산 비용이 너무 높습니다. 나중에 Turing 및 Ampere 아키텍처는 Int8을 지원하여 GPU의 와트당 성능을 크게 향상시켰습니다. Google은 TPU1을 발표하는 논문을 발표했을 때 TPU1의 장점은 특별히 머신러닝에 맞춰져 있다는 점이라고 밝혔습니다. 사실 구글은 자체 TPU1을 NVIDIA의 Kepler와 비교해야 하기 때문에(앞서 언급했듯이 Kepler는 딥러닝을 위해 특별히 설계되지 않았습니다) TPU1의 장점은 FP32에 비해 Int8의 장점이라고 할 수 있습니다.
둘째, GPU는 복잡한 명령을 지원합니다.
Pascal 아키텍처에는 도트 곱셈 지침이 추가되었고 Volta, Turing 및 Ampere 아키텍처에는 오버헤드를 분산시키기 위해 매트릭스 제품 지침이 추가되었습니다. GPU에 프로그래밍 가능한 엔진을 유지하면 각 명령어가 너무 많은 작업을 완료하여 명령어당 오버헤드 상각액이 거의 무시될 수 있기 때문에 가속기만큼 효율적일 수 있습니다.마지막으로 공정기술의 발전입니다.
칩 제조 공정은 28나노미터에서 오늘날의 7나노미터로 발전해 GPU 성능 향상에 어느 정도 기여했습니다. 다음 예를 통해 오버헤드 상각의 효과를 더 잘 이해할 수 있습니다. HFMA 연산을 수행하는 경우 명령어를 가져오고, 디코딩하고, 피연산자를 가져오는 동안 "곱하기" 및 "덧셈" 작업의 총 크기는 1.5pJ(피코줄, 피코줄)에 불과합니다. 30pJ의 오버헤드가 필요하며 상각 시 비용은 최대 2000%에 이릅니다.
그리고 HDP4A 연산을 수행하면 오버헤드를 8개의 연산에 할당하여 오버헤드를 500%로 줄일 수 있습니다. HMMA 운영의 경우 대부분의 에너지 소비가 부하에 사용되므로 오버헤드는 22%에 불과하며 IMMA는 16%로 훨씬 낮습니다. 따라서 프로그래밍성을 추구하면 약간의 오버헤드가 추가되지만, 다른 설계를 채택하여 얻을 수 있는 성능 향상이 더 중요합니다.
3 GPU가 연결되는 방식. Pascal 아키텍처에 NVLink를 도입했고, 이후 Volta 아키텍처는 NVLink 2를, Ampere 아키텍처는 NVLink 3을 채택했습니다. 각 세대의 아키텍처 대역폭은 두 배로 늘어났습니다. 또한 Volta 아키텍처를 기반으로 한 1세대 NVSwitch와 Ampere 아키텍처를 기반으로 한 2세대 NVSwitch를 출시했습니다. NVLink 및 NVSwitch를 통해 매우 큰 GPU 클러스터를 구축할 수 있습니다. 또한 DGX 박스도 출시했습니다.
DGX box
2020년 NVIDIA는 Mellanox를 인수하여 이제 대규모 GPU 클러스터 사용을 위한 스위치 및 상호 연결을 포함한 완전한 데이터 센터 솔루션 세트를 제공할 수 있습니다. 또한 AI 성능 기록 500 목록에서 상위 20위 안에 드는 DGX SuperPOD를 탑재하고 있습니다. 과거에는 사용자가 기계를 맞춤화해야 했지만 이제는 DGX SuperPOD가 제공하는 고성능을 얻기 위해 DGX SuperPOD를 배포할 수 있는 사전 구성된 기계만 구입하면 됩니다. 또한 이러한 기계는 과학 컴퓨팅에 매우 적합합니다.
과거에는 단일 머신으로 하나의 대규모 언어 모델을 훈련하는 데 수개월이 걸렸지만 GPU 클러스터를 구축하면 훈련 효율성을 크게 향상시킬 수 있습니다. 따라서 GPU 클러스터 연결을 최적화하고 단일 GPU의 성능을 향상시킵니다. 똑같이 중요합니다.
다음으로 NVIDIA의 가속기 연구 및 개발 작업에 대해 이야기해 보겠습니다. Nvidia는 가속기를 신기술 테스트를 위한 캐리어로 간주하며, 성공적인 기술은 결국 주류 GPU에 적용될 것입니다. 가속기는 다음과 같이 이해될 수 있습니다. 메모리 계층에 의해 입력되는 행렬 곱셈 장치가 있습니다. 다음으로 해야 할 일은 대부분의 에너지 소비를 데이터 처리 대신 행렬 곱셈 계산에 사용하도록 하는 것입니다.
이 목표를 달성하기 위해 우리는 2013년경 NVIDIA DLA 프로젝트를 시작했습니다. 이는 다른 딥 러닝 가속기와 다르지 않은 매우 완벽한 지원 기능을 갖춘 오픈 소스 제품입니다. 그러나 DLA에는 2048 Int8, 1024 Int16 또는 1024 FP16 작업을 지원하는 대규모 MAC 어레이가 있습니다.
DLA에는 두 가지 고유한 기능이 있습니다. 첫째, 희소화를 지원합니다. DMA에서 통합 버퍼로, 통합 버퍼에서 MAC 배열로의 모든 데이터 전송에는 인코딩을 통해 어떤 요소가 남을지 결정한 다음 이러한 요소를 해결합니다. 그런 다음 계산을 위해 MAC 배열에 입력합니다.
DLA 압축 해제 방법은 MAC 배열에 0 값을 입력하지 않는 것이 더 영리합니다. 이렇게 하면 일련의 데이터가 0이 되기 때문입니다. 대신, 0 값을 나타내기 위해 별도의 라인을 설정하고 승수가 어느 입력에서든 해당 라인을 수신하면 승수 내의 데이터를 래치한 다음 숫자 값만큼 증가하지 않는 출력을 보냅니다. 게이팅은 에너지 효율적입니다.
두 번째는 하드웨어 수준에서 Winograd 변환을 지원하는 것입니다. 예를 들어 m×n 컨볼루션 커널과 같은 컨볼루션을 수행하려면 공간 영역에서 n 2개의 곱셈기와 가산기가 필요하지만, 주파수 영역에서 수행하려면 포인트별만 필요합니다. 곱셈. 따라서 대규모 컨볼루션 커널 연산은 공간 영역보다 주파수 영역에서 더 효율적입니다. 컨볼루션 커널의 크기에 따라 Winograd 변환은 일부 이미지 네트워크의 성능을 4배 향상시킬 수 있습니다.
EIE (2016) 2016년에 저는 스탠포드에서 당시 학생이었던 Han Song(MIT EECS 조교수, Shenjian Technology의 전 공동 창립자) 엔진과 함께 EIE(Efficient Inference)를 공부했습니다. ). 이는 희소화에 대한 최초의 탐구 중 하나였습니다. 우리는 하드웨어 수준에서 CSR(Compressed Sparse Row) 매트릭스 표현을 지원합니다. 이 접근 방식은 밀도가 50%일 때 전체 밀도 컴퓨팅보다 훨씬 더 에너지를 절약합니다.
나중에 나는 가속기를 더 효율적으로 만들고 싶다면 각 엔진이 단일 곱셈 누적을 수행할 뿐만 아니라 각 PE(Processing Element)가 16×를 수행하도록 벡터 단위 배열을 구축해야 한다는 것을 발견했습니다. 사이클 곱셈과 덧셈당 16=256입니다. 하지만 벡터 셀 배열을 구축하기 시작하면서 희소성을 효율적으로 달성하기 어렵다는 사실을 깨닫고 구조화된 희소성으로 전환했습니다.
EIE는 스칼라 단위를 처리할 때 포인터 구조를 별도의 메모리에 저장한 후 파이프라인 단계를 통해 포인터 구조를 처리하여 어떤 데이터가 곱셈이 가능한지 결정한 후 곱셈을 수행하고 연산 결과를 메모리에 넣습니다. 적절한 위치. 이 전체 프로세스는 매우 효율적으로 실행됩니다. 우리는 또한 희소성을 달성하기 위한 "가지치기" 외에도 신경망 작업의 효율성을 향상시키는 방법이 양자화라는 것을 발견했습니다. 따라서 우리는 코드북 양자화를 사용하기로 결정했습니다. 코드북 양자화는 비트 단위로 표현된 데이터의 효율성을 높이는 가장 좋은 방법입니다. 그래서 우리는 코드북에 대해 훈련했습니다.
역전파를 사용하여 경사하강법을 캡처할 수 있다면 역전파를 모든 것에 적용할 수 있다는 것이 밝혀졌습니다. 그래서 우리는 주어진 정확도에 대한 최적의 코드워드 세트를 훈련하기 위해 코드북에서 역전파를 사용했습니다. 코드북이 7비트라고 가정하면 128개의 코드워드를 얻게 됩니다. 훈련을 위한 신경망에서 최적의 128개의 코드워드를 찾을 것입니다.
코드북 양자화는 문제에 직면합니다. 수학적 연산의 오버헤드가 높습니다. 코드북이 아무리 크더라도 실제 값이 얼마인지는 RAM(Random Access Memory)에서 찾아봐야 하기 때문입니다. 실제 값은 높은 정밀도로 표현되어야 하며, 이러한 코드워드를 정확하게 표현할 수는 없습니다. 그래서 우리는 고정밀 수학에 많은 노력을 기울였습니다. 압축 관점에서 볼 때 이는 매우 잘 작동하지만 수학 에너지 관점에서는 비용 효율적이지 않으므로 후속 작업에서 이 기술을 포기했습니다.
Eyeriss(2016) Joel Emer(NVIDIA 및 MIT 모두)와 MIT의 Vivienne Sze는 주로 타일링을 해결하는 Eyeriss를 구축했습니다. 문제 또는 계산을 제한하는 방법은 데이터 이동을 최소화합니다. 일반적인 접근 방식은 고정 행을 사용하고 행에 가중치를 분산시키고 열에 출력 활성화를 사용하고 데이터 이동에 소비되는 에너지를 최소화하는 것입니다.
SCNN (2017) 현재도 희소성 연구를 진행하고 있습니다. 2017년에 우리는 희소 컴파일(신경망의 진화)을 위해 SCNN(Sparse CNN)이라는 기계를 구축했습니다. 우리가 한 일은 희소성 처리와 관련된 모든 복잡한 문제를 출력으로 옮겼다는 것입니다. 모든 입력 활성화를 읽고 어디로 가야 하는지 파악하십시오. 따라서 여기서 "f-와이드 벡터"는 일반적인 벡터 입력 활성화입니다.
한 번에 4개의 입력 활성화, 즉 4개의 가중치를 읽게 되며 각 가중치에 각 입력 활성화를 곱해야 합니다. 단지 결과를 어디에 둘 것인가의 문제이므로 f에 f를 곱합니다.
좌표 계산에서는 입력 활성화와 가중치의 지수를 취하고 출력 활성화에서 합산된 결과가 있어야 하는 위치를 계산합니다. 그런 다음 이러한 누산기 버퍼에서 데이터 분산(scatter_add) 계산이 수행됩니다. 그 전에는 모든 것이 완벽하게 작동했습니다. 그러나 출력에서 정밀도가 실제로 가장 넓기 때문에 불규칙성을 출력으로 전달하는 것은 좋은 생각이 아닌 것으로 나타났습니다. 누적되는 경향이 있을 때는 가중치 8비트, 활성화 8비트를 수행하여 총 24비트가 됩니다. 여기서는 넓은 누산기를 사용하여 많은 데이터 이동을 수행하는데, 이는 보다 집중적인 데이터 이동을 수행하는 것보다 낫습니다. 하지만 그 개선 효과는 상상했던 것만큼은 아니며 밀도 단위 에너지의 50% 정도일지도 모릅니다.
SIMBA (RC18) (2019) 우리가 할 또 다른 일은 2018년에 기존 가속기를 사용하여 멀티 칩 모듈 - SIMBA (RC18)을 구축하는 것입니다. 이 연구는 2008년에 나왔고 이 칩은 또한 많은 독창적인 기술을 보여주었습니다. 좋은 PE 아키텍처를 가지고 있으며 칩은 중간에 매우 효과적인 신호 기술을 제공합니다. 이제 아키텍처는 전체 36개의 칩으로 확장되며 각 칩에는 4x4 PE 매트릭스가 있고 이 장치 내에서 각 PE에는 8개의 넓은 벡터 장치가 있으므로 128 TOPS의 컴퓨팅 성능을 얻을 수 있으며 각 Op에는 0.1 pJ가 있습니다. 대략 10 TOPS/W와 같습니다.
우리는 절충에 대해 많은 것을 배웠습니다. 우리는 이러한 PE 어레이를 구축하는 것이 메모리 계층 구축 방법, 데이터 예약 방법 등에 대해 매우 큰 설계 공간을 구축하는 것과 같다는 것을 깨달았으므로 MAGNET이라는 시스템을 구축했습니다.
MAGNET 위 그림은 2019년 ICCAD(International Conference on Computer-Aided Design)에서 발표된 디자인 공간 탐색 시스템입니다. 주로 디자인 공간을 열거하는 데 사용됩니다. PE 당 얼마나 많은 벡터 유닛이 있는지, 가중치 버퍼의 크기, 누산기 버퍼의 크기, 활성화 버퍼의 크기 등이 있습니다. 나중에 다른 수준의 캐싱이 필요하다는 사실이 밝혀져 가중치 수집기와 누산기 수집기를 추가했습니다.
MAGNET RESULTS 이 추가 캐싱 수준을 통해 마침내 성공했습니다. 이는 여기의 데이터 흐름이 다르며 가중치 고정 데이터 흐름이 원래 Sze와 Joel에 의해 수행되었음을 보여줍니다. 대부분의 에너지를 축적 버퍼, 가중치 버퍼 및 입력 버퍼와 같이 데이터 경로 외부에 두는 것입니다. 그러나 이러한 하이브리드 데이터 흐름을 사용하면 가중치가 고정되고, 로컬 출력이 고정되고, 출력이 고정되고, 로컬 가중치가 고정되므로 수학 연산에서 거의 2/3의 에너지를 얻을 수 있으며 이러한 메모리 어레이에 소비되는 에너지를 줄일 수 있습니다. , 따라서 계층의 다른 수준에서 메모리를 처리합니다. 이는 이제 와트당 성능을 약 20TOPS로 끌어올립니다.
VS-Quant 2021년 MLSYS(The Conference on Machine Learning and Systems, Machine Learning and Systems Conference) 컨퍼런스에서 VS-Quant를 소개했습니다. 압축 비트(코드북 양자화가 잘 작동하는 경우) 및 수학적 오버헤드 측면에서 비용 효과적인 양자화 방법을 탐색합니다. 우리는 정수 표현을 사용하지만 정수의 동적 범위를 표현할 수 있도록 크기를 조정하려고 합니다.
그런데 이것을 지금 신경망 전체에 적용하면 신경망에는 다양한 동적 범위가 많기 때문에 잘 작동하지 않는 것으로 나타났습니다. 따라서 VS-Quant의 핵심은 다음과 같습니다. 작은 벡터는 별도의 스케일 인수를 적용하며 대략 32개의 가중치에 대해 위의 작업을 수행하면 동적 범위가 훨씬 작아집니다. 이러한 정수를 맨 위에 놓을 수도 있고 조정하고 최적화할 수도 있습니다.
이상치를 정확하게 표현하지 못했을 수도 있지만 나머지 숫자는 더 잘 표현되었습니다. 이러한 방식으로 우리는 더 높은 정확도를 위해 상대적으로 낮은 정밀도의 가중치와 활성화를 교환할 수 있습니다. 이제 여러 척도 인자가 있습니다. 하나는 가중치 인자이고 다른 하나는 활성화 인자입니다.
Energy, Area, Accuracy Tradeoff 이러한 연산은 기본적으로 벡터 수준에서 수행하며 결과는 Bert-base와 같습니다. 가중치가 없는 훈련과 비교할 때 훈련을 통해 어떤 경우에는 20%의 에너지와 70%의 공간을 절약할 수 있습니다. 위 그림의 녹색은 기본적으로 정확도 손실이 없음을 나타내고 파란색, 주황색 및 빨간색은 정확도가 더 우수함을 나타냅니다. . 높거나 낮습니다. 하지만 블루 레벨에서도 정확도는 상당히 높습니다.
VS-Quant 및 기타 조정을 통해 이러한 언어 모델에 대한 시험 실행을 수행했습니다. 언어 모델을 실행하는 것은 약 120 TOPS/W인 이미지 모델을 실행하는 것보다 훨씬 어렵습니다.
Accelerators 따라서 가속기의 경우 먼저 행렬 승수를 만들어야 합니다. 신경망을 이용한 7개의 중첩 루프 계산 방법인 타일링 방법이 필요합니다. 기본적으로 이러한 루프 중 일부를 메모리 시스템의 각 계층에 복사하여 각 계층의 메모리 계층 구조 재사용을 최대화하고 데이터 처리를 최소화합니다.
압축에 꽤 좋은 희소성(Sparity)도 연구했습니다. 기본적으로 메모리 대역폭과 통신 대역폭을 늘리고 메모리와 통신 에너지를 줄입니다. 희소성 개발의 다음 단계는 0 값이 있을 때 매 루프마다 8비트 또는 16비트로 전환할 필요 없이 0 값을 나타내는 별도의 라인을 보내는 것입니다.
Ampere 아키텍처는 구조화된 희소성을 사용하여 승수를 재사용할 수 있습니다. 이는 매우 효율적인 방법이며 몇 개의 멀티플렉서에 대한 오버헤드만 필요합니다(기본적으로 무시할 수 있음). 또한 포인터 작업을 수행할 때 승수를 재사용할 수 있으므로 성능이 2배 향상됩니다. 숫자 표현은 매우 중요합니다. 우리는 EIE(역자 주: Efficient Inference Engine, ISCA 2016에서 송한 박사의 논문. 압축된 희소 신경망의 하드웨어 가속을 실현했습니다. 대략적인 방법을 사용한 ESE는 FPGA2017에서 최우수 논문을 수상했습니다.)로 시작하여 코드북을 만들려고 노력했지만, 이로 인해 스케일링이 수학적으로 비용이 많이 듭니다.
드디어 가속기에서 성공적으로 테스트된 기술은 결국 GPU에 적용됩니다. 이는 테스트하기에 좋은 방법입니다. 우리는 GPU가 도메인별 하드웨어를 위한 플랫폼이라고 믿습니다. 메모리 시스템이 매우 좋고 네트워크가 원활하여 딥 러닝 애플리케이션을 매우 빠르게 실행할 수 있습니다.
Future Directions 딥러닝 하드웨어의 미래에 대해 이야기해보겠습니다. 위 그림은 에너지 흐름의 원형 차트입니다. 그 중 약 50%는 수학적 연산에 관한 것이므로 나머지는 에너지를 덜 소모하게 하려고 합니다. 메모리 및 데이터 이동. 녹색은 데이터 전송이고 나머지는 비율이 다른 입력 버퍼, 가중치 버퍼, 누적 버퍼 및 누적 수집기입니다. 우리는 수학 연산의 에너지 소비를 줄이는 방법을 모색하고 있으며 가장 좋은 방법 중 하나는 이를 로그 시스템으로 옮기는 것입니다. 로그 시스템에서는 곱셈이 덧셈이 되고 덧셈은 일반적으로 에너지 집약도가 훨씬 낮기 때문입니다. 또 다른 방법은 VS-Quant를 통해 달성할 수 있는 더 작은 값으로 변환하는 것입니다. 더 정확하게 양자화함으로써 우리는 더 낮은 정밀도 숫자를 가진 신경망에서도 동등한 정확도를 얻을 수 있습니다.
경우에 따라 메모리 계층에 더 많은 레이어를 추가하는 등 타일링을 통해 더 나은 결과를 얻을 수 있기를 바랍니다. 이를 통해 메모리 에너지를 줄이고 메모리 회로와 통신 회로를 더 효율적으로 만들 수 있습니다. Ampere 아키텍처에서 구조화된 희소성에 대해 이미 수행하고 있는 작업은 좋은 시작이지만 밀도를 낮추거나 여러 밀도를 선택하여 활성화 및 가중치를 조정하면 더 잘할 수 있다고 생각합니다. 연구가 심화됨에 따라 공정 기술은 정전 용량 스케일링에도 어느 정도 진전을 가져올 것입니다.
2012년 Kepler 아키텍처가 출시된 이후 GPU의 추론 성능은 매년 두 배씩 향상되었습니다. 이러한 발전은 주로 디지털 표현의 향상에 기인합니다. 이번에는 FP32에서 FP16, Int8, 그리고 Kepler 아키텍처의 Int4와 같은 많은 내용에 대해 이야기했습니다. 우리는 명령어 오버헤드를 할당하여 더 복잡한 내적을 사용하는 것에 대해 이야기했습니다. Volta 아키텍처의 누적, Turing 아키텍처의 정수 행렬 곱셈 및 누적, Ampere 아키텍처 및 구조적 희소성.
배관에 대해서는 거의 이야기하지 않았지만 배관은 매우 중요합니다. 배관은 온칩 메모리 시스템과 네트워크를 배치하는 데 사용되므로 강력한 Tensor 코어를 완전히 활용할 수 있습니다. Tensor 코어가 Turing 아키텍처에서 초당 기가비트의 작업을 수행하고 공통 벤치마크 실행에 데이터를 공급하려면 브랜치 메모리, 온칩 메모리 및 이들 간의 상호 연결을 정렬하고 정상 작동이 매우 중요합니다.
미래를 내다보며 다양한 신기술을 가속기에 적용해 볼 준비가 되어있습니다. 앞서 언급했듯이 우리는 희소성 및 타일링 기술에 대해 많은 실험을 수행했으며 MAGNet 프로젝트에서 다양한 타일링 기술, 수치 표현 등을 실험했습니다. 하지만 딥러닝의 발전은 실제로 하드웨어 성능의 지속적인 개선에 달려 있기 때문에 우리는 여전히 스트레스를 받고 있습니다. GPU의 추론 성능을 매년 두 배로 늘리는 것은 큰 도전입니다.
사실 우리 손에 있는 카드는 거의 다 사용되었습니다. 이는 새로운 기술 개발을 시작해야 함을 의미합니다. 다음은 제가 주목할만한 네 가지 방향입니다.
먼저, 새로운 디지털을 연구하세요. 예를 들어 EasyQuant보다 더 영리한 양자화 방식과
두 번째로 희박성을 계속해서 연구합니다.
그 다음에는 저장 회로와 통신 회로를 연구합니다.
마지막으로 기존 공정기술을 개선합니다.7 청중 질문에 답변
Dejan Milojicic: Winograd 알고리즘을 보다 효율적인 컨볼루션 구현으로 변환하려면 얼마나 큰 행렬 컨볼루션이 필요합니까?
Bill Dally: 저는 3×3 행렬 컨볼루션이 매우 효율적이라고 생각합니다. 물론 컨볼루션이 클수록 효율성은 높아집니다.
Dejan Milojicic: 고대역폭 메모리(HBM)의 메모리 대역폭은 어떻게 계산되나요? 모든 GPU 코어를 통해 동시에 메모리에 액세스합니까?
Bill Dally: Ampere 아키텍처에 6개의 스택이 있는 것처럼 각 HBM 스택에는 별도의 프레임 버퍼가 있습니다. 우리의 메모리 대역폭은 전체 대역폭에서 실행되는 각 메모리 컨트롤러를 사용하여 계산됩니다. 각 GPU 코어 사이에는 캐시 레이어가 있고 온칩 네트워크의 대역폭은 HBM 대역폭의 몇 배이므로 기본적으로 HBM을 포화시키기 위해 스트리밍 멀티프로세서의 작은 부분만 실행하면 됩니다.
Dejan Milojicic: NVLink를 사용한 분산 컴퓨팅은 어떻게 작동하나요? 수행할 계산은 누가 결정합니까? 여러 GPU에서 분산 수집을 수행할 때 어디서, 어떤 오버헤드가 발생합니까?
Bill Dally: 프로그래머는 데이터와 스레드를 어디에 넣을지 결정하고 사용자는 GPU에서 스레드와 데이터를 시작하고 실행 위치를 결정하기만 하면 됩니다. NVLink를 사용하여 연결된 시스템의 가장 큰 장점은 공유 주소 공간이라는 점과 상대적으로 작은 데이터를 전송하는 오버헤드도 상당히 적기 때문에 네트워크에서는 클러스터 통신을 사용합니다. 일반적으로 딥 러닝에서 데이터 병렬 처리를 수행하는 경우 각 GPU는 동일한 네트워크를 실행하지만 동일한 데이터 세트의 서로 다른 부분을 처리하고 각각 가중치 기울기를 누적한 다음 각 GPU에서 기울기를 공유합니다. 모든 그래디언트를 누적한 다음 가중치를 추가합니다. 클러스터 통신은 이런 종류의 작업을 처리하는 데 매우 능숙합니다.
Dejan Milojicic: 모든 애플리케이션을 위한 범용 딥 러닝 가속기를 만들어야 할까요, 아니면 비전 가속기나 자연어 처리 가속기와 같은 특수 가속기를 만들어야 할까요? ㅋㅋㅋ 정말 중요한 것은 머신러닝 분야가 놀라운 속도로 발전하고 있다는 점입니다. 몇 년 전만 해도 모두가 여전히 순환 신경망을 사용하여 언어를 처리하고 있었는데, Transformer가 등장하여 눈 깜짝할 사이에 모든 사람이 자연어 처리에 Transformer를 사용하기 시작했습니다. 마찬가지로, 불과 몇 년 전까지만 해도 모든 사람이 CNN을 사용하여 이미지를 처리했습니다. 많은 사람들이 여전히 컨볼루션 신경망을 사용하고 있지만 점점 더 많은 사람들이 이미지 처리에 Transformer를 사용하기 시작했습니다.
따라서 제품을 과도하게 전문화하거나 특정 네트워크 전용 액셀러레이터를 만드는 것을 지지하지 않습니다. 왜냐하면 제품 설계 주기는 일반적으로 수년이 걸리고 이 기간 동안 사람들은 더 이상 네트워크를 사용하지 않을 가능성이 높기 때문입니다. 업계는 항상 놀라운 속도로 발전하고 있기 때문에 우리는 예리한 눈을 가지고 업계의 변화를 적시에 인식해야 합니다.
Dejan Milojicic: 무어의 법칙은 GPU 성능과 메모리 사용량에 어떤 영향을 미치나요?
Bill Dally: 무어의 법칙에 따르면 트랜지스터 비용은 해마다 감소합니다. 오늘날 집적회로에 수용할 수 있는 트랜지스터의 수는 실제로 늘어나고 있으며, 칩 제조 공정도 16나노미터에서 7나노미터로 도약하고 있지만, 집적회로의 트랜지스터 밀도는 점점 커지고 있지만 가격은 점점 더 커지고 있습니다. 단일 트랜지스터의 수는 감소하지 않았습니다. 그래서 저는 무어의 법칙이 좀 구식이라고 생각합니다.
그래도 더 큰 GPU를 만들 수 있도록 집적 회로에 더 많은 트랜지스터를 갖는 것이 좋습니다. 대형 GPU는 더 많은 전력을 소비하고 가격도 더 비싸지만, 이전에는 만들 수 없었던 것을 만들 수 있기 때문에 이는 항상 좋은 일입니다.
Dejan Milojicic: 개발자가 PyTorch와 같은 프레임워크에 더 많은 관심을 기울이면 딥 러닝 모델을 더욱 효율적으로 실행하기 위해 하드웨어 발전에서 무엇을 배워야 할까요?
Bill Dally: 이 질문은 대답하기 어렵습니다. 프레임워크는 하드웨어 추상화 작업을 훌륭하게 수행하지만, 모델 실행 속도에 영향을 미치는 조사할 가치가 있는 몇 가지 요소가 여전히 있습니다. 우리가 시도할 수 있는 것은 더 나은 수치 표현과 같은 더 나은 기술을 생각해 낼 때 다양한 다양한 기술을 프레임워크와 결합하여 어느 것이 더 효과적인지 확인하는 것입니다. 이는 R&D 작업에 없어서는 안될 부분입니다.
Dejan Milojicic: Nvidia가 새로운 패키징 방법을 실험하고 있나요?
Bill Dally: 우리는 적시에 제품에 적용할 수 있도록 다양한 포장 기술로 할 수 있는 것과 할 수 없는 것을 파악하기 위해 다양한 실험을 진행해 왔습니다. 예를 들어, 이러한 프로젝트 중 일부에서는 칩 적층을 위해 솔더 범프 및 하이브리드 본딩을 사용하는 멀티 칩 모듈을 연구하고 있습니다. 실제로 간단한 패키징 기술이 많이 있습니다.
Dejan Milojicic: Nvidia의 Tensor Core와 Google의 TPU와 비교하면 누가 더 낫나요? Bill Dally: 우리는 Google의 최신 TPU에 대해 많이 알지 못합니다. 하지만 이전에 출시한 TPU는 모두 전용 엔진, 즉 기본적으로 대규모 곱셈 누산기 배열이 내장되어 있었습니다.
비선형 함수 및 일괄 정규화(배치 표준)와 같은 작업을 처리하기 위한 TPU 독립 장치이지만 우리의 접근 방식은 매우 일반적인 컴퓨팅 장치 스트리밍 멀티프로세서(SM)를 구축하는 것입니다. Tensor Core를 사용하여 행렬 곱셈 부분의 속도를 높입니다. 따라서 Tensor Core와 Google의 TPU는 모두 비슷한 승산기-누산기 배열을 가지고 있으며 단지 우리가 사용하는 배열이 상대적으로 작을 뿐입니다.
Dejan Milojicic: Nvidia의 가장 큰 라이벌은 누구입니까? Bill Dally: NVIDIA는 결코 다른 회사와 비교하지 않습니다. 우리의 가장 큰 적은 우리 자신이며, 우리는 끊임없이 도전하는 것이 올바른 태도라고 생각합니다. 맹목적으로 다른 사람을 경쟁자로 여긴다면 우리의 발전이 느려질 것입니다. 다른 사람들이 하고 있는 일에 너무 많은 초점을 맞추는 대신, 우리는 가능한 것에 정말로 집중해야 합니다. 우리가 하는 일은 빛의 속도를 추구하는 것과 같습니다. 어떻게 최선을 다할 것인지, 빛의 속도에서 얼마나 멀리 떨어져 있는지에 더 많은 관심을 기울이는 것이 진정한 도전입니다.
Dejan Milojicic: 양자 컴퓨팅에 대해 어떻게 생각하시나요? 양자 시뮬레이션은 딥 러닝 과제의 자연스러운 확장입니까?
Bill Dally: 2021년 3월 "cuQuantum"이라는 소프트웨어 개발 키트를 출시했습니다. 구글은 앞서 53큐비트 컴퓨터를 개발해 '양자적 우월성'을 달성했다고 주장한 바 있다. 기존 컴퓨터로는 완료할 수 없는 일부 계산을 cuQuantum을 사용하면 5분 이내에 완료할 수 있습니다. 따라서 오늘날의 NIST(Noisy Intermediate-Scale Quantum) 계산보다 정말 정확한 양자 알고리즘을 달성하려면 GPU가 최선의 선택이 되어야 합니다.
NVIDIA의 기존 GPU 컴퓨터는 현재 가장 빠른 양자 컴퓨터 중 하나이며 Alibaba도 비슷한 고전 계산에서 좋은 결과를 얻었으며 이는 우리의 결론을 확인시켜줍니다. 양자 컴퓨팅에 대한 우리의 견해: Nvidia는 이 기술 분야의 어떤 발전에도 놀라지 않을 것입니다.
실제로 우리는 양자 컴퓨팅 분야의 최첨단 개발을 추적하기 위해 연구 그룹도 구성했습니다. 예를 들어 IBM은 127큐비트를 갖춘 칩 개발을 발표했습니다. 우리는 또한 큐비트 수 및 일관성 시간과 같은 측면에서 진행 상황을 추적해 왔습니다.
필요한 큐비트 수, 큐비트의 정확성, 양자에 대한 잡음의 간섭, 양자 오류 수정에 필요한 오버헤드를 고려하면 향후 5년 안에 양자 컴퓨팅이 상용화되지는 않을 것으로 생각됩니다. 십 년. 나의 가장 낙관적인 견해는 약 5년 안에 사람들이 가장 가능성이 높은 양자 화학 시뮬레이션을 시작할 것이라는 점입니다. 하지만 그 일이 일어나기 전에는 아직 풀어야 할 물리학 퍼즐이 많이 남아 있습니다. 많은 사람들이 아직 깨닫지 못하는 것은 양자 컴퓨터가 아날로그 컴퓨터이고 아날로그 컴퓨터는 매우 정확하고 쉽게 격리되어야 한다는 것입니다. 그렇지 않으면 환경과의 결합이 일관되지 않은 결과로 이어질 것입니다.
Dejan Milojicic: 당신의 생각에는 기계가 언제쯤 인공지능(AGI) 수준에 도달할 수 있을까요?
Bill Dally: 저는 이 문제에 대해 부정적인 견해를 가지고 있습니다. 본질적으로 범용 기능 피팅인 신경망과 같은 보다 성공적인 인공 지능 사용 사례를 살펴보세요. 신경망은 관찰을 통해 기능을 학습할 수 있기 때문에 그 가치는 여전히 인공지능보다는 인공지각에 반영됩니다.
지금까지 좋은 결과를 얻었지만 인공지능과 딥러닝을 활용해 생산성을 높이는 방법을 계속해서 연구해 의료와 교육을 개선하고 사람들에게 더 나은 삶을 제공할 수 있습니다. 사실 이를 위해서는 AGI가 필요하지 않지만 기존 기술의 활용을 극대화하는 방법에 중점을 두어야 합니다. AGI 이전에는 아직 갈 길이 멀고 AGI가 무엇인지도 이해해야 합니다.
위 내용은 NVIDIA 수석 과학자: 딥 러닝 하드웨어의 과거, 현재, 미래의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!