Category: MXNet


Gluon 소개 – AWS와 마이크로소프트가 만드는 딥러닝 라이브러리

Gluon Logo

오늘 AWSMicrosoft는 새로운 오픈 소스 딥러닝 학습 인터페이스인 Gluon을 발표했습니다. Gluon은 개발자가 높은 성능을 유지히면서도, 쉽고 빠르게 기계 학습 모델을 만들  수 있습니다.

Gluon은 사전 구축한 최적화 된 신경망 구성 요소 모음을 사용하여, 기계 학습 모델을 정의하기 위한 명확하고 간결한 API를 제공합니다. 기계 학습 모델을 정의하고 조정할 수 있기 때문에 처음 사용하는 개발자는 본 인터페이스가 기존 코드에 비해 더욱 익숙할 것입니다. 숙련된 데이터 과학자 및 연구자들이 신속하게 프로토 타입을 제작하고 완전히 새로운 모델 아키텍처를 위해 동적 신경망 그래프를 활용하는 등  다양한 가치를 발휘할 것입니다.

Gluon은 Apache MXNet과 함께 곧 출시 될 Microsoft Cognitive Toolkit를 비롯 더 많은 프레임 워크에서 사용할 수 있습니다.

신경망 vs. 개발자
신경망을 이용한 기계 학습 ( ‘딥러닝’포함)에는 세 가지 주요 구성 요소가 있습니다. 즉, 데이터 학습, 신경망 모델 및 신경망을 학습시키는 알고리듬입니다. 여러분은  직선 그래프와 비슷한 방식으로 신경망을 생각할 수 있습니다. 일련의 연결된 레이어 및 가중치를 통해 출력 (예측)에 연결되는 입력 (데이터를 나타냄)을 가집니다. 학습 중에 알고리즘은 네트워크 출력의 오류를 기반으로 네트워크의 가중치를 조정합니다. 이것이 신경망을 학습하는 과정입니다. 이는 며칠이 걸릴 수있는 메모리 및 컴퓨팅이 필요한 과정입니다.

Caffe2, Cognitive Toolkit, TensorFlow 및 Apache MXNet과 같은 딥러닝 학습 프레임 워크는 부분적으로 ‘어떻게 이 프로세스를 가속화 할 수 있습니까?’라는 질문에 대한 대답입니다. 데이터베이스의 쿼리 최적화 프로그램처럼 네트워크와 알고리즘에 대해 알고있는 학습 엔진이 많을수록 학습 과정에서 더 많은 최적화가 가능합니다 (예를 들어, 무엇을 기반으로 그래프에서 다시 계산해야 하는지를 추측 할 수 있습니다. 영향을받지 않는 가중치는 무시할 수 있습니다.) 이들 프레임 워크는 병렬 처리를 제공하여 컴퓨팅 프로세스를 분산시키고, 전체 학습 시간을 단축시킵니다.

그러나 이러한 최적화를 달성하기 위해 대부분 프레임 워크에서는 개발자가 추가 작업을해야합니다. 즉, 네트워크 그래프의 정식 정의를 제공하고 그래프를 ‘정지’한 다음 가중치를 조정하는 과정입니다.

수백만 개가 연결된 크고 복잡 할 수있는 네트워크 정의는 일반적으로 수작업으로 작성해야합니다. 딥러닝 네트워크는 다루기 힘들뿐만 아니라 디버깅하기가 어려울 수 있으며 프로젝트간에 코드를 재사용하기도 어렵습니다.

이러한 복잡성은 (예제 학습을 마치고 실제 데이터를 학습해보려는) 초보자에게는 어려울 수 있으며, 경험 많은 연구자에게도 시간이 많이 걸리는 작업입니다. AWS에서는 신경망을 정의하고 학습하는 새롭고 유연하며 접근하기 쉬운 방법에 대해서 MXNet 내보에서 아이디어를 실험해 왔습니다. Microsoft 또한 오픈 소스인 MXNet 프로젝트의 공헌자로서 이러한 아이디어 중 일부에 관심이 있었습니다. 이를 토대로 이야기를 나누었을 때 우리는 비슷한 비전을 가지고 있음을 발견했습니다. 따라서, 새로운 기술을 사용하여 기계 학습의 복잡성을 줄이고 더 많은 개발자가 참여할 수 있는 프로젝트를 함께 시작하게 되었습니다.

