최종 프로젝트는 자유롭게 주제를 선정해 딥러닝을 활용한 서비스를 만들고 배포해야 했습니다.
저는 기존 경진대회에서 모델링적 부분을 충분히 가져갔다고 판단해 백엔드 개발과 GCP를 통한 클라우드 서빙을 맡았습니다. 개발할때 제 파트와 연관된 부분 말고는 아예 관심을 가지지 않았기 때문에 모델링 쪽 내용은 작성하지 못했습니다.
머신러닝 디자인 패턴
프로젝트 타임라인을 구상하며 모델을 어떤 방식으로 서빙할지 먼저 계획해야 했습니다. 서빙파트를 맡았기에 부캠강의를 수강하고 자료를 서칭 하며 디자인 패턴을 구상했습니다.
디자인 패턴을 정할때 이 글이 특히 도움이 많이 되었습니다.
먼저 어떤식으로든 유저를 받을 수 있는 web single패턴의 프로토타입을 제작한 다음 비동기 기능을 추가해 여러 유저를 동시에 받을 수 있도록 서빙하는 것을 1차 서빙의 목표로 삼았고 이를 최종적으로 클라우드를 통해 상시 서비스가 가능하도록 유지하는 것이 최종적인 목표였습니다.
웹과 클라우드를 통해 서빙하는것이 처음이라 작성하는데 꽤 오래 걸렸는데도 많이 부족한 느낌을 받았습니다. 구상한 디자인 패턴을 명세서처럼 이후에 계속 사용하기보다는 "이런 식으로 서빙할 거다~"를 팀원들에게 설명하거나 발표할 때 사용하는데 더 자주 사용한 것 같습니다.
Backend
백엔드 기술스택으로 강의에서 배운 FastAPI를 사용하였으며 db는 MySQL을 사용하였습니다.
학습하고 구현하는데 많은 어려움이 있었지만 만들고 나서 보니 글로 작성할정도로 강조할 점은 특별히 없어 지나고 나니 뭔가 착착한 기분도 드네요.
굳이 강조할 부분을 짜내자면 서빙할때 파일 구조와 import를 신경 써야 한다는 점입니다.
현재 저희 파일 구조는 아래와 같습니다.
초기에는 모델이 있는 deepfake폴더와 MobileFaceSwap폴더를 backend내부에 넣어 import하는 구조로 사용했습니다.
backend내부에 routers폴더에 있는 파일로 테스트할 때 from backend.deepfake import ~와 같은 형식으로 import하여 테스트했습니다.
그리고 main문의 위치는 당연히 routers내부의 각 파일과는 달라 실행되지 않았고 model과 관련된 파일이 아니라 상대 경로가 포함된 모든 impot문을 수정해 주었던 기억이 있습니다.
GCP
백엔드에 쓸 내용이 별로 없었던 이유가 클라우드를 하면서 고생을 너무 많이 해서 그랬던 것 같은데 말 그대로 클라우드를 처음 사용하며 생전 처음 보는 에러를 몇 개나 겪었습니다.
먼저 저희의 클라우드 서빙 구상도는 아래와 같습니다.
여기서 Vertex AI말고는 전부 구현에 성공했습니다.
클라우드 환경을 만들며 힘들었던 점을 몇 개 꼽자면
- cuda, cudnn환경 설정
- GCE의 자원 불안정성
- n번의 키 공유와 sql서버 오픈
기존에는 wsl을 활용해 cuda와 cudnn을 설치해 본 경험밖에 없는데 리눅스에서 이를 설치하는데 어려움을 겪는 건 당연한 것 같기도 합니다.
GCE에서 서버를 제공하면 정말 아무것도 없는 환경을 받게 되는데 이때 여러 시도를 거쳐 우분투 드라이버 ->cuda(드라이버 업데이트 없이) -> cudnn순서로 설치해 환경을 구성했습니다. 자세한 가이드는 저희 깃허브 리드미에 적혀있습니다.
GCE는 생성할 때 cpu, gpu, hdd를 지정하고 환경을 생성합니다. 하지만 이게 생성이 잘될 때도 있는데 어떤 때는 지역의 자원을 전부 사용하고 있어 생성이 안 되는 경우도 있습니다(경험상 두번 만들때 한번 정도) 특히 짜증 나는 부분은 서버를 중지하고 재시작할 때에도 이러한 에러가 날 수 있다는 점에 있습니다. 쿠다, sql, 라이브러리등 환경 설치를 완료했는데 서버가 재시작이 안되면 발을 동동 구르거나 다른 지역에 서버를 새로 파는 것 말고는 해결책이 없습니다.
저는 그냥 프로젝트 완료 시까지 서버를 쭉 유지했는데 만일 직접 서버를 유지한다면 어째서 도커와 같은 도구로 환경 설정을 자동화해줘야 하는지 그 필요성을 강하게 느꼈습니다.
키 공유하고 sql서버 오픈하는 건 제가 가이드를 상세하게 작성하지 못해 팀원들 개별로 이를 세팅해 줬었는데 다음부터는 환경 구성시 자동화와 문서화에 조금 더 힘을 써야겠다고 느꼈습니다.
가장 많은 걸 배운 프로젝트이지만 제가 구현한 파트에서는 강조할만한 부분이 특별히 없는 프로젝트이기도 했습니다.
특히 클라우드는 이후에도 계속 사용할 서비스라 미리 시행착오를 겪어본 점에서 의미 있었습니다.
이 프로젝트를 마지막으로 부캠에서 6개월간의 교육을 마무리했는데 확실히 이전의 경진대회와는 얻어가는 부분이 확연히 달랐습니다.
모델링적 부분이 아니라 백엔드, 클라우드 서빙등 다른 분야의 개발을 직접 맡아보며 미리 어느 부분을 확실히 정해주면 좋을지 어떤 것을 요구하면 좋을지 등 전체적으로 얇고 넓게 다양한 지식을 배운 것 같습니다.
대회 출처: 네이버 부스트캠프 AI Tech
깃허브 링크: https://github.com/boostcampaitech5/level3_cv_finalproject-cv-11
'Boostcamp' 카테고리의 다른 글
[부스트캠프] 부스트캠프 AI Tech 5기 수료 후기 (2) | 2023.08.22 |
---|---|
[부스트캠프] Semantic Segmentation competition 회고 (0) | 2023.06.29 |
[부스트캠프] object detection competition 회고 (0) | 2023.05.24 |
[부스트캠프] object detection overview (0) | 2023.05.03 |
[부스트캠프] Transformer 정리 (0) | 2023.04.25 |