Category: Amazon EC2*


EC2 Systems Manager – EC2 및 온-프레미스 서버 함께 관리하기

지난 해 EC2 Run Command 를 소개하고 EC2 인스턴스와 하이브리드 및 교차 클라우드 환경에서 원격 인스턴스 관리를 대규모로 수행하는 방법을 보여드렸습니다. 이 과정에서 리눅스 인스턴스에 대한 지원을 추가해 EC2 Run Command를 광범위하게 적용할 수 있고 매우 유용한 관리 도구로 만들었습니다.

가족이 되신 것을 환영합니다
WernerAWS re:Invent에서 EC2 System Manager를 발표했고 드디어 이것에 대해 말할 수 있게 되었습니다!

EC2 Run Command의 향상된 버전과, 여덟 개의 유용한 기능이 포함된 새로운 관리 서비스입니다. EC2 Run Command 처럼 윈도우, 리눅스를 실행하는 서비스와 인스턴스로 이루어진 교차 클라우드 환경 및 하이브리드 환경을 지원합니다. AWS Management Console을 열고 관리할 인스턴스를 선택한 다음 수행 하고싶은 작업을 정의하기만 하면 됩니다(API와 CLI에서도 접근할 수 있습니다).

다음은 개선된 기능과 새로운 기능에 대한 개요입니다:

  • Run Command – 이제 명령 실행 속도를 제어하고 에러 비율이 높아졌을 때 명령 실행을 중지할 수 있습니다.
  • State Manager – 규칙적인 간격으로 적용되는 정책을 통해 정의된 시스템 설정을 유지합니다.
  • Parameter Store – 라이센스 키, 비밀번호, 사용자 목록 및 다른 값들을 위한 (암호화 가능한)중앙 집중 저장소를 제공합니다.
  • Maintenance Window – 업데이트 설치와 기타 시스템 유지 관리를 위한 기간을 지정하세요.
  • Software Inventory – 각 인스턴스에서 자세한 소프트웨어 사항들과 사용자가 정의한 추가사항까지 포함한 설정 목록을 수집합니다.
  • AWS Config Integration – 새로운 Software Inventory 기능과 함께 AWS Config는 software inventory의 변화를 인스턴스에 기록할 수 있습니다.
  • Patch Management – 인스턴스의 패치 과정을 단순화하고 자동화합니다.
  • Automation – AMI 구축과 기타 반복적인 AMI 관련 작업을 단순화합니다.

각각을 살펴봅시다..

Run Command 개선 사항

이제 동시에 실행되는 명령의 숫자를 제어할 수 있습니다. 명령이 내부 업데이트나 서버 패치와 같이 제한적인 공유 리소스들을 참조하고, 너무 많은 리퀘스트로 인한 오버로딩을 피하고 싶은 상황에서 유용합니다.

이 기능은 현재 CLI와 API로 접근할 수 있습니다. 다음은 CLI에서 동시실행을 2로 제한하는 예제입니다:

Bash
$ aws ssm send-command \
  --instance-ids "i-023c301591e6651ea" "i-03cf0fc05ec82a30b" "i-09e4ed09e540caca0" "i-0f6d1fe27dc064099" \
  --document-name "AWS-RunShellScript" \
  --comment "Run a shell script or specify the commands to run." \
  --parameters commands="date" \
  --timeout-seconds 600 --output-s3-bucket-name "jbarr-data" \
  --region us-east-1 --max-concurrency 2

다음은 –instance-ids 대신 –targets를 지정하여 태그와 태그 값에 의해 작동하는 흥미로운 변형 예제입니다.

Bash
$ aws ssm send-command \
  --targets "Key=tag:Mode,Values=Production" ... 

최대 에러 수 또는 에러 비율을 지정하는 옵션으로 에러를 반환하면 명령 실행을 멈출 수 있습니다:

Bash
$ aws ssm send-command --max-errors 5 ... 
$ aws ssm send-command --max-errors 5% ...

State Manager

State Manager는 문서를 따라 인스턴스를 정의된 상태로 유지하도록 도와줍니다. 문서를 만들어 타겟 인스턴스 집합과 연결한 다음, 문서를 실행해야 하는 시간과 빈도를 지정하기 위한 연관성을 생성합니다. 다음은 요일 파일의 메세지를 업데이트하는 문서입니다.

그리고 연관성은 이와 같습니다(태그를 사용하기 때문에 현재 인스턴스 및 같은 방식으로 태그된 나중에 만들어질 다른 인스턴스에도 적용됩니다):

태그를 사용해서 타겟을 지정하면 미래에도 사용할 수 있으며 동적 오토 스케일 환경에서도 기대했던 대로 작동하게 합니다. 모든 연관성을 볼 수 있으며 새로운 연관성을 선택하고 Apply Association Now를 클릭해 실행할 수 있습니다.

Parameter Store

이 기능은 라이센스 키, 비밀번호 및 인스턴스에 배포하려는 기타 데이터의 저장 및 관리를 단순화합니다. 각 매개변수는 형(문자열, 문자열 리스트, 보안 문자열)이 지정되어 있고 암호화된 형태로 저장할 수 있습니다. 다음은 매개변수를 생성하는 방법입니다:

다음은 커맨드에서 매개변수를 참조하는 방법입니다:

Maintenance Window

