제퍼넷 로고

고성능 딥 러닝 : 더 작고 빠르며 더 나은 모델을 훈련하는 방법 – 5 부

시간

고성능 딥 러닝 : 더 작고 빠르며 더 나은 모델을 훈련하는 방법 – 5 부

모든 소프트웨어 도구를 사용하여 효율적인 딥 러닝 모델을 교육하는 것은 강력하고 성능이 뛰어난 컴퓨팅 파워의 인프라 없이는 아무 것도 아닙니다. 여기에서는 가능한 최고의 성능이 필요할 때 개발에서 고려할 수 있는 현재 소프트웨어 및 하드웨어 에코시스템을 검토합니다.



이전 부분 (파트 1, 파트 2, 파트 3, 파트 4), 우리는 딥 러닝 모델에서 파레토 최적의 고성능 모델을 달성하기 위해 딥 러닝 모델에서 효율성이 중요한 이유와 딥 러닝에서 효율성을 위한 초점 영역에 대해 논의했습니다. 또한 XNUMX가지 중점 영역(압축 기술, 학습 기술, 자동화 및 효율적인 아키텍처)을 다루었습니다. 고성능 모델을 교육하고 배포하는 데 중요한 기본 인프라에 대한 마지막 섹션으로 이 시리즈를 마치겠습니다.

부수적으로, 당신은 또한 우리의 딥 러닝의 효율성에 관한 설문지, 이 주제를 더 자세히 다룹니다.

인프라

추론을 효율적으로 훈련하고 실행할 수 있으려면 강력한 소프트웨어 및 하드웨어 인프라 기반이 있어야 합니다. 이 섹션에서는 이러한 두 가지 측면을 모두 살펴봅니다.

소프트웨어 및 하드웨어 인프라의 멘탈 모델과 이들이 서로 상호 작용하는 방식.

텐서플로우 생태계:

Tensorflow(TF)[1]는 많은 대기업에서 프로덕션에 사용된 인기 있는 기계 학습 프레임워크입니다. 모델 효율성을 위한 가장 광범위한 소프트웨어 지원이 있습니다.

기기 사용 사례를 위한 Tensorflow Lite: Tensorflow Lite(TFLite)[2]는 에지 장치와 같은 자원이 적은 환경에서 추론을 위해 설계된 도구 및 라이브러리 모음입니다. 높은 수준에서 TFLite를 두 가지 핵심 부분으로 나눌 수 있습니다.

  • 인터프리터 및 Op 커널: TFLite는 일반적인 신경망 연산(Fully Connected, Convolution, Max Pooling, ReLu, Softmax 등 각각 Op)의 구현과 함께 특수 TFLite 모델을 실행하기 위한 인터프리터를 제공합니다. 인터프리터와 연산은 이 게시물을 작성하는 시점에서 ARM 기반 프로세서의 추론에 주로 최적화되어 있습니다. 또한 더 빠른 실행을 위해 Qualcomm의 Hexagon[3]과 같은 스마트폰 DSP를 활용할 수도 있습니다.
  • 변환기: 주어진 TF 모델을 인터프리터가 추론할 수 있도록 단일 파일로 변환하는 도구입니다. 변환 자체 외에도 양자화된 추론을 위한 그래프 준비(이전 게시물에서 언급), 작업 융합, 모델에 다른 메타데이터 추가 등과 같은 많은 내부 세부 정보를 처리합니다.

기기 내 추론을 위한 기타 도구: 마찬가지로, 다른 플랫폼에도 추론을 위한 도구가 있습니다. 예를 들어, TF Micro[4]에는 DSP와 같은 매우 낮은 리소스 마이크로컨트롤러에 대한 추론을 위해 슬림화된 인터프리터와 더 작은 연산 세트가 있습니다. TensorflowJS(TF.JS)[5]는 브라우저 내에서 또는 Node.js를 사용하여 신경망을 훈련하고 실행하는 데 사용할 수 있는 TF 생태계 내의 라이브러리입니다. 이러한 모델은 WebGL 인터페이스를 통해 GPU를 통해 가속화될 수도 있습니다[6]. TF에서 훈련된 모델 가져오기와 TF.JS에서 처음부터 새 모델 생성을 모두 지원합니다. 모델 그래프에 양자화, 희소성, 가중치 클러스터링 등을 추가하는 TF Model Optimization Toolkit[7]도 있습니다.

