Category: Deep Learning


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코리아의 강지양 솔루션즈아키텍트가 번역해 주셨습니다.

NVIDIA Tesla V100 GPU 지원 Amazon EC2 P3 인스턴스 타입 정식 출시

AWS는 고객 요청에따라 기술 변화에 맞는 EC2 인스턴스 타입을 지속적으로 추가해 왔습니다. 2006년 m1.small을 시작으로, 컴퓨팅 최적화, 메모리 최적화 혹은 스토리지 및 I/O 등에 최적화된 인스턴스 타입 등 많은 고객 선택 옵션을 제공하고 있습니다.

새로운 P3 인스턴스 타입 출시
오늘 AWS의 4개의 리전에 차세대 GPU 기반 EC2 인스턴스를 출시합니다. 최대 8개의 NVIDIA Tesla V100 GPU로 구동되는 P3 인스턴스는 고성능 컴퓨팅 작업을 요하는 기계 학습, 딥러닝, 전산 유체 역학, 전산 금융, 지진 분석, 분자 모델링 및 유전체 분석 작업 등의 부하를 처리할 수 있게 설계되었습니다.

P3 인스턴스는 최대 2.7GHz로 실행되는 맞춤형 Intel Xeon E5-2686v4 프로세서를 사용합니다. 세 가지 크기 (모든 VPC 전용 및 EBS 전용)로 사용할 수 있습니다.

모델 NVIDIA Tesla V100 GPUs GPU 메모리
NVIDIA NVLink vCPUs 주메모리 네트워크대역폭 EBS 대역폭
p3.2xlarge 1 16 GiB n/a 8 61 GiB Up to 10 Gbps 1.5 Gbps
p3.8xlarge 4 64 GiB 200 GBps 32 244 GiB 10 Gbps 7 Gbps
p3.16xlarge 8 128 GiB 300 GBps 64 488 GiB 25 Gbps 14 Gbps

각 NVIDIA GPU는 5,120개의 CUDA 코어와 640개의 Tensor 코어로 구성되어 있으며 최대 125 TFLOPS의 혼합 부동 소수 정밀도, 15.7 TFLOPS의 단일 부동 소수점 정밀도 및 7.8 TFLOPS의 복수 부동 소수점 정밀도를 지원합니다. 8xlarge 및 16xlarge 사이즈에는 각 GPU가 최대 300GBps의 데이터 속도로 실행되는 NVIDIA NVLink 2.0을 통해 서로 연결됩니다. 이를 통해 GPU는 중간 결과 및 기타 데이터를 CPU 또는 PCI-Express 패브릭을 통해 이동하지 않고 고속으로 교환할 수 있습니다.

텐서코어(Tensor Core) 소개

NVIDIA 블로그에 따르면, Tensor 코어는 딥러닝 신경망 학습 및 추론을 가속화하도록 설계되었습니다. 각 코어는 한 쌍의 4×4 반 정밀도 (FP16이라고도 함) 행렬을 빠르고 효율적으로 연산해서 얻은 4×4 행렬을 다른 반 또는 단일 정밀도 (FP32) 행렬에 더한 다음, 절반 또는 단일 정밀도 형식의 4×4 행렬 NVIDIA 블로그 게시물의 다이어그램은 다음과 같습니다.

이 작업은 딥러닝 네트워크를 위한 학습 과정에서 가장 먼저 실행하는 것으로, 오늘날의 NVIDIA GPU 하드웨어가 매우 구체적인 시장 요구를 해결하기 위해 특별한 방법으로 구축되었는지 보여주는 훌륭한 예입니다. 텐서 코어 성능의 혼합 정밀도 한정자(mixed-precision qualifier)는 16비트 및 32비트 부동 소수점 값의 조합으로 작업하기에 충분히 유연하다는 것을 의미합니다.

정식 출시
NVIDIA Tesla V100 GPU 및 Tensor 코어를 최대한 활용하려면 CUDA 9cuDNN7을 사용해야합니다. 이 드라이버와 라이브러리는 이미 최신 버전의 Windows AMI에 추가되었으며, 11 월 7 일에 출시예정인 업데이트 된 Amazon Linux AMI에 포함될 예정입니다. 새로운 패키지는 기존 Amazon Linux AMI에 설치하려는 경우 이미 레포지터리에서 사용할 수 있습니다.

