기록하는삶

[회고/기록] 해커톤/공모전 참가 후기 및 기록 본문

회고, 기록

[회고/기록] 해커톤/공모전 참가 후기 및 기록

mingchin 2021. 12. 23. 20:58
728x90
반응형

지난 한 달간 꽤 열심히 해커톤에 참여했고, 시간이 어떻게 지나갔는지 모르겠다. 결과적으로는 수상을 했음에도 아쉬움이 남는 대회였지만,, 의미 있었던 시간들을 돌아보고 정리하며, 제대로 성장하기 위해 기록을 남기려고 한다. 겪었던 어려움이나 이를 해결했던 방법, 추후에 도움이 될만한 기억할만한 포인트들을 몇몇 키워드 중심으로 정리해보려한다.

1) 데이터

대회 주제는 '외국인 발화 한국어 음성 인식률 향상'이었고, 한 달 안에 모델 개발 및 관련 사업 아이디어까지 제안해야하는 빡빡한 일정이었다. 총 30만 개의 train dataset, 1만 개의 test dataset이 주어졌는데 용량이 100GB가 훌쩍 넘는, 나에게는 처음 접해보는 대용량 데이터였다.

시작부터 덜컹거렸는데, 일단 대회 주최 측에서 데이터 전처리 및 업로드가 시간이 소요된다며 3일이 넘는 시간을 지체하였다. 총 기간이 한 달 남짓인데, 데이터 자체를 볼 수가 없으니 거의 무의미하게 시간이 지나갔던 것 같다. 사업 아이디어에 대한 이야기가 조금 오가긴 했지만, 데이터가 어떤 것인지 감을 잡을 수 조차 없어서 피상적인 이야기만 가능했다. 지금와 다 지나갔으니 할 수 있는 말이지만, 대회 주제를 바탕으로 아이디어 브레인스토밍을 진행하거나 음성인식 관련 오픈소스를 보다 본격적으로 탐구하고 사용법을 익히고 있었다면 좋지 않았을까 싶다. 물론 우리는 이 시기 운영체제 상의 어려움을 고려하여 kaldi 사용을 배제하고, 다른 오픈소스를 탐색하였고 그것이 도움이 되긴 했다.

2) 구글 드라이브는....

우리는 kospeech라는 오픈 소스를 활용해 모델링을 진행하기로 했다. 팀원 셋 중 나는 노트북에 내장 gpu가 없는 상태였고, 나머지 한 명은 용량이 부족해 데이터를 로컬에 다 다운 받지도 못했다. 나머지 한 명이 그나마 본인이 소장한 gpu를 활용해 학습을 진행할 수 있을 것이라 생각했는데, gpu가 지원하는 cudatoolkit 버전이 모델이 필요로 하는 것과 맞지 않아 계속 충돌이 발생하는 상황이었다(최신 버전만 지원하는 gpu였다고 한다.. 해결 방법은 있었을 것 같지만 찾지 못했다.).

제공 받기로 약속 되어있었던 구글 코랩 pro+는 제공될 기미가 보이지 않았고, 로컬에서 학습이 어렵다는 걸 깨닫고 코랩을 활용하려니 구글 드라이브에 음성 파일은 unzip하여 업로드 해야 했는데 그마저도 100GB가 넘는데다 주최 측에서 해주지 않아 우리 사비로 구글 드라이브를 결제하고 해당 파일들을 unzip 해야했다.

개인적으로 이때가 기억에 많이 남는다ㅋㅋ. 30만개의 데이터(zip 파일로 약 90GB)를 웹 상의 구글 드라이브에서 한 번에 unzip 하는 것은 어림도 없었다. 웹브라우저는 상대적으로 다룰 수 있는 데이터의 크기가 작아서, 10000~15000개 정도의 파일만 구글 드라이브에서 제공하는 기능으로 unzip이 가능했다(이를 파악하는 데도 수일이 걸렸다.). 처음엔 손으로 500개씩 올리다가 이건 아니다 싶어 데이터를 30등분하여 zip하고 구글 드라이브에 올리고 unzip을 반복했다.

컴퓨터 세 대를 동원해가며 저 난리를 쳐서 겨우 데이터 30만개를 다 올렸는데, 이후 방법을 찾았다.
https://support.google.com/a/users/answer/9965580?hl=ko

 

데스크톱용 Google Drive 설치 및 설정하기 - Google Workspace 학습 센터

도움이 되었나요? 어떻게 하면 개선할 수 있을까요? 예아니요

support.google.com