서버 측 가속을 위한 XLA: XLA(Accelerated Linear Algebra)[8]는 그래프에 맞게 사용자 정의된 연산(커널)에 대한 새로운 구현을 생성하여 모델에서 선형 대수 계산을 최적화할 수 있는 그래프 컴파일러입니다. 예를 들어, 함께 융합될 수 있는 특정 작업은 단일 복합 작업으로 결합됩니다. 이렇게 하면 피연산자가 캐시에 있는 동안 직접 연산할 수 있는 경우 많은 비용이 드는 RAM 쓰기를 수행할 필요가 없습니다. Kanwar et al. [9] XLA를 사용하여 BERT 훈련에 사용할 수 있는 최대 배치 크기가 7배 증가하고 훈련 처리량이 5배 증가했다고 보고했습니다. 이를 통해 Google Cloud에서 $32에 BERT 모델을 학습할 수 있습니다.

파이토치 생태계: 

PyTorch[10]는 학계와 산업계에서 활발히 사용되는 또 다른 인기 있는 기계 학습 플랫폼으로 사용성 및 기능 면에서 Tensorflow와 비교할 수 있습니다.

기기 사용 사례: PyTorch에는 Android 및 iOS용 기본 런타임(TFLite 인터프리터와 유사)과 함께 모바일[11]에서 PyTorch 모델을 실행할 수 있는 경량 인터프리터도 있습니다. PyTorch는 또한 훈련 후 양자화[12] 및 상수 접기, 특정 작업 융합, 컨볼루션 계층 최적화를 위한 채널 마지막(NHWC) 형식 배치와 같은 기타 그래프 최적화 단계를 제공합니다.

일반 모델 최적화: PyTorch는 또한 Python의 하위 집합이고 유형 검사와 같은 기능을 추가하는 TorchScript[13]의 코드에서 모델의 직렬화 가능한 중간 표현을 생성하기 위한 Just-in-Time(JIT) 컴파일 기능[14]을 제공합니다. 이를 통해 연구 및 개발을 위한 유연한 PyTorch 코드와 프로덕션에서 추론을 위해 배포할 수 있는 표현 사이에 다리를 만들 수 있습니다. PyTorch 모델이 모바일 장치에서 실행되는 주요 방법입니다.

PyTorch 세계에서 XLA의 대안은 Glow [15] 및 TensorComprehension [16] 컴파일러인 것 같습니다. TorchScript와 같은 상위 IR에서 파생된 하위 IR(중간 표현)을 생성하는 데 도움이 됩니다.

PyTorch는 또한 ML 실무자가 마음대로 사용할 수 있는 다양한 옵션을 자세히 설명하는 모델 조정 가이드[17]를 제공합니다. 핵심 아이디어 중 일부는 다음과 같습니다.

  • PyTorch JIT를 사용한 점별 연산(더하기, 빼기, 곱하기, 나누기 등)의 융합.
  • 버퍼 체크포인트를 활성화하면 메모리에 특정 레이어의 출력만 유지하고 역방향 패스 중에 나머지를 계산할 수 있습니다. 이것은 특히 활성화와 같은 큰 출력을 가진 저렴한 계산 계층에 도움이 됩니다.
  • cuDNN 라이브러리 및 NVIDIA GPU를 사용한 혼합 정밀 교육(GPU 하위 섹션에서 설명)과 같은 장치별 최적화를 활성화합니다.
  • 많은 양의 데이터가 있고 여러 GPU를 훈련에 사용할 수 있는 경우에 적합한 Distributed Data Parallel Training으로 훈련합니다.

하드웨어 최적화 라이브러리:

신경망이 실행되는 하드웨어에 대해 소프트웨어 스택을 최적화하여 효율성을 더욱 높일 수 있습니다. 예를 들어, ARM의 Cortex 프로세서 제품군은 Neon 명령어 세트를 사용하여 연산의 벡터화(데이터 배치 작업)를 허용하는 SIMD(단일 명령어 다중 데이터) 명령어를 지원합니다. QNNPACK [18] 및 XNNPACK [19] 라이브러리는 모바일 및 임베디드 장치용 ARM Neon과 x86 SSE2, AVX 아키텍처 등에 최적화되어 있습니다. 전자는 PyTorch의 양자화 추론 모드에 사용되며 후자는 32비트 부동 소수점을 지원합니다. TFLite용 포인트 모델 및 16비트 부동 소수점. 마찬가지로, 상위 수준 ML 프레임워크에서 하드웨어 수준 가속 결정을 추상화하려고 시도하는 iOS용 Accelerate[20] 및 Android용 NNAPI[21]와 같은 다른 하위 수준 라이브러리가 있습니다.

하드웨어 