이 기능은 업데이트 설치와 기타 시스템 유지관리를 위한 시간을 지정할 수 있게 합니다. 다음은 매 주 토요일에 4시간동안 열리는 유지 관리 기간을 생성하는 방법입니다:

창을 생성한 후에는 인스턴스 Id 또는 태그로 창에 인스턴스 집합을 할당해야 합니다:

그리고 나서 유지 관리 기간 동안 수행할 작업을 등록해야 합니다. 예를 들어 리눅스 쉘 스크립트를 실행할 수 있습니다:

Software Inventory

이 기능은 소프트웨어와 인스턴스 집합의 설정에 대한 정보를 수집합니다. 이 정보에 접근하기 위해 Managed Instance와 Setup Inventory를 클릭합니다:

인벤토리를 설정하면 AWS 소유 문서와 인스턴스 집합 간에 연관성이 생깁니다. 타겟을 선택하고 일정을 설정하고 목록화 할 항목의 유형을 확인한 다음 Setup Inventory를 클릭하기만 하세요:

인벤토리가 실행된 후에는 인스턴스를 선택하고 인벤토리를 클릭해서 결과를 관찰할 수 있습니다:

더 분석하기 위해서 결과를 필터링할 수 있습니다. 예를 들어 개발 도구와 라이브러리만 보기 위해 AWS 요소 목록을 필터링 할 수 있습니다:

모든 관리 인스턴스에서 인벤토리 기반 쿼리를 실행할 수 있습니다. 다음은 4.6 이전 버전의 .NET을 실행하고 있는 Windows Server 2012 R2 인스턴스를 찾는 방법입니다:

AWS Config Integration

인벤토리의 결과는 AWS Config까지 연결되어 어플리케이션, AWS 요소, 인스턴스 정보, 네트워크 설정, Windows 업데이트의 변화를 지속적으로 추적합니다. 인스턴스 Config 타임라인 위에 있는 Managed instance information을 클릭해 이 정보에 접근할 수 있습니다:

하단의 세줄은 인벤토리 정보로 이어집니다. 다음은 네트워크 설정입니다:

Patch Management

이 기능은 Windows 인스턴스에 있는 운영체제를 최신으로 유지하게 도와줍니다. 지정한 유지관리 기간 동안 패치를 적용하고 기준을 준수하여 수행됩니다. 기준은 분류와 심각도에 따라 패치를 자동으로 승인하는 규칙과 승인 또는 거부할 명시적인 패치 목록을 지정합니다.

다음은 저의 기준입니다:

각 기준은 하나 또는 다수의 패치 그룹에 적용될 수 있습니다. 패치그룹에 들어있는 인스턴스는 Patch Group 태그가 있습니다. 저는 그룹에 Win2016라는 이름을 붙였습니다:

그리고 값을 기준과 연결했습니다:

다음 단계에서는 AWS-ApplyPatchBaseline 문서를 사용해 유지 관리 기간동안 패치의 적용을 조정합니다:

Managed Instances 목록으로 돌아가서 한 쌍의 필터를 사용해 패치가 필요한 인스턴스를 찾을 수 있습니다:

Automation

마지막이지만 앞의 기능 못지않게 중요한 Automation 기능은 일반적인 AMI 구축과 업데이트 작업을 간소화합니다. 예를 들어 AWS-UpdateLinuxAmi 문서를 사용해 매 달마다 새 Amazon Linux AMI를 만들 수 있습니다:

다음은 이 자동화가 실행되었을 때 일어나는 일을 보여줍니다:

정식 출시
위에서 설명한 EC2 Systems Manager의 모든 기능을 지금 무료로 사용할 수 있습니다. 당신이 관리하는 리소스에 대해서만 비용을 지불합니다.

– Jeff;

이 글은 EC2 Systems Manager – Configure & Manage EC2 and On-Premises Systems의 한국어 번역으로 AWSKRUG 블로그 번역모임의 이상록님께서 작성해 주셨습니다. 만약 AWS 영문 공식 블로그를 한국어로 소개하시고 싶으신 분은 언제든지 번역 공헌을 해 주실 수 있습니다.

AWS 2016년 12월 31일 윤초 대응 방법

2016년말 새해를 맞이하기 전 1초를 추가하는 윤초가 시행됨을 잊지 마시기 바랍니다.

이번 윤초 (통산 27 번째)는 UTC(세계 표준시) 2016년 12월 31일 23:59:60으로 삽입됩니다 (한국 표준시로 2017년 1월 1일 8:59:60). 이는 지구 시간(협정 세계시)과 태양시(천문시)과의 차이를 줄이기 위해 진행되며, UTC 기준 올해 마지막 1분은 61가 됩니다.

이전에 윤초를 진행할 때 드린 정보(AWS에서 윤초 대응)은 계속 유효하며, 이번에도 마찬가지로 처리되지만 약간의 차이가 있습니다 :

AWS 조정 시간 (AWS Adjusted Time) – 윤초 삽입 전후의 24시간 동안 윤초의 1초를 조금씩 분산합니다(UTC에서 12월 31일 11:59:59부터 2017년 1월 1일 12:00:00까지). AWS 조정 시간과 세계 시간은 이 기간이 끝난 후 동기화합니다.