Gluon 소개 : 동적 그래프, 신속한 반복, 확장 가능한 학습
Gluon에서 중요한 네 가지 핵심 요소를 소개합니다.

  1. 친숙한 API: 간단하고 명확하고 간결한 코드를 사용하여 Gluon 신경망을 정의 할 수 있습니다. 이는 개발자가 배우기 쉽고 네트워크 및 관련 가중치 점수 지정 기능을 기존 방식 보다 훨씬 이해하기 쉽도록 만들었습니다.
  2. 동적 네트워크: Gluon의 네트워크 정의는 동적입니다. 다른 모든 데이터 구조와 마찬가지로 유연합니다. 이는 학습 과정에서 연산 과정을 최적화 할 수 있도록 합니다.  동적 네트워크는 관리하기 쉽고, Gluon을 사용하면 개발자는 빠른  ‘심볼릭 표현’과 네트워크 및 알고리즘에 대한보다 친숙하고 역동적 인 ‘명령형 정의’ 사이를 쉽게 연동할 수 있습니다.
  3. 네트워크 정의 알고리듬: 모델과 학습 알고리즘이 훨씬 가까워졌습니다. 알고리즘 정의 및 학습 중에 네트워크를 동적으로 조정할 수 있습니다. 이는 개발자가 표준 프로그래밍 루프와 조건을 사용하여, 신경망을 만들 수 있음을 의미 할뿐만 아니라 이전에는 불가능했던 정교한 알고리즘과 모델을 정의 할 수 있습니다. 이전 보다 생성, 변경 및 디버그하는 것이 더 편리해졌습니다.
  4.  학습을 위한 고성능 운영 : 학습 속도를 높이면서도, 친숙하고 간결한 API 및 동적 그래프를 사용할 수 있습니다. 이것은 기계 학습의 커다란 발전입니다. 일부 프레임 워크에서 친숙한 API 또는 동적 그래프를 딥러닝에 적용하지만, 학습 과정에서 시간과 비용이 발생합니다. Gluon은 개발자가 특정 세부 사항을 알거나 컴파일러 최적화를 수동으로 수용 할 필요없이 간결한 API를 정식 정의와 효율적으로 혼합 할 수 있습니다.

AWS의 팀과 Microsoft의 공동 협력팀은 Gluon을 통해 이러한 개선 사항을 개발자에게 제공하게 된 것을 기쁘게 생각하며, 이미 많은 딥러닝 개발자와 연구자들로부터 상당히 호응을 얻고 있습니다.

Gluon 시작하기
Gluon은 Apache MXNet에서 현재 사용할 수 있으며 Microsoft Cognitive Toolkit은 향후 출시 될 예정입니다. 프런트 엔드 인터페이스와 저수준 API 사양을 게시하여 시간이 많이 걸리는 다른 프레임 워크에 포함될 수 있도록합니다.

오늘 글 루언을 시작할 수 있습니다. 단 한 번의 클릭으로 AWS Deep Learning AMI를 시작하여, 이미 제공 중인 50 가지 주피터 노트북 예제 중 하나를 실행해 보세요. 기계 학습 프레임 워크에 참여한 분이라면, GitHub의 소스 코드 공헌에도 참여해주시면 감사하겠습니다.

-Dr. Matt Wood

이 글은 Introducing Gluon: a new library for machine learning from AWS and Microsoft 의 한국어 번역입니다.

MXNet 기반 Sockeye를 통한 기계 번역 학습 해보기

언어 번역을 위해 기계 학습(Machine Learning)을 어떻게 사용할 수 있는지 궁금하신가요? AWS가 공개한 새로운 프레임워크인 Sockeye를 사용하면 기계 번역(Machine Translation) 및 기타 시퀀스 간 작업을 모델링 할 수 있습니다. Sockeye는 Apache MXNet을 기반으로 만들어져 있으며, 시퀀스-시퀀스(Sequence-to-Sequence) 모델 구축, 트레이닝 및 운영에 필요한 작업을 수행할 수 있습니다.

우선 기계 번역에 필요한 자연어 처리(NLP)에서 많은 작업은 시퀀스 예측 문제를 해결하는 데 집중합니다. 예를 들어, 기계번역에서 특정 작업은 일련의 입력 단어가 주어지면 번역된 단어의 순서를 예측합니다. 이러한 종류의 작업을 수행하는 모델을 시퀀스-시퀀스 모델이라고합니다. 최근에는 심층 신경망 (Deep Neural Networks)가 이러한 모델의 성능을 크게 향상 시켰습니다. Sockeye는 신경망 기반 기계 번역 (NMT)모델을 구현하고, NMT 연구를 수행하는 플랫폼을 제공합니다.

Sockeye는 빠르고 확장 가능한 딥러닝 학습 라이브러리인 Apache MXNet을 기반으로합니다. Sockeye 소스 코드는 MXNet의 고유 한 기능을 활용합니다. 예를 들어, 선언 및 명령어 기반 프로그래밍 스타일을 그대로 활용하여 명령형 MXNet API 활용할 뿐만 아니라 데이터 병렬 처리를 사용하여 멀티 GPU에서 모델을 학습합니다.

