국문과 유목민

[일일리포트] Day 52 (Level2_PStage_8) 본문

IT 견문록/2022_부스트캠프 AITech 3기(100일)

[일일리포트] Day 52 (Level2_PStage_8)

논곰 2022. 4. 4. 22:13

▶ 오늘 한 일

 월요일이다보니까 주말에 한 내용과 관련해서 같이 정리를 하도록 하겠다. 주말과 오늘 동안 크게 Electra모델을 활용했고, 하이퍼파라미터 튜닝을 위해 ray와 wandb sweep을 구현해보고자 했다. 자세한 내용은 아래에서 얘기하도록 하겠다.

ElectraModel활용

 우선 저번 주까지 RoBERTa모델을 통해서 우리 팀 내 가장 높은 성적을 이끌어낼 수 있었다. 그리고 다른 팀원분들께서는 Layer를 쌓는 방법이나, Task를 나눠서 모델을 여러 개 사용하는 방법 등을 시도하고 계셨다. 따라서 나는 다른 pre-trained된 모델을 도입해오고자 했다. 글래서 KoELECTRa모델을 사용하고자 했다. 결론부터 얘기하자면, KoELECTRa모델의 성능이 썩 좋지 않았다. 처음에는 파라미터 세팅이 문제인 줄 알고 다른 방법도 시도했지만, 역시나 좋지 않았었다.  따라서 그 이유에 대해서 찾아봤는데, ELECTRA 모델은 RE(Relation Extraction) Task에서 사용되는 경우를 많이 찾을 수 없었다. 그리고 ElectraModel이 GAN과 같은 느낌으로 생성하고, 이를 구별하는 Task로 학습되다보니 한 문장 내의 관계를 추출하는 Task에서 맞지 않을 수도 있겠다는 잠정적인 결론을 내렸다. 또한 논문을 봤었을 때도 ELECTRA모델의 장점은 가벼움이라고 하는 것으로 봐서... 능을 더 끌어올려야 하는 입장에서 가벼움보다 성능이 더 중요하다고 생각돼 성능이 괜찮게 나온 지금의 pre-trained 모델은 두고 다른 방법을 고민해봐야겠다고 했다.

하이퍼파라미터 튜닝 (wandb sweep, ray)

 Electra모델의 성능이 좋지 않았기에, 다른 성능을 올릴 수 있는 방법을 생각하고 있었다. 그러던 중 다른 팀원분께서 하이퍼파라미터 튜닝 단계에서 막히신다고 하셔서 해당 부분을 도와드리러 튜닝을 맡았다. 처음에는 wandb sweep document가 잘 되어있다고 생각해서 바로 구현을 했다. 그런데 몇 시간 뒤 보니까 새로 바뀌는 파라미터 값들이 trainer에 들어가지 않고 있었다. 그 이유는 우리가 transformer 라이브러리를 활용하고 있었기 때문이라는 생각을 했다. 토요일 하루 종일 정보를 찾다가 Ray tune으로 넘어갔다. 

 그래서 일요일에는 transformer 라이브러리에서 ray를 구현하기 위해 들어갔다. 먼저 하고 계셨던 팀원분께서 기준이 되는 metric 선정에서 애를 먹고 계셨었는데, 나도 그 부분에서 애를 먹었었다. 하지만 몇 번 시도를 해보니 metric이 어떤 이름으로 들어가는 지 알 수 있었고, 이 정보를 활용해 ray를 구현할 수 있었다.

 월요일에는 ray를 구현하기는 했지만, 시각화 부분이나 batch가 32일 때는 OOM이 발생해서 Tunning이 안 되는 문제가 있었다. 따라서 이를 해결하고자 wandb sweep을 다시 해보고자 했다. 마침 transformer라이브러리와 ray tune, wandb까지 사용해서 구현한 코드가 있어서 이를 적용시켜보고자 했다. 하지만 이렇게 하면서 계속해서 오류가 발생했고, 이를 해결하기 위해서 오늘 하루종일을 썼었다. 결국 하루종일을 썼는데도 답이 안 나와서 반쯤 놓고 있었을 때, 처음에 wandb를 구현했을 때의 문제점과 내가 지금까지 얻었던 정보들을 종합해서 한 가지 아이디어를 떠올렸고, 결국 이를 적용해서 sweep을 구동시킬 수 있었다. 

huggingface에서 ray와 wandb sweep을 구현하는 부분은 별도의 포스팅으로 정리할 예정이다.

 

(참고링크) [WandB] Huggingface 라이브러리에서 Sweep 사용하기

▶ 내일 할 일

  • 하이퍼 파라미터 튜닝
  • 새로운 Model 설계 알아보기
  • 프로젝트 진도 따라가기 (Augmentation, New_Model)

 이번 주는 마지막 주이기 때문에 간단하게 느꼈던 점이나 생각들을 적고자 한다. 우선, sweep을 구동시키고 나서 보면 매우 단순했던 부분이었던 것 같다. 어찌보면 돌아서 온 것처럼 보여 '시간을 버렸나'라는 생각이 들기도 하지만 결국 돌아서 공부를 하고 정보를 쌓았기 때문에 해결할 수 있었다는 생각이 더 크다.

 주말동안에 팀원들 모두 많은 성과를 이뤘던 것 같다. 눈에 보이는 성과였을 수도 있고, 눈에 보이지 않는 성과였을 수도 있겠지만 그 짧은 시간 동안에 또 다들 성장한 것 같다는 생각을 했다. 확실히 좋은 사람들과 같이 같은 목표를 향해서 함께 얘기하고 배워나가는 과정은 상당히 값진 것 같다. 

 오랜만에 많은 에러를 보고, 인터넷에도 나와있지 않은 부분을 여러가지를 조합해 해결했기에 뿌듯하면서도 한편으로는 조금 불안하기도 하다. 인터넷 상에 있는 정보들을 모아 때려맞추기 식으로 구현해서 정확하지 않을 수 있겠지만, 일단 돌아간다는 데에 만족한다.

진짜 어케했누....