본문 바로가기

ML & DL

Hugging Face 기초 😇

트랜스포머가 대세가 된 요즘 소스 코드에서 허깅 페이스의 transformer 모듈을 자주 보게 된다. 파이토치도 텐서 플로우도 아닌 허깅 페이스는 무엇인지 어떻게 동작하는지 간단히 정리한다.

공식문서가 아주 잘되어 있다. 

huggingface.co/transformers/index.html 

 

Transformers

State-of-the-art Natural Language Processing for Pytorch and TensorFlow 2.0. 🤗 Transformers (formerly known as pytorch-transformers and pytorch-pretrained-be...

huggingface.co


Hugging Face

허깅페이스는 트랜스포머를 기반으로 하는 다양한 모델(transformer.models)과 학습 스크립트(transformer.Trainer)를 구현해 놓은 모듈이다. 원래는 파이토치로 layer, model 등을 선언해주고 학습 스크립트도 전부 구현해야 하지만, 허깅 페이스를 사용하면 이런 수고를 덜 수 있다. 정리하면 '허깅 페이스'라는 회사가 만든 'transformers' 패키지가 있고, 일반적인 파이토치 구현체의 layer.py, model.py이 transformer.models에, train.py 가 transformer.Trainer에 대응된다.

transformer.model 에 구현된 다양한 모델들

transformers.models

트랜스포머 기반의 다양한 모델을 파이토치, 텐서 플로우로 각각 구현해놓은 모듈이다. 또한 각 모델에 맞는 tokenizer도 구현되어 있다. 

 

transformers.Trainer

딥러닝 학습 및 평가에 필요한 optimizer, weight updt, learning rate schedul, ckpt, tensorbord, evaluation 등을 수행한다. Trainer.train 함수를 호출하면 이 모든 과정이 사용자가 원하는 arguments에 맞게 실행된다. pytorch lightning과 비슷하게 공통적으로 사용되는 학습 스크립트를 모듈화 하여 편하게 사용할 수 있다는 점이 장점!  

 

example

예시로 허깅페이스를 활용한 gpt2 main 스크립트를 구현해봤다.

아주 간단하다. Trainer 객체를 model과 데이터셋을 argument로 줘서 생성하고 train method를 호출하면 학습이 수행된다. 

 

Conclusion

1. 기존 파이토치 학습 스크립트에서 반복되는 부분(optimizer, lr schedul, tensorbord, gpu 병렬 처리,..)을 따로 구현하지 않고 arguments로 통제할 수 있는 편안함.

2. 다양한 트랜스포머 기반 모델 구현체를 손 쉽게 당겨 쓸 수 있음(논문 저자들이 허깅 페이스 PR 리뷰 -> 정확함).

3. 이렇게 high level로 모듈화 되어 있기 때문에 커스터마이징이 비교적 어려움

4. 커스터마이징은 소스코드를 참고하여 원하는 class를 상속 받아 overiding 하면 된다.