이 글에서는 NMT의 개요를 설명한 다음 Sockeye를 사용하여 최소한의 NMT 모델을 훈련시키는 방법을 소개함으로서 어떻게 기계 번역 프로젝트를 시작할 수 있는지 살펴보겠습니다.

시퀀스-시퀀스 모델 동작 방법
Sockeye에서 진행중인 작업을 이해하기 위해 많은 학계와 업계에서 일반적으로 사용하는 신경망 아키텍처를 살펴 보겠습니다.

네트워크에는 세 가지 주요 구성 요소 인코더, 디코더, 주의 메커니즘(Attention mechanism)이 있습니다. 인코더는 문장의 끝(<EOS>)까지 한 번에 한 단어 씩 원본 문장을 읽고 숨겨진 문장을 만듭니다. 인코더는 종종 LSTM(long-term-memory) 네트워크와 같은 순환 신경망(Recurrent Neural Networks, RNN)로 구현됩니다.

디코더는 RNN으로 구현되어 문장의 시작 부분 (<BOS>)으로 시작하여 한 번에 한 단어 씩 대상 문장을 생성합니다. 콘텍스트 벡터를 생성한 주의 메커니즘을 통해 원본 문장에 접근할 수 있습니다. 주의 메커니즘을 사용하여 디코더는 다음 단어를 생성하는 데, 가장 적합한 단어를 결정할 수 있습니다. 이 방법을 통해 디코더는 항상 전체 입력 문장에 접근할 수 있습니다.

신경망이 생성하는 다음 단어는 디코더에 대한 입력이됩니다. 디코더는 생성 된 단어 및 숨겨진 표현을 기반으로 후속 단어를 생성합니다. 네트워크는 <EOS>와 같은 문장 끝 기호를 생성 할 때까지 단어 생성을 계속합니다.

Sockeye – MXNet기반 기계 번역을 위한 시퀀스-시퀀스 모델링
Sockeye는 MXNet을 기반으로 시퀀스-시퀀스 모델을 구현합니다. 이 모델의 모든 가상 매개 변수에 적절한 기본값을 제공합니다. 최적화를 위해 중단 기준(stopping criteria), 통계 추적(metric tracking), 및 가중치 초기화(weight initialization)에 대해 걱정할 필요가 없습니다. 트레이닝을 위해 간단한 명령줄 인터페이스(CLI)를 통해 실행할 수 있습니다.

다음 요소를 포함하여 기본 모델 아키텍처를 쉽게 변경할 수 있습니다.

  • RNN 셀 유형 (LSTM 또는 GRU) 및 숨겨진 상태 크기
  • RNN 레이어의 수
  • 소스 및 대상 시퀀스 포함 크기
  • 소스 인코딩에 적용된주의 메커니즘 유형

Sockeye는 다음과 같은 고급 기능도 지원합니다.

트레이닝을 위해 Sockeye는 중요한 최적화 매개 변수를 완벽하게 제어 할 수 있습니다. 예를 들어, 옵티 마이저 유형(optimizer types), 학습 속도(learning rate), 모멘텀(momentum), 가중치 감소(weight decay) 및 조기 정지 조건(early-stopping conditions)을 설정할 수 있습니다. Sockeye는 트레이닝 및 검증 데이터에 대한 여러 측정 항목(BLEU와 같은 MT 관련 측정 항목 포함)을 추적합니다.

앞으로 NMT에 대한 새로운 아이디어를 실험 할 수있는 플랫폼을 여러분에게 제공하기 위해 Sockeye 기능을 지속적으로 확장 할 계획입니다.

자동 번역을 위한 최소 모델 트레이닝 해보기
이제 첫 번째 NMT 모델을 트레이닝을 해 봅시다. 실습은 간단하게 Linux 또는 Mac OS X와 ​​등의 운영체제 셀 명령어로 진행됩니다.

1. 데이터 세트 가져오기
먼저 문장 목록과 번역본을 가진 병렬 코퍼스(Parallel Corpus)를 가져옵니다.  Sockeye는 모든 입력 데이터가 공백으로 구분되도록 하고,  데이터를 보내기 전에 항상 단어와 구두점을 구분하는 토크 나이저를 실행합니다. 이 글에서는 Conference on Machine Translation (WMT)에서 사용한 2017 뉴스 번역 작업에서 사용한 샘플 데이터를 다운로드합니다.

뉴스 기사에서 독일어 및 영어로 된 문장을 다운로드하려면 다음 쉘 명령을 사용하십시오.

curl http://data.statmt.org/wmt17/translation-task/preprocessed/de-en/corpus.tc.de.gz | gunzip | head -n 1000000 > train.de 
curl http://data.statmt.org/wmt17/translation-task/preprocessed/de-en/corpus.tc.en.gz | gunzip | head -n 1000000 > train.en

