피드로 돌아가기
~Don't~ Repeat Yourself
Hugging Face BlogHugging Face Blog
Backend

Hugging Face가 DRY 원칙을 거부하고 단일 모델 파일 정책을 채택해 50번 이상 복제된 어텐션 메커니즘 코드를 독립적으로 유지

~Don't~ Repeat Yourself

2022년 4월 5일7intermediate

Context

기존의 DRY(Don't Repeat Yourself) 원칙은 소프트웨어 유지보수성을 높이지만, Transformers 라이브러리는 모델별 코드 독립성이 중요했다. BERT의 어텐션 메커니즘이 50개 이상의 모델 파일에 복제되고, 일부 전체 BERT 모델 코드가 다른 모델 파일로 복사되는 상황이 발생했다.

Technical Solution

  • 단일 모델 파일 정책 도입: 각 모델의 전체 포워드 패스 로직을 하나의 파일(modeling_bert.py 등)에만 포함하도록 강제
  • 추상화된 공통 컴포넌트 거부: attention_layer.py 같은 중앙집중식 어텐션 메커니즘 파일 미생성
  • 독립적 기여 프로세스: 새 모델 추가 시 단일 모델 파일만 추가되도록 하여 기존 모델 영향 최소화
  • 광범위한 테스트 체계: 일일 약 20,000개의 테스트 실행으로 모델 간 API 일관성 보장
  • 명확한 코드 작성 표준: 변수명/메서드명 가독성 중심, 캐릭터 효율성보다 표현력 우선

Impact

일일 20,000개 테스트 실행으로 모델 간 일관된 API 유지.

Key Takeaway

오픈소스 라이브러리가 커뮤니티 기여와 모델 코드의 독립적 이해를 최우선으로 할 때, 전통적인 DRY 원칙보다 단일 파일 정책이 더 효과적일 수 있다. 특히 빠르게 진화하는 머신러닝 분야에서는 미래의 새로운 아키텍처 변화를 예측할 수 없으므로 코드 중복을 허용하되 각 모델의 독립성을 보장하는 설계가 장기적 유지보수성을 높인다.


오픈소스 라이브러리나 프레임워크를 설계할 때, 외부 기여자가 단일 파일을 읽고 수정할 수 있도록 모든 필요한 로직을 한 곳에 집중시키면 버그 수정의 난이도를 낮추고 PR 리뷰를 간소화할 수 있다. 또한 고속 진화 분야에서는 향후 표준이 바뀔 가능성을 고려해 조기에 공통 추상화를 강제하지 않고, 대신 광범위한 자동화 테스트로 일관성을 보장하는 전략이 유효하다.

원문 읽기