Microsoft Windows – Amazon에서 제공 된 Microsoft Windows AMI를 이용하고 있는 인스턴스는 AWS 조정 시간에 따릅니다.

Amazon RDS – 대부분 Amazon RDS 인스턴스(UTC로 설정되어있는 경우) “23:59:59″을 두 번 기록합니다. 그러나 Oracle 11.2.0.2, 11.2.0.3, 12.1.0.1는 AWS 조정 시간에 따릅니다. Oracle 11.2.0.4 및 12.1.0.2에 대한 자세한 정보가 필요한 경우 AWS 지원에 문의하십시오.

자세한 정보
윤초 삽입에 대한 질문이있는 경우AWS SupportEC2 Forum에 문의해 주시기 바랍니다.

Jeff;

이 글은 Look Before You Leap – December 31, 2016 Leap Second on AWS의 한국어 번역입니다.

Amazon EFS 업데이트 – Direct Connect를 통한 온-프레미스와 VPC 연동 기능

작년에 Amazon Elastic File System에 대한 출시 예고ㅇ후에 올해 초 3개 리전에 우선 정식 출시가 되었습니다. 정식 출시 후 많은 고객들이 클라우드 내 공유 파일 스토리지를 사용해 오고 있습니다

오늘 EFS를 AWS Direct Connect를 통해 온-프레미스 환경에서도 좀더 편리하게 사용할 수 있는 기능을 출시하게 되었습니다. 이 기능 역시 많은 고객들이 그동안 데이터 이전을 하는 동안 느끼고 요청해주셨던 기능입니다. 기존 온-프레미스 환경에서 데이터 이전을 위해 기존 물리 서버에서 EFS 파일 시스템을 마운트하고 데이터를 복사하면 그대로 클라우드로 이동합니다. EFS로 복사를 하고 나면, Amazon Elastic Compute Cloud (EC2) 인스턴스에서 다시 저장할 수도 있고, Amazon QuickSight를 활용할 수도 있습니다.

즉, 온-프레미스 서버와 EC2 인스턴스가 같은 스토리지 공간을 공유하게 되고 강력한 호환성 및 파일 잠금 등 모든 파일 관련 기능을 제공합니다. EFS가 제공하는 내구성 및 멀티 AZ 고가용성 역시 같이 지원합니다.

이 기능을 지금 사용 하시려면 먼저 Direct Connect 온-프레미스 데이터 센터와 Amazon Virtual Private Cloud를 서로 연결합니다. 그런 다음 Direct Connect 연결 지점에 서로 사용 가능한 서브넷을 만들어 마운트 지점을 공유하면 됩니다.

또한, 사내 구축 서버의 포트 2049 (NFS)로 인바운드 TCP 및 UDP 트래픽을 허용하려면, 마운트 대상의 보안 그룹에 규칙을 추가해야 합니다.

파일 시스템을 만든 후에는 IP 주소로 마운트 대상을 참조하고, 사내 구축 환경에서 NFS 마운트하고 파일 복사를 시작할 수 있습니다. IP 주소는 AWS 관리 콘솔 내부에서 사용할 수 있습니다.

AWS 관리 콘솔에서 단계별 가이드를 제공하고 있습니다. 자세한 사항은 On-premises mount instructions를 클릭하세요.

다음과 같이 따라가면 됩니다.

본 기능은 우선 US East (Northern Virginia), US West (Oregon), EU (Ireland), US East (Ohio) 리전에서 제공되며, 각 AWS 자원 사용료 이외에 추가 비용은 없습니다.

Jeff;

이 글은 Amazon EFS Update – On-Premises Access via Direct Connect & VPC의 한국어 번역입니다.

Amazon EC2 인스턴스 및 VPC IPv6 지원 시작

모바일 앱, 커넥티드 디바이스 및 IoT 분야에서 인터넷의 지속적인 성장으로 업계 전반에 IPv6 전환이 촉발되었습니다. 2010 년에서 부터 미국 정부 기관은 공개 서버 및 서비스를 가능한 빨리 IPv6로 옮기고 있습니다. 128 비트의 주소 공간을 갖춘 IPv6는 성장 여지가 충분하며 새로운 애플리케이션 및 연결 확장성에 큰 도움이 됩니다.

Amazon EC2 및 VPC IPv6 지원
올해 초 Amazon S3, IPv6 주소 지원 시작을 시작으로 Amazon CloudFront, Route53, WAF 및 S3 Transfer Acceleration의 IPv6 지원을 진행하였습니다. 오늘 그 다음 단계로 Virtual Private Cloud (VPC)와 VPC내 EC2 인스턴스에 대한 IPv6 지원을 시자하며, 우선 US East (Ohio) 리전부터 시작합니다.

IPv6 지원은 신규 혹은 기존 VPC에서도 가능하며 VPC-VPC간에도 콘솔 (혹은 API 및 CLI)를 통해 선택할 수 있습니다.

각 VPC은 개별적 /56 주소 영역을 Amazon GUA (Global Unicast Address)에서 얻으며, 각 VPC내 서브넷에는 /64를 할당할 수 있습니다.

Amazon S3에서 처럼 각 인스턴스에 해당 DNS 항목과 함께 IPv4 주소와 IPv6 주소를 할당하는 이중 스택 모델을 사용합니다. 두 버전의 프로토콜을 모두 지원하므로 리소스 및 응용 프로그램에 접근에 대한 호환성과 유연성이 보장됩니다.