데스크탑용 Google Drive 앱을 설치하면, 구글 드라이브(G:)를 마치 로컬 드라이브처럼 사용할 수 있고 코드로 쉽게 조작도 할 수 있으며 서버와의 동기화 속도도 몇 배가 빨랐기 때문에 우리가 데이터를 구글 드라이브에서 사용할 수 있도록 세팅하는데 들였던 약 3일을 3시간 정도로 단축할 수 있었을 것 같다ㅎㅎ.. 그래도 추후 로컬에서 여러가지 테스트를 해보는데 유용하게 썼다.

구글 드라이브 관련해서 느낀점을 요약하면 아래와 같다.
① 구글 드라이브는 훌륭하면서도 생각보다 구리다.
② 웹브라우저로 대용량 데이터를 주고 받는 행위는 지양하자.
③ 구글 드라이브를 웹 상에서 이용하면 파일 갯수조차 확인할 수 없다. 응용프로그램을 설치하여 사용하자.

3) 오픈 소스 활용은 어려워

시간 순서가 좀 뒤죽박죽 된 것 같은데, 무튼 kospeech를 활용하는 과정에서도 정말 어려움이 많았다. 훌륭한 오픈 소스임에는 틀림 없지만, 정말 버그도 많고 오류도 많았다. 단순한 오타부터, 폴더 위치 오류, 실행되지 않는 코드, 이전에 활용한 데이터의 흔적이 남아 해석하기 어려운 코드 등등 수많은 난관을 검색과 분석, 수정보완을 통해 해결해나갔다(이는 복습을 위해 하나씩 정리해나가는 중이다).

그나마 다행인 것은 원 개발자의 소개 영상을 비롯해 그때그때 도저히 못해먹겠을 때쯤 해결할 수 있는 무언가를 찾아낼 수 있었다. 깃허브 등을 통해 발견한, 검증되지 않은 코드를 사용할 때는 이정도 각오는 하는게,, 맞는 것 같기도.

4) 코랩 - 돈 값은 한다.

로컬에서 학습이 불가능하다는 걸 파악하고, 무료로 제공하는 코랩을 사용하려고 시도했었다. 결과적으로 터무니 없이 짧은 런타임을 보여주는 것을 보면서, 고민 끝에 코랩 pro를 12000원을 주고 결제했는데(이마저도 끝까지 주최측에서 약속한 것을 제공받지 못했다,,^^) 결과적으로는 더 빨리 구매 결정을 할 걸 싶었다. 여전히 일정 런타임이 보장되거나, 규칙적인 메모리 부여를 해주지는 않았지만 확실히 쓸만했다.

물론 여전히 30만개의 데이터에 대해 1epoch을 돌릴 gpu 메모리는 부여해주지 않아, 5만개씩 6개로 나누어 학습을 진행했는데 이 결정을 빨리 내린 것이 정말 크게 도움이 되었다. 역시나 최선은 아니었지만 정말 열악했던 대회 환경에서 차선이자 차악을 찾아나갔던 과정이 분명 경험치가 될거라 생각한다.

물론 모델을 학습시키는데 코랩이 적합하다는 얘기는 절대 아니다. 매번 끊기는 런타임 때문에 계속해서 모니터링 해야하고, 관리도 어려우며, 모델을 이어서 학습할 수 있는 구조가 잡혀있을 때나 가능하다.

5) 음성 인식률 향상 해커톤이지 아이디어 경진대회가 아니잖아요,,

열악함의 끝을 보여주는 대회 환경과 위의 여러 난관 끝에, 그래도 우리는 전체 데이터를 활용해 모델을 학습시키고 꽤 준수한 성능을 내는 모델을 완성할 수 있었다. 본래 10팀을 WER, CER로 평가해 본선에 올라가게 하는 대회였지만 참가한 29개 팀 중 모델을 제출한 팀은 3팀이었다고 한다. 그래서 갑자기 중간에 대회 규칙을 바꾸어 사업 아이디어만 내더라도 본선에 올라갈 수 있는 기회를 주었고, 총 6개의 팀을 뽑아 본선에 올렸다.

나중에 안 사실이지만 전체 데이터를 모두 활용해 학습시킨 모델을 완성한 팀은 우리밖에 없었고, 우리는 당연히 이 점이 높게 평가 받을 것이라 기대했다. 그러나 1차 예선 지표인 WER, CER에 대한 점수 비중이 20점 밖에 되지 않았고, 모델 성능이나 최신 모델의 사용 여부 등에 대한 점수까지 합쳐도 40점, 나머지는 다 사업 아이디어에 대한 배점이었다.