트레이닝에서는 처음으로 1,000,000 문장 만 사용합니다. 실제로는 훨씬 큰 데이터 세트를 모델 학습하게 됩니다. 트레이닝 과정에서 보이지 않는 문장에 대한 품질 통계를 추적하려면, 유효성 검증 세트를 다운로드하십시오.

curl http://data.statmt.org/wmt17/translation-task/preprocessed/de-en/dev.tgz | tar xvzf - 

이제 병렬 훈련 문장을 포함한 train.detrain.en 파일과  유효성 검사 문장이 포함 된 newstest2016.tc.denewstest2016.tc.en 파일을 다운 받았습니다. 본 모델이 이전에 보지 못했던 새로운 문장에 대해 얼마나 잘 수행 할 것인지를 정확하게 예측하기 위해 훈련 중에 보지 못한 문장에 대한 모델을 평가하는 것이 중요합니다.

2. Sockeye 설치하기
모델 컴퓨팅 비용이 비싸기 때문에 일반적으로 Sockeye를 GPU에서 실행하는 것이 좋습니다만, GPU 없이 컴퓨터에서 실행할 수도 있습니다. CPU에서 Sockeye를 실행하려면 다음 명령을 사용하여 Sockeye를 설치하십시오.

pip3 install sockeye

주의: CPU에서 Sockeye를 실행할 때는 --use-cpu 를 모든 명령에 추가해야 합니다. 그렇지 않으면 Sockeye는 GPU에서 실행하려고 시도하고 실패합니다. GPU를 사용할 수있는 경우 다음 명령을 사용하여 CUDA 8.0 용 Sockeye를 설치하십시오.

pip3 install sockeye --no-deps numpy mxnet-cu80==0.10.0

CUDA 7.5 용으로 설치하려면 다음 명령을 사용하십시오.

pip3 install sockeye --no-deps numpy mxnet-cu75==0.10.0

3. 모델 학습하기
이제 모든 독일어 – 영어 NMT 모델을 익힐 수 있습니다. 다음 명령을 실행하여 교육을 시작하십시오.

python3 -m sockeye.train -s train.de \
                        -t train.en \
                        -vs newstest2016.tc.de \
                        -vt newstest2016.tc.en \
                        --num-embed 128 \
                        --rnn-num-hidden 512 \
                        --attention-type dot \
                        --dropout 0.5 \
                        -o model

이는 128 및 512개의 숨겨진 단위를 포함한 모델을 학습합니다. 학습 과정에서 Sockeye는 정기적으로 유효성 측정 지표를 인쇄합니다.

AWS의 p2 인스턴스에서 한개의 K80 GPU로 학습하는 데는 약 13시간이 걸립니다. 학습이 끝나면 모델이라는 매개 변수와 같은 모든 아티팩트를 model이라는 디렉토리에서 찾을 수 있습니다. (GPU가 더 많은 P2 인스턴스를 활용하면 더 빠르게 끝납니다.)

4. 번역해보기
모델을 학습한 후 토큰 화 된 문장을 입력하여 번역을 시작할 수 있습니다.

echo "Das grüne Haus ." | python3 -m sockeye.translate -m model 2>/dev/null

이것은 “Green Houce”로 해석됩니다.  좀 더 어려운 문장을 번역 해 보려면, 공백으로 모든 단어와 구분되는 토큰 화 된 문장을 입력하십시오. 모델이 단어를 모르는 경우, <UNK> 토큰을 나타내는 것을 알 수 있습니다.

주의 네트워크를 시각화 할 수도 있습니다. 이를 위해 matplotlib 를 추가로 설치 해야합니다 (아직 수행하지 않은 경우).

pip3 install matplotlib

주의 네트워크를 시각화하는 align_1.png 파일을 만들려면 출력 유형을 align_plot으로 설정하십시오.

echo "Das grüne Haus ." | python3 -m sockeye.translate -m model --output-type align_plot

결과는 다음과 유사해야 합니다.

대상의 각 단어에 대해 네트워크에서 주목 한 단어를 소스에서 확인합니다. 고 품질 번역을 하기 위해, 모델에 주의를 기울일 필요는 없습니다. 더 복잡한 문장의 경우 다음과 같이 보입니다.

본 모델은 “sprechen”이라는 단어가 문장에서 매우 다른 위치에 있음에도 불구하고 영어로 “discussion”한다는 것을 알아 냈습니다. 또한 네트워크가 일부 단어를 알고 <UNK> 토큰으로 그들을 표현되지 않은 것을 볼 수 있습니다.

결론
이 글에서는 NMT의 sequence-to-sequence 모델과 MXNET을 기반으로 한 시퀀스 간 프레임 워크 인 Sockeye를 사용하여 최소 NMT 모델을 학습하고 실행하는 방법을 배웠습니다. 질문이나 제안 사항이나 Sockeye와 관련된 문제가 발생하면 GitHub의 문제 추적기를 통해 알려주십시오.