GPU: 그래픽 처리 장치(GPU)는 원래 컴퓨터 그래픽 가속을 위해 설계되었지만 22년 CUDA 라이브러리[2007]가 출시되면서 범용 사용 사례에 사용되기 시작했습니다. AlexNet[23]은 2012년 ImageNet 경쟁에서 우승했습니다. 딥 러닝 모델을 위한 GPU 사용을 표준화했습니다. 그 이후로 Nvidia는 딥 러닝 성능에 중점을 둔 GPU 마이크로 아키텍처의 여러 반복을 출시했습니다. 또한 전용 실행 단위이며 다양한 정밀도(fp24, TensorFloat32, fp32, bfloat16, int16, int8)에서 훈련 및 추론을 지원하는 Tensor Core[4]를 도입했습니다.

감소된 정밀도 MAC(곱하기 및 누산) 연산: B x C는 비용이 많이 드는 연산이므로 감소된 정밀도로 수행됩니다.

텐서 코어는 표준 MAC(곱하기 및 누산) 연산을 최적화합니다. A = (B × C) + D. 여기서 B와 C는 감소된 정밀도(fp16, bfloat16, TensorFloat32)에 있고 A와 D는 fp32에 있습니다 . NVIDIA는 모델 아키텍처와 선택한 GPU에 따라 감소된 정밀도 MAC 연산으로 1배에서 15배 사이의 훈련 속도 향상을 보고합니다[25]. NVidia의 최신 Ampere 아키텍처 GPU의 텐서 코어는 희소성(특히 2:4 비율의 구조화된 희소성, 2개 요소 블록 중 4개 요소가 희소성임)으로 더 빠른 추론을 지원합니다. 추론 시간에서 최대 1.5배, 개별 레이어에서 최대 1.8배 속도 향상을 보여줍니다. 이 외에도 NVidia는 완전 연결, 컨볼루션, 배치 표준, 활성화 등과 같은 표준 신경망 작업의 최적화된 버전이 포함된 cuDNN 라이브러리[29]도 제공합니다.

GPU 및 TPU에 대한 학습 및 추론 중에 사용되는 데이터 유형입니다. bfloat16은 TPU에서 시작되었으며 Tensor Float 32는 NVidia GPU에서만 지원됩니다.

TPU: TPU는 Google이 Tensorflow를 사용하여 딥 러닝 애플리케이션을 가속화하도록 설계하고 선형 대수 연산을 병렬화 및 가속화하도록 미세 조정된 독점 ASIC(응용 프로그램별 집적 회로)입니다. TPU 아키텍처는 TPU를 사용한 학습 및 추론을 모두 지원하며 Google Cloud 서비스를 통해 일반 대중이 사용할 수 있습니다. TPU 칩의 핵심 아키텍처는 Systolic Array 설계[26]를 활용합니다. 여기서 각 셀은 부분적 결과를 계산하고 모든 클록이 있는 순서대로 다음 셀에 전달합니다. -단계(수축기 심장 리듬과 유사한 리드미컬한 방식으로), 중간 결과를 메모리에 저장할 필요가 없습니다.

각 TPU 칩에는 4개의 Tensor Core(NVidia의 Tensor Core와 혼동하지 말 것)가 있으며, 각각은 systolic array의 메쉬를 가지고 있습니다. 단일 TPU 보드에는 3개의 상호 연결된 TPU 칩이 있습니다. 훈련 및 추론을 추가로 확장하기 위해 더 많은 수의 TPU 보드를 메시 토폴로지로 연결하여 '포드'를 형성할 수 있습니다. 공개된 수치에 따르면 각 TPU 칩(v420)은 100테라플롭을 달성할 수 있으며 TPU 포드는 27페타플롭 이상에 도달할 수 있습니다[28]. TPU는 Google 검색을 위한 훈련 모델, 범용 BERT 모델, DeepMind의 세계 최고 수준인 AlphaGo 및 AlphaZero 모델과 같은 응용 프로그램 및 기타 여러 연구 응용 프로그램과 같은 응용 프로그램에 Google 내부에서 사용되었습니다[16]. GPU와 유사하게 TPU는 bfloat32 데이터 유형을 지원합니다. 이는 전체 부동 소수점 16비트 정밀도로 훈련하는 대신 정밀도가 감소된 대안입니다. XLA 지원을 통해 모델 변경 없이 bfloatXNUMX으로 투명하게 전환할 수 있습니다.

기본 수축기 배열 셀의 그림과 수축기 배열 셀의 메시를 사용하여 4x4 행렬 곱셈을 수행합니다.

