새소식

Diary - 2022.08.25

오픈소스 컨트리뷰션 아카데미 - 파이토치 허브 : 중간 회고

  • -

왜 참여?

STS 성능 측정 과정에 Hugging Face의 load_metric 함수를 활용하다가 문제점을 발견했던 적이 있었다.

다른 사람들은 같은 문제로 시간을 보내지 않길 바라는 마음으로 관련 내용을 허깅 페이스에 제보하였고, 이를 통해 문제를 해결하는데 기여했던 경험이 있었다.

 

문제의 원인과 해결 방안을 찾는 것도 어려움이 있었지만, 이러한 문제를 Github를 통해 제보하는 데도 꽤 어려움이 있었다. 물론 Git을 안 써본 것은 아니었지만, 당시엔 협업 툴로 사용하기보다는 개인 저장소 정도로만 사용했었다. 실제로 pull request나 merge 등의 기능을 알기는 했지만 신기하다고만 생각할 뿐 활용할 일이 사실 별로 없었다.

첫 인상

그래서인지 당시 접했던 허깅 페이스의 Github 페이지는 굉장히 복잡해 보였다. 실제로 issues와 pull requests엔 엄청 많은 글이 있고, 글 들이 따르는 규칙도 있는 거 같아서 뭔가 잘못하면 큰일 날 거 같은 느낌이 들었다.

실수하지 않으려고 최대한 비슷한 주제를 다룬 글을 참고한 뒤, 내가 찾은 문제점을 이슈에 담아서 제출했다. 다른 사람의 글을 참고하여 enhancement라는 라벨도 똑같이 달았었다.

 

이슈를 남기고도 '잘못된 거 있나?'하고 혼자 생각하고 있었는데, 생각보다 빠르게 답변이 오고 이내 금방 문제가 해결 됐었다. 오픈소스에 기여했다는 사실이 좋긴 했지만, 언젠가 Git 사용법을 익혀서 기여까지의 일련의 과정을 큰 어려움 없이 진행하고 싶다는 생각이 들었다.

2022 오픈소스 컨트리뷰션 아카데미 (contribution.ac)

그러던 중 오픈소스 컨트리뷰션 아카데미라는 활동이 있다는 것을 알게 되고, 오픈소스 기여와 Git을 통한 협업을 동시에 경험할 수 있는 좋은 기회라고 생각하여 참여하게 됐다.

 

무슨 프로젝트?

활동은 프로젝트 단위로 진행되는데, 프로젝트마다 어떤 활동을 하는지에 대한 정보는 미리 공유된다. 따라서 이를 확인하고, 각자 자신이 원하는 프로젝트에 참가 신청을 하면 된다.

 

공개SW 포털 - 공개SW 포털

공개SW 포털

www.oss.kr

참여하고 싶은 프로젝트는 2 가지를 선택해야 했는데, 나는 1 지망으로는 Pytorch Lightning 기여를 선택했고, 2 지망으로는 파이토치 허브 번역을 골랐다. 참고로 각 프로젝트의 주요 활동 내용은 'lightning의 코드를 분석하여 문제점을 찾고 개선하기'와 '파이토치 허브의 문서, 가이드를 번역하고 개선하기'였다.

 

Lightning을 1 지망으로 선택한 이유는, 아무래도 직접 사용하면서 편리함을 많이 느꼈기 때문이다. 학습 과정을 모듈화 하여 유지 보수에도 좋고, 실험 환경도 쉽게 확장할 수 있다는 점에서 굉장히 매력을 느꼈었다. 이런 편리함 프레임 워크를 더 많은 사람들이 활용할 수 있도록 기여한다면 굉장히 가치 있을 것이라고 생각했다.

 

파이토치 허브는 아카데미 과정에 신청하면서 그 존재를 알게 됐는데, 일종의 허깅 페이스라고 생각하면 된다. 번역에 기여하여 사용자를 늘리면 모델이 늘어나고, 그럼 점점 더 사용이 편해지고... 이런 선순환에 기여할 수 있다는 점이 매력적이라고 생각하여 2 지망으로 선택했다.

 

사전 과제 : Lightning

사전 과제