VPC 내의 보안 그룹, 라우팅 테이블, 네트워크 ACL, VPC 피어링, 인터넷 게이트웨이, Direct Connect, VPC 흐름 로그(Flow Logs) 및 DNS 질의 등은 모두 현재와 같은 방식으로 작동합니다. 애플리케이션 로드밸런서(ALB)의 이중 스택 모델에 은 예정되어 있으며, 장기적인 로드맵을 가능한 한 빨리 알려 드리겠습니다.

AWS Direct Connect IPv6 지원
AWS Direct Connect Console내 가상 인터페이스(VIFs)에서 IPv4 및 IPv6 주소를 선택할 수 있습니다.

각 VIF는 BGP 피어링 세션을 각각 IPv4와 IPv6을 지원 합니다.

신규 Egress-Only 인터넷 게이트웨이 IPv6 지원

IPv6에 주요 특징 중 하나는 모든 주소가 인터넷 라우팅이 가능하여, 인터넷에 연결할 수 있다는 것입니다. IPv4 전용 VPC에서 공용 IP 주소를 EC2 인스턴스에 할당하면 1:1 NAT(Network Address Translation)가 인스턴스와 사설 주소로 설정됩니다. IPv6을 사용하는 VPC에서 각 인스턴스의 주소는 공개되어 있습니다. 직접 연결을 통해 많은 네트워킹 문제를 해결하지만, 사설 서브넷을 만드는 또 다른 메커니즘이 필요합니다.

오늘 IPv6 지원을 통해 VPC용 비공개 서브넷을 구현하는 데 사용할 수 있는 새로운 Egress-Only Internet Gateway (EGW)를 소개합니다. EGW는 NAT 인스턴스의 집합보다 설치 및 사용하기가 쉽고 무료로 사용할 수 있습니다. 수신 트래픽을 차단하면서 아웃 바운드 트래픽을 허용 할 수 있습니다 (인터넷 게이트웨이가 보안 그룹과 연결). 일반적인 방식으로 EGW를 생성하고, 이를 사용하여 인바운드 IPv6 트래픽을 제한할 수 있습니다. IPv4 트래픽에 NAT 인스턴스 또는 NAT 게이트웨이를 계속 사용할 수 있습니다.

정식 출시
EC2 IPv6 지원은 US East (Ohio) 리전에서 오늘 부터 추가 비용 없이 사용 가능합니다. M3, G2를 제외한 모든 현 세대 EC2 인스턴스 타입에서 사용 가능합니다.

다른 리전의 IPv6 지원 확대는 계획 중에 있으며, 준비되는 대로 계속 알려드리겠습니다.

Jeff;

이 글은 AWS re:Invent 2016 신규 출시 소식으로 New – IPv6 Support for EC2 Instances in Virtual Private Clouds의 한국어 번역입니다. re:Invent 출시 소식에 대한 자세한 정보는 12월 온라인 세미나를 참고하시기 바랍니다.

개발자 미리보기 – F1, 프로그래밍 기반 하드웨어를 위한 EC2 인스턴스

일반적인 도구와 특별한 목적의 도구를 선택해야 하실 때가 있으셨나요? 일반 도구는 많은 문제들을 범용적으로 풀기에 좋지만 항상 최선의 선택은 아닙니다. 반대로 특정 목적의 도구는 하나의 업무에는 좋지만, 이런 특정 작업은 자주 있으면 안되겠지요.

컴퓨팅 엔지니어들은 다양한 IT 워크로드에 대해 높은 성등을 달성하기 위해 아키텍처를 설계 및 가이드 마련 시 항상 이러한 선택의 문제에 봉착하게 됩니다. 시간이 흐름에 따라 새로운 형태의 업무와 작업 상태가 출현하고 이는 특정 하드웨어로 처리하는게 최선일 때가 있습니다. 이러한 점은 또 다른 실행 시 균형을 요구합니다. 즉, 높은 성과를 위한 가능성에 투자하느냐 아니면 분기별 측정하는 개발 주기에 맞추느냐의 상충되는 부분을 선택해야 합니다

FPGA 소개
또 하나의 흥미로운 선택은 FPGA(field programmable gate array, 필드 프로그래머블 게이트 어레이)라고 부르는 하드웨어 기반 맞춤형 솔루션입니다. 특정 기능 목적으로 만들어 하드웨어에 장착되는 일반 칩과는 달리 FPGA는 유연합니다. 즉, FPGA는 PC 보드 소켓에 연결 한 후 현장에서 프로그램을 할 수 있습니다. FPGA는 고정된 유한 논리 게이트를 포함합니다. FPGA 프로그래밍은 단순 논리 기능 (AND, OR, XOR 등) 또는 저장 요소 (플립 플롭 및 시프트 레지스터)를 연결하는 방식입니다. 일반적으로 시리얼 (몇 개의 병렬 요소)과 고정 크기의 명령어 및 데이터 경로 (일반적으로 32 또는 64 비트)를 가진 CPU와는 달리, FPGA는 많은 연산을 병렬로 수행하도록 프로그래밍 할 수 있으며 연산 자체는 크거나 작거나 모든 영역에 적용할 수 있습니다.