최신 AWS Deep Learning AMI에는 Apache MXNet, Caffe2 및 Tensorflow (각각 NVIDIA Tesla V100 GPU 지원)의 최신 버전이 사전 설치되어 있으며 Microsoft Cognitive Toolkit과 같은 다른 기계 학습 프레임 워크로 P3 인스턴스를 지원하도록 업데이트됩니다. 이 프레임 워크가 NVIDIA Tesla V100 GPU에 대한 지원을 출시하면, PyTorch를 사용할 수 있습니다. 또한 NGC 용 NVIDIA Volta Deep Learning AMI를 사용할 수도 있습니다.

P3 인스턴스는 On-Demand, Spot, Reserved Instance 및 Dedicated Host 양식의 미국 동부 (버지니아 북부), 미국 서부 (오레곤), EU (아일랜드) 및 아시아 태평양 지역 (도쿄) 지역에서 사용할 수 있습니다. 더 자세한 사항은 P3 인스턴스 소개 페이지를 참고하세요!

Jeff;

이 글은 New – Amazon EC2 Instances with Up to 8 NVIDIA Tesla V100 GPUs (P3)의 한국어 편집본입니다. Amazon 인공 지능에 대한 좀 더 자세한 사항은 아래 한국어 발표 자료 및 동영상을 참고하시기 바랍니다.

자세히 알아보기

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코리아 강지양 솔루션즈 아키텍트가 번역해 주셨습니다.

Amazon EC2 Elastic GPU 정식 출시

작년 re:Invent에서 미리 출시 계획을 밝혔던 Amazon EC2 Elastic GPU를 정식 출시합니다. Elastic GPU는 Amazon EC2 (Elastic Compute Cloud) 인스턴스에 GPU 자원을 추가하여 애플리케이션 그래픽 성능을 가속화 할 수 방식입니다. 추가 가능한 GPU는 medium (1GB), large (2GB), xlarge (4GB) 및 2xlarge (8GB) 크기로 제공되며, G3 또는 G2(OpenGL 3.3용)와 같은 전용 GPU 인스턴스 유형을 늘 사용하지 않는 경우 훨씬 저렴한 방법입니다. 여러분의 워크 로드에 맞게 Elastic GPU를 사용하면 애플리케이션에 적합한 컴퓨팅, 메모리 및 스토리지 균형을 유연하게 선택할 수 있습니다. 오늘 부터 미국 동부의 버지니아(us-east-1)와 오하이오(us-east-2) 리전에 정식 출시합니다.

Elastic GPU 중 eg1.medium의 경우 시간당 0.05 달러에서 시작합니다. 이를 t2.medium ($0.065/hour)에 연결하면, GPU 포함 인스턴스에 대해 시간당 총 12센트 미만을 지불합니다. 이전에는 가장 저렴한 그래픽 워크스테이션 (G2/G3 클래스)은 시간당 76 센트였습니다. 특정 그래픽 작업을 실행하기 위한 가격이 80% 이상 감소한 것입니다.

Elastic GPUs 활용 사례
Elastic GPU는 그래픽 가속 및 OpenGL 지원을 위해 작거나 간헐적 인 추가 GPU 자원이 필요한 애플리케이션에 가장 적합합니다. OpenGL 3.3 API 표준을 지원하며, 곧 확장 API 지원이 제공 될 것입니다.

Elasic GPU는 여러분이 만든 인스턴스의 포함되지 않고 대신 인스턴스를 시작할 때 만들어진 서브넷의 GPU 네트워크 인터페이스를 통해 연결합니다. 아래 그림은 GPU가 어떻게 부착되어 있는지 보여줍니다.