Lightning 프로젝트는 참여 전에, MNIST 분류 코드를 lightning으로 구현하는 사전 과제가 있었다. 기여 전에 lightning을 접해보라는 측면에서 주어진 간단한 과제였다. 당시 lightning을 이미 써봐서 쉽게 끝낼 수 있는 과제였지만, 이왕 하는 거 '언젠가 써봐야지'라고 생각한 hydra를 추가로 적용해서 과제를 수행했다.

 

GitHub - woodywarhol9/hydra-practice: For 2022 Open Source Contiribution Academy

For 2022 Open Source Contiribution Academy. Contribute to woodywarhol9/hydra-practice development by creating an account on GitHub.

github.com

사용하면서, 개인적으로 hydra의 object instantiation이라는 기능이 lightning과 찰떡이라고 생각했다. lightning은 결국 모델 학습 환경을 간편하게 관리하는 것이 목적인데, object instantiation 기능을 사용하면 yaml 파일에 객체를 미리 저장해둘 수 있어 optmizer나 scheduler를 편리하게 활용할 수 있게 되기 때문이다.


파이토치 허브 번역

선발 결과, 파이토치 허브 번역 프로젝트에 참여하게 됐다. 시작에 앞서 모든 프로젝트 참여자가 모이는 발대식도 진행 했었다. 참가하면 다과랑 기념품을 줬는데, 아쉽게도 남은 사진은 없다. 주최-후원사가 많아서 그런지 생각보다 진심인(?) 아카데미라는 인상을 받았다. 

Git 강의

프로젝트 시작에 앞서, Git 사용법을 익힐 수 있도록 강의가 진행됐다. 강의는 거의 하루 종일 진행 됐고, 강의에선 주로 오픈소스 기여에 필요한 기능을 위주로 다뤘다. 다양한 명령어를 익히고, 실습하면서 Git이 버전 관리 뿐만 아니라, 프로젝트의 현황을 파악하는데도 쓰일 수 있다는 사실을 알게된 시간이었다.

 

아카데미 과정은 2022.08.11 이전과 이후를 기준으로 Challenges(챌린지)와 Masters(마스터즈) 과정으로 나뉜다. 이름에서도 알 수 있듯이 챌린지 과정은 프로젝트 수행에 필요한 것들을 미리 경험하는 시간이었다. 개발 환경을 구성하고, 문서를 모의로 번역하는 등의 활동을 진행했다. 

 

활동은 1 주 단위로 진행 됐다. 주차 별로 활동을 정하고 1 주 동안 수행한 뒤에, 온라인으로 함께 얘기 나누며 진행한 내용들을 공유하는 시간을 가졌다. 추가로 오프라인 모임도 있었는데 필수는 아니었다. 하지만 시간이 되면 최대한 참여하려고 했다.

 

주차별 활동 내용을 간단하게 정리하면 다음과 같았다.

1 주차 : 번역하고 싶은 모델 선정 및 파이토치 허브에서 이용해보기

활동에 앞서 3인으로 구성된 팀을 구성했다.

함께한 팀원들이 전부 컴퓨터 비전(CV)에 관심이 있었기 때문에, 번역 피드백을 쉽게 공유할 수 있도록 나도 CV 모델을 선택했다. 파이토치 허브엔 굉장히 다양한 종류의 CV 모델이 있기 때문에, 어떤 모델을 번역할까 고민을 좀 했었다.

 

최종적으론 Knowledge Distillation(KD)와 관련된 MEAL V2를 선택했다. KD에 대해서 궁금했었는데, 이 기회에 공부하고 싶었다. MEAL V2는 모델 이름에 V2가 들어가 있는 만큼, 기존 MEAL에서 몇 가지 사항을 개선한 모델일 것이라고 판단했다. 따라서 우선 기존 MEAL 모델이 무엇인지 알아보려고 논문을 읽었다. 처음엔 중요한 부분만 확인하려고 했는데, 읽다 보니 논문 전문을 읽게 돼 정리하여 블로그 포스팅으로 남겼다. 

 

[논문 정리] MEAL: Multi-Model Ensemble via Adversarial Learning

Abstract ensemble 기법을 활용하면 모델의 성능을 향상 시킬 수 있다. 하지만 ensemble에 이용할 모델을 저장할 추가적인 용량이 필요하며 inference 때 실행이 오래 걸린다는 문제점이 있다. 이때, 여러

only-wanna.tistory.com