계산 집약적인 문제를 처리하기 위한 맞춤 가속기를 개발하는 데 이러한 병령 모델이 이상적입니다. FPGA 프로그래밍 모델을 통해 유전학, 지진 분석, 금융 위험 분석, 대용량 데이터 검색, 암호화 알고리즘 및 애플리케이션 등에 30배 이상의 속도 향상을 제공 할 잠재력을 가지고 있습니다.

FPGA를 사용하여 여러분 만의 애플리케이션 속도 향상을 해보시길 바랍니다. 물론 몇 가지 관심을 가져야할 도전 과제가 있습니다. 첫째, FPGA는 전통적으로 사실 더 큰 목적 지향 시스템의 구성 요소였습니다. 단순히 하나를 사서 데스크톱에 연결할 수 없습니다. 대신 FPGA 기반 솔루션을 통해 하드웨어 프로토 타이핑, 하드웨어 어플라이언스 구축, 대량 생산 및 장기 판매 및 배포 주기 등을 만들 수 있습니다. 해당 적용 시간에 따라 FPGA 적용 가능성을 제한 할 수 있으며, 무어의 법칙이 CPU 기반 솔루션을 보다 비용 효율적으로 만들 시간을 제공한다는 점입니다.

여기서 좀 더 자세하 알아보겠습니다.

신규 F1 인스턴스 타입
오늘 신규 F1 인스턴스에 대한 개발자 미리보기를 시작합니다. 직접 원하는 서비스나 애플리케이션을 만들 수도 있고, 여러분이 만든 패키지를 AWS Marketplace를 통해 재판매를 할 수도 있습니다. 다양한 소프트웨어에 사용하는 비지니스 모델에 맞는 FPGA 기반 애플리케이션을 만들기 위한 기본 요구 사항을 충족함으로서 막대한 비용 및 시간 투자를 피할 수 있게 됩니다. 여러분이 직접 자신의 로직을 기반으로 클라우드 기반 도구를 만들어 시험해 봄으로서, 수일 만에 시장에 선보일 수 있게 됩니다.

F1 인스턴스는 Intel Broadwell E5 2686 v4 프로세서 (2.3 GHz 기본 속도, 전체 코어 당 2.7 GHz Turbo 모드, 하나의 코어에 3.0 GHz Turbo 모드)와 최대 976 GiB 메모리, 최대 4TB의 NVMe SSD 스토리지와 하나에서 8개까지의 FPGA를 가진 인스턴스입니다. 이를 통해 FPGA 기반 로직 구현을 충분히 해 볼 수 있는 자원을 제공 받아, 전용 하드웨어에서 운용되기에 멀티 테넌트 환경에서 분리되어 서비스 됩니다.

아래는 FPGA의 기본 스펙으로, 하나의 F1 인스턴스에서 8개까지 늘릴 수 있습니다.

  • Xilinx UltraScale+ VU9P fabricated using a 16 nm process.
  • 64 GiB ECC-protected memory on a 288-bit wide bus (four DDR4 channels).
  • Dedicated PCIe x16 interface to the CPU.
  • Approximately 2.5 million logic elements.
  • Approximately 6,800 Digital Signal Processing (DSP) engines.
  • Virtual JTAG interface for debugging.

하나 이상의 FPGA가 있는 인스턴스에서 전용 PCIe 패브릭을 사용하면 FPGA가 동일한 메모리 주소 공간을 공유하고 각 방향으로 최대 12Gbps의 PCIe 패브릭을 통해 서로 통신 할 수 있습니다. 인스턴스 내의 FPGA는 낮은 지연 속도 및 높은 대역폭 통신을 위한 400Gbps 양방향 네트워크를 공유합니다 (이러한 고급 기능을 사용하려면 자체 프로토콜을 정의해야 합니다.)

FPGA 개발 과정
개발자 미리보기에서는 FPGA 개발자를 위한 AMI를 제공합니다. 이 AMI를 메모리 또는 컴퓨팅 최적화 인스턴스에 실행하여 개발 및 실험을 해 보고 난 뒤 F1 인스턴스에서 마지막 테스트 및 디버깅을 하면 됩니다.

AMI에는 AWS 클라우드에서 사용할 수 있는 개발자 도구를 (추가 비용 없이) 포함하고 있습니다. VHDLVerilog를 통해 FPGA 코드를 작성한 후, 컴파일 및 시뮬레이션을 해볼 수 있고, Xilinx Vivado Design Suite (서드파티 시뮬레이터, 고 수준 언어별 컴파일러, 그래픽 프로그래밍 도구, FPGA 지적 재산권 정보 사용 가능) 등을 통해 검증할 수 있습니다.

아래는 간단한 8비트 카운터를 위한 Verilog 코드입니다.

module up_counter(out, enable, clk, reset);
output [7:0] out;
input enable, clk, reset;
reg [7:0] out;
always @(posedge clk)
if (reset) begin
  out <= 8'b0;
end else if (enable) begin
  out <= out + 1;
end
endmodule

C언어 문법과 유사하게 표현하는 언어들로서