결과적으로 우리는 우수상을 받았고, 대상을 받은 팀은 약 4만개 데이터로 학습을 시도하다가 그친 팀이었다. 1등에 집착하거나 결과에 승복하지 못하는 편이 아닌데,, 그래도 너무 아쉬웠다. 평가 항목에 대한 부분은 처음부터 고지되긴 했지만, 알고리즘에 대한 평가가 너무 적은 비중으로 이루어진 느낌이었고 그마저도 제대로 평가에 대한 부분이 공개되지 않고 등수만 공개되어 여전히 나에게 미지수로 남아있다. 우리는 모델을 어떻게든 좋은 성능으로 완성하기 위해 대회 막바지까지 가장 많은 시간을 투자했는데, 이럴거였으면 우리도 학습 대충 시키고 사업 부문에 치중해서 발표자료나 만들지,,,, 제일 아쉬운 건 잘한 팀에 대해 무엇이 훌륭했는지, 우리는 뭐가 부족했는지 제대로 들을 수 있는 시간이 없었다는 점이다. 결과를 떠나 배우는 단계의 나와 같은 사람들에게는 피드백이 곧 자산일텐데.

뭐 아쉬움은 남지만 평가하는 사람들의 포인트를 잘 파악하고 그것에 초점을 맞추는게 중요하다는 걸 배웠다.

 

++ 빡치는 추가 후기^

평가지표가 맨 처음 안내된 것과 달리 진행되었는데, 1)이야 그렇다 치자. 뭐 자기들 맘대로 바꿨지만 공지했으니까.. 근데 2)는 진짜 웃음벨이다. 평가지표 중 알고리즘 부문의 20점은 중간 평가의 결과가 상.대.평.가.로 반영되는 것이었다. 중간 평가에서 우리가 1위였고, 이는 중간 평가 결과가 반영되는 20점에서 우리가 상.대.적.으로 1위의 점수를 받아야하지 않나? 한 평가자는 우리와 대상을 받은 팀에게 저 항목에서 동일한 18점을 부여했고, 우리는 최종 3점 차이로 대상을 놓쳤다. 어떻게 모델 개발이 중요한 하나의 축인 대회에서, 상대 평가를 하는데 30만개를 다 학습한 팀과 4만개도 채 학습시키지 못한 팀이 동일한 점수를 받을 수 있으며, 큰 차이가 아니라고? 성능도 최소 4배는 차이났을텐데?

대단하다 ㅆㅇㅅㄹ 이런 대회 참여하지 마세요^-^

6) 소감

① 팀원의 중요성


대회 내내 편하고 즐거운 편이었는데, 넘 좋은 팀원들과 함께했기 때문인 것 같다. 특히 대회 막바지에 마침 집이 비어서 집에서 2박 3일간 코딩캠프를 열었는데 기억에 꽤 오래 남을 것 같다ㅋㅋㅋㅋㅋ 밥도 해먹거나 시켜먹고, 힘들면 좀 쉬면서 게임도 해가며 정말 열심히 했다.

2박 3일 우리집 풍경이었다.

하나 아쉽기도 하고 깨달은 점이 있다면, 우리 성향이 대체로 비슷했던 것이 장점이자 단점이기도 했던 것 같다. 대부분의 상황에서는 장점이었고,, 발표 피피티 만들 때 참 시간이 오래 걸리고 했던 걸 보면,,? 발표 자료 시각화나 사업화 아이디어 쪽으로 좀 더 감각이 있는 팀원이 한 명 더 있었어도 좋았겠다는 생각도 든다. 물론 넘 훌륭했다 얘들아^

② 주어진 상황에서 그때그때 최선을 찾아가자.

다시 돌아봐도 아찔하다 싶을 정도로 예상치 못한 일들이 많았다. 데이터를 제때 제공 받지 못하고, 제공받은 구글 코랩은 되는 척하다가 안되고, 대회 규정이 바뀌고, 갑자기 환경에 문제가 생기질 않나,, 등등
중간중간 정말 그냥 때려치고 싶은 순간들도 많았는데 돌아보면 결국 당시 상황에서 가장 가능성이 있어보이는 시도부터 하나씩 하다가 방법을 찾거나, 또는 우연히 새로운 길로 접어들기를 반복했던 것 같다.
역시 젤 중요한건 포기하는 걸 포기하는 것.

③ 경험, 흘려보내지 말자.


프로젝트 경험이나 수상 실적 등을 이력으로 삼는 이유를 조금씩 느낀다. 다만 이렇게 기한이 정해져 있는 몰입의 경험에서 시간이 정말 빠르게 지나가기도 하고, 때로는 너무 많은 것들이 한 번에 다가와서 흘러가버리기도 한다는 생각이 든다. 이렇게 하나가 끝나고 나면, 간략하게라도 돌아보고 정리하는 시간을 꼭 가져야 경험이 그만큼 값지게 남겠다 싶다. 특히 시행착오나 어려움이 무엇이었고, 그것을 어떻게 극복했는지 기록하는 습관을 이참에 꼭 들여야겠다.

수고 많았다 나 자신. + 찡구들

728x90
반응형