Unix

EC2 클러스터에서 텐서플로우 실험

ForceCore 2017. 6. 30. 02:07

EC2 클러스터? 클러스터인가? 일단 지금 내가 아무 개념이 없어서 틀릴 수 있다.


Elastic Computing 의 약자랜다.


어쨌거나 GPU 메모리 부족이 예상되어서 GPU 여러개에서 돌리는 실험을 진행해보려 한다. 이런건 사는 것 보단 아마존에서 돌리는게 나을 듯. 작은 규모에서 개발 하다가 필요한 때 큰 곳에서 돌리는 전략이다.


일단은 내 아마존 ID로 로그인을시도하니 그래도 추가로 정보를 더 입력하라네? 뭐 하면되지. 한국 액티브X 떡칠보단 양반이니까 그까짓것


예전에 MS Azure 서비스를 써봐서 그런가 아주 낯설진않다...? (비주얼 스튜디오와 연동이 잘 되어서 써봄)


브라우저에서 가상섭도 띄우고 콘솔도 띄워지는듯. 콘솔에 로그인까지는 되는데 아직 다른게 안된다. EC2를 선택하니 가입한지 최악의 경우는 24시간 걸릴 수 있다 말이 나오고 아직 내가 뭘 더 진행할 수 있지 않다.


그냥 가상컴하고 똑같으면 좋겠다...;; 근데 듣자하니 재부팅해도 안 날아가야 하는건 아마존 클라우드에 올려야 한다는데 흠 흠 흠 그건 그때 가서 생각한다.


그러는 중에 공부를 해보니 흠.

EC2는 instance를 끄는 순간 다 날아간다 한다. 오올


p2 instance... 이게 물건이군. 내가 찾는...

https://aws.amazon.com/ko/ec2/instance-types/

GPU 메모리가 96 GB ㅎㄷㄷ

p2.xlarge만 해도 12 GB.

럭셔리한데? ㅋㅋ;;;


일단 공짜로 실행되는거 한 번 실행해봤다. 접속도 해보고. 여타 Virtual Machine과 다를 것이 없다. Persistency만 어떻게든 추가하면 되는데. 인스턴스 만들 때 옵션 들어가서 하면 됨.


나는 여러가지 하드웨어 환경에서 실험을 하려고 하는 상황이기 때문에, 한가지 환경만 persistent하다고 다가 아니다. 그러면 주로 실험하는 세팅을 persistent한 운영체제와 분리되어있으되 독립적으로도 잘 작동하는 환경을 구축해야 겠구나.


python은 venv로 잘 감싸고... 문제는 그짓을 하면 cmake가 잘 안 먹는다. (cmake써서 컴파일 하는데 윽... 파이썬-C++ 연동 때문.)


다행히 좋은 해결책이 있는데 아나콘다이다.

아나콘다엔 기본적으로 파이썬이 딸려오며

cmake도 들어있다. 헐...;;;;;;;;;;

conda가 파이썬 패키지 관리하는 pip를 쓸데없이 감싸둔건줄 알았는데 conda install cmake하면 설치가 된다;;;;;;;;;;; ㅋㅋ;; 좋아 이제부터 아나콘다로 간다.


인스턴스. root 파티션 (/). 8GB는 부족하고 10GB면 된다네... 


스냅샷으로 마운트하면 나의 변경사항이 저장이 안 된다.

다른 방법을 써야 한다.

인스턴스를 먼저 띄우고 볼륨을 마운트 시키는게 정답이다... 다른 인스턴스에 마운트 된 볼륨이라면, /는 안되지만 다른 볼륨은 마운트 및 언마운트가 된다. 단 stop된 인스턴스에 대해서.


볼륨이... 서버가 달라서 -_-;; 마운트가 안된다 샒.

스냅샷을 뜨고 그걸 기반으로 볼륨을 만들면 이전할 수 있다...;; 처음 써보는거라 시행착오가 많군.

인스턴스 만들때 subnet을 정하면 2a인지 여튼 볼륨 이전 안 해도 되게 만들 수 있다.


시행착오는 비싸게 p2에서 하지 말고 g2가지고 하자.


HOME용도로 구상한 파티션이 용량이 모자른다. 드라이버 받아두고 콘다 깔면 용량이 8GB론 모자른다. 16GB로 간다. 그리고 / 파티션은 10GB가 좋다고 생각된다.


nvidia-installer log file '/var/log/nvidia-installer.log'

creation time: Mon Jul  3 05:07:45 2017

installer version: 375.26


PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin


nvidia-installer command line:

./nvidia-installer

--ui=none

--no-questions

--accept-license

--disable-nouveau


Using built-in stream user interface

-> Detected 8 CPUs online; setting concurrency level to 8.

WARNING: The NVIDIA GRID K520 GPU installed in this system is supported through the NVIDIA 367.xx legacy Linux graphics drivers.  Please visit http://www.nvidia.com/object/unix.html for more information.  The 375.26 NVIDIA Linux graphics driver will ignore this GPU.

WARNING: You do not appear to have an NVIDIA GPU supported by the 375.26 NVIDIA Linux graphics driver installed in this system.  For further details, please see the appendix SUPPORTED NVIDIA GRAPHICS CHIPS in the README available on the Linux driver download page at www.nvidia.com.

-> License accepted by command line option.

-> Installing NVIDIA driver version 375.26.