EdgeTPU, Coral 및 Dev Board의 대략적인 크기입니다. (제공: 부완 초프라)

엣지TPU: EdgeTPU도 구글이 디자인한 커스텀 ASIC 칩입니다. TPU와 유사하게 선형 대수 연산을 가속화하는 데 특화되어 있지만 에지 장치에서 훨씬 더 낮은 컴퓨팅 예산으로 추론에만 사용됩니다. 또한 작업의 하위 집합으로만 제한되며 int8 양자화된 Tensorflow Lite 모델에서만 작동합니다. EdgeTPU 칩 자체는 미국 4페니보다 작기 때문에 다양한 종류의 IoT 장치에 배포할 수 있습니다. Raspberry-Pi와 같은 개발 보드, Pixel XNUMX 스마트폰에 Pixel Neural Core로 배포되었으며 PCB에 독립적으로 납땜할 수도 있습니다.

젯슨 나노 모듈. (출처)

젯슨: Jetson은 임베디드 및 IoT 장치를 위한 딥 러닝 애플리케이션을 가능하게 하는 Nvidia의 가속기 제품군입니다. 이 제품은 경량 배포를 위해 설계된 저전력 "시스템 온 모듈"(SoM)인 Nano와 NVidia Volta 및 Pascal GPU 아키텍처를 기반으로 하는 보다 강력한 Xavier 및 TX 변형으로 구성됩니다. Nano는 가정 자동화와 같은 애플리케이션에 적합하고 나머지는 산업용 로봇 공학과 같은 컴퓨팅 집약적 애플리케이션에 적합합니다.

요약

이 시리즈에서 우리는 딥 러닝 공간에서 모델의 급속한 성장을 시연하고 모델을 계속 확장함에 따라 효율성과 성능에 대한 필요성을 동기 부여하는 것으로 시작했습니다. 우리는 독자들이 사용할 수 있는 도구와 기술의 광대한 환경을 이해할 수 있도록 멘탈 모델을 놓는 것으로 그 뒤를 이었습니다. 그런 다음 우리는 세부적인 예를 제공하고 지금까지 산업 및 학계에서 수행된 작업을 더 자세히 설명하기 위해 각 초점 영역에 대해 더 깊이 파고 들었습니다. 이 일련의 블로그 게시물이 학습 및 배포를 위해 모델을 최적화할 때 독자가 생각할 수 있는 절충안뿐만 아니라 구체적이고 실행 가능한 시사점을 제공하기를 바랍니다. 우리는 독자들에게 우리의 더 자세한 모델 최적화 및 효율성에 대한 설문지 더 많은 통찰력을 얻으십시오.

참고자료

[1] Martín Abadi, Paul Barham, Jianmin Chen, Zhifeng Chen, Andy Davis, Jeffrey Dean, Matthieu Devin, Sanjay Ghemawat, Geoffrey Irving, Michael Isard 등. 2016. Tensorflow: 대규모 기계 학습을 위한 시스템. 운영 체제 설계 및 구현에 관한 12차 {USENIX} 심포지엄({OSDI} 16). 265–283.

[2] Tensorflow 작성자. 2021. 텐서플로우 라이트 | 모바일 및 에지 장치용 ML. https://www.tensorflow.org/lite [온라인; 3년 2021월 XNUMX일에 액세스함].

[3] XNNPACK 작가. 2021. TensorFlow Lite용 XNNPACK 백엔드. https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/delegates/xnnpack/README.md/#sparse-inference.

[4] 피트 워든과 다니엘 시투나야케. 2019. Tinyml: arduino 및 초저전력 마이크로컨트롤러에서 tensorflow lite를 사용한 기계 학습. "오라일리 미디어, Inc.".

[5] 텐서플로 JS: https://www.tensorflow.org/js

[6] 웹GL: https://en.wikipedia.org/wiki/WebGL

[7] 텐서플로우. 2019. TensorFlow 모델 최적화 도구 키트 - 훈련 후 정수 양자화. 중간(2019년 XNUMX월). https://medium.com/tensorflow/tensorflow-model-optimization-toolkit-post-training-integer-quantizationb4964a1ea9ba

[8] Tensorflow 작성자. 2021. XLA: 기계 학습을 위한 컴파일러 최적화 | 텐서플로우. https://www.tensorflow. org/xla.

[9] Pankaj Kanwar, Peter Brandt, Zongwei Zhou. 2021. TensorFlow 2 MLPerf 제출은 Google Cloud에서 동급 최고의 성능을 보여줍니다. https://blog.tensorflow.org/2020/07/tensorflow-2-mlperf-submissions.html.