이 글은 Amazon AI 블로그의 Train Neural Machine Translation Models with Sockeye의 한국어 번역으로 Amazon Berlin에서 기계 번역 연구를 하고 있는 Felix Hieber 및 Tobias Domhan이 작성하였습니다.

 

AWS 및 NVIDIA 딥러닝 파트너쉽 – Volta 기반 GPU 인스턴스, 10만명 딥러닝 교육 등

올해 엔비디아의 GPU Technology Conference에서 AWS와 NVIDIA는 여러 가지 기술 협력을 시작했습니다. 첫 번째는 볼타 기반의 최신 GPU 인스턴스로 LSTM 트레이닝의 3 배 속도 향상을 통해 인공 지능 개발 방식을 완전히 바꿀 것으로 생각됩니다. 둘째, AWS에서 실행되는 DLI (Deep Learning Institute)를 통해 10 만 명이 넘는 개발자를 양성 할 계획입니다. 세 번째는 광범위한 개발자 커뮤니티를 위한 대규모의  딥러닝 개발 도구 공동 개발입니다.

또한, AWS는 GTC에서 Amazon EC2 P2 instances 및 엔비디아의 Jetson TX2 플랫폼 지원을 통해 대규모로 Apache MXNet 교육을 사용하는 세션을 제공합니다.

Volta 기반 GPU 인스턴스 출시 예고
Volta 아키텍처를 기반으로 640 개의 Tensor 코어가 장착 된 Tesla V100은 120 테라 플롭의 정밀 학습이 가능한 획기적인 성능을 제공합니다. AWS는 Amazon EC2 인스턴스에서 V100을 지원하게 될 예정입니다. 현재 성장 중인 딥러닝  커뮤니티 개발자들이 수퍼 컴퓨팅 클래스 기능을 활용하고 딥러닝 모델을 훈련하여 AI의 한계를 뛰어 넘을 수 있음을 의미합니다. 또한, 엔비디아와 공동으로 AWS 엔지니어 및 연구원은 Apache MXNet에서 사전 신경 신경 기계 번역 (NMT) 알고리즘을 최적화했습니다. 이 접근법을 통해 개발자는 Volta 기반 플랫폼에서 가장 빠른 방법을 사용할 수 있습니다.  앞으로 볼타 기반 인스턴스는 개발자들에게 매우 인기 있을 것으로 기대합니다!

10만명의 개발자에게 딥러닝 교육 제공
NVIDIA와 파트너를 맺어 AWS를 기반으로 한 Deep Learning Institute의 교육 코스를 제공하게 됩니다. DLI는 자체 운전 차량, 의료, 웹 서비스, 로봇 공학, 비디오 분석 및 금융 서비스에 대한  딥러닝 사례을 포함하도록 커리큘럼을 확대하고 있습니다. 이 커리큘럼에는 강사 주도 세미나, 워크샵 및 아시아, 유럽 및 미주 지역의 개발자에게 제공되는 강의가 포함됩니다. AWS의 16 개 리전 (향후 3 개 추가) 및 42 개 가용 영역 (8 개 추가 계획)과 에 이르는 AWS의 글로벌 인프라를 통해 AWS는 광범위한 개발자에게 도달 할 수 있는 완벽한 인프라 플랫폼입니다.

딥러닝 개발자에게 확장성 제공
과거에는 딥러닝 교육 및 연구를 위해 요구되는 수준의 컴퓨팅 성능을 충족시키면서 수퍼 컴퓨터를 사용해야했습니다. 또한 MPI (message passing interface)와 같은 분산 컴퓨팅 라이브러리를 이해하고 여러 종속성이 있는 여러 라이브러리 및 패키지를 설정해야 합니다. AWS는 개발자를 위해 확장 가능한 심층 학습을 쉽게 하기위한 목적으로 NVIDIA와 협력하여 최적화 된 개발자 도구를 만들었습니다. 이 도구는 cuDNN, NCCL, TensorRT 및 CUDA 툴킷과 같은 NVIDIA Deep Learning SDK 라이브러리를 사용하여 사전 작성되었습니다. 개발자가 이러한 도구를 사용할 때  효율적인 인스턴스 시간으로  쉽게 GPU로 확장할 수 있습니다

클라우드와 엣지로의 딥러닝 인프라 확대
저전력 디바이스에서 딥러닝 학습은 현재 가장 큰 트렌드 중 하나입니다. 대기 시간 절감 및 데이터 지역성에서 네트워크 가용성에 이르기까지 네트워크 엣지에 있는 장치에서 인공 지능 모델을 실행하는 데는 여러 가지 이유가 있습니다. 이번 주 GTC에서 열리는 AWS 딥러닝 세션에서 P2 인스턴스를 사용하여 최첨단 모델을 어떻게 훈련시킬 수 있는지 보여줍니다. 또한, Jetson TX2 플랫폼을 포함한 다양한 저전력 디바이스에 저전력 디바이스에 최첨단 인공 지능 기능을 제공하는 방법을 쉽게 보여줍니다. 그런 다음 AWS IoTAWS Greengrass와 같은 서비스를 통해 이러한 장치를 관리하고 종단 간 AI 워크 플로를 제공 할 수 있습니다.

