Apache MXNet

Apache MXNet은 유연하고 확장 가능한 딥 러닝 프레임워크로, 많은 딥 러닝 모델과 프로그래밍 언어를 지원하며 사용 편의성으로 호평을 받고 있는 개발 인터페이스를 갖추고 있습니다.

 

Apache MXNet이란?

MXNet은 클라우드 인프라부터 모바일 장치에 이르는 다양한 장치에서 딥 뉴럴 네트워크를 정의, 훈련, 배포할 수 있게 해주는 오픈 소스 딥 러닝 프레임워크입니다. 확장성이 높아 모델을 빠르게 훈련할 수 있고 유연한 프로그래밍 모델과 여러 언어를 지원합니다.

MXNet을 사용하면 기호 및 명령형 프로그래밍 방식을 혼합하여 효율성과 생산성을 극대화할 수 있습니다. 상황에 따라 기호 연산과 명령형 연산을 자동으로 병렬화하는 동적 종속성 스케줄러를 기반으로 구축되었습니다. 그 위의 그래프 최적화 계층은 기호 실행을 신속하고 메모리 효율적으로 만들어줍니다.

MXNet 라이브러리는 이식성이 뛰어나고 가볍습니다. NVIDIA Pascal™ GPU로 가속화되고 여러 GPU와 노드에 걸쳐 확장되므로 모델을 더 빠르게 훈련할 수 있습니다.

Apache MXNet을 사용하는 이유는?

Apache MXNet은 다음과 같은 주요 기능과 이점을 제공합니다.

  • 하이브리드 프런트엔드: 명령형 기호 하이브리드 Gluon API는 훈련 속도를 늦추지 않으면서 쉽게 모델을 프로토타이핑, 훈련, 배포할 수 있는 방법을 제공합니다. 개발자는 단 몇 줄의 Gluon 코드만으로 물체 감지, 음성 인식, 추천 엔진과 같은 용도를 위해 선형 회귀, CNN, 순환 LSTM 모델을 구축할 수 있습니다.
  • 확장성: 처음부터 클라우드 인프라를 위해 설계된 MXNet은 여러 GPU 또는 CPU를 사용하여 거의 선형 확장을 달성할 수 있는 분산 매개변수 서버를 사용합니다. 딥 러닝 워크로드는 거의 선형적인 확장성으로 자동 크기 조정을 통해 여러 GPU 간에 분산될 수 있습니다. Amazon Web Services에서 실시한 테스트에 따르면 MXNet은 GPU를 한 개 사용할 때에 비해 128개 GPU로 구성된 클러스터에서 109배 더 빠르게 수행되었습니다. AWS가 자사 딥 러닝 프레임워크로 TensorFlow, Theano, Torch와 같은 대안 대신 MXNet을 채택한 이유는 개발 속도, 뛰어난 이식성과 함께 여러 호스트에 분산된 여러 개의 GPU로 확장할 수 있는 기능 때문이었습니다.
  • 에코시스템: MXNet에는 컴퓨터 비전, 자연어 처리(NLP), 시계열 등을 위한 툴킷과 라이브러리가 있습니다.
  • 언어: MXNet이 지원하는 언어로는 파이썬, C++, R, Scala, Julia, Matlab, JavaScript 등이 있습니다. 또한 MXNet은 C++로 컴파일되며 Raspberry Pi와 같은 저전력 장치부터 클라우드 서버에 이르는 다양한 장치에서 실행할 수 있는 가벼운 신경망 모델 표현을 생성할 수 있습니다.

Features of Apache MXNET.

MXNet의 작동 원리는?

교육기관의 컨소시엄에서 시작되어 Apache Software Foundation에서 발전시킨 MXNet(또는 “믹스넷”)은 딥 러닝 모델 개발을 위한 서로 다른 프로그래밍 접근 방식의 이점을 혼합하도록 설계되었습니다. 바로 연산이 '어떻게' 수행되어야 하는지를 정확하게 지정하는 명령형 프로그래밍과 '무엇'을 수행해야 하는지에 초점을 맞추는 선언형 또는 기호 프로그래밍입니다.

MXNET blends the advantages of different programming approaches.

이미지 참조: https://www.cs.cmu.edu/~muli/file/mxnet-learning-sys.pdf

명령형 프로그래밍 모드

