Category: Deep Learning


AWS 기반 딥러닝 AMI 및 AWS CloudFormation 템플릿 업데이트

AWS CloudFormation은 아마존 웹 서비스 자원을 손쉽게 구성할 수 있는 도구로서 분산 딥러능 클러스터를 설정 및 운영하는 데 도움이 됩니다. Deep Learning 템플릿은 분산 딥러닝 학습을 수행하는 데 필요한 EC2 인스턴스 및 기타 AWS 리소스를 통해 클러스터를 시작할 수 있습니다.

최근 업데이트 된 Amazon Liunx Deep Learning AMIUbuntu Deep Learnin AMI (Apache MXNet, TensorFlow, Caffe, Theano, Torch 및 CNTK 프레임 워크 제공)를 사용할 수 있습니다.

deep-learning-ami-for-ubnutu

AWS CloudFormation Deep Learning 템플릿은 인스턴스가 프로비저닝에 실패한 경우 (대개 서버 제한에 걸린 경우에도) 가능한 최대 작업 가능 인스턴스 수를 기반으로 클러스터를 동적으로 조정하는 자동화 기능을 포함하여 다양한 추가 기능을 업데이트하였습니다.

또한, 이 템플릿을 사용하면 GPU 및 CPU 인스턴스 타입 중에서 선택할 수 있을 뿐 아니라 클러스터에 대해 Ubuntu 또는 Amazon Linux 환경에서 실행할 수있는 지원을 추가 할 수 있습니다. 또한, 새로운 기능을 제공하거나 기존 Amazon EFS 파일 시스템을 클러스터에 추가하여 코드/데이터/로그 및 결과를 쉽게 공유 할 수 있습니다.

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

참고 자료

 

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

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 EC2 신규 GPU 인스턴스 타입 – P2 (16 GPU 지원)

컴퓨팅 하드웨어가 계속 발전하는 동안 CPU 연산 속도는 기하 급수적으로 증가하였습니다. 최근에 GPU (Graphics Processing Unit) 프로세스는 CPU 연산을 병렬적으로 처리하게 해줌으로서 기존 CPU의 병목을 줄여주는 핵심 하드웨어 장치가 되었습니다. 이를 통해 더 빠른 프로세스를 만들기 보다는 더 많은 병렬 컴퓨팅을 처리하게 되었습니다.

저희는 최근 많이 활용 요구가 높은 기계 학습 및 딥러닝(Deep Learning) 및 유체 역학 컴퓨팅 연산, 지진파 분석, 분자 모델링, 유전학 및 금융 분석 등 대량 컴퓨팅 연산에 도움이 될 P2 인스턴스 타입을 오늘 출시하게 되었습니다.

신규 P2 인스턴스 타입
신규 인스턴스 타입은 8 NVIDIA Tesla K80 Accelerators (각각 2개의 NVIDIA GK210 GPU)을 지원합니다. 각 GPU는 12GB 메모리를 가지고 있으며 (초당 240GB 메모리 대역폭 제공) 2,496개의 병렬 코어를 지원합니다. 또한, 더블 비트 오류를 검출해서 싱글 비트 오류를 고치는 ECC 메모리 보호 기능을 지원합니다. ECC 메모리 보호 가능 및 이중 플로팅 포인트 기능을 통해 위의 다양한 요구 사항을 수용할 수 있습니다.

아래는 오늘 출시한 인스턴스 타입 스펙입니다.

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

모든 인스턴트 타입은 AWS에 제공하는 Intel Broadwell 2.7 GHz프로세스로서, p2.16xlarge는 C-states 및 P-states를 지원하며, 하나 또는 2개 코어를 제공할 때는 3.0 GHz까지 올릴 수 있습니다.

본 인스턴스의 GPU는 CUDA 7.5 이상, OpenCL 1.2 및 GPU Compute API를 지원합니다.  p2.8xlargep2.16xlarge 의 GPU는 PCI 파브릭으로 접속하고, 낮은 지연 속도와 피어간 GPU 및 GPU 전송을 지원합니다.

모든 인스턴스 타입은 Elastic Network Adapter (고성능 Amazon EC2 네트워크 어댑터)을 위의 표에 따라 지원하고, 최대 20 Gbps 네트워크 대역폭도 지원합니다.

P2  인스턴스는 VPC만 지원하며,  64-bit, HVM-스타일, EBS-지원 AMI에서 구동됩니다. 오늘 부터 US East (Northern Virginia), US West (Oregon)Europe (Ireland) 리전에서 온디멘드, 스팟 인스턴스, 예약 인스턴스 및 전용 호스팅(Dedicated Host)으로 사용할 수 있습니다.

아래는 어떻게 NVIDIA 드라이버 및  CUDA 툴킷을 설치하는 지 과정입니다. 먼저, 인스턴스를 띄운 후에 EBS 볼륨을 마운트 하고, 여기에 CUDA 및 관련 샘플을 설치합니다. (10GiB 이상 저장 공간 필요)