Elastic GPU는 네트워크에 연결되어 있으므로 애플리케이션을 지원할 수있는 적절한 네트워크 대역폭을 갖춘 인스턴스를 제공하는 것이 중요합니다. 또한, 인스턴스 보안 그룹이 포트 2007에서 트래픽을 허용하는지 확인하는 것도 중요합니다. OpenGL API를 사용할 수 있는 모든 애플리케이션은 Elastic GPU를 활용할 수 있으므로, Blender, Google Earth, SIEMENS SolidEdge 등이 모두 Elastic GPU로 실행될 수 있습니다.

자, 이제 인스턴스를 직접 실행하고 사용해 보겠습니다.

Elastic GPUs 사용하기
먼저 EC2 콘솔로 이동하여 인스턴스 실행을 클릭합니다. 다음으로 “Microsoft Windows Server 2016 Base”와 같은 Windows AMI를 선택합니다. 그런 다음 인스턴스 유형을 선택합니다. 그런 다음 “Elastic GPU”섹션을 선택하고 eg1.medium (1GB) Elastic GPU를 할당합니다.

또한, 고급 세부 정보 섹션에 일부 사용자 데이터가 포함하기 위해 Elastic GPU 소프트웨어를 다운로드하고 설치하기위한 간단한 PowerShell 스크립트를 작성합니다.

PowerShell

<powershell>
Start-Transcript -Path "C:\egpu_install.log" -Append
(new-object net.webclient).DownloadFile('http://ec2-elasticgpus.s3-website-us-east-1.amazonaws.com/latest', 'C:\egpu.msi')
Start-Process "msiexec.exe" -Wait -ArgumentList "/i C:\egpu.msi /qn /L*v C:\egpu_msi_install.log"
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Program Files\Amazon\EC2ElasticGPUs\manager\", [EnvironmentVariableTarget]::Machine)
Restart-Computer -Force
</powershell>

위의 코드를 통해  OpenGL API 호출을 첨부 된 Elastic GPU로 이 프로그램을 보냅니다.

그리고, 보안 그룹에 TCP 포트 2007이 VPC에 노출되어 있는지 확인합니다. 그러면 Elastic GPU가 내 인스턴스에 연결할 수 있습니다. 마지막으로 실행을 클릭하고 인스턴스와 Elastic GPU가 제공 될 때까지 기다립니다.  가장 좋은 방법은 GPU 인스턴스에 연결할 수있는 별도의 보안 그룹를 만들어 두는 것입니다.

아래는 전체 진행과정에 대한 스크린캡쳐입니다.

다음과 같이 AWS CLI을  통해 바로 시작할 수도 있습니다

Bash
$aws ec2 run-instances --elastic-gpu-specification Type=eg1.2xlarge \
--image-id ami-1a2b3c4d \
--subnet subnet-11223344 \
--instance-type r4.large \
--security-groups "default" "elasticgpu-sg"

Elastic GPU 소프트웨어 설치 가이드를 따라서 진행하셔도 됩니다.  설치가 완료되면, 윈도 작업 도구 모음에 Elastic GPU가 설치되어 운용되고 있는 모습을 보실 수 있습니다.

위의 화면 처럼 GPU 상태 상자의 왼쪽 하단에있는 Feedback 링크를 클릭하면 Elastic GPU 사용 경험을 제공해 주실 수 있습니다.

Elastic GPU 데모 보기
이제 Elastic GPU를 활용한 데모를 잠깐 살펴 보겠습니다. 대표적인 우주선 발사 시뮬레이션 3D 프로그램인 Kerbal Space Program (KSP)을 다운로드하고 -force-opengl 라는 매개 변수를 추가하여 OpenGL을 사용하여 렌더링을 수행하는지 확인할 수 있습니다.

Amazon CloudWatch 지표 항목을 확인하고, 데모 중에 사용한 GPU 메모리 양을 확인할 수 있습니다.

game.

정식 출시
오늘 부터 미국 동부 버지니아와 오하이오 리전에서 테스트 가능하며, 향후 리전 확장을 지속할 예정입니다. 또한, AWS 고객을 위한 훌륭한 경험을 지속적으로 제공하기 위해 Elastic GPU에서 OpenGL API를 활용하려는 경우, ANSYS 및 Siemens와 같은 3D 소프트웨어 파트너 인증을 하고 있습니다. 더 자세한 정보는 파트너쉽 정보와 Elastic GPU 가격 정보기술 문서 또한 참고하실 수 있습니다.