이러한 언어는 C와 유사한 문법을 가지고 있는 것 같지만, 기존 코드를 가져 와서 FPGA에서 사용할 수 있도록 다시 컴파일 할 수있는 것은 아닙니다. 대신 FPGA 프로그래밍 모델에 대해 깊이 이해한 뒤 부울 대수(Boolean algebra)를 배우고, 전파 지연 및 클럭 에지와 같은 문제를 신경 써야합니다. 이를 통해 FPGA를 사용자 환경에 어떻게 사용할 수 있을까 하는 방법을 생각할 수 있습니다. 너무 간단하게 설명을 했다면, 고급 합성 도구나 FPGA를 프로그래밍을 위한 OpenCL을 사용할 수 있습니다.

인스턴스를 띄운 후, 로그인 한 뒤 패키지를 설치하고 Vivado 도구를 실행하기 위한 라이선스 매니저를 설정합니다. 데스크톱에서 RDP로 연결한 후 터미널 윈도를 열어서 Vivado를 GUI 모드로 실행합니다.

우선 샘플 프로젝트(counter.xpr)를 열어 어떻게 FPGA 프로그램을 할 수 있는 지 살펴 볼 수 있습니다.

잠시 살펴 본 후, 첫 번째 FPGA를 조합해 봅니다. (이 시점에서 흥미로운 것을 좀 더 클릭함으로서 초보자를 벗어나고 있다는 점입니다.)

여기서 부터 내가 만든 디자인 패키지를 Amazon FPGA Image (AFI)로 테스트하고, 이를 직접 애플리케이션으로 만들거나 AWS Marketplace에 올릴 수 있습니다. 이러한 일련의 개발 및 서비스 개시를 몇 주 안에 모두 할 수 있을 것이라 생각합니다.

The F1 하드웨어 개발 도구
F1 인스턴스에서 대해 공부 한 후 드는 첫번째 질문은 아마 FPGA와 CPU, 메모리 사이의 인터페이스를 어떻게 할 것인가 하는 점일 것입니다. F1 하드웨어 개발 도구 (HDK)를 통해 I/O 인터페이스와 호스트-FPGA간, FPGA-메모리간, FPGA-FPGA간 등 멀티 통신 방법을 미리 설정할 수 있는 샘플 애플리케이션을 제공합니다. 여기에는 전체 통합 스크립트, 참조 예제 및 실무 디버그 도구를 포함하고 있습니다.

The Net-Net
이제 F1 인스턴스와 클라우드 기반 개발 도구를 결합하고, FPGA 기반 애플리케이션을 판매할 수 있다는 것은 매우 독특하고 강력한 서비스 모델이 될 것 입니다. FPGA 모델의 강점과 유연성을 이제 모든 AWS 고객이 이용해 볼 수 있게 되었고, 향후 새로운 형태의 애플리케이션과 비즈니스가 출현할 것으로 전망합니다.

미리보기 출시
개발자 미리보기는 US East (Northern Virginia) 리전에서 먼저 시작합니다.(향후 2017년 초에 정식 출시될 때, 여러 리전에서 사용 가능할 것입니다.) 여러분이 이전에 FPGA 프로그래밍 경험이 있고, 지금 시작해 보시려면 미리 보기 이용 신청을 해 주시기 바랍니다.

Jeff;

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

Amazon EC2 Elastic GPUs 계획 발표

얼마 전 16 GPU까지 지원하는 P2 인스턴스 출시 때, GPU 기반 컴퓨팅에 대한 이점에 대해 설명하였습니다. 이전 글에서 이야기했듯이 GPU를 통해 엄청난 컴퓨팅 용량을 처리하면서도 시간 대비 비용을 획기적으로 줄일 수 있습니다.

오늘 GPU 기반 기능에 대해 저희가 개발하고 있는 기능을 좀 더 발표하고자 합니다. 곧 여러분의 기존 EC2 인스턴스에 그래픽 가속 기능을 추가할 수 있게 됩니다. G2 또는 P2 인스턴스를 사용할 때 GPU 숫자에 따라 인스턴스 크기를 정하게 되어 있습니다. 대부분 애플리케이션에서는 잘 적용되지만, 특정 맞춤형 애플리케이션을 위해 유연한 성능 모델을 지원할 수 있게 됩니다.

Amazon EC2 Elastic GPUs 소개
앞으로 출시될 Amazon EC2 Elastic GPUs를 통해 여러분의 애플리케이션에 적합한 EC2 인스턴스 타입을 선택할 수 있고, 인스턴스 실행시에 아래의 4가지 타입 중 GPU를 선택하여 추가할 수 있습니다.

이름 GPU 메모리
eg1.medium 1 GiB
eg1.large 2 GiB
eg1.xlarge 4 GiB
eg1.2xlarge 8 GiB

Elastic GPU는 M4, C4, X1 인스턴스에 추가할 수 있습니다. 새 인스턴스를 시작할 때 새로 만든 EBS 볼륨을 설정할 수 있습니다. 인스턴스 실행 중에 원하는 크기를 지정하고, 변경을 위해 실행 중인 인스턴스를 중지, 수정 및 시작하는 옵션을 사용하여 Elastic GPU와 비슷한 작업을 수행 할 수 있습니다.