자세히 보기

– Amazon AI Blog;

이 글은 Amazon AI Blog의 AWS and NVIDIA Expand Deep Learning Partnership at GTC 2017의 한국어 번역입니다.

MXNet, Apache 재단 오픈 소스 프로젝트 참여!

Alexa에서 Amazon Go에 이르기까지 Amazon 모든 분야에서 딥 러닝(Deep Learning) 엔진을 광범위하게 사용하고 있습니다. 그 중에서도 아마존에서는 딥 러닝을 수행하는 가장 확장성 높고 효율적인 방식인 MXNet을 주요 엔진으로 선택했습니다.

MXNet은 오픈 소스로서 개발자가 정교한 맞춤형 인공 지능 시스템을 구축 할 수 있도록 지원하는 고급 딥러닝 엔진입니다. 높은 성능과 확장성을 통해 MXNet을 통한 딥러닝 모델 트레이닝은 상당히 빠릅니다. 예를 들어, 인기있는 이미지 인식 네트워크인 Resnet의 경우, MXNet을 통해 다른 엔진에 비해 2 배 높은 처리량을 제공하므로, 50%의 시간 동안 동일한 모델을 트레니잉 할 수 있습니다. MXNet은 수백 개의 GPU에 대한 선형 확장성을 보여 주지만, 다른 엔진의 경우 그렇지 못합니다.

아마존에서는 MXNet 커뮤니티와 협력하여 팀을 구성하고 이를 계속 발전시켜 왔습니다. 개발팀은 Apache Software Foundation의 프로세스, 직무, 공헌 활동 및 커뮤니티 지원을 활용하기 위해 Apache Incubator에 MXNet 가입을 제안했습니다. 오늘 이러한 제안이 받아드려 지게 되었습니다.

우리는 앞으로 Apache MXNet에 투자 할 것이며, 이러한 중요한 자원을  더욱 확장하기 위해 커뮤니티와 협력할 것입니다.

여러분이 MXNet을 시작하려면 AWS Re:Invent의 저의 기조 연설을 보시고, MXNet을 포함 한 AWS Deep Learning AMI의 인스턴스 (또는 클러스터)를 실행하시면, 바로 시작해 보실 수 있습니다. 추천 모델링에 대한 레오 프리젠 테이션 및 자습서도 시청하기를 권장합니다.

앞으로 더 자세한 정보는 트위터 @apachemxnet을 팔로우하시고, 오픈 소스 프로젝트의 업데이트를 보시려면 Apache MXNet 페이지를 참고하십시오.

Dr. Matt Wood;

이 글은 Excited about MXNet joining Apache!에 대한 한국어 번역입니다. Amazon 인공 지능에 대한 좀 더 자세한 사항은 아래 한국어 발표 자료를 참고하시기 바랍니다.

AWS로 딥 러닝을 위한 프레임워크 MxNet 활용하기

머신 러닝에 대한 관심이 폭발적으로 증가했습니다. 특히, 국내에서는 올해 알파고로 인해 딥러닝(Deep Learning)에 대한 관심이 크게 증가하였습니다. 인공 신경망을 이용한 딥 러닝 기법은 하드웨어 성능의 비약적인 개선과 신경망 알고리즘의 개선으로 인해 실제 활용 가능한 수준으로 빠르게 변화하였습니다.

이러한 관심으로 인해 분산 딥 러닝 프레임워크(distributed deep-learning framework)가 많이 개발되어 오픈소스 형식으로 공개되고 있는 상황입니다. 게임 서비스 영역에서도 차츰 딥 러닝을 활용한 서비스들이 지속적으로 나타나고 있습니다. 인공 지능 연구 및 서비스 개발자의 요구 사항, 지원 언어 및 하드웨어 따라 여러 종류의 딥 러닝 프레임워크가 개발되어 공개되었습니다. 대표적인 것이 MXNet,   Caffe , Theano , TensorFlow™, Torch  등이 있습니다.

딥러닝 프레임워크 소개
DeepLearning 4J에서 비교한 딥러닝 프레임워크 비교 기사를 보면 아래와 같은 장단점을 나열할 수 있습니다. (본 자료는 AWS의 공식적인 자료가 아니며, DeepLearning 4J의 의견입니다.)

