Google Cloud Platform VM 인스턴스 생성하기
RECJOON 웹 서비스를 구축하는 과정에서 웹 서버와 함께 딥 러닝 모델을 주기마다 실행하는 클라우드 컴퓨팅 서버가 별도로 필요했는데, GCP(Google Cloud Platform) VM 인스턴스를 생성해서 무료로 받은 크레딧을 모두 소진할 때까지 운영하기로 결정했다.
그리고 생성한 인스턴스에서 python으로 작성된 데이터 수집 코드와 딥 러닝 모델을 정해진 batch 간격마다 자동으로 실행하고자 Airflow를 설치했다.
그런데 생각보다 Airflow를 GCP 인스턴스에 설치하는 과정이 쉽지 않아서 적지 않은 시행착오를 겪었다.
다음에도 클라우드 컴퓨팅 서버에 Airflow를 설치할 수도 있으므로 GCP 인스턴스를 생성하고 Airflow를 구축하는 과정을 기록 차원에서 정리하고자 한다.
먼저 이 글에서는 GCP의 VM 인스턴스를 생성하는 방법을 정리했다.
GCP(Google Cloud Platform)에서 VM 인스턴스 생성하기
![스크린샷 2022-07-17 오후 4.03.30](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658235582.png)
GCP(http://cloud.google.com)의 콘솔 창에서 왼쪽 위의 메뉴 클릭 → Computer Engine
클릭 → VM 인스턴스
클릭
![스크린샷 2022-07-17 오후 4.03.35](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658235886.png)
인스턴스 만들기
를 클릭하여 인스턴스를 생성한다.
![스크린샷 2022-07-17 오후 4.08.07](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658235951.png)
생성하려는 인스턴스의 이름
을 입력하고, 인스턴스 실행 리전
과 영역
을 선택한다.
또한 인스턴스 머신 구성
을 어떻게 할지를 선택하는데, GPU를 이용하려면 머신 계열에서 GPU를 클릭하여 원하는 GPU 구성을 선택한다.
처음에는 RECJOON 서비스에서 GPU를 사용했는데, 무료 크레딧으로 이를 감당하기에는 비용이 저렴하지 않다는 걸 깨달았다.
그래서 딥 러닝 학습과 추론 속도가 느려도 E2 시리즈로 선택하여 CPU를 사용하고 대신 메모리 용량을 16GB로 늘려서 사용하기로 결정했다.
![스크린샷 2022-07-17 오후 4.08.22](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658237332.png)
부팅 디스크 항목에서 변경
버튼을 클릭하여 목적에 맞는 이미지를 선택한다.
![스크린샷 2022-07-17 오후 4.09.47](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658237610.png)
처음에는 인스턴스 생성 시 바로 PyTorch를 사용할 수 있도록 Deep Learning on Linux
에서 Debian 10
을 사용했는데, Airflow를 설치하는 과정에서 sqlite
대신 mysql
로 교체할 때 mariadb
로 강제로 설치되어서 airflow DB 초기화 시 오류가 나는 현상이 있었다.
그래서 다시 인스턴스를 삭제하고 Debian 10
대신 Ubuntu 20.04 LTS
이미지를 선택했다.
![스크린샷 2022-07-17 오후 4.09.57](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658238032.png)
최종적으로 생성할 VM 인스턴스 설정을 마쳤으면 아래의 만들기
버튼을 클릭하여 인스턴스 생성을 마무리한다.
GCP의 VM 인스턴스 IP 고정하기
![스크린샷 2022-07-17 오후 4.57.51](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658238433.png)
현재 생성한 GCP 인스턴스는 외부 IP 주소가 고정이 되어 있지 않아서 임시 외부 IP 주소로 설정되어 있는 상태이다.
위의 외부 고정 주소 예약
을 클릭하여 외부 IP 주소를 고정한다.
![스크린샷 2022-07-17 오후 4.58.09](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658238888.png)
예약할 고정 IP 주소의 이름
을 입력하고, 목적에 맞게 다른 항목을 설정해준다.
주의할 점은 리전
을 앞서 생성한 VM 인스턴스의 리전과 동일하게 설정하고, 연결 대상
을 앞에서 생성한 인스턴스로 연결해준다.
![스크린샷 2022-07-17 오후 4.58.42](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658239323.png)
생성한 VM 인스턴스에 관해 외부 고정 IP 주소가 잘 생성되었는지 확인한다.
GCP VM 인스턴스 SSH 연결
![스크린샷 2022-07-18 오후 10.04.37](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658240083.png)
사실 GCP 콘솔의 VM 인스턴스 목록에서 연결
의 SSH
를 클릭하면 웹 브라우저로 VM 인스턴스에 SSH 접속할 수 있다.
그러나 macOS 터미널을 사용해서 접속하려면 SSH 키를 생성하여 public key를 GCP의 메타데이터에 등록해야 한다.
MacOS 터미널로 VM 인스턴스 접속하기
![스크린샷 2022-07-17 오후 5.02.32](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658240431.png)
ssh-keygen -t rsa -f ~/.ssh/[SSH KEY 명] -C "[Google 아이디]"
터미널에서 ssh-keygen
으로 ssh key 생성 명령어를 작성한다.
ssh-keygen -t rsa -f [SSH KEY 저장 경로]/[SSH KEY 명] -C "[Google 계정 아이디]"
보통 macOS에서 ssh key는 ~/.ssh
경로에 저장하는 게 일반적인데, ssh key를 다른 곳에 저장하고 싶으면 저장할 ssh key 경로를 바꿔준다.
그리고 비밀번호를 입력하라고 뜨는데, ssh key로 터미널에서 접속할 때 필요한 비밀번호를 정해서 입력한다.
![스크린샷 2022-07-17 오후 5.03.42](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658240886.png)
cat ~/.ssh/[SSH KEY명].pub
cat [SSH KEY 저장 경로]/[SSH KEY 명]
그리고 cat
명령어로 앞서 생성한 SSH key의 public key의 내용을 출력하고, 이를 복사해 둔다.
![스크린샷 2022-07-17 오후 5.04.34](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658241101.png)
GCP 콘솔에서 Computer Engine
의 메타 데이터
에서 SSH 키
를 클릭하여 위에서 복사한 public key 내용을 항목에 붙여넣기 한다.
![스크린샷 2022-07-17 오후 5.09.22](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658241323.png)
ssh -i ~/.ssh/[SSH KEY 명] [Google 계정 아이디]@[고정 IP 주소]
터미널에서 위와 같이 명령어를 입력하고 앞서 설정한 비밀번호를 입력하면 터미널에서도 SSH로 VM 인스턴스에 접속 가능하다.
![스크린샷 2022-07-18 오후 8.13.05](https://cdn.jsdelivr.net/gh/Glanceyes/Image-Repository/2022/07/19/20220719_1658241672.png)
SSH로 VM 인스턴스 접속이 잘 되는지 확인한다.