Category: Compute


차세대 (R4) 메모리 최적화 EC2 인스턴스

인-메모리 기반 서비스는 큰 이슈입니다. 지속적으로 대량화 되는 작업 부하와 CPU 성능 증가와 아울러 메모리에 최적화 기법은 고품질 비즈니스 인텔리전스, 데이터 분석 기술 활용의 전제 조건이 되었습니다. 인 메모리 기반 데이터 마이닝 및 대기 시간에 민감한 기타 실시간 작업 부하를 처리 할 수 있습니다. 분산 캐싱 및 일괄 처리 작업 역시 많은 메모리에 빠르게 사용해야 합니다.

이러한 요구 사항에 맞추어 오늘 차세대 메모리 최적화 EC2 인스턴스를 출시합니다.  기존 보다 큰 L3 캐시, 높은 메모리 속도 및 클라우드 작업 부하에 최적화 된 마이크로 아키텍처를 지원하며, 기존의 R3 인스턴스를 성능을 개선하였습니다.  EC2 포트폴리오 내에서 GiB 당 최적의 가격을 갖는 것 외에도 EBS에 전용 처리량 12Gbps와 함께 배치 그룹 내에서 사용할 경우 최대 20Gbps의 ENA 네트워크 대역폭을 지원합니다.

R4 인스턴스의 사양은 아래와 같습니다.

  • 고성능 Intel Xeon E5-2686 “Broadwell” 프로세서
  • DDR4 메모리
  • Hardware Virtualzation (HVM)만지원

아래는 인스턴스 사이즈별 정보입니다.

모델 vCPUs 메모리 (GiB) 네트워크 대역폭
r4.large 2 15.25 Up to 10 Gigabit
r4.xlarge 4 30.5 Up to 10 Gigabit
r4.2xlarge 8 61 Up to 10 Gigabit
r4.4xlarge 16 122 Up to 10 Gigabit
r4.8xlarge 32 244 10 Gigabit
r4.16xlarge 64 488 20 Gigabit

R4 인스턴스는 온디멘드와 예약 인스턴스 타입으로 US East (Northern Virginia), US East (Ohio), US West (Oregon), US West (Northern California), EU (Ireland), EU (Frankfurt), Asia Pacific (Sydney), China (Beijing), AWS GovCloud (US) 리전에 출시됩니다. 자세한 것은 EC2 요금표를 참고하시기 바랍니다.

Update. 2017년 1월 19일 Asia Pacific (Seoul) 리전에 출시하였습니다.

Jeff;

이 글은 AWS re:Invent 2016 신규 출시 소식으로 New – Next Generation (R4) Memory-Optimized EC2 Instances의 한국어 번역입니다. re:Invent 출시 소식에 대한 자세한 정보는 12월 온라인 세미나를 참고하시기 바랍니다.

신규 T2.Xlarge 및 T2.2Xlarge 인스턴스 출시

많은 AWS 고객들이 비용 효율적이면서 필요시에만 컴퓨팅 용량을 이용할 수 있는 T2 인스턴스를 사용하고 있습니다. 컴퓨팅 용량이 일상적인 업무 즉, 일반적인 웹 서버, 개발 서버, 개발 통합 및 테스트 서버 그리고 작은 데이터베이스 서버 등에 활용하고 있습니다. T2 인스턴스 타입은 적정량의 기본 성능을 보장하고, 갑작스런 트래픽에 맞추어 자동으로 일정량의 컴퓨팅 용량을 추가 사용할 수 있습니다. (자세한 것은 저가 T2 인스턴스 출시 – 급격한 트래픽 처리 가능을 참고하세요.)

오늘 추가로 두 개의 신규 대용량 T2 인스턴스 타입을 소개합니다. – t2.xlarge는 16 GiB 메모리를 가지고 t2.2xlarge는 32 GiB 메모리를 제공합니다. 신규 인스턴스 타입을 통해 T2 용량 버스팅 모델을 그대로 따르면서 메모리를 더 필요로 하는 애플리케이션에 최적화할 수 있습니다. (t2.large 인스턴스를 2016년 6월, t2.nano인스턴스를 2015년 12월에 선보인 바 있습니다.)

아래는 T2 인스턴스 타입의 모든 스펙입니다. (가격은 최근 EC2 가격 할인을 반영하였습니다.)

