-
Mac + Pycharm professional로 딥러닝 서버 Docker로 돌리기!개발 환경/Pycharm 2020. 2. 20. 19:40반응형
구글은 모든 애플리케이션을 Docker container 기반으로 실행하고, 무려 매주 20억개 컨테이너를 가동한다고 한다. 그만큼 Docker가 대세가 되어가는 만큼 Docker를 기반으로 개발환경을 세팅해보자.
0. Docker 설치 및 예제
Docker를 설치하지 않았고 Docker에 대한 이해가 없다면
https://hanseokhyeon.tistory.com/entry/Docker-Pytorch-GPU로-딥-러닝-개발하기
를 먼저 읽고 오자.
1. 나의 환경
- 로컬
- MacOS
- Pycharm Professional 19.2.4
- 서버
- Ubuntu 18.04
- Docker 19.03.5
2. Socat 설치
서버에 ssh로 접속해서 docker의 2375 port가 노출되어 있는지 확인해보자. xxx.xxx.xxx.xxx는 나의 IP이다.
docker -H tcp://xxx.xxx.xxx.xxx:2375 images
output:
Cannot connect to the Docker daemon at tcp://127.0.0.1:2375. Is the docker daemon running?
소켓이 설치가 안되어있어 노출이 안되는 것이다.
sudo apt update sudo apt install socat
설치가 완료되었으면 본인의 IP:2375로 소켓을 노출시켜보자.
sudo service docker stop sudo dockered -H tcp://xxx.xxx.xxx.xxx
output:
... INFO[2020-02-20T15:00:42.100225878+09:00] API listen on xxx.xxx.xxx.xxx:2375
라고 뜬다. 이 터미널은 닫으면 안된다.
다른 터미널을 열어서 다시 테스트를 해보자.
docker -H tcp://xxx.xxx.xxx.xxx:2375 images
output:
REPOSITORY TAG IMAGE ID CREATED SIZE spoken_language_idenfication latest f37ef7ccbc31 43 hours ago 18.5GB
잘 동작한다.
3. Remote Docker Setting
프로젝트 설정에 들어가서 아래와 같이 세팅한다.
- TCP socker
- Engine API URL: tcp://xxx.xxx.xxx.xxx:2375
밑에 Connection successful이라고 뜨면 된다.
4. Deployment Setting
Deployment는 코드를 수정하면 자동으로 서버로 보내주는 그런 역할을 한다. ssh interpreter를 이용할 때도 같이 사용한다.
- Local path : local에 project path
- Deployment path : server에 저장할 path
5. Interpreter Setting
Interpreter를 docker interpreter로 설정해주자.
- Server : 아까 만든 docker
- Image name : 개발할 때 쓸 docker image
OK를 누르면
Docker image 안에 깔려있는 패키지들이 모두 인식된다.
위와 같이
- Path mappings : <Project root>->/opt/project
로 지정해줘야한다.
6. Edit configurations
마지막으로 Configurations를 수정해줘야 한다.
저 구석에 Edit Configurations를 누른다.
- 빨간 네모 친 곳을 수정해줘야한다.
- Before : -v Local의 작업 디렉토리:container의 작업 디렉토리
- After : -v Server의 작업 디렉토리:container의 작업 디렉토리
Docker를 써본 사람은 알겠지만 -v는 Docker 엔진을 가동하는 local과 container의 디렉토리를 마운트하는 옵션이다. 우리는 server의 작업 디렉토리와 마운트 시켜야하므로 위와 같이 바꿔준다.
7. TEST
import os print(os.system('pip list'))
위와 같은 간단한 코드를 작성해 테스트해보았다.
output:
b196ccb87a5d:python -u /opt/project/sample_code.py Package Version ---------------------- --------------- asn1crypto 0.24.0 audioread 2.1.8 backcall 0.1.0 beautifulsoup4 4.8.0 certifi 2019.6.16 cffi 1.12.3 chardet 3.0.4 conda 4.7.11 conda-build 3.18.9 conda-package-handling 1.3.11 cryptography 2.7 cycler 0.10.0 decorator 4.4.0 filelock 3.0.12 glob2 0.7 idna 2.8 ipython 7.8.0 ipython-genutils 0.2.0 jedi 0.15.1 Jinja2 2.10.1 joblib 0.14.1 kiwisolver 1.1.0 libarchive-c 2.8 librosa 0.7.2 lief 0.9.0 llvmlite 0.31.0 MarkupSafe 1.1.1 matplotlib 3.1.3 mkl-fft 1.0.14 mkl-random 1.0.2 mkl-service 2.3.0 numba 0.48.0 numpy 1.16.5 olefile 0.46 parso 0.5.1 pexpect 4.7.0 pickleshare 0.7.5 Pillow 6.1.0 pip 19.2.2 pkginfo 1.5.0.1 prompt-toolkit 2.0.9 psutil 5.6.3 ptyprocess 0.6.0 pycosat 0.6.3 pycparser 2.19 Pygments 2.4.2 pyOpenSSL 19.0.0 pyparsing 2.4.6 PySocks 1.7.0 python-dateutil 2.8.1 pytz 2019.2 PyYAML 5.1.2 requests 2.22.0 resampy 0.2.2 ruamel-yaml 0.15.46 scikit-learn 0.22.1 scipy 1.4.1 setuptools 41.0.1 six 1.12.0 SoundFile 0.10.3.post1 soupsieve 1.9.2 torch 1.2.0 torchvision 0.4.0a0+6b959ee tqdm 4.32.1 traitlets 4.3.2 urllib3 1.24.2 wcwidth 0.1.7 wheel 0.33.4 0 Process finished with exit code 0
이와 같이 나의 docker image에 설치된 파이썬 패키지의 list를 볼 수 있었다.
8. 오류와 결론
'/Users/hanseokhyeon/Automatic_Speech_Recognition/main.py': [Errno 2] No such file or directory
위와 같은 오류가 난다면 mac, linux server, docker container의 workdir이 죄다 꼬여서 발생할 확률이 높다. 이럴때 해결방법은 조금 무식하지만 max과 linux server의 path를 정확히 일치시키면 발생하지 않는다. 물론 linux에 /Users/hanseokhyeon과 같이 root에 디렉토리를 만드려면 permission denied가 난다. 그러므로 permission을 적절히 수정해주자. 그런 후에 다시 하면 잘 동작할 것이다.
계속 py파일의 working directory가 local의 working directory로 잡혀 고생하였다. 해결 방법은 Configurations를 삭제하고 다시 만드는 방법이었다. 만약 자꾸 다른 path로 접근한다면 삭제하고 다시 만들어서 하자.
지난 글에 이어 이번 글까지 점점 Docker 기반의 개발 환경이 완성되가고 있다. 앞으로는 매우 지저분한 내 서버를 포맷하고 모든 프로젝트를 Docker 기반으로 진행해볼까 한다. ubuntu에는 아무런 패키지를 설치하지 않는 것이 목표다.
출처:
https://conservative-vector.tistory.com/entry/Remote-API-외부-컴퓨터에서도-도커를-이용하기
반응형'개발 환경 > Pycharm' 카테고리의 다른 글
Pycharm에서 server의 docker 사용해서 디버깅하기 (무슨 말?) (0) 2020.09.03 Pycharm + Docker 이용하기 (0) 2020.02.21 Pycharm SSH Terminal 연결하기 (0) 2020.01.21 Pycharm SSH로 로컬에서 서버 run하기 (0) 2020.01.21 - 로컬