OpenGL 시작해보기
Amazon 최적화 OpenGL 라이브러리를 통해 Elastic GPU를 자동으로 탐지하고 사용할 수 있습니다. Open GL 윈도우 지원, Amazon Linux AMI 지원을 제공 한 후, 다른 OpenGL 버전 역시 지원할 예정입니다. DirectXVulkan 같은 다른 3D API 역시 지원을 검토하고 있습니다. (관심 있는 분들 많이 알려주세요.) Amazon 최적화 OpenGL 라이브러리는 기존 Microsoft Windows AMI에 지원할 예정입니다.

OpenGL은 그래픽 렌더링에는 최고이지만, 어떻게 렌더링되었는지 알 수 있으려면 NICE Desktop 클라우드 가상화 같은 도구를 쓰는 것이 좋습니다.(올해 초 Amazon Web Services to Acquire NICE 소식 참고). 이를 통해 렌더링된 콘텐트를 HTML5 호환 웹 브라우저나 디바이스에서 스트리밍으로 볼 수 있습니다. 최신 버전의 Firefox나 Chrome 브라우저, 그리고 다양한 모바일 기기에서도 사용 가능합니다.

이러한 클라우드 기반 하드웨어와 소프트웨어를 조합하여 모든 3D 시각화 및 기술적 컴퓨팅 애플리케이션에 맞는 도구가 될 것으로 기대합니다. 이미 이를 직접 사용해 본 AWS 고객 중 아래와 같은 피드백을 공유해 주셨습니다.

Ray Milhem (VP of Enterprise Solutions & Cloud, ANSYS)

ANSYS Enterprise Cloud는 AWS에 최적화된 가상 데이터센터 시뮬레이션을 제공하고 있습니다. 혁신적인 제품 디자인 기능을 고객에게 주기 위해서는 시뮬레이션 과정에서 처음부터 끝까지 풍부한 인터랙티브 그래픽 경험을 제공해야 합니다. Elastic GPU를 통해 ANSYS는 좀 더 쉽게 합리적인 가격과 성능을 기반으로 고객의 요구를 충족시킬 수 있었습니다. Elastic GPU 기반 ANSYS 애플리케이션 인증을 통해 고객 들이 혁신적이고 효과적으로 클라우드를 활용할 수 있도록 도울 것입니다.

Bob Haubrock (VP of NX Product Management, Siemens PLM)

Elastic GPU는 클라우드 기반 Computer Aided Design (CAD)의 게임을 바꾸고 있습니다. Elastic GPU를 통해 우리 고객은 Siemens PLM NX를 Amazon EC2 위해서 최고의 그래픽 성능과 AWS가 제공하는 유연성, 보안 및 글로벌 서비스를 함께 얻을 수 있게 되었습니다. Siemens PLM은 EC2 Elastic GPU 기반 NX를 인증하여 고객이 디자인과 기술 혁신을 이룰 수 있도록 할 것입니다.

신규 인증 프로그램
Elastic GPU와 GPU 기반 기능을 최대로 활용하는 소프트웨어를 만드는 개발자와 소프트웨어 개발사를 위한 AWS Graphics Certification Program을 오늘 공개합니다. 이 프로그램을 통해 GPU 기반 인스턴스를 통해 다양한 애플리케이션을 개발 및 테스트 할 수 있도록 크레딧과 개발 도구를 제공할 예정입니다.

잠시만 기다려주세요!
본 소식에 대한 추가 정보는 앞으로 블로그를 통해 곧 알려드리도록 하겠습니다!

Jeff;

이 글은 AWS re:Invent 2016 신규 출시 소식으로 In the Works – Amazon EC2 Elastic GPUs의 한국어 번역입니다. re:Invent 출시 소식에 대한 자세한 정보는 12월 온라인 세미나를 참고하시기 바랍니다.

EC2 인스턴스 업데이트 – T2, R4, F1, Elastic GPU, I3, C5 등

오늘 오전에 AWS의 CEO인 re:Invent 기조 연설에서 Andy Jassy는 EC2 인스턴스 로드맵에 대한 다음 업데이트를 발표했습니다. 우리는 고성능 I/O, 컴퓨팅 및 메모리 최적화 인스턴스, 버스팅 가능 T2 인스턴스 범위 확대, FPGA 기반 컴퓨팅을 포함한 새로운 하드웨어 가속 영역에 대한 인스턴스 지원을 소개하였습니다. 이 블로그 게시물에는 오늘 공지 사항과 추가 정보가 포함 된 몇 가지 다른 게시물에 대한 링크를 요약하였습니다.

새로운 인스턴스를 위한 계획을 할 때, 저희는 고객이 직면 한 과제와 향후 EC2에서 실행할 작업들을 더 많이 이해하고자 많은 시간을 고객과 논의하였습니다. 다양한 피드백을 받았지만, 그중에서도 인 메모리 기반 분석, 멀티미디어 처리, 기계 학습 (최신 AVX-512 지침 지원) 및 대규모 스토리지 집약적 ERP(Enterprise Resource Planning) 애플리케이션 등이 자주 언급되었습니다.