프레임워크 장점 단점
Theano
  • Python 지원
  • Wrapper 를 통한 높은 추상화로 사용성 편리
  • 여러 에코시스템이 존재
  •  연구용으로 많이 사용됨
  • Theano자체는 로우레벨 라이브러리
  • 큰 규모 모델에 많은 컴파일 시간
  • torch에 비해 매우 큰 라이브러리
  • 에러메시지가 부정확
Torch
  • 모듈화된 라이브러리로 상호 연계가 쉬움
  • GPU지원, 본인 레이어 타입 작성이 편리
  • 선훈련된 모델들이 많음
  • Lua 기반
  • 회귀 뉴럴 네트워크에 적합하지 않음
  • 문서화 부실
TensorFlow
  • Python + Numpy
  • 컴퓨팅 그래프 추상화
  • Theano보다 빠른 컴파일
  • 시각화를 위한 TensorBoard
  • 데이터와 모델의 병렬화
  • 다른 프레임워크보다 느림
  • Torch보다 훨씬 큰 라이브러리
  • 선 훈련된 모델이 적음
  • 계산 그래프가 Python으로 되어 있어서 느림
  • 도구로서의 기능이 약함
Caffe
  • 이미지 프로세싱에 적합
  • 잘 튜닝된 네트워크
  • 코드 작성없이 모델 트레이닝 가능
  • Python인터페이스가 유용
  • GPU를 위해서는 C++/CUDA작성 필요
  • 회귀 네트워크에는 부적합
  • 큰 네트워크에는 부적절
  • 확장성이 떨어짐
MxNet
  • 혼합 패러다임 지원(symbolic/imperative)
  • 자동 미분화
  • GPU, mobile에서도 동작
  • 여러 언어 지원(C++, Python, R, Scala, Julia, Matlab and Javascript)
  • 최적화된 C++ 엔진으로 좋은 성능
  • 로우 레벨 텐서 연산자가 적음
  • 흐름 제어 연산자 지원하지 않음
  • 컴파일 세팅에 따라 결과가 달라짐.
  • 자신의 커스컴 레이어 생성을 위해서는 어느정도 백엔드 텐서 라이브러리 이해가 필요

아마존의 CTO인 Werner Vogels 박사께서는 최근 MXNet – Deep Learning Framework of Choice at AWS라는 글에서 확장 능력, 개발 속도, 이동성 등의 다양한 요인을 비추어 볼 때, MXNet이 가장 좋은 딥러닝 프레임웍이라고 판단하고, 이를 기반한 딥러닝 서비스 개발 지원 및 오픈 소스 지원에 대한 의지를 피력한 바 있습니다.

MxNet은 오픈소스로 여러 언어를 지원하고 모바일부터 서버까지 다양한 디바이스를 지원하는 딥 러닝 프레임워크 입니다. CPU와 GPU 연산을 지원하고, 심볼릭과 명령적(imperative) 프로그래밍의 혼합 방식 까지 지원하며 최적화된 엔진을 사용해서 성능이 뛰어납니다.

또한 실무적으로 많이 사용하는 Python, C++, R, Scala, Julia, Matlab, and JavaScript을 지원하는 등 산업계에서 응용하기에 매우 적합한 딥 러닝 프레임워크입니다.

아래 그림에서 보시다시피, Inception v3 (MXNet 및 P2 인스턴스 사용)를 통해 GPU 숫자를 증가시켰을 때, 다른 라이브러리 보다 빠른 처리량을 가짐과 동시에 GPU 숫자가 증가하는 확장 상황에서도 처리량의 효율이 85%에 달할 정도로 뛰어난 성능을 보여 주고 있습니다.

컴퓨팅 처리량 및 효율 뿐만 아니라 메모리 사용량도 중요합니다. MXNet은 1,000개의 신경망 레이어를 사용할 때 4GB 이하의 메모리를 사용하고, 이식성 면에서도 다양한 플랫폼을 지원합니다. 안드로이드나 iOS에서도 활용 가능하고, 심지어 자바스크립트 확장 기능으로 웹 브라우저에서도 실행 할 수 있습니다.

DeepLearning AMI를 통해 MXNet 실행하기
이 글에서는 Amazon EC2의 신규 GPU 기반 P2 인스턴스 및 G2 인스턴스를 통해 딥러닝 API를 기반으로 MXNet을 간단히 실행해 보겠습니다. (P2 및 G2 인스턴스는 시간당 가격이 다른 인스턴스에 비해 높으므로, 짧은 시간 테스트를 위해서는 스팟 인스턴스를 이용해 보는 것도 권장합니다.)

2016-11-mxnet-1

먼저 AWS 마켓 플레이스에서 제공하는 Amazon Deep Learning AMI을 기반으로 인스턴스를 실행합니다. 본 AMI에 설치된 딥 러닝 프레임워크는 Caffe, MxNet, TensorFlow, Theano, Torch 입니다. 우리는 여기서 MxNet을 사용해 보겠습니다. SSH로 접속해서 인스턴스의 src 디렉토리에 있습니다.

