호돌찌의 AI 연구소
article thumbnail

 

한 달 동안 블로그 글을 쓰지 않았는데, 가장 큰 이유는 올해 Kaggle Expert가 목표(동메달 2개)인 팀원들과 5월 말부터 Kaggle 대회를 참가하고 공을 들였기 때문입니다.

 

참가한 Competition은 간단하게 설명하면, Python에서 다들 Jupyter notebook을 공들여서 작성해본 경험이 있을 텐데, code와 markdown 사이의 순서를 예측하는 것입니다. 이번 대회에서는 생소한 Evaluation Metric인 kendall-tau correlation 통계량이 높은 순으로 leaderboard에 구성되고, 스폰서인 Google이 큰 상금($150,000)을 걸고 한 대회였습니다. 최근에 code 관련된 competiton이 꽤 많이 나오는 것을 느끼고 있었는데, 그와 관련된 NLP 대회가 나와 참가해보게 되었습니다. 아마 추후에는 markdown을 작성하면 sudo code가 자동 완성되는 그런 비즈니스가 기대가 될 것 같습니다. 참가하면서 내가 어떤 점이 부족했고, 앞으로 어떠한 역량이 필요한지 복기 차원으로 작성을 해보겠습니다. 또한 각 Section에 대해 앞으로 공부해야 할 부분 및 참고할 내용에 대해 Reference를 달아놨습니다. 글을 시작해보겠습니다. 


 

1. Parallelism & GPU

AI 산업군에서 체감상 3~4년 전만해도 Algorithm 중심의 trend였지만, 이제 완전히 Data 중심의 Trend로 옮겨졌습니다. Kaggle 대회도 마찬가지로 데이터는 점점 커지고 있고 그에 따라 많은 실험을 하게 되고, 그에 맞게 다양한 Model에 대해  Train 시키느라 많은 시간이 필요했습니다. 물론 Kaggle에서 Inference 시에는 Single-GPU이지만 대회 막판에 더더욱 실험해야 할 가설들(특히 Base Model 대신 Large-Model 실험)이 더 많이 나와 평소에 이 부분을 공부를 해두었다면 시간을 더 많이 확보하여 대회에서 운영하는 데 있어 리스크가 줄었을 것 같습니다. 또한 GPU에 대한 Basis가 부족하다 보니 Error나 속도 부분에서 대처를 못하는 경우가 있었습니다. 

 

- Large Scale LM tutorials(TUNiB)

https://nbviewer.org/github/tunib-ai/large-scale-lm-tutorials/tree/main/notebooks/

- Optimization Approaches for transformers

https://www.kaggle.com/code/vad13irt/optimization-approaches-for-transformers

 

 

2. Custom Model Architecture 

처음에 대회 참가하면서 목표가 메달권이였는데, 현재 위치한 점수와 최상위권에 위치한 점수가 말도 안 되게 차이가 났었습니다. 대회가 끝나고 어떠한 점이 가장 큰 차이였을까 궁금했는데 Large model이나 데이터에 Focusing을 한 것이 아닌,  아래 그림과 같이 다양한 방식으로 Model Architecture를 Custom 하는 부분에서 강한 Edge를 보였다는 것이었습니다. 

 

Public 5, 6th place solution
Public 9, 14th place solution

이러한 부분을 어떻게 고민하고 생각했는지에 대한 사고 과정이 제일 궁금하지만, 그러한 내용은 작성자가 작성하지는 않아 조금은 아쉬웠습니다.(이 부분은 질의응답으로 해결해볼 예정) 하지만 애초에 이렇게 작업했던 사람들 Kaggle Rank가 상당히 높기 때문에 아마도 누적된 실력을 바탕으로 적은 submission으로도 상위권에 Rank될 수 있었던 것 같습니다. 논문 Research도 중요하겠지만 저렇게 model을 구성하기 위해서는 기본기가 정말 중요하다는 것을 또 한 번 배웠습니다. 

 

- https://www.kaggle.com/competitions/AI4Code/discussion/343659

- https://www.kaggle.com/competitions/AI4Code/discussion/343680

- https://www.kaggle.com/competitions/AI4Code/discussion/343714 (code 有)

- https://www.kaggle.com/competitions/AI4Code/discussion/343730 

 

 

3. Ensemble

