Category: AWS Deep Learning AMIs*


Gluon 상세 소개 – 유연한 딥러닝을 위한 사용하기 쉬운 프로그램 인터페이스

AWS와 Microsoft는 선택한 딥 러닝 프레임워크에 상관 없이 모든 개발자를 지원할 수 있도록 기계 학습 기술의 속도, 유연성 및 액세스 가능성 개선에 초점을 둔 Gluon이라는 새로운 표준 인터페이스를 발표했습니다. 이 협업을 통해 거둔 첫 번째 성과는 Apache MXNet의 오픈 소스 라이브러리인 새로운 Gluon 인터페이스로, 초보 개발자라도 딥 러닝 모델의 프로토타입을 제작하고, 딥 러닝 모델을 빌드하고 학습시킬 수 있습니다. 이 인터페이스를 사용하면 학습에 많은 시간을 들이지 않고도 딥 러닝 모델을 매우 간편하게 제작할 수 있습니다.

다음은 4가지 주요 장점과 이 장점을 잘 보여 주는 코드 샘플입니다.

1. 이해하기 쉬운 단순한 코드

Gluon에서 간결하고 명확한 코드를 사용하여 신경망을 정의할 수 있습니다. 미리 정의된 레이어, 최적화 도구, 이니셜라이저를 포함한 플러그 앤 플레이 신경망의 구성 요소 전체 세트를 가져올 수 있습니다. 이에 따라 복잡한 구현 세부 내역이 추상화됩니다. 다음 예제에서는 단 몇 줄의 코드로 단순한 신경망의 정의 방법을 보여줍니다.

# 첫 단계는 모델 초기화
net = gluon.nn.Sequential()
# 그런 다음 모델 아키텍처 정의
with net.name_scope():
    net.add(gluon.nn.Dense(128, activation="relu")) # 첫 번째 계층 - 노드 128개
    net.add(gluon.nn.Dense(64, activation="relu")) # 두 번째 계층 – 노드 64개
    net.add(gluon.nn.Dense(num_outputs)) # 출력 계층

다음 다이어그램은 신경망 구조를 보여 줍니다.

자세한 내용은 이 자습서를 참조하여 Gluon 신경망 구성 요소로 Multilayer Perceptron(MLP)이라고 하는 간단한 신경망을 빌드하는 방법을 알아보십시오. 고급 사용 사례에서도 처음부터 신경망의 일부를 쉽게 작성할 수 있습니다. Gluon을 통해 신경망에서 미리 정의된 사용자 지정 구성 요소를 혼합하여 적용할 수 있습니다.

2. 유연한 구조

신경망 모델 학습은 컴퓨팅 집약적이고, 경우에 따라서는 수일 혹은 수주까지도 소요될 수 있습니다. 많은 딥 러닝 프레임워크는 이 모델을 명확하게 정의하고 학습 알고리즘과 분리하여 이 시간을 단축해 줍니다. 이 엄격한 접근 방식은 상당한 복잡성을 수반하여 디버깅을 어렵게 만듭니다.

하지만 Gluon 접근 방식은 다릅니다. 학습 알고리즘과 신경망 모델을 통합하여 성능을 저하시키지 않으면서 개발 프로세스에 유연성을 더해 줍니다. 이 접근 방식의 중심에는 Gluon trainer 메서드가 있고, 모델을 학습시킬 때 이 메서드를 사용합니다. 이 trainer 메서드는 MXNet autograd 라이브러리에 따라 달라지고, 미분값(기울기, gradient)을 자동으로 계산하는 데 사용됩니다. 미분값(derivate)은 변수의 변경률을 측정하는 수학 계산입니다. 미분값은 학습 알고리즘에 필요한 입력입니다. 이 autograd 라이브러리는 이 수학 계산을 효율적으로 구현하면서도 Gluon이 부여해 주는 유연성을 지원하는 데 필수적입니다. 이제 단순한 중첩 for 루프로 구성된 학습 알고리즘을 정의하려면 autogradtrainer를 통합하면 됩니다.

epochs = 10

for e in range(epochs):
    for i, batch in enumerate(train_data):
        data = batch.data[0]
        label = batch.label[0]
        with autograd.record(): # 파생물 기록 시작
            output = net(data) # 순방향 반복
            loss = softmax_cross_entropy(output, label)
            loss.backward()
        trainer.step(data.shape[0])