2016-11-mxnet-2

인스턴스의 src/mxnet/example 디렉토리를 보면 많은 예제들이 존재합니다. 이와 관련된 튜토리얼은 http://mxnet.io/tutorials/index.html 링크를 참조하면 됩니다.

우리가 실행을 해볼 것은 숫자 이미지를 트레이닝 해서 특정 이미지 내 숫자 데이터가 어떤 것인지 찾아내는 예제입니다. 간단한 Python 코드를 통해 해 볼 수 있습니다. (http://mxnet.io/tutorials/python/mnist.html.)

다만 여기서 플롯팅의 경우 현재 실행 중인 인스턴스에서 구동이 되지 않기 때문에 플롯(plot)을 이미지로 출력하는 부분은 제외하고 실행을 해야 합니다. 문서에는 단계별로 수행을 하게 되어 있습니다만 소스 부분을 고쳐서 한번에 실행하게 수정을 한 것이 다음 Python 소스 입니다.

import mxnet as mx

def to4d(img):
    return img.reshape(img.shape[0], 1, 28, 28).astype(np.float32)/255

batch_size = 100
train_iter = mx.io.NDArrayIter(to4d(train_img), train_lbl, batch_size, shuffle=True)
val_iter = mx.io.NDArrayIter(to4d(val_img), val_lbl, batch_size)


# Create a place holder variable for the input data
data = mx.sym.Variable('data')
# Flatten the data from 4-D shape (batch_size, num_channel, width, height) 
# into 2-D (batch_size, num_channel*width*height)
data = mx.sym.Flatten(data=data)

# The first fully-connected layer
fc1  = mx.sym.FullyConnected(data=data, name='fc1', num_hidden=128)
# Apply relu to the output of the first fully-connnected layer
act1 = mx.sym.Activation(data=fc1, name='relu1', act_type="relu")

# The second fully-connected layer and the according activation function
fc2  = mx.sym.FullyConnected(data=act1, name='fc2', num_hidden = 64)
act2 = mx.sym.Activation(data=fc2, name='relu2', act_type="relu")

# The thrid fully-connected layer, note that the hidden size should be 10, which is the number of unique digits
fc3  = mx.sym.FullyConnected(data=act2, name='fc3', num_hidden=10)
# The softmax and loss layer
mlp  = mx.sym.SoftmaxOutput(data=fc3, name='softmax')

# We visualize the network structure with output size (the batch_size is ignored.)
shape = {"data" : (batch_size, 1, 28, 28)}
mx.viz.plot_network(symbol=mlp, shape=shape)


import logging
logging.getLogger().setLevel(logging.DEBUG)

model = mx.model.FeedForward(
    symbol = mlp,       # network structure
    num_epoch = 10,     # number of data passes for training 
    learning_rate = 0.1 # learning rate of SGD 
)
model.fit(
    X=train_iter,       # training data
    eval_data=val_iter, # validation data
    batch_end_callback = mx.callback.Speedometer(batch_size, 200) # output progress for each 200 data batches
)

prob = model.predict(val_img[0:1].astype(np.float32)/255)[0]
print 'Classified as %d with probability %f' % (prob.argmax(), max(prob))

위의 코드를 실행하면 다음과 같이 모델을 훈련하게 되고, 그 다음에 숫자 7 이미지를 판단해서 결과를 출력합니다.

2016-11-mxnet-3

MxNet 의 Github 레포지터리의 example을 보면 이 외에도 아주 다양한 샘플 코드가 존재합니다.

딥 러닝은 이제 많은 분야에서 빠르게 응용되고 있습니다. 게임 개발자 분들도 이러한 딥 러닝 기법을 활용한 다양한 게임 AI를 만드셔서 활용하시기 바랍니다. 만약 실제 서비스를 위해 클러스터를 구성해야 한다면, AWS CloudFormation를 통해 AWS 자원을 손쉽게 만들고 운영할 수 있는 방식을 통해 딥러닝 클러스터를 만들 수 있는 MXNet의 CF 템플릿을 소개합니다.

이 템플릿을 이용하여 Amazon Deep Learning AMIAmazon EC2의 신규 GPU P2 인스턴스에 구성하여, 자동 스케일링을 지원하는 분산 딥러닝 클러스터를 만들어 운영할 수 있게 됩니다. (자세한 것은 AWS를 통한 분산 딥러닝(Deep Learning) 구성하기를 참고하세요.)

본 글은 아마존웹서비스 코리아의 솔루션즈 아키텍트가 국내 고객을 위해 전해 드리는 AWS 활용 기술 팁을 보내드리는 코너로서, 이번 글은 박선용 솔루션즈 아키텍트께서 작성해주셨습니다.