본문 바로가기
Natural Language Processing/Model Compression

[경량화 패키지] TextBrewer 사용 후기

by beeny-ds 2022. 6. 17.

※ Disiller.train()

🤔 TextBrewer를 사용한 경량화 학습 시 train 메서드의 인자는 다음과 같다.
  • optimizer : 옵티마이저
  • dataloader : 데이터 로더 using PyTorch
  • num_epochs : 학습할 epoch 설정
  • num_steps : 학습할 step 설정
  • callback : 학생 모델 검증 함수
  • batch_postprocessor : 후처리 (굳이 설정 안 해줘도 됨)
  • scheduler_class : textbrewer에 있는 scheduler 함수
  • scheduler_args : scheduler_class 설정 용도
  • scheduler : 무시
  • max_grad_norm : gradient vanishing 방지를 위한 설정

🚫 주의 사항

  • num_steps : 설정 시 num_epochs 무시
    • num_epochs를 사용 추천
  • callback : 모델 검증을 위한 로직을 직접 구성해야 됨
    • HuggingFace의 transformers가 익숙하다면 Trainer.evaluate 를 사용할 거라고 생각
    • 위와 같은 함수로 검증한다면 batch_size 설정 시 애매한 상황이 발생할 수 있음
      • 학습할 때는 train_batch_size 설정 값만큼 사용
      • 검증할 때는 eval_batch_size * world_size(#devices) 만큼 사용
      • 때문에 DataLoader(PyTorch) 생성 시 transformers와 사상을 일치시켜야 됨

출처: https://github.com/huggingface/transformers/blob/v4.20.0/src/transformers/trainer.py#L209


 

💡 Tips

만약 HuggingFace의 transformers가 익숙하다면 optimizer 설정, scheduler 설정할 때 transformers 함수를 불러와 사용한다면 여러 가지 실험을 할 수 있다.
다만 transformers 사용 시 textbrewer와 같은 이름으로 설정된 args.가 있으니 overwrite를 신경써서 코딩할 필요가 있다.

 

🙋🏻‍♂️ 저는 textbrewer lib.를 사용해서 여러 가지 실험을 간단하게 했기 때문에 개인적으로 추천 드립니다 :)
  • TextBrewer 패키지는 경량화를 지원하는 형태로 배포되었기 때문에 Deep learning 학습에 필요한 기능들을 직접 정의하거나 다른 패키지에서 가져와 사용해야 한다. 패키지 구성이 단순하지만 다양한 학습 방법 및 기능을 제공하기 때문에 익숙해진다면 손 쉬운 경량화 학습을 할 수 있다고 생각합니다.
  • 아쉬운 점은 kd 관련 더 이상의 코드 개발은 이루어지지 않는다는 점이지만 TextPruner와 같은 다른 경량화 방법은 꾸준히 업데이트 되고 있으니 직접 TextBrewer github에 들어가 확인해보시면 도움이 되지 않을까요.?

 

TextBrewer 패키지 관련 글

이전 글

2022.06.17 - [Natural Language Processing/Model Compression] - [경량화 패키지] TextBrewer란?

2022.06.17 - [Natural Language Processing/Model Compression] - [경량화 패키지] TextBrewer scripts info.

2022.06.17 - [Natural Language Processing/Model Compression] - [경량화 패키지] TextBrewer 학습 Process

반응형

댓글