이처럼 유연한 구조 덕분에 코드가 직관적이고 디버깅이 용이하며, 더 수준 높은 모델을 개발할 수 있습니다. 친숙한 기본 Python 언어 구문( for 루프 또는 if 문 등)을 신경망 내에서나 알고리즘 일부로 사용할 수 있습니다. 모델과 알고리즘을 통합하여 모델의 모든 코드를 실행하므로, 버그를 유발하는 특정 코드 줄을 보다 쉽게 확인할 수 있습니다.

3. 동적 그래프

특정 시나리오에서 신경망 모델은 학습 과정 중에 그 모양과 크기를 변경해야 하는 경우도 있습니다. 특히 신경망으로 공급되는 데이터 입력이 가변적일 때 그러한 변경이 필수적이며, 이는 입력된 각 문장의 길이가 각기 다른 자연 언어 처리(NLP)에서는 일반적입니다. Gluon을 사용하면 신경망 정의가 동적이므로, 원하는 어느 구조든 실행 중에 Python의 기본 제어 흐름을 사용하여 빌드할 수 있습니다.

예를 들어, 이와 같은 동적 신경망 구조는 2015년 NLP의 주요 성과인 Kai Sheng Tai, Richard Socher, Chris Manning의 트리 구조화된 Long Short-Term Memory(LSTM) 모델을 빌드하기가 더 쉽습니다.  트리 LSTM은 한 쌍의 문장이 그 의미가 동일한지 여부를 식별하는 등의 작업에 사용되는 매우 효과적인 모델입니다. 기본적으로 두 문장의 의미가 동일한 다음 예를 들겠습니다.

  • Michael threw the football in front of the player. – “Michael이 던진 이 공은 목표에 도달하지 못했습니다.”
  • The ball was thrown short of the target by Michael. – “Michael이 던진 공은 목표에 닿지 못했습니다.”

문장을 알려진 시퀀스 학습 모델인 RNN에 입력으로 집어 넣고 분류할 수도 있습니다. 하지만 사전 지식이 있는 언어에서 종종 문제가 생긴다는 것이 트리 LSTM의 기본적인 아이디어입니다. 예를 들어 문장에 문법 구조가 나와 있고, 문장에서 이 구조를 추출할 수 있는 강력한 도구가 있다고 합시다. 단어들을 연결하여 아래 그림과 같이 문장의 문법 트리 구조를 모방한 트리 구조 신경망을 만들 수 있습니다.

(Stanford 자연 언어 처리(NLP) 그룹)

이렇게 하려면 각 예제마다 다른 신경망 구조를 실행 중에 빌드해야 합니다. 기존의 프레임워크로는 어렵지만, Gluon은 문제 없이 이런 작업을 처리할 수 있습니다. 아래 코드에서 모델 학습을 반복하는 루프를 만들고 autogradtrainer 이점을 역시 활용하는 법을 알 수 있습니다. 이와 같이, 모델에서 문장의 트리 구조를 차례로 순회하면서 학습할 수 있습니다.

def forward(self, F, inputs, tree):
	children_outputs = [self.forward(F, inputs, child)
    for child in tree.children]
  #각 입력 문장의 구문을 기반으로 신경망 빌드
  #모델 정의와 학습 과정 중의 구조
  …

4.  높은 성능 지원

Gluon이 지원하는 유연성 덕분에 신경망 모델로 프로토타입을 쉽게 제작하고 실험을 진행할 수 있습니다. 그런 다음, 속도가 유연성보다 더 중요하게 되면(모든 학습 데이터를 피드할 준비가 된 경우 등) Gluon 인터페이스를 통해 신경망 모델을 쉽게 캐시에 저장하여 고성능을 확보하고 메모리 공간을 절약할 수 있습니다. 이때 프로토타입 제작을 완료하고 대규모 데이터세트에서 이 프로토타입을 테스트할 준비가 된 후 신경망을 설정하고 나면 약간의 조정만이 필요합니다. 신경망 계층을 쌓아 올리는 데 Sequential (앞의 그림 참조)을 사용하지 말고 HybridSequential을 사용해야 합니다. 그 기능은 Sequential과 동일하지만 최적화된 기본 엔진 호출을 지원하므로 모델 아키텍처의 일부 또는 전체를 나타낼 수 있습니다.

