[Pytorch] 0. Framework 제작연습

장해웅·2020년 12월 6일
1

Framework 만들기

목록 보기
1/2

https://github.com/Longseabear/event-deep-learning


극도의 추상화된 framework를 만들어보고 싶어졌다.

현대들어 추상화로 인한 over-engineering 문제가 발생하고 있다.이는 소프트웨어 엔지니어링 개발자들의 오랜 개발 경험에서 생겨난 하나의 인식이다. 극도의 추상화는 가독성을 떨어뜨린다. 어느 블로그에서는 "개발자는 대게 기술에 대한 욕심이 있는데, 오버엔지니어링은 이런 욕심을 충족시키는 좋은 방법 중 하나다"라고 표현하더라.

하지만 over-engineering이 항상 나쁜가?

내가 딥 러닝 연구를 진행하며 봐온 pytorch로 만들어진 프레임워크는 "간단하고 이해하기 쉬운" 코드와 "추상화로 인하여 파악하기 어려운 코드"로 나뉜다. 둘중에 놀랍게도, 추상화된 코드가 더 연구에 있어서 효율적이었다. 간단하고 이해하기 쉬운 코드는 조금의 수정에도 전체 코드를 바꿔야 했고, ablation study등을 진행하기가 힘들었다. 따라서 나는, over-enginerring이 단순 개발자의 욕심이라는 점에 동의하지 않는다. 필요에 따라, 상황에 따라 엔지니어링 스타일은 변화해야만 한다.

하지만, 위의 말을 바로 뒤집어서, 극도의 추상화는 코드의 가독성을 심하게 해친다. 따라서, 선을 잡는게 중요하다고 생각한다. 어느 정도까지의 추상화가 옳은가?

그 답을 얻기 위해서 이번 프로젝트는 완전 극도로 추상화된 딥 러닝 프레임워크를 만들고자 한다. 해당 딥 러닝 프레임워크는 다음과 같은 사항을 만족시키도록 노력할 것이다.

  • Single Responsiblity Principle (단일 책임 원칙)
  • Open-Closed Principle (개방-패쇄 원칙)
  • Liskov Substitution Principle (리스코프 치환 원칙)
  • Dependency Inversion Principle (의존 역전 원칙)
  • Interface Segregation Principle (인터페이스 분리 원칙)

그리고 개인적인 욕심으로 다음과 같은 사항을 추가할 것이다.

  • IPC를 이용한 training 제어 (실행 도중 명령)
  • yaml을 통한 전체 딥 러닝 프레임워크 제어
  • 쉬운 visualization 도구

profile
So I leap!

0개의 댓글