안녕하세요 키노코더입니다.


이번 포스팅에는 Darknet YOLO를 AWS (아마존 웹 서비스)에 설치하여 확인해보는 과정을 담아볼까 합니다. Darknet YOLO가 궁금하신분들은 아래 다른 포스팅을 참고해주세요.

Windows에서 Machine Learning 맛보기: YOLO (Darknet)

요약

  • AWS 가입하기 (프리티어로 12개월간 무료 사용해보기)
  • EC2 t2.micro 인스턴스 (instance) 생성하기
  • ssh로 인스턴스 접속하여 Darknet 설치하기
  • Darknet 실행해보기

AWS 가입하기 (프리티어로 12개월간 무료 사용해보기)

AWS (아마존 웹 서비스) 바로가기

먼저 AWS (Amazon Web Service)에 가입하여 합니다. 우측 상단의 'AWS 무료 체험하기'버튼을 클릭합니다. amazon.com에 이미 계정이 있으신분들은 해당 이메일주소와 비밀번호를 입력하셔야 합니다. 저는 이걸 몰라서 한참 헤맸네요. AWS에 가입한 적이 없는데 계속 이미 사용중인 이메일 주소라고 나오더라구요.

아마존 계정이 없으신 분들은 새로운 사용자를 선택하시고 이메일과 사용할 비밀번호를 입력하시면 됩니다. 그리고 "비밀번호가 만료되었습니다" 라고 뜨는건 비밀번호가 틀린겁니다. 저는 계속 만료되었다고 나와서 비밀번호 갱신기간이 따로 있는줄 알았는데 그냥 비밀번호가 틀린거더라구요. 여기서 또한번 헤맸네요.

AWS 가입과정에는 신용카드 정보 입력, 전화 본인 인증 등이 있어서 조금 귀찮기도 하면서 찝찝할 수도 있지만, AWS 서비스 특성상 대부분 유동적으로 가격이 결정되는 종량제로 비용이 청구되기 때문에 사용자가 매번 결제 정보를 입력하는 것을 막기 위함인 것 같습니다.

가입이 완료되면 프리티어를 12개월간 무료로 사용할 수 있습니디. 프리티어로 사용할 수 있는 서비스는 EC2의 t2.micro instance입니다. 프리티어에 대해서는 아래 아마존 사이트에서 확인해주시기 바랍니다.

AWS 프리티어 소개보기


EC2 t2.micro 인스턴스 (instance) 생성하기

저희는 무료로 사용할 예정이니 EC2 t2.micro를 생성하여 사용할겁니다. 먼저 우측 상단의 Region을 선택하여 서울로 설정해줍니다. AWS는 전세계에서 사용가능한 서비스인 만큼, 서버가 여러 지역에 있는데 최근 서울이 추가되었습니다. 가까운 지역일 수로고 AWS에 접속하여 네트워크 패킷을 주고 받을 때 응답속도가 좋기 때문에 유리합니다.

좌측 상단의 Services를 눌러 Compute의 EC2를 선택합니다.

t2.micro 인스턴스를 생성하기 위해 화면 중앙에 있는 Launch Instance 버튼을 클릭합니다.

생성할 수 있는 instance의 종류(AMI: Amazone Machine Image라고 합니다)들이 화면에 나타나는데요. AMI에는 사용자가 매번 필요한 서비스를 설치하지 않아도 되도록 미리 설정된 서비스들을 가지고 있습니다. AWS Marketplace에 가보면 이러한 AMI들이 굉장히 많은데요. 주의할 점은 이러한 AMI들도 모두 무료는 아니라는 점입니다. 무료로 제공되는 AMI도 있지만, 시간당 과금되는 AMI들도 많기 때문에 주의해야합니다. 프리티어에서 무료로 쓸 수 있는 AMI는 좌측메뉴 하단의 'Free tier only'를 선택하시면 필터링하여 볼 수 있습니다. 저희는 Ubuntu Linux가 미리 설치된 AMI를 선택해보겠습니다.

AMI를 선택하면, 어떠한 인스턴스 타입으로 생성시킬지 선택하는 화면이 나타납니다. 프리티어에서 사용할 수 있는 t2.micro를 선택합니다. Review and Launch를 누르면 보안접속을 위한 Key를 선택하는 화면이 나오며, 여기서 'Create a new Key pair'를 선택하시고, 'Key pair name'에는 적당한 이름을 넣으시면 됩니다. 그런 후 'Download Key Pair'를 누르시면 ssh로 접근 가능한 private key 파일이 다운로드 됩니다.