net = nn.HybridSequential()
with net.name_scope():
    net.add(nn.Dense(128, activation="relu")) # 첫 번째 계층 - 노드 128개
    net.add(nn.Dense(64, activation="relu")) # 두 번째 계층 – 노드 64개
    net.add(nn.Dense(10)) # 출력 계층

그 다음, HybridSequential를 컴파일하고 최적화하기 위해 hybridize 메서드를 호출할 수 있습니다.

net.hybridize()

이제 모델을 학습시킬 때에도 기본 MXNet 인터페이스를 사용할 때와 거의 동일한 고성능을 활용하고 메모리 사용량을 줄일 수 있습니다.

5. Gluon 시작하기

Gluon을 사용하려면 MXNet 설치 과정 가이드에 나오는 간단한 단계에 따라 실행하거나 클라우드에서 Deep Learning Amazon 머신 이미지(AMI)를 실행하면 됩니다. 그런 다음, 앞서 다룬 여러 구성 요소를 사용하는 방법을 단계별로 실행하여 Multilayer Perceptron(MLP)이라고 하는 간단한 2계층 신경망을 빌드하고 학습합니다. Python 버전 3.3 이상에서 Jupyter 노트북을 사용하여 이 예제를 실행하는 것이 좋습니다.

먼저, MXNet를 가져오고 gluon 라이브러리뿐 아니라 다른 필수 라이브러리 autogradndarray를 붙잡습니다.

import mxnet as mx
from mxnet import gluon, autograd, ndarray

그런 다음 데이터를 가져오고 이 데이터에서 어느 정도 전처리를 실행합니다. 많이 사용되는 MNIST 데이터세트를 가져오며, 여기에는 손으로 쓴 숫자가 나오는 대규모 이미지 모음과 이 이미지에 적합한 레이블이 포함되어 있습니다. 물론, 사진을 어레이에 맞게 재구성하여 쉽게 처리하고 어레이를 MXNet 기본 NDArray 객체로 변환할 수도 있습니다.

# 기본 MXNet utils 함수를 사용하여 MNIST 가져오기
data = mx.test_utils.get_mnist()

# 학습 데이터 설정 및 사진 재구성
train_data = data['train_data'].reshape((-1, 784))
train_label = data['train_label']

# 테스트 데이터 설정 및 사진 재구성
test_data = data['test_data'].reshape((-1, 784))
test_label = data['test_label']

# 데이터를 NDArrays로 변환
train_data_mx = mx.nd.array(train_data)
train_label_mx = mx.nd.array(train_label)
test_data_mx = mx.nd.array(test_data)
test_label_mx = mx.nd.array(test_label)

그 다음, 반복자를 만들어 학습 데이터를 보유합니다. 반복자는 큰 데이터 세트를 순회할 때 유용한 객체 클래스입니다. 이 작업을 진행하기 전에 먼저 배치 크기를 설정하여 각 학습 알고리즘을 반복하는 동안 신경망이 처리할 데이터 분량을 정의합니다. 이 경우에는 32입니다.

batch_size = 32
train_data = mx.io.NDArrayIter(train_data_mx, train_label_mx, batch_size,  
                                 shuffle=True)           

이제 바로 실제 신경망을 정의할 수 있습니다. 계층 2개를 만들려고 합니다. 첫 번째 계층에는 노드 128개가 있고, 두 번째 계층에는 노드 64개가 있습니다. 이 두 계층 모두 Rectified Linear Unit(ReLU)이라는 활성화 함수를 포함합니다. 활성화 함수는 모델 입력과 출력 간의 비선형 관계를 표현하기 위해 중요합니다. 또한, 노드 개수가 가능한 총 출력 개수와 일치하도록 출력 계층을 설정해야 합니다. MNIST의 경우에 사진은 10개(즉, 0~9)뿐인 숫자를 나타내기 때문에 가능한 출력이 10개뿐입니다.

# 첫 단계는 모델 초기화
net = gluon.nn.Sequential()
# 그런 다음 모델 아키텍처 정의
with net.name_scope():
    net.add(gluon.nn.Dense(128, activation="relu")) # 첫 번째 계층 - 노드 128개
    net.add(gluon.nn.Dense(64, activation="relu")) # 두 번째 계층 – 노드 64개
    net.add(gluon.nn.Dense(10)) # 출력 계층