이후 MEAL V2를 파이토치 허브를 통해 사용해봤다. 허브를 사용해본 것은 이번이 처음이었는데, 모델에 대한 이해 없이도 파이토치 문법만으로 원하는 기능을 수행할 수 있다는 점이 매력적으로 느껴졌다. 비슷한 기능을 하는 허깅 페이스와 비교했을 때, 파이토치 문법 외에 추가로 익힐 것이 적다는 사실은 큰 장점이다.

 

정말 간단하게 사용할 수 있으니 궁금하면 직접 해보거나, 이 글을 보면 된다.

 

2 주차 : 파이토치 허브 빌드 및 사이트 개선점 제안 

번역된 문서가 적용될, 파이토치 허브 사이트를 직접 빌드해보는 과정을 가졌다. 기존 가이드에도 빌드 과정이 적혀 있지만, 해당 가이드는 MAC 환경을 기준으로만 작성돼 있었다.

나는 윈도우 환경이라서 멘토님이 새로 작성해주신 가이드를 참고하여 빌드했다. 빌드를 위해선 여러 종류의 프로그램을 설치해야 했고, 이 과정에서 버전 문제 등으로 고생하신 분들도 꽤 있었다.

한 분이 어려운 점이 생겨 질문을 했었는데, 당시 컴퓨터를 하고 있었어서 바로 답변을 드릴 수 있었다. 어려운 문제는 아니지만, 빨리 고민을 덜어줄 수 있어서 좋았다.

 

각자 빌드를 끝낸 뒤, 앞서 구성했던 팀원들과 함께 파이토치 허브 사이트 개선안에 대해서 고민하는 시간을 가졌다. 우리 팀은 꽤 많은 개선안을 제시했었는데, 내가 제안한 개선안 중 1개는 사이트 안에 사용 방법 영역 중 모델 공개하기 영역에 다음의 링크를 달아주는 것이다. 당시엔 모델 공개 과정이 꽤 복잡해서 글만 봐서는 이해하기 힘들다고 생각했다.

공개하기가 더 어려운데 내용은...

 

2 주차 : 모의 번역 진행

hub-kr의 실제 문서를 번역, 리뷰하기 전에 해당 저장소를 복사한 다른 환경에서 모의 번역을 진행했다. 처음엔 문서의 길이가 길지 않아 쉽다고 생각했지만, 적은 단어로 정확한 의미를 전달하는 것이 쉽지 않았다. 나름 열심히 고민해서 최적의 표현으로 번역해보려고 노력했다. 

 

학교 다닐 떈 번역된 전공책을 보면서 '어떻게 이런 식으로 번역 하지?'라고 생각했는데, 지금 와서 생각해보면 다 이유가 있었다. 잘 번역하려면, 시간이 너무 오래 걸린다. 

 

[Test] : pytorch_vision_meal_v2.md 번역 by Woodywarhol9 · Pull Request #3 · codingbowoo/22-hub-kr-practice

라이선스 동의 변경해주시는 내용에 BSD 3항 라이선스가 적용됨을 동의해주셔야 합니다. 더 자세한 내용은 기여하기 문서를 참고해주세요. 동의하시면 아래 [ ]를 [x]로 만들어주세요. 기여하기

github.com

 

3 주차 : 팀원 번역 리뷰

앞서 진행한 팀원들의 모의 번역을 리뷰했다. 다들 commit 할 정도면 나름 고민 끝에 올린 번역이었는데도 개선할 점이 꽤 있었다. 물론 내 번역도 그랬다. 신기하게도 내 눈엔 안 보이는 문제점이 다른 사람한텐 잘 보인다. 이래서 어떤 분야든 협업이 중요하다고 강조하는 거 같다.

 

아래 사진은 다른 분의 번역을 보고 내가 남겼던 피드백이다. 도움 됐다는 얘기를 들었을 땐, 기분이 되게 좋았다. 

 

챌린지 끝

챌린지 과정이 끝나고 모든 프로젝트의 멘토·멘티들이 모여서 성과 발표회를 했다. 다 같이 모일 기회가 없어서 몰랐는데, 엄청 다양한 종류의 프로젝트가 있음을 알게 됐다. 특히 양자 컴퓨팅 같은 분야의 프로젝트도 있어서 되게 신기했다. 파이토치 허브 번역 팀 시작에 맞춰서 링크를 설정했으니 궁금하면 클릭하면 된다. 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.