인스턴스 타입 vCPUs 기본성능 플랫폼 메모리(GiB) CPU크레딧/시간당 시간당  가격
(리눅스)
t2.nano 1 5% 32-bit or 64-bit 0.5 3 $0.0059
t2.micro 1 10% 32-bit or 64-bit 1 6 $0.0120
t2.small 1 20% 32-bit or 64-bit 2 12 $0.0230
t2.medium 2 40% 32-bit or 64-bit 4 24 $0.0470
t2.large 2 60% 64-bit 8 36 $0.0940
t2.xlarge 4 90% 64-bit 16 54 $0.1880
t2.2xlarge 8 135% 64-bit 32 81 $0.3760

기존 업무를 새로운 인스턴스 타입에 이전하기 위한 몇 가지 전략을 소개해 드립니다.

  • t2.large 애플리케이션 중 좀 더 많은 메모리가 필요하다면, t2.xlarget2.xlarge로 이전합니다.
  • c4.2xlarge를 중간 정도 사용하는 애플리케이션이라면 t2.xlarge로 이동하면 비슷한 컴퓨팅 용량에 획기적인 가격 인하 효과를 볼 수 있습니다.
  • m4.xlarge를 중간 정도 사용하는 t2.xlarge로 이전 하면 비슷한 컴퓨팅 용량에 약간의 가격 할인 효과를 볼 수 있습니다.

새로운 인스턴스 타입은 오늘 부터 모든 온디멘드 및 예약 인스턴스에 대해 전체 AWS 리전에서 사용 가능합니다.

Jeff

이 글은 AWS re:Invent 2016 신규 출시 소식으로 New T2.Xlarge and T2.2Xlarge Instances<의 한국어 번역입니다. re:Invent 출시 소식에 대한 자세한 정보는 12월 온라인 세미나를 참고하시기 바랍니다.

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 활용 기술 팁을 보내드리는 코너로서, 이번 글은 박선용 솔루션즈 아키텍트께서 작성해주셨습니다.

AWS Lambda 신규 기능– 환경 변수 및 서버리스 앱 모델(SAM)

최근 AWS Lambda 및 서버리스(Severless) 애플리케이션 개발 모델이 확대되고 있는 고무적인 현상을 볼 수 있습니다. 특히, AWS Week in Review 에는 최근 이와 관련된 오픈 소스 프로젝트도 많이 늘어났습니다.

이러한 기술 변화에 도움을 줄 AWS Lambda에 두 가지 중요한 기능 추가를 발표하게 되었습니다. 환경 변수 지원 및 새로운 서버리스 애플리케이션 모델입니다.

환경 변수 지정 기능
대부분 개발자들이 하나의 환경 이상에서 코드를 작성하고, 이를 위해서는 재사용 가능한 변수 설정을 통해 시간에 코드의 영속성을 보장해야 합니다. 설정 값은 환경에 따라 테이블명, 파일 경로 등 달라질 수 있는 변수들로서 개발 환경, 테스트 환경, 정식 서비스 환경에 따라 변하게 됩니다.

이제 Lambda 함수에도 이러한 환경 변수를 설정할 수 있게 되었습니다. 변수를 필요에 따라 지정함으로서 코드를 수정 및 재배포하지 않고도, 효율적으로 서버리스 애플리케이션 개발을 할 수 있습니다. 각 환경 변수는 키/밸류 페어로 저장되며 이 값들은  AWS Key Management Service (KMS) 로 암호화 되고, 필요에 따라 복호화 됩니다. 환경 변수의 개수 제한은 없으나 전체 크기가 4kb 미만이어야 합니다.

Lambda 함수의 새 버전을 만들 때, 환경 변수를 설정할 수 있습니다. 여기서 환경 변수를 설정하는 예제를 간단한 Python 코드를 통해 보여 드리도록 하겠습니다.

Lambda가 제공하는 기본 서비스 키를 사용하면 추가 비용이 들지 않습니다. (만약 기존에 사용 중인 KMS키에 대해 과금이 될 수 있습니다.)

본 기능에 대해 좀 더 자세한 정보는 Simplify Serverless Applications With Lambda Environment Variables 블로그 글을 참고하시기 바랍니다.

AWS 서버리스 애플리케이션 모델
Lambda 함수, Amazon API Gateway 자원, Amazon DynamoDB 테이블 등을 사용하여 서버리스 애플리케이션을 만들 수 있습니다. 신규 AWS Serverless Application Model (AWS SAM)은 AWS CloudFormation을 활용하여, 손쉽게 자원을 표시할 수 있는 방법입니다. 새로운 문법을 사용하기 위해서는 CloudFormation 템플릿이 Transform 부분을 포함해야 합니다.

YAML
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