모델 학습 절차를 시작하기 전에 모델의 파라미터를 초기화하고 손실 및 모델 옵티마이저 함수를 설정해야 합니다.

# 표준편차가 0.05인 정규 분포에서 모델의 파라미터 전체에 대해 
# 임의 값으로 시작
net.collect_params().initialize(mx.init.Normal(sigma=0.05))

# softmax cross entropy loss 함수를 사용하여 # 모델이 정답을 얼마나 잘 예측할 수 있는지 평가하도록 선택
softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()

# SGD(Stochastic Gradient Descent) 학습 알고리즘을 사용하고 
# 학습 속도 하이퍼파라미터를 .1로 설정하도록 선택
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': .1})

이제 모델 학습 알고리즘을 정의할 시간입니다. 반복할 때마다 다음 4단계를 거칩니다. (1) 데이터 한 배치를 입력 받고 (2) 신경망 모델의 출력과 실제 값의 차이를 계산하고 (3) autograd를 사용하여 손실 함수로부터 모델 파라미터의 미분값을 계산하고 (4) trainer 메서드를 사용하여 손실 함수가 감소하는 방향으로 파라미터를 최적화합니다. 전체 Epoch 개수를 10으로 설정했습니다. 즉, 전체 학습 데이터 세트를 10회 반복합니다.

epochs = 10

for e in range(epochs):
    for i, batch in enumerate(train_data):
        data = batch.data[0]
        label = batch.label[0]
        with autograd.record(): # 파생물 기록 시작
            output = net(data) # 순방향 반복
            loss = softmax_cross_entropy(output, label)
            loss.backward()
        trainer.step(data.shape[0])

이제 학습된 신경망 모델이 준비되었으므로, 확보한 테스트 데이터를 사용하여 이 모델의 정확도를 확인해 보겠습니다. 예측한 값과 실제 값을 비교하여 정확도를 계산할 수 있습니다.

acc = mx.metric.Accuracy()# 정확성 지표 초기화
output = net(test_data_mx) # 신경망을 통해 테스트 데이터 실행
predictions = ndarray.argmax(output, axis=1) # 테스트 데이터 예측
acc.update(preds=predictions, labels=test_label_mx) # 정확성 계산
print(acc)

Gluon 인터페이스와 딥 러닝에 대해 자세히 알아 보려면, 종합 자습서 모음을 참조하면 됩니다. 이 자습서에서는 딥 러닝 소개부터 첨단 신경망 모델의 구현 방법에 이르기까지 자세한 내용을 다룹니다.

작성자 소개
Vikram Madan은 AWS Deep Learning 담당 선임 제품 관리자입니다. 특히 오픈 소스 Apache MXNet 엔진에 초점을 두고 딥 러닝 엔진을 보다 쉽게 사용하도록 해주는 제품 연구에 주력하고 있습니다. 여가 시간에는 장거리 달리기와 다큐멘터리 시청을 즐기곤 합니다.

 

이 글은 Introducing Gluon — An Easy-to-Use Programming Interface for Flexible Deep Learning의 한국어 번역으로, 강지양 AWS 솔루션즈 아키텍트께서 감수하였습니다.

Amazon EC2 P3 인스턴스를 위한 신규 Deep Learning AMI 출시

어제 출시된 Amazon EC2 P3 인스턴스에 탑재한 NVIDIA Volta V100 GPU를 위해 최적화된 딥러닝 프레임워크를 사전에 설치한 새로운 AWS Deep Learning AMI 세트를 발표하였습니다.

새로운 P3 인스턴스는 단일 p3.16xlarge 인스턴스에서 8개의 NVIDIA Volta GPU를 통해 초당 125조 개의 단 정밀도 부동 소수점 연산이 가능하므로 딥러닝에 탁월합니다. 따라서 정교한 딥러닝 모델의 학습 시간이 수 일에서 수 시간으로 크게 단축됩니다.

딥러닝 AMI: Volta용 CUDA 9 출시
새로운 AMI는 Ubuntu와 Amazon Linux 모두를 위한 CUDA 9, cuDNN 7.0, NCCL 2.0.5 및 NVIDIA Driver 384.81 등의 P3 Volta의 성능을 활용하는 다른 GPU 드라이버와 함께 사전 설치, 구성됩니다.

