AWS EC2 인스턴스에 있는 Docker 컨테이너에서 딥러닝 모델을 훈련하는 과정에 대해서 정리합니다.
EC2 인스턴스 생성하기
먼저 커맨드라인에서 AWS에 접속하여 사용할 EC2 인스턴스를 생성한다. 만약 생성하는 방법을 모른다면 EC2 인스턴스 생성하기에서 확인할 수 있다.
1 | # IAM계정 로그인 |
1 | # EC2 인스턴스 생성 |
EC2 인스턴스에 접속하기
다음으로는 생성한 인스턴스에 접속한다. 해당 인스턴스의 인바운드 규칙이 SSH 접속이기 때문에 아래의 코드를 입력한다.
1 | chmod 400 '키 페어 이름.pem' # SSH 퍼미션 변경 |
chmod 400
은 해당 파일의 소유주만 읽을 수 있도록 권한을 변경하는 것이다. 해당 인스턴스 PublicDnsName
는 인스턴스의 정보에서 찾을 수 있다. 만약 PublicDnsName를 모른다면 아래의 코드를 입력해서 복사해오면 된다.
1 | aws ec2 describe-instanses |
해당 인스턴스 접속에 성공하면 프롬프트가 인스턴스 ID로 변경된다.
1 | [ec2-user@ip-**-**-*-*** ~]$ # 인스턴스에 접속된 프롬프트 |
EC2 인스턴스에 훈련 데이터 가져오기
이제 인스턴스에 S3에 저장해둔 훈련데이터를 가져올 것이다. 인스턴스는 가상 서버이기 때문에 S3에 접속하려면 다시 IAM 계정에 로그인해야 한다.
1 | # IAM계정 다시 로그인 |
그 다음에는 아래의 코드를 입력하여 훈련데이터가 들어있는 버킷을 인스턴스에 복사해온다.
1 | aws s3 sync s3://;'가져올 버킷 이름' /home/ec2-user |
그러면 커맨드라인에 아래와 같이 다운되었다고 나올 것이다.
1 | download: s3://mnist-data-60000/Dockerfile to ./Dockerfile |
인스턴스 디렉토리를 확인하여 잘 다운되었는지 확인해보자.
1 | > ls |
EC2 인스턴스에 도커 설치하기
이제 인스턴스에 도커를 설치해야 한다. 아래의 코드를 입력하여 도커를 설치해보자.
1 | sudo yum update -y |
도커가 정상작동하기 위해서는 인스턴스를 재부팅해야 한다. 아래의 코드를 입력하여 EC2 인스턴스를 재부팅한다.
1 | aws ec2 reboot-instances --instance-ids '인스턴스 ID' # 그냥 logout만 입력해도 된다. |
그 다음 아래의 코드를 입력하면 도커가 정상작동하는 것을 확인할 수 있다.
1 | docker info |
docker image 빌드하고 컨테이너 생성하기
인스턴스 재부팅이 완료되었다면 저장해두었던 도커파일을 빌드하여 컨테이너를 생성해보자. 아래의 코드를 입력하여 도커파일을 빌드한다.
1 | docker build -t train:0.0 . |
위 코드는 현재 디렉토리에 있는 도커파일을 train:0.0
라는 이름으로 빌드한다. 뒤에 (띄어쓰기).
는 현재 디렉토리를 나타낸 것이다. 그렇기 때문에 위 코드를 입력할 때 잊지 말고 같이 입력해야 한다. 이미지 빌드가 완성되면 아래의 코드를 입력하여 확인할 수 있다.
1 | docker images |
위와 같이 나왔다면 이미지 빌드에 성공한 것이다. 이제 train:0.0을 사용하여 컨테이너를 생성할 것이다. 아래의 코드를 입력해보자.
1 | docker run -v /home/ec2-user:/app train:0.0 |
위 코드에 대해 살펴보자면 먼저 -v
는 호스트의 디렉토리를 생성할 컨테이너 디렉토리로 마운트하는 것이다. /home/ec2-user
은 EC2 인스턴스의 디렉토리이고, /app
은 컨테이너 디렉토리이다. (도커파일에서 컨테이너 디렉토리를 /app
으로 설정하였다 ) 그 다음 사용할 이미지 이름과 태그를 입력하면 도커 컨테이너가 작동한다.
훈련 결과 확인하기
컨테이너가 작동되면 커맨드라인에 아래와 같이 훈련이 진행되는 상황이 보인다.
1 | Epoch 1/100 |
이것은 우리가 명령했던 model.py
가 잘 작동하고 있다는 의미이며, 학습이 끝나면 가중치, 모델 스트럭쳐와 같은 모델 정보들을 EC2 인스턴스에 저장한다. 모델 정보는 mnist_convNet
이라는 폴더로 저장된다. (model.py의 마지막 줄에서 폴더 이름 수정 가능하다)
아래의 코드를 입력하여 EC2 인스턴스의 디렉토리를 확인해보자.
1 | ls |
훈련 결과 S3에 저장하기
훈련이 끝났다. 이제 훈련이 완료된 모델 정보를 S3의 버킷에 저장해야 한다. 아래의 코드를 입력해보자.
1 | tar cvf `저장할 이름.tar` mnist_convNet |
위 코드는 mnist_convNet
폴더를 하나로 묶어준다. 이후 해당 파일을 S3 버킷에 복사하면 된다.
1 | aws s3 cp `저장한 이름.tar` s3://'저장할 버킷 이름' |
그럼 아래와 같이 훈련 결과가 S3에 저장된 것을 확인할 수 있다.
이제 AWS를 사용하여 모델 훈련까지 완료하였다. 다음 글에서는 훈련된 모델에 사용하는 방법에 대해서 살펴볼 것이다.