템플릿을 통해 Lambda 함수, API Gateway 엔드 포인트 및 API 리소스, DynamoDB 테이블을 표시하고, 각 함수의 핸들러, 런타임, 코드 배포를 위해 업로드할 Zip 파일 URI 등을 포함 할 수 있습니다.

API는 이벤트 뿐만 아니라 Swagger 를 통해서도 정의 가능합니다.

DynamoDB 테이블을 간단한 문법으로 정의하여, 테이블명, 기본 키 및 형식, 처리량 등을 설정할 수 있습니다.

AWS SAM 파일을 만들어 Lambda 함수의 배포 패키지로 만들 수 있습니다. 간단하게 Actions 메뉴에서 Export function을 선택하면 됩니다.

그리고 Download AWS SAM 파일 또는 Download deployment package를 선택합니다.

아래에 간단한 샘플 코드가 있습니다.

YAML
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: A starter AWS Lambda function.
Resources:
  ShowEnv:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python2.7
      CodeUri: .
      Description: A starter AWS Lambda function.
      MemorySize: 128
      Timeout: 3
      Role: 'arn:aws:iam::99999999999:role/LambdaGeneralRole'

코드 배포를 위한 ZIP 파일은 S3에 올려서, SAM 파일 내 CodeUri 를 수정하면 됩니다. 간단한 CLI 명령어 (aws cloudformation package and aws cloudformation deploy)를 통해 자동으로 배포할 수 있습니다. 좀 더 자세한 정보는 Introducing Simplified Serverless Application Management and Deployment 블로그 글의 Deploying a Serverless app 부분을 참고하시기 바랍니다.

샘플 예제로 되어 있는 Lambda 함수도 각 박스 오른쪽 아래의 다운로드 버튼을 눌러 받을 수 있습니다.

이제 Download blueprint를 누릅니다.

AWS SAM 파일과 코드가 포함된 ZIP 파일을 받을 수 있습니다.

더 자세한 사항은 Introducing Simplified Serverless Application Management and Deployment 블로그 글을 참고하세요.

Jeff;

이 글은 New for AWS Lambda – Environment Variables and Serverless Application Model (SAM)의 한국어 번역입니다.

Amazon EC2 가격 인하 – C4, M4, T2 인스턴스 타입

2016년 12월 1월 부터 Amazon EC2 가격 인하를 시작합니다. 연말 대목 서비스를 맞아서 여러분에게 조금이나마 도움이 되시길 바랍니다. 저희는 기술 투자를 통한 확장성 및 가용성 그리고 이를 통한 컴퓨팅 용량의 효율적 관리를 통해 절감된 비용을 여러분에게 되돌려 드리고 있습니다.

이번 가격 인하에는 C4, M4, and T2 인스턴스 타입에 대해 온디멘드, 예약 인스턴스 (표준 및 전환 가능), 전용 호스팅 가격을 적용 리전 및 플랫폼(Linux, RHEL, SUSE, Windows 등) 따라 최대 25%까지 제공됩니다.

예를 들어,  리눅스 플랫폼의 경우

  • C4 – 5%  인하 /  US East (Northern Virginia), EU (Ireland),   20%  인하 /Asia Pacific (Mumbai)Asia Pacific (Sydney)
  • M4  – 10% 인하 /  US East (Northern Virginia), EU (Ireland), EU (Frankfurt), 25% 인하 /  Asia Pacific (Singapore).
  • T2 – 10%까지 인하 / US East (Northern Virginia), 25% 인하 / Asia Pacific (Singapore).

늘 그렇지만,  온디멘드 가격 인하에 대해서는 여러분이 추가로 하실 일은 없습니다.  만약 빌링 알람이나 새로운 예산 기능을 사용하신다면, 여러분의 가격 예상치를 하향 조정 하실 필요는 있습니다.

업데이트:  본 가격 인하는 각 리전  및 인스턴스 타입에 따라 다르게 적용되며,  자세한 것은 12월 1일 EC2 가격 페이지를 참고하시면 됩니다. (리눅스 및 윈도우 포함)  서울 및 도쿄 리전의 가격 인하율은 아래와 같습니다.

  • 온디멘드  인스턴스:  C4-5%, M4/T2- 20%
  • 1년 예약 인스턴스:  C4-5%, M4- 15%  (도쿄리전은 20%), T2- 20%
  • 3년 예약 인스턴스:  C4-5%, M4/T2- 20%

이번은 2006년 AWS 서비스 시작 이후, 53번째 가격 인하입니다.

Jeff

이 글은 EC2 Price Reduction (C4, M4, and T2 Instances)의 한국어 번역입니다.