최신 드라이버 외에도, 이 AMI에는 P3와 Volta를 위해 최적화된 주요 프레임워크가 포함되어 있습니다. 갓 출시된 Volta를 위한 첫 번째 릴리스인 이 CUDA 9 AMI에는 가장 최신 버전의 소스로부터 빌드된 프레임워크가 포함되어 있습니다. Volta는 아직 초기 단계이므로 이 프레임워크들은 시간이 흐름에 따라 안정성과 성능이 개선될 것으로 기대되며, 이 최신 버전의 프레임워크들은 학습 시간의 관점에서 상당한 성능 향상을 제공할 것입니다. 즉, 이 빌드들은 가장 최신이므로 프로덕션으로 올리기 전에 테스트해보시기 바랍니다. P3에서 실험하면서 오픈 소스 프로젝트에 피드백을 주시면 개선에 도움이 될 것입니다.

  • Apache MXNet v0.12 RC1: CNN 학습은 float16을 사용할 때 Pascal GPU보다 3.5배 빠릅니다. MXNet 버전 0.12의 전체 릴리스 노트는 여기에서 볼 수 있습니다.
  • Caffe2 v0.8.1: Caffe2의 FP16 지원으로 인해 개발자는 NVIDIA Tesla V100 GPU를 사용해 딥러닝 작업의 성능을 극대화 할 수 있습니다.
  • TensorFlow (마스터): 2017년 10월 24일 오전 11시(커밋 : 5bef42)의 마스터에서 빌드한 TensorFlow 버전과 Volta 지원을 위한 NVIDIA의 8 패치를 제공합니다. 초기 테스트에서 이 빌드는 p2.16xlarge의 최신 공식 릴리스 (TensorFlow 1.3)와 비교하여 p3.16xlarge에서 3배의 성능을 보입니다.
  • Gluon: 이전 버전의 AMI와 마찬가지로, 학습 속도를 떨어뜨리지 않고도 쉽고 빠르게 머신러닝 모델을 작성할 수 있게 해주는 새로운 오픈 소스 딥러닝 인터페이스인 Gluon이 포함됩니다. Gluon 출시 소개에서 더 많은 정보를 얻고, 50개 노트북의 샘플 코드를 시작해보세요.

작업에 적합한 AMI 선택하기
AWS Deep Learning AMI를 시작하는 것은 간단합니다. AWS 마켓 플레이스에서 한 번의 클릭으로 시작하거나 이 단계별 안내서를 따라 첫 번째 노트북을 시작할 수 있습니다.

CUDA 9 AMI는 다음 버전에서 사용할 수 있습니다.

그 밖의 다른 프레임워크도 Volta를 위해 준비되면 추가할 것입니다. 아직 유지되고 있는 CUDA 8 AMI도 사용 가능하며, TensorFlow, MXNet, Caffe, Caffe 2, Microsoft Cognitive Toolkit (CNTK) 및 Keras의 최신 안정화된 공식 “포인트” 릴리스를 포함하고 있습니다. CUDA 8 AMI는 다음 버전에서 사용할 수 있습니다.

딥러닝에 대해 더 알고 싶다면 2017년 11월 27일부터 12월 1일까지 열릴 re:Invent 머신러닝 안내서를 참조하십시오. 딥러닝의 미래를 전망하는 첫 Deep Learning Summit에 참석하시고 50여 개의 머신러닝 세션, 워크샵, 실습에도 이번 re:Invent 컨퍼런스에서 참여해보세요.

이글은 Amazon AI 블로그의 Announcing New AWS Deep Learning AMI for Amazon EC2 P3 Instances의 한국어 번역으로 AWS코리아의 강지양 솔루션즈아키텍트가 번역해 주셨습니다.

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 의 한국어 번역입니다.

AWS Deep Learning AMI로 딥 러닝 시작하기

딥 러닝 초보, 고급 딥 러닝 프로젝트를 클라우드에서 해보고 싶은 전문가. 누구라도 AWS에서 쉽게 딥 러닝을 시작할 수 있습니다.

