Deep Learning Cluster를 구성하기
AWS GPU는 비싸다. 평소에는 CPU로 훈련하다가, GPU 자원을 활용하고 싶을때 어떻게 하면 좋을까? GPU 인스턴스가 올라오면 자동으로 클러스터에 포함되고, 명령을 내리면 GPU에서 훈련하고, 훈련이 끝나면 모델은 공유디스크에 저장되고, GPU를 반납한다. Predict는 싼 CPU 인스턴스에서 하고, 필요할때만 GPU인스턴스를 사용하면 비용도 절감되고, 일석 이조이다.
개요는 디스크를 nfs로 공유하고(NAS나 Storage를 쓰면 좋겠지만 돈 없음), Job을 배분해주기 위하여 RabbitMQ와 Celery를 올리고, Rest를 통해 실행 명령을 내리면 Train Job이 기동되는 형태로 구성할 예정이다.
TensorMSA Docker에는 기본으로 위 서비스들이 설치 되어 있기 때문에 TensorMSA Docker를 활용하여 구축하도록 한다.
<구성도 추가예정>
- 목표와 작업순서
Aws Instance 생성 cpu2개, gpu 2개
Master Server에서 nfs 서비스 설치 및 Slave Server Directory Mount
Cpu 인스턴스에 docker 설치, GPU 인스턴스에 Docker + Ndivia Docker 설치
Cluster 연결을 위한 TensorMSA Docker 설정
Cluster Test - AWS Instance 생성
cluster를 구성하기 위하여 AWS에서 Instance를 생성한다.
m2.xlarge 2대, P2.large 2대를 생성한다. 생성방법은 인터넷에 많이 있어요. - Nfs 서비스 생성
우리는 훈련을 GPU Train서버에서 하고, Predict은 CPU서버에서 해야 하기 때문에 공유디스크를 설정해야 하는데 NAS나 SAN Storage를 쓰면 좋을텐데 돈이 없으므로 nfs서비스로 연결하도록 한다. - nfs 서비스 설치! 간단하게 설치 된다
sudo apt-get install nfs-kernel-server
- /hoya_src_root /hoya_model_root /hoyai_playground 3개를 공유디렉토리로 설정한다. 디렉토리를 만들고, 소유권한을 바꾼다.
sudo mkdir /var/nfs/hoya_src_root -p sudo mkdir /var/nfs/hoya_model_root -p sudo mkdir /var/nfs/hoya_str_root -p sudo mkdir /var/nfs/hoyai_playground -p sudo chown nobody:nogroup /var/nfs/hoya_src_root sudo chown nobody:nogroup /var/nfs/hoya_model_root sudo chown nobody:nogroup /var/nfs/hoya_str_root
- /etc/exports 파일에 nfs 설정을 한다. RW(읽고 쓰고), sync(다 썼을때 회신)
아무나 접속하는것을 막기 위해서 IP를 넣어서 지정된 IP만 접속하도록 설정한다.
aws에서는 private ip는 고정 되므로 private ip를 사용하면 된다.
public ip는 고정이 안될뿐더러 e-ip로 고정한다 할지언정 데이터를 쓰다가 트래픽이 인터넷구간으로 나가면 aws에서 network비용을 청구하므로 조심해야 합니다.
예전 하둡 클러스터를 잘못 설정해서 network 비용이 100만원이 나온 기억이 나네요 ㅠㅠ
vi /etc/exports /var/nfs/hoya_src_root xx.xx.xx.xx(rw,sync,no_subtree_check) xx.xx.xx.xx(rw,sync,no_subtree_check) /var/nfs/hoya_model_root xx.xx.xx.xx(rw,sync,no_subtree_check) xx.xx.xx.xx(rw,sync,no_subtree_check) /var/nfs/hoya_str_root xx.xx.xx.xx(rw,sync,no_subtree_check) xx.xx.xx.xx(rw,sync,no_subtree_check)
- nfs server설정이 끝났습니다. 다음에는 nfs를 gpu인스턴스에 연결하고 nvidia-docker를 설치해서 gpu instance를 올려보도록 하겠습니다 ^^service nfs-kernel-server reloadnfs service를 Reload한다.