AWS를 통한 분산 딥러닝(Deep Learning) 구성하기

기계 학습(Machine Learning) 분야는 명시적인 프로그래밍이 없더라도 컴퓨터를 통해 학습을 할 수 있도록 도와주는 전산 분야입니다. 알고리즘을 통해 스스로 배워서 데이터로 부터 예측을 할 수 있습니다.

최근에는 기계 학습의 분류로 딥러닝(Deep Learning)이라 불리는 방식으로 전통적인 기법보다 더 정확하고 성공적으로 음성 인식, 이미지 인식 및 비디오 분석 등의 분야에서 서비스를 제공할 수 있게 되었습니다. 하지만, 많은 컴퓨팅 용량이 필요하기 때문에 학습 모델의 비용에 크다는 단점이 있었습니다.

클라우드 컴퓨팅이 제공하는 가용성을 통해 이러한 작업을 더 빠르게 진행할 수 있습니다. 인공 지능 기반 뉴럴 네트워크 훈련에는 시간이 많이 소요되고 ResidualNet 같은 네트워크 방식으로 가장 최신의 GPU 하드웨어를 사용하더라도 몇 일에서 몇 주간이 필요합니다. 이 때문에 스케일-아웃(Scale-out) 확장은 필수적이라 하겠습니다.

학습 속도를 빠르게 하면 다음과 같은 장점이 있습니다.

  • 더 빠르게 여러번 실험 및 연구를 할 수 있어서 컴퓨터 비전 또는 음성 인식 분야의 현재 상태를 개선 할 수 있게 됩니다.
  • 인공 지능 애플리케이션의 시장이 원하는 시점에 AI 서비스를 빠르게 만들어서 배포하고 새롭게 개선할 수 있습니다.
  • 새로운 데이터를 더 빠르게 흡수하고 학습 모델을 개선할 수 있습니다.

AWS CloudFormation를 통해 AWS 자원을 손쉽게 만들고 운영할 수 있는 방식을 통해 딥러닝 클러스터를 만들 수 있는 새로운 템플릿을 소개합니다. 이 템플릿을 이용하여 Amazon Deep Learning AMI (MXNet, TensorFlow, Caffe, Theano, Torch, CNTK 프레임웍 지원)을 Amazon EC2의 신규 GPU P2 인스턴스에 구성하여, 자동 스케일링을 지원하는 분산 딥러닝 클러스터를 만들어 운영할 수 있게 됩니다.

딥러닝용 EC2 클러스터 아키텍처  구성

본 딥러닝용 CF 템플릿은 아래의 AWS 리소스를 생성하게 됩니다.

  • 고객 계정에 VPC 설정
  • 고객이 원하는 숫자의 인스턴스를 VPC 내에 자동 스케일링 그룹 에 사설망에 생성
  • 마스터 인스턴스를 자동 인스턴스 그룹에 별도로 생성하여 SSH로 접속할 수 있게 생성
  • 마스터 인스턴스에 SSH 접근이 가능하도록 보안 그룹 설정
  • 두 개의 보안 그룹 포트 설정을 통해 마스터 인스턴스와 워커 인스턴스 사이의 통신  제공
  • IAM 역할을 설정하여 자동 스케일링 그룹과 사설망 내 EC2 인스턴스 조회 기능 제공
  • 외부에서 접근할 수 있도록 VPC 내에 NAT 게이트웨이 설정

실행 스크립트는 모든 호스트에 대해 SSH를 지원합니다.  MXNet 같은 프레임웍을 사용하기 때문에 SSH  사용이 필수적이며,  이를 통해 분산 학습 동안 워커 인스턴스와 마스터 사이의 통신을 합니다.  스크립트를 실행하면 스택 내의 모든 호스트에 대한 사설 IP를 조회하고 이를  /etc/hosts에 추가한 후 , /opt/deeplearning/workers에  워커 인스턴스  목록을 작성합니다.

실행 스크립트는 아래와 같은 환경 변수를 가집니다.

  • $DEEPLEARNING_WORKERS_PATH: 워커 목록을 가진 파일 경로
  • $DEEPLEARNING_WORKERS_COUNT: 총 워커 인스턴스 수
  • $DEEPLEARNING_WORKER_GPU_COUNT: 인스턴스 내 GPU 수

딥러닝용 EC2 클러스터  실전 운영