명령형 프로그래밍을 사용하는 MXNet의 NDArray는 데이터를 저장하고 변환하는 데 사용되는 MXNet의 주요 도구입니다. NDArray는 모델의 입력과 출력을 다차원 배열로 표현하고 조작하는 데 사용됩니다. NDArray는 넘파이(NumPy)의 ndarray와 유사하지만, GPU에서 실행하여 컴퓨팅을 가속화할 수 있습니다.

명령형 프로그래밍은 절차 지향 프로그래밍 지식이 있는 개발자에게 익숙한 장점이 있으며, 매개변수 업데이트와 대화형 디버깅을 더 자연스럽게 수행할 수 있습니다.

기호 프로그래밍 모드

신경망은 여러 층의 중첩 함수를 입력 매개변수에 적용하여 입력 데이터를 변환합니다. 각 층은 선형 함수와 그 뒤를 잇는 비선형 변환으로 구성됩니다. 딥 러닝의 목표는 손실 메트릭에 대한 편미분(기울기)을 계산하여 이러한 매개변수(가중치와 편향으로 구성됨)를 최적화하는 것입니다. 뉴럴 네트워크는 순방향 전파에서 입력 매개변수를 가져와 점수의 오차가 계산되는 출력 계층에 도달할 때까지 다음 계층의 노드에 신뢰도 점수를 출력합니다. 오차가 경사 하강이라는 프로세스 내에서 역전파를 통해 다시 신경망 전체로 전달되면 가중치가 조정되고 모델이 개선됩니다.

그래프는 연결된 노드(정점이라고 함)와 선으로 구성된 데이터 구조입니다. 딥 러닝을 위한 모든 최신 프레임워크는 그래프의 개념을 기반으로 하며, 신경망은 연산의 그래프 구조로 표현됩니다.

MXNet 기호 프로그래밍을 사용하면 연산 그래프를 통해 함수를 추상적으로 정의할 수 있습니다. 기호 프로그래밍에서는 복잡한 함수를 먼저 자리 표시자 값으로 표현합니다. 그런 다음 이러한 함수를 실제 값에 바인딩하여 실행할 수 있습니다. 또한 기호 프로그래밍은 사전 정의된 뉴럴 네트워크 레이어를 제공하므로 더 적은 반복 작업으로 더 뛰어난 성능의 대규모 모델을 간결하게 표현할 수 있습니다.

Symbolic programming.

이미지 참조: https://www.cs.cmu.edu/~muli/file/mxnet-learning-sys.pdf

기호 프로그래밍에는 다음과 같은 이점이 있습니다.

  • 연산 그래프의 명확한 경계는 백엔드 MXNet 실행자에게 더 많은 최적화 기회를 제공합니다.
  • 신경 구성을 위한 연산 그래프를 쉽게 지정할 수 있습니다.

Gluon API를 사용하는 하이브리드 프로그래밍 모드

MXNet의 주요 이점 중 하나는 포함된 하이브리드 프로그래밍 인터페이스인 Gluon으로, 명령형 인터페이스와 기호 인터페이스를 서로 연결하면서도 두 인터페이스의 기능과 이점을 모두 유지합니다. Gluon은 쉽게 배울 수 있는 언어로, 이식성이 뛰어나고 빠른 모델을 생성합니다. Gluon API를 사용하면 NDArray를 사용하여 모델을 명령형으로 프로토타이핑할 수 있습니다. 그런 다음 더 빠른 모델 훈련 및 추론을 위해 hybridize 명령을 사용하여 기호 모드로 전환할 수 있습니다. 기호 모드에서는 백엔드 MXNet 실행자를 통해 모델을 최적화된 그래프로 더 빠르게 실행할 수 있으며 추론을 위해 java 또는 C++와 같은 다양한 언어 바인딩으로 모델을 쉽게 내보낼 수 있습니다.

MXNet이 GPU에서 더 효과적인 이유

구조적으로 볼 때, CPU는 단 몇 개의 코어와 많은 캐시 메모리로 구성되어 있어 한 번에 처리할 수 있는 소프트웨어 스레드가 적습니다. 반대로 GPU는 수백 개의 코어로 구성되어 있어 수천 개의 스레드를 동시에 처리할 수 있습니다.

The difference between a CPU and GPU.