Bash
$ cd /ebs
$ sudo yum update -y
$ sudo yum groupinstall -y "Development tools"
$ sudo yum install -y kernel-devel-`uname -r`
$ wget http://us.download.nvidia.com/XFree86/Linux-x86_64/352.99/NVIDIA-Linux-x86_64-352.99.run
$ wget http://developer.download.nvidia.com/compute/cuda/7.5/Prod/local_installers/cuda_7.5.18_linux.run
$ chmod +x NVIDIA-Linux-x86_64-352.99.run
$ sudo ./NVIDIA-Linux-x86_64-352.99.run
$ chmod +x cuda_7.5.18_linux.run
$ sudo ./cuda_7.5.18_linux.run   # Don't install driver, just install CUDA and sample
$ sudo nvidia-smi -pm 1
$ sudo nvidia-smi -acp 0
$ sudo nvidia-smi --auto-boost-permission=0
$ sudo nvidia-smi -ac 2505,875

여기서 NVIDIA-Linux-x86_64-352.99.runcuda_7.5.18_linux.run 는 대화형 설치 프로그램으로서, 라이선스 동의 및 몇 가지 옵션과 경로를 설정합니다. 아래는 cuda_7.5.18_linux.run:를 통해 CUDA를 설치하는 과정입니다.

P2 및 OpenCL 실제 해보기
p2.8xlarge 인스턴스에서 Gist 를 받아서 컴파일을 할 수 있습니다.

Bash
[ec2-user@ip-10-0-0-242 ~]$ gcc test.c -I /usr/local/cuda/include/ -L /usr/local/cuda-7.5/lib64/ -lOpenCL -o test

테스트 실행 결과는 다음과 같습니다.

Bash
[ec2-user@ip-10-0-0-242 ~]$ ./test
1. Device: Tesla K80
 1.1 Hardware version: OpenCL 1.2 CUDA
 1.2 Software version: 352.99
 1.3 OpenCL C version: OpenCL C 1.2
 1.4 Parallel compute units: 13
2. Device: Tesla K80
 2.1 Hardware version: OpenCL 1.2 CUDA
 2.2 Software version: 352.99
 2.3 OpenCL C version: OpenCL C 1.2
 2.4 Parallel compute units: 13
3. Device: Tesla K80
 3.1 Hardware version: OpenCL 1.2 CUDA
 3.2 Software version: 352.99
 3.3 OpenCL C version: OpenCL C 1.2
 3.4 Parallel compute units: 13
4. Device: Tesla K80
 4.1 Hardware version: OpenCL 1.2 CUDA
 4.2 Software version: 352.99
 4.3 OpenCL C version: OpenCL C 1.2
 4.4 Parallel compute units: 13
5. Device: Tesla K80
 5.1 Hardware version: OpenCL 1.2 CUDA
 5.2 Software version: 352.99
 5.3 OpenCL C version: OpenCL C 1.2
 5.4 Parallel compute units: 13
6. Device: Tesla K80
 6.1 Hardware version: OpenCL 1.2 CUDA
 6.2 Software version: 352.99
 6.3 OpenCL C version: OpenCL C 1.2
 6.4 Parallel compute units: 13
7. Device: Tesla K80
 7.1 Hardware version: OpenCL 1.2 CUDA
 7.2 Software version: 352.99
 7.3 OpenCL C version: OpenCL C 1.2
 7.4 Parallel compute units: 13
8. Device: Tesla K80
 8.1 Hardware version: OpenCL 1.2 CUDA
 8.2 Software version: 352.99
 8.3 OpenCL C version: OpenCL C 1.2
 8.4 Parallel compute units: 13

보시다시피 정말 많은 용량의 컴퓨팅 리소스를 얻을 수 있습니다.

신규 Deep Learning AMI 제공
앞서 말씀 드린 대로, P2 인스턴스 타입은 기계 학습 및 딥러닝, 분자 모델링, 게놈 분석, 금융 데이터 분석 등의 요구 사항에 맞도록 설계되었습니다. 이를 위해 Deep Learning AMI 도 함께 제공합니다. 딥 러닝을 통해 더 많은 예측을 계산할 수 있습니다.

신규 AMI는 인기 높은 MNIST 데이터 베이스에서 추천하는 MXNet –  Caffe –  Theano –  TensorFlow –  Torch 등의 라이브러리를 기본적으로 설치 되어있습니다.

좀 더 자세한 사항은  ~ec2-user/src 내 README 파일을 참고하시기 바랍니다.

NVIDIA 지원 AMI
NVIDIA가 제공하는 아래 AMI도 참고하실 수 있습니다.

Jeff;

이 글은 New P2 Instance Type for Amazon EC2 – Up to 16 GPUs의 한국어 편집 및 요약본입니다.