[10] Adam Paszke, Sam Gross, Francisco Massa, Adam Lerer, James Bradbury, Gregory Chanan, Trevor Killeen, Zeming Lin, Natalia Gimelshein, Luca Antiga, et al. 2019. Pytorch: 명령형 스타일의 고성능 딥 러닝 라이브러리. arXiv 사전 인쇄 arXiv:1912.01703(2019).

[11] PyTorch 작성자. 2021. 파이토치 모바일. https://pytorch.org/mobile/home.

[12] PyTorch 작성자. 2021. 양자화 레시피 - PyTorch 자습서 1.8.1+cu102 문서. https://pytorch.org/ tutorials/recipes/quantization.html.

[13] PyTorch 작성자. 2021. torch.jit.script — PyTorch 1.8.1 문서. https://pytorch.org/docs/stable/generated/torch.jit.script.html

[14] PyTorch 작성자. 2021. torch.jit.script — PyTorch 1.8.1 문서. https://pytorch.org/docs/stable/generated/torch.jit.script.html

[15] Nadav Rotem, Jordan Fix, Saleem Abdulrasool, Garret Catron, Summer Deng, Roman Dzhabarov, Nick Gibson, James Hegeman, Meghan Lele, Roman Levenstein 등. 2018. Glow: 신경망을 위한 그래프 낮추기 컴파일러 기술. arXiv 사전 인쇄 arXiv:1805.00907(2018).

Nicolas Vasilache, Oleksandr Zinenko, Theodoros Theodoridis, Priya Goyal, Zachary DeVito, William S Moses, Sven Verdoolaege, Andrew Adams, Albert Cohen. 16. Tensor comprehensions: 프레임워크에 구애받지 않는 고성능 기계 학습 추상화. arXiv 사전 인쇄 arXiv:2018(1802.04730).

[17] PyTorch 작성자. 2021. 성능 조정 가이드 — PyTorch 자습서 1.8.1+cu102 문서. https: //pytorch.org/tutorials/recipes/recipes/tuning_guide.html

[18] Marat Dukhan, Yiming Wu Wu 및 Hao Lu. 2020. QNNPACK: 최적화된 모바일 딥 러닝을 위한 오픈 소스 라이브러리 – Facebook 엔지니어링. https://engineering.fb.com/2018/10/29/ml-applications/qnnpack

[19] XNNPACK 작가. 2021. 엑스앤팩. https://github.com/google/XNNPACK

[20] 애플 작가. 2021. 가속 | 애플 개발자 문서. https://developer.apple.com/documentation/ 가속

[21] 안드로이드 개발자. 2021. 신경망 API | 안드로이드 NDK | 안드로이드 개발자. https://developer.android. com/ndk/guides/neuralnetworks.

[22] Wikimedia 프로젝트의 기여자. 2021. CUDA - 위키피디아. https://en.wikipedia.org/w/index.php?title=CUDA& oldid=1025500257.

[23] Alex Krizhevsky, Ilya Sutskever 및 Geoffrey E Hinton. 2012. 심층 컨볼 루션 신경망을 사용한 이미지 넷 분류. 신경 정보 처리 시스템의 발전 25 (2012), 1097–1105.

[24] 엔비디아. 2020. 볼타 내부: 세계에서 가장 진보된 데이터 센터 GPU | NVIDIA 개발자 블로그. https: //developer.nvidia.com/blog/inside-volta.

[25] 두산스토식. 2020. Tensor 코어를 사용한 신경망 훈련 – Dusan Stosic, NVIDIA. https://www.youtube. com/watch?v=jF4-_ZK_tyc

[26] HT Kung 및 CE Leiserson. 1980. VLSI 시스템 소개. Mead, C. A_ 및 Conway, L.,(Eds), Addison-Wesley, Reading, MA(1980), 271–292.

[27] 카즈 사토. 2021. 딥 러닝을 위해 TPU를 미세 조정하는 이유는 무엇입니까? | 구글 클라우드 블로그. https://cloud.google.com/blog/products/ai-machine-learning/what-makes-tpus-fine-tuned-for-deep-learning

관련 :


PlatoAi. Web3 재창조. 데이터 인텔리전스 증폭.
액세스하려면 여기를 클릭하십시오.

출처 : https://www.kdnuggets.com/2021/07/high-performance-deep-learning-part5.html

spot_img

최신 인텔리전스

spot_img

우리와 함께 채팅

안녕하세요! 어떻게 도와 드릴까요?