원하는 인스턴스 숫자를 사용하려면, 기술 지원 센터에 기본 제한 숫자 증가요청하시기 바랍니다.

  1. MXNet GitHub repo에서 딥러닝용 CF 템플릿을 다운로드 합니다.
  2. CloudFormation 콘솔을 열고, Create New Stack을 선택합니다.
  3. Choose File을 눌러 다운로드한 템플릿을 업로드 한 후, Next를 누릅니다
  4. For Stack name 원하는 이름을 입력합니다.
  5. GPU InstanceType을 선택합니다. 예) P2.16xlarge.
  6. KeyName에는 자신의 EC2 key pair를 입력합니다.
  7. SSHLocation에는 SSH에 접근 하려는 CIDR IP 주소를 입력합니다.
  8. Worker Count에는 스택에서 사용할 초기 인스턴스 숫자를 입력합니다. 그리고 Next를 누릅니다.

    • (선택 사항) Tags에는 여러분이 생성하는 자원에 대한 이름과 명칭을 KeyValue에 넣으시면 좋습니다. Permissions에는 CloudFormation이 사용할 IAM 역할을 적당하게 선택하신 후 Next를 선택합니다.
    • Capabilities에는 CloudFormation이 생성하고자 하는 IAM 역할을 선택합니다. 스택에 맞는 IAM 역할을 선택하셔야 합니다.
    • 마지막으로 Create를 누릅니다.
    • 스택에 대한 상태를 보시려면, Events을 보시면 됩니다. 만약 구성이 실패하면, (예를 들어 워커 숫자 제한 등) 문제 해결을 할 수 있습니다. 좀 더 자세한 사항은 AWS CloudFormation 문제 해결이나 한국어 기술 지원 포럼을 이용하세요.

마스터 인스턴스 접속하기
SSH 에이전트를 통해 사설망 내 VPC 내부 인스턴스에 안전하게 접속하기 위해서는 Securely Connect to Linux Instances Running in a Private Amazon VPC. 문서를 참고하시기 바랍니다.

  1. 먼저 마스터 인스턴스의 공개 DNS/IP를 찾습니다. 생성한 CloudFormation 스택의 output 탭을 보시면 마스터 인스턴스 정보가 있습니다. 자동 스케일링 그룹 아이디는 MasterAutoScalingGroup입니다.

    1. Amazon EC2 콘솔을 엽니다.
    2. 왼쪽 네비게이션 패널에서 Auto Scaling를 클릭하고, Auto Scaling Groups을 선택합니다.
    3. Auto Scaling 페이지에서 그룹 ID를 찾아 선택합니다.
    4. Instances 탭에서 마스터 인스턴스 ID를 선택합니다.
    5. 마스터 인스턴스의 공개 DNS/IP를 찾아 접속합니다.
  2. SSH 에이전트 포워딩을 시작:  사설망 내에 모든 인스턴스와 통신을 할 수 있습니다.  단계 1의 DNS/IP 주소를 통해 아래 Bash의 SSH 설정을 변경합니다.
    Bash
    
    Host IP/DNS-from-above  
    ForwardAgent yes
    
    
  3. MXNet 분산학습 시작하기: 아래 예제는 병렬 데이터 처리를 위해 MNIST 실행 방법입니다. 환경 변수 중 DEEPLEARNING_*를 사용합니다.
    Bash
    
    #terminate all running Python processes across workers 
    while read -u 10 host; do ssh $host "pkill -f python" ; done 10<$DEEPLEARNING_WORKERS_PATH  
    
    #navigate to the mnist image-classification example directory 
    cd ~/src/mxnet/example/image-classification  
    
    #run the MNIST distributed training example 
    ../../tools/launch.py -n $DEEPLEARNING_WORKERS_COUNT -H $DEEPLEARNING_WORKERS_PATH python train_mnist.py --gpus $(seq -s , 0 1 $(($DEEPLEARNING_WORKER_GPU_COUNT - 1))) --network lenet --kv-store dist_sync
    
    

좀 더 자세한 학습 훈련 방법을 알아보시려면 Run MXNet on Multiple Devices를 참고하시기 바랍니다.