-> For some distributions, Nouveau can be disabled by adding a file in the modprobe configuration directory.  Would you like nvidia-installer to attempt to create this modprobe file for you? (Answer: Yes)

-> One or more modprobe configuration files to disable Nouveau have been written.  For some distributions, this may be sufficient to disable Nouveau; other distributions may require modification of the initial ramdisk.  Please reboot your system and attempt NVIDIA driver installation again.  Note if you later wish to reenable Nouveau, you will need to delete these files: /etc/modprobe.d/nvidia-installer-disable-nouveau.conf

ERROR: Unable to find the development tool `cc` in your path; please make sure that you have the package 'gcc' installed.  If gcc is installed on your system, then please check that `cc` is in your PATH.

ERROR: Installation has failed.  Please see the file '/var/log/nvidia-installer.log' for details.  You may find suggestions on fixing installation problems in the README available on the Linux driver download page at www.nvidia.com.

~

~



367로 깔아야 하네 ㅋㅋ

깔았다.


$ sudo apt-get install build-essential


아오오 결국


https://gist.github.com/erikbern/78ba519b97b440e10640


이 글이 맞구나


sudo apt-get install -y build-essential python-pip python-dev git python-numpy swig python-dev default-jdk zip zlib1g-dev


이건 내가 콘다르 쓰니까

드라이버는 안 깔아도 되는 모양이다. 쿠다랑 cudnn만 설치한다.

아니, 위 deb 패키지에 딸려온다. 정확히는.


$ sudo apt-get install -y build-essential git swig


http://expressionflow.com/2016/10/09/installing-tensorflow-on-an-aws-ec2-p2-gpu-instance/

아오 자꾸 드라이버 안 맞아. 새 링크ㅏ.


다 최신 최신으로 하려는건 포기. 아마존 환경에선 되는게 있고안 되는게 있다.

사람들이 찾은 되는 세팅대로 그냥 간다.

cudnn은 직접 받아 업로드 해야 하는 불편함이 있...


드디어 대망의 ... 내 스크립트 실행 차례.


ImportError: /home/ubuntu/usr/home/anaconda3/lib/python3.6/site-packages/tensorflow/python/../../../../libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/ubuntu/usr/home/placer/libplacer/_graph.so)


이런 에러도 난다.


$ conda update libgcc


이걸로 해결


그리고 또 실행했는데 cannont insert symbol... 그래픽카드 관련 심볼을 못 넣길래 혹시나 드라이버 로딩인가.. 재부팅 해야지.

하니까 문제가 해결되었다. 굿...

다행히도 세팅 삽질하는 시간은 computing time으로 청구되진 않는 듯 하다.

... 집계가 늦게 된거지, 청구된다. ㅋㅋㅋ;;;

그러니 그나마 가장 싼 g2에서 세팅 놀이 하다가 본 실험을 재빠르게 p2에서 한다.


g2에선 내 iscas 벤치마크도 실행이 안 된다. -_-;; 내것이 그렇게 큰거였다니 ㅋㅋ;;;

뭐, 연구실 1080, 8GB RAM에서 도는데, 1080이 좋은 물건이긴 하지.


아 귀찮다. g2세팅 스냅샷 찍으면 혹시 p2가 잘 도나?

... 그런거 없다. root론 스냅샷 마운트 못함. 아... 곶통스럽네.

그래도 이제 attach detach로 home 파티션을 마운트하면 되니 좀 낫다...


요약하면 이렇다: 생각보다 안 고통스러운데 computing 시간에 포함되는게 좀 짜증남. 미리 다운 받아놔도 그렇게 빠르지 않다.

특히 cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb 이놈은 repository pointer만 있는거라 off-line 설치가 아니라 특히 더 그렇다.


sudo apt update

sudo apt upgrade

sudo apt install -y build-essential git swig


sudo dpkg -i 1-cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb

sudo apt update

sudo apt install -y cuda

sudo dpkg -i 2-libcudnn6_6.0.21-1+cuda8.0_amd64.deb

sudo dpkg -i 3-libcudnn6-dev_6.0.21-1+cuda8.0_amd64.deb

sudo reboot


--------------------

# added by Anaconda3 4.4.0 installer

export PATH="$HOME/usr/home/anaconda3/bin:$PATH"


export EDITOR=vi


export CUDA_HOME=/usr/local/cuda

export CUDA_ROOT=/usr/local/cuda

export PATH=$PATH:$CUDA_ROOT/bin

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_ROOT/lib64

--------------------



물론 필요한 파일들을 서버에 미리미리 다운 받아놔야 함. 다른 공짜 인스턴스를 써서 ㅋ;;


그리고 컴파일 cmake 동원해서 컴파일 해야 하는 것은 당연히 미리 다 컴파일 해둬야 한다. 물론 이역시 실행 잘만 됨.


가격 표를 보니까 p2 instance는 크기가 증가할수록 사용하는 gpu core 개수에 비례해서 과금되네.

즉 2대를 동시에 쓰니까 그만큼 x2의 computing time을 점여했다고 보는 것이다.

어째 K80보다 1080이 더 빠른 느낌이다?;; ㅋㅋㅋㅋ;;;;

맞네. 연구실컴이 더 빠르다. 그래도 일단 gpu scaling 실험만 하면 되니까...


자동 scale 그런거 없다.

내가 GPU mapping은 해줘야 함. 그래도 CUDA나 다른 low level보다 훨씬 쉬우니까...