신경망 수많은 동일 뉴런에서 생성되기 때문에 본질적으로 병렬성이 매우 높습니다. 이러한 병렬성은 자연스럽게 GPU로 매핑됩니다. GPU는 CPU만 사용하는 훈련에 비해 월등히 높은 연산 속도를 제공합니다. 이러한 이유로 GPU는 복잡한 대규모 뉴럴 네트워크 기반 시스템을 훈련하기 위한 플랫폼으로 선택되고 있습니다. 추론 작업의 병렬적 특성 또한 GPU에서 실행하는 데 적합합니다.

향상된 알고리즘, 더 큰 데이터 세트, GPU 가속 연산을 통해 딥 러닝 신경망은 수많은 산업에서 이미지 인식, 음성 인식, 언어 번역 등을 구현하는 데 없어서는 안 될 필수 도구가 되었습니다. MXNet은 개발자가 GPU와 클라우드 컴퓨팅의 모든 기능을 활용할 수 있도록 강력한 도구를 제공한다는 목표로 개발되었습니다.

간단히 말해, MXNet 훈련 알고리즘에 더 많은 GPU를 투입할수록 작업은 더 빠르게 완료됩니다. 더 많은 GPU를 사용할수록 거의 선형에 가깝게 속도가 빨라지므로, 이 프레임워크는 성능 확장성의 측면에서 타의 추종을 불허합니다. 또한 MXNet은 사용 가능한 GPU에 따라 자동으로 확장되도록 설계되어 성능 조정이 수월합니다.

활용 사례

스마트폰 앱

MXNet은 이미지 인식에 적합하며, 메모리가 제한적인 저전력 플랫폼에서 실행되는 모델을 지원하므로 휴대폰 배포를 위한 훌륭한 선택지입니다. MXNet으로 구축한 모델들을 노트북에서 네이티브 방식으로 실행했을 때 이미지 인식에서 매우 신뢰할 수 있는 결과를 제공하는 것으로 나타났습니다. 로컬 프로세서와 클라우드 프로세서를 결합하면 증강현실, 사물 및 장면 식별과 같은 영역에서 강력한 분산 애플리케이션을 구현할 수 있습니다.

음성 및 이미지 인식 애플리케이션에는 장애인을 위한 흥미로운 가능성이 있습니다. 예를 들어, 모바일 앱은 시각 장애인이 주변 환경을 더 잘 인지하도록 돕고 청각 장애인이 음성 대화를 텍스트로 변환하도록 도울 수 있습니다.

Autonomous Vehicles

거의 실시간으로 결정을 내리기 위해 자율주행차 및 트럭은 엄청난 양의 데이터를 처리해야 합니다. 자율주행 자동차를 지원하기 위해 개발되고 있는 복잡한 네트워크는 차량 한 대의 제동 결정부터 도시 전체의 교통 관리에 이르기까지 모든 것을 조정할 수 있도록 전례 없는 수준의 분산 처리를 사용합니다.

미국 남서부 전역에서 자율주행 화물 운송을 지원하기 위해 지도화된 주행경로로 구성된 자율주행 화물 네트워크를 구축하고 있는 TuSimple은 인공지능 모델 개발을 위한 기반 플랫폼으로 MXNet을 선택했습니다. 이 기업은 교통사고, 교대 일정, 연료 비효율로 인한 높은 간접비와 만성 운전자 부족으로 고통받는 업계에 자율주행 기술을 도입하고 있습니다.

TuSimple은 플랫폼 간 이식성, 훈련 효율성, 확장성 때문에 MXNet을 선택했습니다. 그중 한 가지 요인은 MXNet과 TensorFlow를 비교한 벤치마크였는데, GPU 8개를 사용하는 환경에서 MXNet은 더 빠르고 더 메모리 효율적이고 더 정확한 것으로 나타났습니다.

MXNet이 중요한 이유…

데이터 사이언티스트

머신 러닝은 데이터 사이언스 분야에서 점점 더 많이 활용되고 있습니다. 딥 러닝 모델 개발의 세부적인 부분에 익숙하지 않은 경우 MXNet이 좋은 시작점이 될 수 있습니다. 광범위한 언어 지원, Gluon API, 유연성으로 인해 자체 딥 러닝 기술을 개발하는 조직에 매우 적합합니다. Amazon의 지지는 MXNet의 지속 가능성 그리고 서드파티 생태계의 지속적인 성장 가능성을 시사합니다. 많은 전문가는 향후 더 복잡한 딥 러닝 프레임워크로의 여정을 위한 좋은 출발점으로 MXNet을 추천합니다.

머신 러닝 연구자