Randall

이 글은 New – Amazon EC2 Elastic GPUs for Windows 한국어 편집본입니다.

 

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이 작성하였습니다.

 

Deep Learning AMI, AWS 서울 리전 출시

오늘 부터 AWS Deep Learning AMI를 서울 리전에서 사용할 수 있게 되었습니다. 이전 북미 지역 리전에서 서울을 포함한 아시아 지역 리전으로 확대되어 제공합니다.

데이터 과학자, 기계 학습 종사자 및 연구자가 클라우드 기반 딥러닝 학습을 할 수 있도록, Amazon Linux 또는 Ubuntu에서 Amazon EC2 인스턴스를 위한 맞춤형 이미지로서, Deep Learning AMI를 사용하면, 단일 서버 뿐만 아니라 대용량 오토 스케일링 GPU 클러스터를 만들 수 있고, Apache MXNet, TensorFlow, Microsoft CNTK, Caffe, Caffe2, Theano, Torch, Keras을 사용하여 컴퓨팅 최적화 또는 범용 CPU 인스턴스로 숙련된 모델에 대한 추론을 실행할 수 있습니다.

아래는 서울 리전에 설치된 신규 버전은 AWS Marketplace를 통해 검색할 수 있으며, Amazon Liunx Deep Learning AMI, Ubuntu Deep Learnin AMI 등 두 가지 버전이 있습니다. 최신 버전에서는 아래 기능이 추가되었습니다.향후에 계속 업데이트 될 예정입니다.

  • MXNet  v0.10.0 버전 업그레이드
  • Tensorflow  v1.1.0 버전 업그레이드
  • Caffe2  v0.7.0 버전 업그레이드

본 AMI을 기반하여 딥러닝 클러스터 구성에 대한 자세한 내용을 보려면 AWS Labs – Deep Learning GitHub에 있는 튜토리얼을 참고하시기 바랍니다.아래에는 MXNet 및 TensorFlow 프레임 워크를 사용하여 AWS에서 분산 딥러닝 트레이닝을 손쉽게 실행하는 방법을 알려드립니다.

참고 자료

더 관심 있는 분들은 매월 모이는 AWS 한국 사용자모임의 데이터 과학 딥러닝 소모임에 참여하시면, 스터디에 함께 참여하실 수 있습니다.

Channy(윤석찬);

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

딥러닝용 P2 인스턴스 타입, 서울 리전 출시

최근 인공 지능에 대한 관심이 높아짐에 따라 활용 요구가 높은 기계 학습 및 딥러닝(Deep Learning), 유체 역학 컴퓨팅 연산, 지진파 분석, 분자 모델링, 유전학 및 금융 분석 등 대량 컴퓨팅 연산에 도움이 될 P2 인스턴스 타입을 서울 리전에 오늘 출시하였습니다.
P2 인스턴스 타입은 8 NVIDIA Tesla K80 Accelerators (각각 2개의 NVIDIA GK210 GPU)을 지원합니다. 각 GPU는 12GB 메모리를 가지고 있으며 (초당 240GB 메모리 대역폭 제공) 2,496개의 병렬 코어를 지원합니다. 또한, 더블 비트 오류를 검출해서 싱글 비트 오류를 고치는 ECC 메모리 보호 기능을 지원합니다. ECC 메모리 보호 가능 및 이중 플로팅 포인트 기능을 통해 위의 다양한 요구 사항을 수용할 수 있습니다.

아래는 P2 인스턴스 타입 스펙입니다.

Instance Name GPU Count vCPU Count Memory Parallel Processing Cores
GPU Memory
Network Performance
p2.xlarge 1 4 61 GiB 2,496 12 GB High
p2.8xlarge 8 32 488 GiB 19,968 96 GB 10 Gigabit
p2.16xlarge 16 64 732 GiB 39,936 192 GB 20 Gigabit

더 자세히 알아보기

Channy;