화면에서처럼 t2.micro에는 CPU가 1개, Memory가 1GB 할당됩니다. t2.micro가 어느 정도의 성능이 나오는지는 본 포스팅 마지막에 비교 테이블을 참고해주시기 바랍니다.

'Launch Instance'를 누르면 인스턴스 생성을 시작하고, 5분 정도의 시간이면 좌측의 'Instances' 메뉴에서 생성한 인스턴스가 동작하는 것을 확인하실 수 있습니다.

여기까지 완료되면 인스턴스는 정상적으로 생성되었지만, 외부에서 ssh로 접근하기 위해서는 Elastic IP를 신청해서 연결해주어야합니다. 지금은 AWS 내부에서만 사용되는 IP가 부여되었기때문에 외부와의 연결을 위해 IP주소를 연결합니다.

좌측 메뉴에서 Elastic IP를 선택하고 'Allocate new address' 버튼을 클릭하면 위와같은 화면이 나오고, 'Allocate' 버튼을 누르면 할당되었다는 메시지와 함께 할당된 IP주소가 화면에 나타납니다. Close를 누르고, 화면에서 할당된 메시지를 선택하고, 'Action' 버튼에서 'Associate address'를 클릭하면 아래와 같은 화면이 나옵니다.

생성해둔 instance를 선택합니다. 선택 후 'Associate' 버튼을 누르면 이제 외부에서 해당 IP 주소를 통해 해당 인스턴스로 접근이 가능해집니다.

SSH로 인스턴스 접속하여 Darknet 설치하기

ssh -i {키 파일 이름} ubuntu@{IP주소}

ex) ssh -i opencv.pem ubuntu@123.123.123.123

SSH를 통해 생성한 인스턴스로 접속합니다. 처음 인스턴스에 접속해보면 정말 아무것도 없는 서버여서 조금 당황스럽습니다. 거의 미니멈으로 설치됐다고 보시면 됩니다. 기본적으로 필요한 것들만 설치하도록 합니다. 우선 빌드에 필요한 것들은 설치합니다.

sudo apt-get install build-essential

sudo apt-get install git

git이 설치되면 적당한 위치에 darknet source code를 github로부터 클론하고 빌드합니다.

git clone https://github.com/pjreddie/darknet.git

cd darknet

make

Darknet 실행하기

이제 생성된 darknet을 실행해서 정상 동작하는지 확인해봅니다. 라즈베리파이 때와 마찬가지로 트레이닝을 따로 하지 않고 미리 트레이닝된 weight파일을 받아서 사용하겠습니다.

wget http://pjreddie.com/media/files/tiny-yolo-voc.weights

./darknet detector test cfg/voc.dat cfg/tiny-yolo-voc.cfg tiny-yolo-voc.weights

data/dog.jpg

정상적으로 결과를 내주는 것 같네요. 콘솔이기 때문에 이미지를 직접 확인하기는 어렵지만, 저장된 prediction.jpg를 가져와서 열어보면 이미지 처리도 정상적으로 된걸 확인할 수 있습니다.

마치며

AWS에 darknet을 설치해본 이유 중 가장 큰건, 무료로 제공하는 인스턴스에서 machine learning 계산이 얼마나 걸릴지 궁금해서 였습니다. 이미 Windows 7 PC와 Macbook Pro, 라즈베리파이3에서 테스트한 결과가 있었기때문에 동일 조건에서 비교를 위해서였습니다.

결과적으로 AWS EC2 t2.micro에서 제 생각보다는 충분한 성능을 보여준것 같습니다. 라즈베리파이에서 machine learning을 돌리기엔 조금 버겁다는 걸 느꼈기에 라즈베리파이에서 수집한 영상을 적당히 가공하여 AWS로 보내주는 시스템을 구상하면 좋을것 같네요.

아래는 제가 테스트한 환경에서의 비교 결과입니다.

System

PC (CUDA)

Macbook Pro

Raspberry Pi 3

AWS EC2 t2.micro

CPU

i5 3.5GHz

i5 2.7GHz

ARMv8 1.2GHz

Xeon E5-2676 2.4GHz

GPU

Nvidia GTX750

NA

NA

NA 

Result (Tiny YOLO)

0.2 sec/frame

1.2 sec/frame

38 sec/frame

1.7 sec/frame

참고: AWS의 CPU는 사양이 조금 달라질 수도 있습니다. 현재 제 인스턴스가 생성된 서버의 사양이기 때문에 단순 참고용으로만 알고계시면 좋을 것 같습니다. 보다 자세한 내용은 AWS의 인스턴스 유형 페이지를 보시면 확인할 수 있습니다.

블로그 이미지

키노코더

각종 이야기를 다루는 키노코더의 블로그입니다

,