자주 묻는 질문
1. 마스터 인스턴스의 SSH 접속 IP 주소를 어떻게 바꾸나요? CloudFormation 스택 Output에는 마스터 인스턴스에 SSH 접근하는 IP 주소를 관리하는 보안 그룹이 있습니다. 이 보안 그룹에서 인바운드 IP 주소 변경이 가능합니다.
2. 인스턴스가 바뀔때 IP 주소의 설정이 변경되나요? 아니요. 수동으로 바꾸어야 합니다.
3. 마스터 인스턴스도 학습에 사용되나요? 네. 딥러닝 학습에는 GPU가 사용되므로 학습 및 검증 작업에 함께 사용됩니다.
4. 왜 자동 스케일링 기능을 사용하나요? 자동 스케일링 그룹은 기존 인스턴스에 문제가 생기더라도 원하는 인스턴스 갯수를 항상 맞추는 기능을 제공합니다. 여기에는 두 개의 그룹이 필요한데, 하나는 마스터에 대한 것 그리고 워커에 대한 것입니다. 마스터는 공개 접근 경로를 가지고 있고 학습 작업에 대한 제어가 가능합니다.
5. 새 워커 인스턴스가 추가되거나 기존 인스턴스가 교체되면 마스터 인스턴스 IP주소를 업데이트하나요? 아니오. 이 템플릿은 대체 IP주소를 자동으로 업데이트할 수 있는 기능이 없습니다.

이 글은 Distributed Deep Learning Made Easy의 한국어 번역입니다.

Amazon Linux 콘테이너 이미지 신규 제공

Amazon Linux AMI는 EC2에서 실행 중인 응용 프로그램을 위한 안전하고 안정적인 고성능 실행 환경을 제공합니다. 원격 접근을 제한하며(SSH키로만 접근 가능), AMI는 뛰어난 보안을 자랑합니다.

많은 고객이 Amazon Linux 이미지를 사내에서 특히 개발 작업과 테스트 작업에서 사용하고 싶다는 요청을 하였습니다.

클라우드 뿐만 아니라 온-프레미스에서 사용에 적합한 Amazon Linux Container Image를 오늘 출시합니다. 본 이미지는 EC2 Container Registry에서 구할 수 있습니다 (자세한 것은 Pulling an Image를 참조하십시오). AMI와 같은 소스 코드 같은 패키지로 구성되어 있기 때문에 콘테이너 도입을 쉽게 실행할 수 있습니다. 그대로 사용하거나 자신의 이미지를 만들기 위한 기초로 사용할 수 있습니다.

그것을 시도 때문에 나는 방금 EC2 인스턴스를 시작하고 Docker를 설치하고 새로운 이미지를 가져 와서 실행 해 보았습니다. 그 후, cowsaylolcat(종속성)를 설치하고 위의 이미지를 만들었습니다.

자세한 내용은 Amazon Linux Container Image를 읽어 보시기 바랍니다.

본 이미지는 Amazon EC2 Container Service에서 사용할 수 있습니다. 자세한 내용은 Amazon ECR 이미지를 Using Amazon ECR Images with Amazon ECS를 참조하십시오.

Jeff;

이 글은 New Amazon Linux Container Image for Cloud and On-Premises Workloads의 한국어 번역입니다.

Amazon EC2에서 윈도 서버 2016 실행하기

Amazon Elastic Compute Cloud (EC2)에서 Windows Server 2016 운영체제를 사용할 수 있습니다. 본 운영 체제는 새로운 신규 기능을 많이 포함하고 있으며, Docker 지원Windows 콘테이너를 제공합니다. 오늘 부터 AWS 모든 리전에서 사용 가능합니다.

  • Windows Server 2016 Datacenter 데스크톱 버전– 윈도 서버의 주요 버전으로서 기존 윈도우 앱 및 클라우드 네이티브 앱을 모두 지원하고 확장성 및 보안이 높아진 운영 체제로서 더 자시한 것은 The Ultimate Guide to Windows Server 2016를 참고하세요.(등록 필요)
  • Windows Server 2016 Nano Server – 클라우드에 최적화된 최소 사양 운영체제로서 데이터센터 버전 보다 디스크 용량 및 부팅을 위한 최소한의 자원만 사용합니다. 나머지 자원은 앱을 구동하기 위한 용도로 사용할 수 있고, 더 자세한 사항은 Moving to Nano Server를 참고하세요. 나노 서버는 데스크톱 UI를 지원하지 않으며 외부에서 PowerShell이나 WMI로 접근할 수 있습니다. 자세한 사항은 Connecting to a Windows Server 2016 Nano Server Instance 문서를 참고하세요.
  • Windows Server 2016 with Containers – Docker 및 윈도 콘테이너를 포함한 Windows Server 2016 운영 체제
  • Windows Server 2016 with SQL Server 2016 – SQL Server 2016을 이미 포함한 Windows Server 2016 운영 체제