이전에 국내 NLP 대회에서는 다양한 PLM 모델을 바탕으로 ensemble을 하거나, 데이터를 n-fold한 모델을 많이 활용하였지만 다소 성격이 다른 single-model을 최대한 끌어올린 후 ensemble을 하였을 때에도 고성능을 보인 경우가 있었습니다. 대회하면서 한 architecture에 매몰되는 현상을 팀원 다 같이 느꼈는데 이 부분은 아마 대회 막바지로 가면서 더 편향된 사고를 해서 이러한 일이 일어난 것 같습니다. 앞으로 대회 시간 여유 있을 때 여러 방향으로 실험을 해야겠다는 점을 배웠습니다. 

 

- https://www.kaggle.com/competitions/AI4Code/discussion/343595

 

 

4. Collaboration

팀 인원들과 협업을 했었지만 잘 운영하고 있었다고 했었는데, 대회 후반에 코드 및 데이터가 바뀐 부분이 생겨 실험했었던 점수 및 가설이 다르게 나타나 원인을 찾느라 애를 먹었던 적이 있었습니다. 정말 간단한 하지만 기본적인 부분이였는데 다음 대회에는 조금 더 주의를 할 필요를 느꼈습니다. 또한 팀 운영시 카톡과 notion으로만 운영을 했었는데, 이외 다른 팀 협업한 내용을 보니 여러 Parameter들에 대한 configuration을 도와주는 Hydra, 실험 Tracking으로 W&B 활용, 디스코드로 소통하는 등 여러 Tip들도 엿볼 수 있었습니다. 

 

- https://medium.com/pytorch/hydra-a-fresh-look-at-configuration-for-machine-learning-projects-50583186b710

- https://www.kaggle.com/competitions/AI4Code/discussion/343603

 

 

 

5. Competition Review

Kaggle을 여태 활용하는 용도가 실험할 데이터가 없거나 특정 유관 Task에 대해 리서치를 하는 정도로 끝이 났었는데, 이번에 캐글을 참여하면서 세계의 각종 무림고수들에게 많이 배웠습니다. NLP 관련 Project를 여태까지 참여했었던 방향은 괜찮은 모델을 가져와서 데이터를 다양하게 처리하고 실험하고, 목표 성능을 맞추면서 적당한 Rule을 가미해서 수행했었던 것이 일반적인 방향이었다면, Kaggle은 점수 0.0001이라도 올리기 위해 수많은 가설을 세우고 실험하고 수행했었습니다. 이 부분에서 분석가와 researcher의 큰 Gap을 느끼게 된 것 같습니다.

 

또한 대회 끝나고 상위 솔루션들을 봤을 때 완전히 폐기시켰던 가설(특히 Bag-of-words 방법)이 꽤나 좋은 점수를 보이는 솔루션도 있었고, 머릿속에서는 Feature Engineering이 Model Arichitecture 보다 중요하다고 생각을 했었는데 오히려 더 학습이 잘되면서 대회에 맞게 Design을 하는 것이 더 강한 성능을 보일 수 있다는 것도 깨달았습니다. 그리고 평소에 wandb나 onnx 등 다양한 tool에 대해서 공부를 해두었다면 팀을 운영하는데 많은 도움이 되었을 수 있겠다고 배웠습니다. 

 

대회 중반에서는 아래 그림처럼 은메달에 Rank 되어있을 때, 팀원들이 기뻐했었지만

 대회 후반으로 가니 많은 팀들이 참가해서(마지막 한 달에 4~500팀이 추가로 참가한 기억으로 납니다.) 등수가 상당히 내려앉아있었고 대회 후반에 특정 해외 Kaggler가 모델과 코드를 전부 풀어버려 리더보드가 확 내려앉았었던 경험도 했었습니다. 

 

어떻게 대회는 아래와 같은 등수로 Public Leaderboard에 Rank 되었지만 3개월 동안 Private Testset을 쌓아 최종 결과는 11월 10일에 발표가 납니다. 

 

프로젝트를 하느라 실력이 고립된지 상당히 오래되었는데, 오랜만에 자기객관화를 하게 된 것 같습니다.(큰일이가 난 것 같습니다.) 다음 대회 참가하기 이전에 대회 복기와 기본기 단련 후 은메달에 도전해봐야겠습니다. 

 

 


** 추가) 11월 12일에 inference 후에 82등으로 마무리 하였습니다. 메달 하나 더 받아서 Expert를 도전해보도록 하겠습니다! 같이 참가한 동료들과 GPU를 제공해준 회사에 감사드립니다.

profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!