MXNet은 보다 쉽게 연구 아이디어를 모델로 변환하고 결과를 평가할 수 있는 신속한 프로토타이핑 기능 때문에 연구자들이 자주 사용합니다. 또한 명령형 프로그래밍을 지원하므로 연구자가 연산을 훨씬 더 정확하게 제어할 수 있습니다. 이 특별한 프레임워크는 CPU와 GPU의 활용도가 매우 우수해 다른 프레임워크에 비해 특정 유형의 모델에서 뛰어난 성능을 보여 왔습니다.

소프트웨어 개발자

유연성은 소프트웨어 엔지니어링에서 매우 유용한 가치이며 MXNet은 최상의 유연성을 자랑하는 딥 러닝 프레임워크입니다. 광범위한 언어 지원 외에도 MXNet은 Amazon S3 클라우드 스토리지를 비롯한 다양한 데이터 형식에서 잘 작동하며 대부분의 플랫폼에 맞춰 확장 또는 축소될 수 있습니다. 2019년 MXNet은 Uber에서 개발한 분산 학습 프레임워크인 Horovod에 대한 지원을 추가했습니다. 이 덕분에 소프트웨어 엔지니어는 훨씬 더 유연하게 노트북부터 클라우드 서버에 이르는 광범위한 배포 환경을 지정할 수 있게 되었습니다.

NVIDIA GPU 기반 MXNet

MXNet은 NVIDIA GPU를 사용하여 신경망 훈련하고 배포할 것을 권장합니다. GPU가 CPU에 비해 훨씬 더 뛰어난 연산 성능을 제공하여 훈련 및 추론 성능이 엄청나게 향상되기 때문입니다. 개발자는 NGC(NVIDIA GPU Cloud)를 사용하여 MXNet을 쉽게 시작할 수 있습니다. 여기에서 사용자는 컴퓨터 비전, 자연어 처리 등과 같은 다양한 작업에 사용 가능한 사전 학습된 모델이 포함된 컨테이너를 가져올 수 있습니다. 하나의 컨테이너에 모든 종속 항목과 프레임워크까지 포함됩니다. NVIDIA GPU를 사용하는 경우, NVIDIA TensorRT™를 통해 MXNet에서 추론 성능을 크게 개선할 수 있습니다.

개발자용 NVIDIA 딥 러닝

GPU 가속 딥 러닝 프레임워크는 맞춤형 심층 신경망을 유연하게 설계하고 훈련할 수 있는 기능과 파이썬, C/C++와 같이 일반적으로 사용되는 프로그래밍 언어를 위한 인터페이스를 제공합니다. MXNet, PyTorch, TensorFlow 등 널리 사용되는 딥 러닝 프레임워크는 고성능 멀티 GPU 가속화 학습을 제공하기 위해 NVIDIA GPU 가속화 라이브러리를 사용합니다.

NVIDIA GPU-accelerated libraries.

NVIDIA GPU로 가속화된 엔드투엔드 데이터 사이언스

CUDA-X AI를 기반으로 구축된 오픈 소스 소프트웨어 라이브러리인 NVIDIA RAPIDS™ 제품군은 엔드투엔드 데이터 사이언스 및 분석 파이프라인을 전적으로 GPU에서 실행할 수 있게 해줍니다. 이 제품군은 NVIDIA CUDA 프리미티브를 사용하여 저수준 컴퓨팅 최적화를 수행하지만, 사용자 친화적인 Python 인터페이스를 통해 GPU 병렬 처리와 고대역폭 메모리 속도를 제공합니다.

RAPIDS GPU DataFrame을 사용하면 Pandas와 같은 인터페이스를 사용하여 데이터를 GPU에 로드한 다음, 절대 GPU를 떠나지 않고 이 데이터를 연결된 다양한 머신 러닝 및 그래프 분석 알고리즘에 사용할 수 있습니다. Apache Arrow와 같은 라이브러리를 통해 이러한 수준의 상호 운용성이 가능합니다. 이를 통해 데이터 준비부터 머신 러닝과 딥 러닝에 이르는 엔드투엔드 파이프라인을 가속화할 수 있습니다.

Data preparation, model training, and visualization.

RAPIDS는 많이 사용되는 여러 데이터 사이언스 라이브러리 간에 디바이스 메모리를 공유할 수 있도록 지원합니다. 그래서 GPU에 데이터가 유지되므로, 호스트 메모리에 반복적으로 복사하느라 높은 비용을 들일 필요가 없습니다.

Popular data science libraries.