Windows Server 2016을 EC2에 운용하기 위해 몇 가지 알아두셔야 할 점입니다.

  • 메모리 – Microsoft는 윈도 서버 운용을 위해 최소 2 GiB 메모리를 권장합니다. EC2 인스턴스 타입를 참고하셔서, 애플리케이션 실행을 염두해 둔 적당한 인스턴스 타입을 선택하시기 바랍니다.
  • 가격 – 표준 윈도 EC2 가격이 적용되며, 온디멘드 및 스팟 인스턴스 그리고 예약 인스턴스를 구매할 수 있습니다.
  • 라이선스 – (Microsoft의 저작권 규정에 따라) AWS에서 MS 라이선스 SW 사용(BYOL)이 가능합니다.
  • SSM 에이전트 – 업그레이드된 SSM 에이전트를 통해 EC2Config를 사용할 수 있고, 자세한 것은 SSM API 가이드를 참고하십시오.

콘테이너 실행해 보기
아래 화면은 Windows Server 2016 with Containers AMI를 통해 실행한 화면입니다.

PowerShell을 열어서 docker run microsoft/sample-dotnet를 실행하면, 도커 이미지를 다운로드해서 실행하게 됩니다.

2016년 연말까지 Amazon ECS에 윈도 콘테이너를 지원할 예정입니다. 더 자세한 것은 윈도 ECS 지원 페이지를 참고하세요.

정식 출시
오늘 부터 윈도 서버 2016을 Amazon EC2 인스턴스에서 실행할 수 있으며, 지금 부터 시도해 보시고 의견 있으시면 전달해 주시면 감사하겠습니다!

Jeff;

이 글은 Run Windows Server 2016 on Amazon EC2의 한국어 번역입니다.

Amazon Aurora 업데이트 – Lambda Function 호출 및 S3 데이터 읽기 지원

AWS 서비스들은 그 자체만으로도 훌륭하지만, 서로 결합함으로써 더욱 다양한 서비스를 만들 수 있습니다. 저희의 서비스 모델은 각 서비스를 선택하여 학습하여 경험을 쌓은 다음, 다른 서비스와 결합 및 확장하는 레고블럭을 조립하는 것 같은 방식입니다. 이를 통해 각 서비스를 다양하게 활용할 기회와 함께 고객의 요구에 따라 서비스 로드맵에 반영할 수 있습니다.

오늘은 이와 관련하여 MySQL 호환 관계형 데이터베이스 서비스인 Amazon Aurora에 두 가지 기능을 추가합니다.

  • Lambda 함수 호출 – Amazon Aurora 데이터베이스의 스토어드 프로시저(stored procedures)에서 AWS Lambda 함수를 호출 할 수 있습니다.
  • S3 데이터 읽기 – Amazon Simple Storage Service (S3) 버킷에 저장된 데이터를 Amazon Aurora 데이터베이스에서 읽을 수 있습니다.

위의 두 가지 기능은 다른 AWS 서비스를 연계하기 위해 Amazon Aurora에 적절한 권한을 부여해야합니다. IAM 정책(Policy) 및 IAM 역할(Role)을 만들고, 그 역할을 Amazon Aurora 데이터베이스 클러스터에 부여합니다. 자세한 단계는Authorizing Amazon Aurora to Access Other AWS Services On Your Behalf를 참조하십시오.

Lambda 함수 통합
관계형 데이터베이스 트리거(trigger)와 스토어드 프로시저를 함께 사용하여 본 기능을 수행할 수 있습니다. 트리거는 특정 테이블 작업 전후에 수행 할 수 있습니다. 예를 들어, Amazon Aurora는 MySQL과 호환성이 있기 때문에 INSERT, UPDATE, DELETE 작업에 트리거를 지원합니다. 스토어드 프로시저는 트리거에 대한 응답에서 실행 가능한 스크립트입니다.

Lambda 함수를 스토어드 프로시저를 사용하여, Aurora 데이터베이스와 다른 AWS 서비스를 묶을 수 있습니다. Amazon Simple Email Service (SES)를 이용하여 이메일을 보내거나 Amazon Simple Notification Service (SNS)를 이용해 알림을 보내고, Amazon CloudWatch에 사용자 정의 통계를 추가하거나, Amazon DynamoDB 테이블을 업데이트할 수 있습니다.

그 외에도 복잡한 ETL 작업 또는 워크 플로우, 데이터베이스 테이블에 대한 감사, 성능 모니터링 및 분석 등의 용도로도 사용할 수 있습니다.

스토어드 프로시저에서 mysql_lambda_async 프로시저를 호출 하면 됩니다. 이 프로시저는 비동기적으로 주어진 Lambda 함수를 실행하기 위해 함수 실행 완료를 기다리지 않고 처리를 종료합니다. Lambda 함수에 이용하는 AWS 서비스 및 자원에 대한 권한을 부여해야합니다.

