Docker를 이용해 배포를 하면 편하다..!
컨테이너 안에서 환경설정을 할 수 있기 때문에 효율적이다.
그래서 배포를 할 때는 이미 Docker를 유용하게 쓰고 있었는데
최근에 로컬에서 도커의 쓸 때의 장점을 정말 크게 느꼈다.
진작 로컬 도커를 애용했었더라면 그렇게 삽질하지 않았겠지만.. 덕분에 너무 큰 교훈을 얻었다.
바로 배포환경과 개발환경을 맞출 수 있다는 점!
프로젝트에 AI(Yolov5) 코드를 합치려고 했는데, 코랩에서 잘 돌아가던 코드가 로컬에 왔더니 안 돌아갔다ㅎ
다른 이유가 있는 줄 알았지만 결론은 OS가 달라서였다!
윈도우 노트북으로 개발을 하고 있었기 때문에 해당 에러가 난 것.
하하. 이유를 알고난 후에는 당연히 처음부터 생각했어야 하는 것을 놓친 것 같아 부끄러웠다.
Flask나 Django 서버를 로컬에서 돌릴 때 매번 도커를 빌드했다가 죽였다가 하는게 귀찮아서 그냥 run, runserver 명령어를 애용했었는데 도커의 중요성을 다시 한번 깨달을 수 있었다.
참고로 에러명은 'module object is not callable'이었다. 에러명만 보면 OS 때문에 나는 것 같지가 않아서 처음에 바로 알지 못했다. 그리고 타고 들어가 에러가 나는 부분은 torch.load()로 weight 파일을 불러오는 함수였는데 프로젝트에서 사용하는 pt 파일 중 하나만 그 에러가 나고.. 다른 pt 파일로 돌렸을 때 그 파트에서는 에러가 나지 않아 weight 파일 문제인가 싶다가.. train한 버젼과 실행시키는 버젼이 달라서인가 싶다가(그래서 버젼도 다시 맞추고).. 그랬었다..아 그리고 도커 빌드를 하려면 메모리가 충분히 있어야 한다.
호스트의 리소스가 작업을 시행하기에 부족하면 빌드에 실패한다.
요즘 내가 컴퓨터를 너무 안 끈건지.. cpu 사용량이랑 메모리가 폭발을 하는데 그래서 로컬 도커파일을 분명 맞게 작성한 것 같은데도 중간에 시간이 너무 오래 걸려서 꺼버렸다.
메모리 사용량을 살짝 낮춘 뒤 다시 시도했더니 성공을 하였다.
마찬가지로 서버도 메모리가 적다면 스왑메모리 설정을 통해 늘려주자.
AI와 flask가 담긴 도커 컨테이너인만큼, torch, tensorflow등 상대적으로 무거운 라이브러리들을 설치를 해서 그런가 스왑메모리 없이는 안되더라! (ec2 t2.micro 기준 - gpu없이는 속도가 느리기 때문에 최종 발표를 할 때는 gpu 서버로 옮길 것 같다)