클라우드에 딱 맞는 MXNet의 5가지 딥러닝 학습 기능

Apache MXNet  (인큐베이팅 프로젝트)는 최첨단 딥러닝(Deep Learning) 학습 모델 제작을 지원하는 확장 성이 뛰어난 오픈 소스 프레임 워크입니다. 이를 통해 CNN (Convolutional Neural Network), LSTM (Long Term Memory Network) 등을 만들 수 있고, Python, Scala, R 및 Julia를 포함한 다양한 언어를 지원합니다.

이 글에서는 MXNet이 AWS 클라우드 개발자 친화적인 프레임워크로서 자리 매김하는 몇 가지 독특한 기능을 소개합니다.  Python에서 MXNet을 사용하여 신경망 코딩을 하는 분을 위한 한 장짜리 기능 요약집도 하단에 있으니, 많이 참고해 보시기 바랍니다.

#1  코드 몇 줄로 다중 GPU 학습 지원
다중 GPU 기반 학습 실행 기능은 MXNet 아키텍처의 핵심 부분입니다. 모델을 학습시키려는 장치 목록을 전달하면 됩니다. 기본적으로 MXNet은 데이터 병렬 처리를 사용하여 여러 GPU에서 작업 부하를 분할합니다. 예를 들어, GPU가 3 개인 경우 각 모델은 전체 모델 사본을 받고 각 데이터 배치(Batch)의 1/3로 나눠 학습을 진행합니다.

import mxnet as mx 
# Single GPU
module = mx.module.Module(context=mx.gpu(0))
# Train on multiple GPUs
module = mx.module.Module(context=[mx.gpu(i) for i in range(N)], ...)

MXNet은 다중 GPU 혹은 다중 서버 기반 학습에서 가장 뛰어난 효율을 보이고 있습니다.

#2 다중 서버 기반 학습 가능
MXNet은  다중 서버에서 여러 GPU에 대한 학습 또한 간소화하도록 설계한 분산형 딥러닝 학습 프레임 워크입니다. 서버 클러스터 전체에서 학습을 하려면, 모든 컴퓨터에 MXNet을 설치하고 SSH를 통해 서로 통신 할 수 있는지 확인한 다음 서버 IP가 포함 된 파일을 만들어야 합니다.

$ cat hosts 
192.30.0.172 
192.30.0.171
$ python ../../tools/launch.py -n 2 --launcher ssh -H hosts python train_mnist.py --network lenet --kv-store dist_sync

MXNet은 키-밸류 스토어를 사용하여 서버 간의 그라디언트와 파라미터를 동기화할 수 있습다. 이를 통해 분산 학습을 수행 할 수 있으며, 본 기능은 USE_DIST_KVSTORE = 1을 사용하여 MXNet을 새로 컴파일하면 됩니다.

#3 데이터는 Amazon S3!
MXNet에서 데이터 반복자(iterators)는 Python iterator 객체와 비슷합니다. 단, 해당 레이블과 함께 “n”개의 학습 예제가 포함 된 DataBatch 객체로 데이터 배치(batch)를 반환한다는 점이 다릅니다. MXNet에는 NDArray 및 CSV와 같은 공통 데이터 유형에 대해 미리 작성된 효율적인 데이터 반복자를 가지고 있습니다. 또한, HDFS와 같은 분산 파일 시스템에서 효율적인 I/O를 위해 바이너리 형식을 사용하기도 합니다. mx.io.DataIter 클래스를 확장하여 사용자 정의 데이터 반복기를 만들 수 있습니다. 이 기능을 구현하는 방법에 대한 자세한 내용은 기본 튜토리얼을 참조하시면 됩니다 .

특히, Amazon S3 (Amazon Simple Storage Service)는 대량의 데이터를 매우 저렴한 비용으로 저장해야 하는 고객에게 유용합니다. MXNet에서는 데이터를 디스크에 직접 다운로드 할 필요 없이 RecordIO, ImageRecordIO, CSV 또는 NDArray 형식의 Amazon S3에 저장된 데이터를 참조하는 반복자를 만들 수 있습니다.

data_iter = mx.io.ImageRecordIter(     
     path_imgrec="s3://bucket-name/training-data/caltech_train.rec",
     data_shape=(3, 227, 227),
     batch_size=4,
     resize=256)

# 4 신경망 시각화 기능
MXNet에서는 신경망 아키텍처를 시각화 할 수 있도록 Graphviz와 통합되어 있습니다. 네트워크 시각화를 생성하려면, node_atters 속성으로 정의한 대로 네트워크의 모양과 함께 네트워크의 마지막 레이어를 참조하는 심볼을 사용 합니다. 아래 예제는 LeNet 표준 CNN 을 시각화하는 방법을 보여줍니다 .

mx.viz.plot_network(symbol=lenet, shape=shape)

자세한 코드 및 구현 지침은이 자습서를 참조하십시오 .

#5 프로파일 러 지원
MXNet에는 USE_PROFILER = 1 플래그를 통해 사용 가능한 내장 프로파일러가 있습니다 . 이를 통해, 네트워크(심볼 수준) 실행 시간을 계층 별로 분류할 수 있습니다. 이 기능은 일반적인 프로파일링 도구인  nvprof  및  gprof을  보완하며, 함수, 커널, 또는 학습 수준에서, 운영자 수준에서 처리할 수 있게 합니다. 환경 변수를 사용하여 전체 Python 프로그램에 대해 활성화 할 수 있습니다 . 또는 아래와 같이 프로그램의 하위 집합에 코드를 통합하여 활성화 할 수 있습니다.

mx.profiler.profiler_set_config(mode='all', filename='output.json')     
mx.profiler.profiler_set_state('run')      
# Code to be profiled goes here...      
mx.profiler.profiler_set_state('stop')

프로파일링 출력을 Chrome과 같은 웹 브라우저에 로드하고 다음과 같이 브라우저의 추적 ( Chrome 브라우저에서 chrome://tracing)으로 이동하여 프로필을 볼 수 있습니다.

위 스크린 샷은 프로파일링 도구를 사용하여 MXNet에 구현 된 원래의 LeNet 아키텍처로 MNIST 데이터 세트를 학습하는 프로파일을 보여줍니다 .

One more thing: MXNet CheetSheet
이제 MXNet의 고유한 기능을 기반으로 신경망 학습을 시작하는데 아래 치트 시트가 도움이 될 것입니다. 여기에는 CNN, RNN/LSTM, 선형 회귀 및 로지스틱 회귀에 대한 몇 가지 일반적인 아키텍처가 포함되어 있습니다. 이를 사용하여, 데이터 반복자 및 Amazon S3 반복기를 작성하고 체크 포인트를 구현하며 모델 파일을 저장하는 방법에 대한 간단한 코드가 있습니다.

Apache MXNet 치트 시트

확대하려면 클릭하십시오.

MXNet 커뮤니티는 Gluon 이라는 동적인 사용하기 쉬운 명령형 인터페이스를 지원하기 시작했고, MXNet으로 딥러닝을 시작하려면 튜토리얼을 참조하십시오 .

이 글은 Sunil Mallya이 쓴 Exploiting the Unique Features of the Apache MXNet Deep Learning Framework with a Cheat Sheet의 한국어 번역입니다.

필수 참고 자료

여러분의 생각