AWS Deep Learning AMI는 클라우드에서 어떤 규모의 딥 러닝 애플리케이션이라도 실행할 수 있게 해주며, 우분투와 Amazon 리눅스의 두 가지 버전이 있습니다. AWS Deep Learning AMI (Amazon Machine Images)에는 Apache MXNet, TensorFlow, 마이크로소프트 Cognitive Toolkit (CNTK), Caffe, Caffe2, Theano, Torch, Keras 등의 오픈 소스 딥 러닝 프레임워크들이 미리 설치되어 제공됩니다.

AWS Deep Learning AMI를 사용해, 커스텀 AI 모델을 학습시키거나 새로운 알고리즘을 실험하고 새로운 딥 러닝 기술을 배울 수 있습니다. AWS Deep Learning AMI를 사용하는 데 따른 추가 비용은 없습니다. 애플리케이션을 저장하고 실행하는 데 필요한 AWS 리소스에 대해서만 비용을 지불하면 됩니다.

또한, AWS Deep Learning AMI는 미리 구성된 인텔의 Math Kernel Library (MKL)와 CUDA, cuDNN 드라이버를 통해 GPU 가속 기능을 제공합니다. 많이 사용되는 Python 패키지들과 Anaconda 플랫폼도 함께 설치되어 있습니다.

AWS Deep Learning AMI는 단순하고 쓰기 쉽고 비용을 절약할 수 있을 뿐 아니라, 서버 인스턴스를 바로 시작할 수 있습니다. 단계별로 설명한 이 가이드를 따라서 딥 러닝을 지금 바로 시작해 보세요.

단계 1: AMI 시작하기

AWS 관리 콘솔로 이동해 로그인하거나 새 계정을 만드십시오.

검색 창에 EC2를 입력하거나 “All services” 아래에서 EC2를 찾아 EC2 콘솔을 엽니다.

Launch Instance 버튼을 선택하고 AWS Marketplace에서 AWS Deep Learning AMI를 검색하십시오. 여기서는 Ubuntu 버전을 사용하겠지만 Amazon Linux를 선택할 수도 있습니다.

실행할 인스턴스 유형을 선택하고 Next를 선택합니다.

주의: P2 인스턴스 한도가 0 인 경우 AWS Support Center를 통해 인스턴스 한도 증가를 요청해야 합니다.

Configure Security Group이 나올 때까지 각 페이지에서 Next를 선택하십시오. Source 열에서 My IP를 선택하여 접속할 IP 주소의 액세스만을 허용합니다.

인스턴스를 검토하고 Launch를 선택하세요.

기존의 프라이빗 키 파일을 선택하거나 새로 만든 후에 인스턴스를 실행하십시오.

P2 인스턴스 한도 때문에 인스턴스가 실행되지 않으면 한도 증가를 요청하시기 바랍니다.

 

단계 2: 인스턴스  접근 및 Jupyter Notebook 시작하기

View Instance를 클릭하고 인스턴스의 퍼블릭 DNS 주소를 확인하세요.

터미널을 열고 .pem 확장자의 프라이빗 키가 있는 디렉토리로 변경한 다음, 인스턴스에 SSH로 연결하세요.

cd /Users/your_username/Downloads/	
ssh -L localhost:8888:localhost:8888 -i <your .pem file name> ubuntu@<Your instance DNS>


다음 명령어로 Jupyter를 시작합니다.

$ jupyter notebook

브라우저 창을 열고 앞 단계에서 표시된 URL로 이동하십시오. src 폴더의 다른 파일들도 살펴보시기 바랍니다.

New를 선택하고 새 notebook을 시작하십시오. MXNet을 import하고 바로 코딩을 시작하거나 자습서를 따라해 볼 수 있습니다.

AWS Deep Learning AMI를 시작했다면 컴퓨터 비전, 자연 언어 처리 및 추천 시스템과 같은 자습서를 쉽게 실행해볼 수 있습니다. Jupyter 노트북에 들어 있는 많은 MXNet자습서들을 쉽게 실행하거나 고쳐볼 수도 있습니다. 처음에 이런 것부터 시작해보면 어떨까요? MXNet 사이트에서 아이디어를 더 찾아보세요.

참고: 한국어 가이드는 Apache MXNet의 모든것 이나 정보 공유는 MXNet 한국 사용자 모임에 가입하시기 바랍니다.

이 글은 Amazon AI 블로그의 Get Started with Deep Learning Using the AWS Deep Learning AMI의 한국어 번역으로 AWS코리아 강지양 솔루션즈 아키텍트가 번역해 주셨습니다.