본문 바로가기
컴퓨터 사이언스/딥러닝

[딥러닝 뉴비의 좌충우돌 일기] 개발환경 셋팅하기(introduction)

by 제크와 죠세핀 2019. 9. 4.
반응형

지난 번 글 이후로 한달의 시간이 지나갔다. 그동안 인턴 마무리하고 대학원 입시가 몰아쳐서 사실 딥러닝 공부를 거의 못했다. 막학기의 여유로 차근차근 딥러닝 공부를 다시 해보자. 오늘의 주제는 개발환경 셋팅하기이다. 그럼 시작해보자.

 

딥러닝에서는 왜 개발환경 셋팅하는 게 중요할까?

사실 C++로 PS 할 때는 개발환경 자체에 대해 별로 신경을 쓰지 않는다.  컴퓨터 포맷하고, VS Code 깔고 GNU 컴파일러 깔면

g++ boj_####.cpp

./a

이렇게만 해도 바로바로 프로그램 실행 결과가 나오기 때문이다. 핵편함.

 

반면 Python으로 딥러닝 코드를 짤 때는 수많은 모듈을 import한다. 다양한 모듈(패키지)을 설치하고 그 기능을 내 코드에서 적재적소에 사용할 수 있다는 게 Python의 장점이다. 그런데.. 이놈의 모듈들 간에는 서로가 서로의 기능끼리 맞물려서 돌아가는 경우가 있다. 즉, dependency가 존재한다.

가령, A라는 모듈에서 B라는 모듈의 함수를 f(arg1, arg2) 이런 식으로 호출한다고 생각해보자. B 모듈에서 함수를 업데이트하면서 f(arg1)으로 함수 인자 받는 게 바뀌었다고 해보면 A 모듈을 사용할 때 문제가 생긴다. ㅠㅠ

특히나 딥러닝과 관련한 라이브러리들은 업데이트 주기가 짧기 때문에 더더욱 이런 dependency 문제가 발생할 확률이 높다. 뭐만 하면 warning이 뜨면서 @@는 곧 deprecated된다고 딴거 쓰라고 협박한다. 나같은 초보가 하기 쉬운 실수이기도 하다. 

"딥러닝 배워야지! 텐서플로우? 파이토치? 아나콘다? CUDA? CUDNN? 일단 최신버전으로 깔면 최신버전이 제일 좋은 거니까 깔아보자!" --> "엥 왜 논문 코드가 안돌아가지? 이 사람이 디버깅도 안하고 올릴 이유는 없고 문제는 내 컴퓨터에서 안돌아가는 거니까..ㅠㅠ 오류 왜나는거야 흑흑흑"(눈물의 디버깅 n시간) 이런 식이다.

이럴 때 에러 메시지를 검색해보면 문제가 되는 이유의 대부분은 패키지 버전 문제이다.(내 경험 상) 코드를 현재 내 버전에 맞게 수정하는 경우도 있지만, stack overflow에 검색해봐도 downgrade했더니 해결되었다거나 그냥 다시 지웠다 설치했더니 됬다거나 업데이트했더니 됬다거나 하는 경우가 대부분이었다. 참고하는 코드에서 친절하게  dependency를 잘 설명해주는 경우도 있지만 그렇지 않은 경우가 많아서 이런 걸 조율하고 하다보면 화가 날 때가 많다. 내 모델을 학습시키는 과정 자체에 집중하고 싶은데 개발환경 셋팅하는데 너무 많은 시간이 드니까. 이렇듯 딥러닝에서 개발환경 셋팅하는 건 정말 중요한 일이면서 상당히 annoying한 일이라고 할 수 있다.

 

아나콘다 가상환경(intro)

그러면 내가 A 코드를 돌릴 땐 파이썬 3.6을 써야 하는데 B 코드를 돌릴 땐 파이썬 2.7을 써야한다고 생각해보자. 이에 따라 따라오는 다른 패키지도 아마 다 버전이 다를 것이다. 그러면 한 컴퓨터에서 파이썬 3.6과 파이썬 2를 동시에 깔고 나머지 패키지도 버전마다 다 동시에 깔아도 되는 걸까? 그러면 안될 것 같다는 생각이 들면 다행이다.

이럴 때 쓰는 게 가상환경이다. 각각의 프로젝트마다 가상환경을 따로 만들고 그곳에서 파이썬 3.6을 깔던 파이썬 2를 깔면 안전하게 각 버전 간의 충돌을 막을 수 있고 나중에 지우기도 수월하다.  중 가장 유명한 게 아나콘다(Anaconda)인데, 패키지 관리를 해주고, 가상환경을 만드는 기능도 제공하는 그런 툴이라 생각하면 된다.

하지만 매번 프로젝트 열 때마다 Conda로 개발환경 셋팅하는 것이 많이 귀찮기도 하고, Conda를 쓰더라도 Conda에서는 안깔리는데 pip로 깔면 되는 것도 있어서 이렇게 여러 패키지를 깔고 지우다보면 어딘가 또 꼬여서 문제는 발생할 수 있다. 이런 문제를 줄여주는 또다른 가상환경 시스템으로 Docker(도커)라는 게 있는 데, 이는 나중에 포스팅에서 다룰 수 있을지도 모르겠다. ㅎㅎ

 

PS. 이렇게 버전 문제에 많이 데이다 보면 가장 최신 버전을 사랑하던 과거와 달리 적당히 안정적이었던 구버전을 좀 더 애용하게 된다.ㅠㅠ 최신 버전은 이제 더이상 나에게 "어디서 버그가 날 지 모르는 검증되지 않은 버전" 그 이상 그 이하도 아니게 되었다.

반응형

댓글