신규 F1 인스턴스– F1 인스턴스를 사용하면 FPGA(Field-Programmable Gate Array)로 알려진 기법을 통해 하드웨어를 프로그래밍 가능하도록 할 수 있습니다. FPGA에서 실행되는 코드를 작성하여, 다양한 유형의 특정 작업, 즉 유전학 분석, 지진 분석, 금융 위험 분석, 대용량 데이터 검색 및 암호화 알고리즘을 최대 30배까지 가속화 할 수 있습니다. 오늘 F1 인스턴스와 하드웨어 개발 킷(Hardware Development Kit)에 대한 개발자 미리보기를 시작했으며, FPGA 기반 애플리케이션 및 서비스를 구축하고  AWS Marketplace에서 이를 판매 할 수 있습니다. 자세한 내용은 개발자 미리보기 – F1, 프로그래밍 기반 하드웨어를 위한 EC2 인스턴스를 참고하십시오.

신규 R4 인스턴스– R4 인스턴스는 메모리 집약형 비즈니스 인텔리전스, 메모리 내 캐싱 및 데이터베이스 애플리케이션을 위해 설계되었으며 최대 488 GiB 메모리를 지원합니다. R4 인스턴스는 기존 R3 인스턴스 보다 큰 L3 캐시와 더 높은 메모리 속도를 제공합니다. 네트워크 측면에서 R4 인스턴스는 배치 그룹 내에서 사용될 때 최대 20Gbps의 ENA 전원 네트워크 대역폭과 EBS 전용 처리량 12Gbps를 지원합니다. 인스턴스는 최대 64 개의 vCPU 및 488GB의 메모리가 포함 된 6 가지 크기로 제공됩니다. 자세한 내용은 차세대 (R4) 메모리 최적화 신규 EC2 인스턴스 출시를 참고하십시오.

T2 인스턴스 크기 확대– T2 인스턴스는 전체 CPU를 사용할 필요가 없는 작업 부하에 대해 뛰어난 성능을 제공합니다. 고객은 애플리케이션 서버, 웹 서버, 개발 환경, 지속적 통합 서버 및 소규모 데이터베이스와 같은 범용 작업 부하에 많이 사용합니다. 오늘 좀 더 많은 선택을 위해 t2.xlarge(16 GiB 메모리)와 t2.2xlarge(32 GiB 메모리)를 추가합니다. 기존 T2 인스턴스와 마찬가지로 신규 인스턴스 타입은 더 많은 컴퓨팅 성능이 필요할 때, 전체 코어로 버스팅 할 수 있을 뿐 아니라 기본 성능 (기본 인스턴스의 최대 4 배)을 충분히 제공합니다. 자세한 내용은 신규 T2.Xlarge 및 T2.2Xlarge 인스턴스출시를 참고하시기 바랍니다.

또한, 아래의 신규 인스턴스 타입도 새롭게 추가됩니다.

신규 Elastic GPU–  기존 EC2 인스턴스 타입에 원할 때 고성능 그래픽 가속 기능을 추가할 수 있게 됩니다. GPU 메모리와 일치하는 컴퓨팅 성능을 1 GiB에서 8 GiB 중에서 선택할 수 있습니다. Amazon에서 최적화 된 OpenGL 라이브러리 역시 자동으로 Elastic GPU를 감지하여 사용할 수 있습니다. 신규 EC2 기능을 AWS 그래픽 인증 프로그램과 함께 미리보기로 제공합니다. 자세한 내용은 Amazon EC2 Elastic GPUs 계획 발표를 참고하시기 바랍니다.

신규 I3 인스턴스– I3 인스턴스에는 빠르고 대기 시간이 짧은 비 휘발성 메모리 익스프레스(NVMe) 기반 솔리드 스테이트 드라이브(SSD)가 장착됩니다. 최대 4GB의 블록 크기와 최대 초당 16GB의 디스크 처리량에서 최대 330만 개의 임의적인 IOPS를 제공합니다. 이러한 인스턴스는 I/O 집약적 관계형 데이터베이스나 NoSQL, 트랜잭션 및 분석 워크로드에서 사용 가능합니다. I3 인스턴스는 최대 64개의 vCPU, 488 GiB의 메모리, 15.2TB의 스토리지(ERP 애플리케이션에 이상적임) 등 6 가지 사이즈로 제공됩니다. 저장된 모든 데이터는 암호화 된 상태로 유지되며, 새로운 EC2 고성능 네트워크 인터페이스(ENA)를 지원합니다.

신규 C5 인스턴스– C5 인스턴스는 인텔의 새로운 Xeon “Skylake” 프로세서가 장착되어, 다른 EC2 인스턴스 프로세서 보다 빠르게 실행됩니다. Broadwell의 후계자 인 Skylake는 컴퓨터 학습, 멀티 미디어, 과학 및 금융 서비스 운영을 위해 높은 부동 소수점 계산을 위한 지원을 제공하는 AVX-512를 지원합니다. 인스턴스는 최대 72 개의 vCPU와 144GB의 메모리가 포함 된 6 가지 사이즈로 제공됩니다. 네트워크 측면에서, ENA를 지원하고 기본적으로 EBS 최적화를 지원하게 될 것입니다.

이들 인스턴스가 사용 가능해지면, 각 인스턴스에 대한 자세한 정보를 계속 공유 할 예정이므로 본 블로그를 지켜봐 주시기 바랍니다.

Jeff;

이 글은 AWS re:Invent 2016 신규 출시 소식으로 EC2 Instance Type Update – T2, R4, F1, Elastic GPUs, I3, C5의 한국어 번역입니다. re:Invent 출시 소식에 대한 자세한 정보는 12월 온라인 세미나를 참고하시기 바랍니다.

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