GPU Cloud 서비스
무료 GPU 서버
현재까지 알려진 가장 좋은 무료 GPU 서비스는 Google colab이 유일하다. 그러나 colab은 하루에 12시간까지밖에 GPU를 쓸 수 없는 제약이 있고, 데이터를 지속적으로 서버에 올려둘 수가 없어서 google drive에 데이터를 올리고 이를 mount해서 사용해야하는데 이게 매우 불편하다. 또한 command line interface를 제공하지 않아서, jupyter의 cell에 !을 입력해서 해야하는데, 이 또한 매우 불편하다. 그리고 jupyter notebook도 기존에 사용하던 jupyter와 단축키 및 기능이 조금씩 달라서 적응하는데 꽤 시간이 걸린다. 그럼에도 불구하고 한시간에 1000원정도 하는 T4 GPU를 무료로 쓸 수 있다는 것은 분명 엄청난 메리트이다. 그러나 보다 진지한 프로젝트를 원하다면 다음과 같은 cloud gpu server를 사용해야한다.
AWS vs Google Cloud Platform
2019.12.08 현 시점, K80을 기준으로 둘의 가격차이는 대략 2배정도 나는 것으로 보인다. 구글은 시간당 0.45달러, 아마존은 0.9달러이다.
가격차이에 더불어서 GCP는 TPU를 사용할 수 있다는 장점과 더 다양한 종류의 GPU들이 있고, interface도 AWS에 비해 쉽고 간편한 것으로 보인다.
https://towardsdatascience.com/maximize-your-gpu-dollars-a9133f4e546a
GPU 서버를 직접 구매하면?
2019.12.08 현 시점에서 Tesla T4의 가격은 350만원정도이다. 이를 GCP에서 사용할 경우 독점 사용이 시간당 0.95달러, 선점형이 0.29달러이고, 1년 악졍이 0.6달러이다. 현재 환율이 대략 1200이니까, 350만원은 대략 2900달러이고, 이를 각 case별 시간으로 환산하면 3050시간, 10000시간, 4830시간이 된다.
1만시간이면 416일을 full로 사용해야하는 엄청난 시간이다. GPU를 full로 돌리는 일은 생각보다 많지 않기 때문에, 못해도 2~3년은 사용할 수 있는 것이고 거기에 추가적으로 CPU나 전원 등의 기타장비와 인터넷 비용, 공간비용, 유지관리 비용까지 생각하면 생각보다는 저렴한 가격으로 생각할 수 있다. 또한 클라우드 GPU의 경우 원할 경우 동시에 N대로 늘려서 사용할 수 있다는 장점 또한 있다. 즉 결론은 소규모 프로젝트나 스타트업의 경우 GPU cloud를 이용하는 것이 여러모로 직접 인프라를 구축하는 것 보다 편리할 수 있다.
GCP의 다양한 가격정책
- 선점형 가격정책은 AWS의 spot instance와 거의 동일한 개념이다. 다만 bidding이 없이 고정된 가격으로 정해져있어서 예측이 더 쉬운 장점이 있다. 언제든지 instance가 종료될 수 있으므로, 이에 대한 대비 코드가 짜여져야 한다는 요구사항만 만족하면 대충 1/3 가격에 자원을 사용할 수 있다.
GCP VM Instance만들기
# 용어 및 사전 정보
commited CPU
약정할인으로, 일정기간 예약해둔 instance로 요금 할인을 받는다.
https://cloud.google.com/compute/docs/instances/signing-up-committed-use-discounts
N1, N2 CPU
- N1: 1세대인 N1 머신 유형. 이 머신 유형은 최대 96개의 vCPU와 vCPU당 6.5GB의 메모리를 제공하며 Intel Sandy Bridge, Ivy Bridge, Haswell, Broadwell, Skylake CPU 플랫폼에서 사용할 수 있습니다.
- N2: 최신 세대인 N2 머신 유형. 이 머신 유형은 최대 80개의 vCPU와 vCPU당 8GB의 메모리를 제공하며 Intel Cascade Lake CPU 플랫폼에서 사용할 수 있습니다.
요금제
- All Upfront(모두 선불): 3년 또는 1년 RI의 기간 이용 금액을 모두 일괄로 사전에 지불합니다. 가장 저렴합니다.
- Partial Upfront(일부 선불): 이용액의 일부를 사전에 지불하고 3년 또는 1년 RI의 기간 동안 매월 지불하는 옵션입니다. All Upfront와 No Upfront의 중간 할인율입니다.
- No Upfront(선불 없음): 사전 요금은 없습니다. 다만, RI의 기간 동안 지불 계약을 하며 할인율은 온 디멘드에 비해 30%가량 싸집니다. 이 옵션의 기간은 1년간 뿐입니다.
# GCP region 고르기
Instance를 만들기 전에 어떤 region이 나에게 가장 적합할지 골라야한다. 먼저 물리적인 거리가 가까울 수록 latency가 낮기 때문에 좋고, 내가 원하는 GPU가 있는지 따져봐야한다.
https://cloud.google.com/compute/docs/regions-zones/
만약 V100을 사용하고 싶으면, 아래의 링크에서 사용 가능한 구체적인 region과 zone을 알아내야한다. 현재는 asia-east1-c에서 GPU Memory 16gb짜리 V100을 제공하고 있다.
https://cloud.google.com/compute/docs/gpus
단, GPU를 포함한 VM instance를 만들기 위해서는 CPU를 N1 타입으로 골라야만 한다.
# GCP Quotas설정하기
IAM - Quotas - Metric - GPUs(all regions) - 10개로 설정.
그런데 바로 request가 승인되지 않고, 2일이 걸린다는 답장이 이메일로 왔다.
https://stackoverflow.com/questions/53415180/gcp-error-quota-gpus-all-regions-exceeded-limit-0-0-globally
# 요금 상세 내역 확인하기
Billing - Transactions에 들어가면 상세한 요금 내역을 볼 수 있다.
# Network 등급 설정
# Storage 타입 별 요금비교
SSD와 Standard HDD를 비교해보면, 대략 SSD가 4배정도 더 비싸고, Balanced의 경우 그 중간 정도의 가격임을 알 수 있다.
게다가 Storage의 경우 instance를 stop인 상태로 두어도 사용한 공간에 비례하여 계속해서 요금이 지불되기 때문에 GPU사용량이 적은 경우, 생각보다 Storage의 요금 비중이 클 수 있다.
따라서 특별히 SSD를 써야하는 경우가 아니라면, 그냥 HDD(Standard)를 선택하도록 하자.
# 시작 Docker Image 설정
아래와 같이 공개된 docker hub이미지 중에서 원하는 것을 고를 수 있다.
pytorch/pytorch:1.5.1-cuda10.1-cudnn7-devel
또는 구글에서 직접 제공하는 이미지도 이곳에서 확인하여 선택할 수 있다.
Docker image를 선택하면, 무조건 OS가 chromium 기반의 optimized-container OS만 선택이 된다. 그리고 머신 실행시 해당 도커 이미지를 사용한 컨테이너를 자동으로 생성해준다.
근데 이게 생각보다 불편하다. 그리고 docker image를 입력해줘도 실행 스크립트의 문제인지 무한히 restarting 상태만 반복되고 제대로 실행이 안된다.
따라서 Docker image를 고르지 않고, Ubuntu OS로 VM Instance를 만들고, Docker image는 따로 다운받는게 나아보인다.
# Instance Templates
# Instance 생성 시 에러 해결
instance failed to start due to preemtion.
Preemptible instances are available from a finite amount of Compute Engine resources, and might not always be available.
즉 현재 자원이 부족해서 preemtible instance를 만들 수 없다는 것이다.
GCP 사용하기
# 고정 IP 할당하기
Jupyter 접속을 위한 방화벽 설정
# 자동 접속: gcloud 이용하기
gcloud 설치하기
# Add the Cloud SDK distribution URI as a package source
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
# Import the Google Cloud public key
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
# Update the package list and install the Cloud SDK
sudo apt-get update && sudo apt-get install google-cloud-sdk
최초 접속
SSH 접속하기
또는 gcloud console에서 instance 우측에 화살표를 눌러서 적절한 gcloud command line을 확인할 수 있다.
gcloud 명령어
VM Instance 시작하기
VM Instance 중단하기
VM Instance SSH접속하기
기본 프로젝트 설정
sudo gcloud config set project project_id
# 수동 접속: SSH key로 접속하기
Connect with private SSH key
ssh-keygen -t rsa -C "my@mail.com"
https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys#createsshkeys
SSH with private key
ssh -i path-to-private-key username@external-ip
Ubuntu 18.04 VM Instance 초기 설정
Docker 설치하기
Official Script 이용해서 설치하기
수동으로 설치하기
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
https://docs.docker.com/engine/install/ubuntu/
NVIDIA Driver 설치하기
Pre-installation
최신버전의 CUDA Installation
Post-installation
에러 해결: nvidia-persistenced failed to initialize. Check syslog for more details.
Nvidia-docker 설치하기
문제해결: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
Pytorch Docker Container 만들기
원하는 pytorch 버전을 아래 링크에서 고른다.
nvidia에서 만든 pytorch docker image 고르기
Nvidia docker Container 만들기
Container 접속하기
그 이외에 여러가지
miniconda설치
Jupyter 설치
container상에서 jupyter 실행하기
bashrc에 container 자동 시작/접속 스크립트 넣기
'Development > for Machine Learning' 카테고리의 다른 글
Deep Learning Model Fast Serving (0) | 2020.04.28 |
---|---|
ML Python 프로젝트의 test code만들기(feat. Pytest) (0) | 2020.03.16 |
Github Markdown 사용법 (0) | 2017.08.21 |
Jupyter Notebook (0) | 2017.05.23 |
TensorFlow Extreme Performance Tuning (0) | 2017.01.20 |
댓글