자세한 내용은 Invoking a Lambda Function from an Amazon Aurora DB Cluster를 참조하십시오.

S3 데이터 읽기

또한, AWS의 주요서비스인 Amazon S3 버킷에 저장된 데이터를 직접 Aurora에 가져올 수 있게 되었습니다 (지금까지는 한 번 EC2 인스턴스에 다운로드 한 후 가져와야했습니다.)

Amazon Aurora 클러스터에서 접근 가능하면, AWS 어느 리전에 데이터가 배치되어 있어도 읽기 가능합니다. 형식은 텍스트 또는 XML 형식을 지원합니다.

텍스트 형식의 데이터를 가져 오기 위해서는, LOAD DATA FROM S3 명령을 이용합니다. 이 명령은 MySQL의 LOAD DATA INFILE과 거의 같은 옵션을 지원합니다. 그리고, 압축 데이터는 현재 지원하지 않습니다. 특정 행이나 필드 구분자와 문자 집합 설정이 가능하고, 지정한 행과 열 수를 무시하고 통합 할 수 있습니다.

XML 형식 데이터를 가져 오기 위해 새로운 LOAD XML from S3

Xml
<row column1="value1" column2="value2" />
...
<row column1="value1" column2="value2" />

또는 아래와 같습니다.

Xml
<row>
  <column1>value1</column1>
  <column2>value2</column2>
</row>
...

또는 아래와 같습니다.

Xml
<row>
  <field name="column1">value1</field>
  <field name="column2">value2</field>
</row>
...

더 자세한 사항은 Loading Data Into a DB Cluster From Text Files in an Amazon S3 Bucket 문서를 참고하십시오.

정식 출시
본 신규 기능은 오늘부터 이용하실 수 있습니다! 추가로 요금이 부과되지 않지만, 일반적인 Amazon Aurora, Lambda, S3 요금이 발생합니다.

Jeff;

이 글은 Amazon Aurora Update – Call Lambda Functions From Stored Procedures; Load Data From S3의 한국어 번역입니다.

X1 인스턴스 업데이트 – X1.16xlarge 추가 및 서울 리전 출시

작년 가을 저희는 새로운 X1 인스턴스 타입에 대한 계획을 발표하였고, 올해 5월에 x1.32xlarge을 신규 출시하였습니다.

본 인스턴스 타입은 메모리가 많이 소요되는 빅데이터, 캐싱 및 분석 업무를 클라우드에서 실행하면서 더 많은 메모리를 필요로 하는 IT 업무에 최적화 되어 있습니다. 특히, 많은 고객이 SAP HANA 인-메모리 데이터베이스, 대용량 Apache Spark 및 Hadoop 업무와 고성능 컴퓨팅 분야에 활용하고 있습니다.

오늘 두 가지 새로운 소식을 업데이트하게 되었습니다.

  • 신규 인스턴스 타입 –  오늘 출시하는 x1.16xlarge 인스턴스는 조금 작은 1TB 메모리 사이즈를 지원
  • 서울 리전 출시 – X1 인스턴스는 서울 리전을 포함해서 3개의 추가 리전에서 사용 가능

x1.16xlarge 신규 인스턴스 타입

  • 프로세서: 2 x Intel™ Xeon E7 8880 v3 (Haswell) running at 2.3 GHz – 32 cores / 64 vCPUs.
  • 메모리: 976 GiB with Single Device Data Correction (SDDC+1).
  • 인스턴스 스토리지: 1,920 GB SSD.
  • 네트워크 대역폭: 10 Gbps.
  • 전용 EBS 대역폭: 5 Gbps (추가 비용 없이 EBS 최적화)

x1.32xlarge처럼 Turbo Boost 2.0 (up to 3.1 GHz), AVX 2.0, AES-NI, 및 TSX-NI를 지원하며 온디멘드, 스팟 인스턴스, 및 전용 호스팅을 지원 합니다. 예약 인스턴스  및 전용 호스팅 예약.도가능합니다.

서울 리전 포함 신규 리전 출시
두 가지 X1 인스턴스 타입 모두 Asia Pacific (Seoul), Asia Pacific (Mumbai), AWS GovCloud (US)에서 새로 출시하였으며, 총 10개의 리전에서 현재 사용 가능합니다.

Jeff;

이 글은 X1 Instance Update – X1.16xlarge + More Regions의 한국어 번역입니다.