[Basic NLP] HuggingFace에 내 모델 포팅하기

jaehyeong.an_·2021년 8월 7일
3

Basic NLP

목록 보기
4/6
post-thumbnail

지난 포스트(Transformers와 Tensorflow를 활용한 BERT Fine-tuning)에 이어,
이번에는 HuggingFace Model Hub에 학습된 모델을 포팅하는 방법에 소개하고자 한다.


1. HuggingFace Model Hub

HuggingFace Model Hub는 코드 공유 저장소인 github와 유사하게 각자 개인들이 학습한 언어모델을 다수에게 공유하는 모델 저장소이다.

BERT, RoBERTa, GPT, XML, T5 등 다양한 언어 모델을 지원하며, PyTorch, Tensorflow, JAX, ONNX 등 다양한 딥러닝 프레임워크를 지원한다.

또한 사용법도 단지 transformers 라이브러리에서 from_pretrained()메소드에 모델의 이름을 넣어주면 곧바로 Hub로 부터 모델을 다운로드 및 로드할 수 있을 정도로 손쉽게 사용할 수 있다.

2. How to use HuggingFace Model Hub

2.1. Install git LFS

HuggingFace Model Hub는 기본적으로 Git을 통해 모델 저장소로 모델을 업로드한다.
하지만 git의 경우 기본적으로 최대 100MB로 업로드 파일의 사이즈에 제한이 걸려있기 때문에 사이즈가 큰 언어모델을 업로드하기 위해서는 Git LFS(Large File Storage)를 이용해야 한다.

# Download
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash

# Install
sudo apt-get install git-lfs

우선 curl 명령어로 git-lfs를 패키지를 다운로드 후 install 명령어로 설치해준다.

cd [your-project-dir]
git lfs install

이후, git-lfs를 사용하려는 프로젝트 디렉토리로 이동 후 git lfs install를 통해 git을 init한다

git config --global user.email "your-email"
git config --global user.name "your-name"

마지막으로 모델을 내 huggingface 계정 저장소로 업로드하기 위해, huggingface의 계정 이메일과 이름을 git config에 설정해주면 git-lfs 설정은 완료된다.

2.2 Porting to HuggingFace Model Hub

hub로 모델을 포팅하는 방법은 Python내에서 이용하는 방법과 Terminal을 이용하는 방법이 있다.

2.2.1 Option 1: by Python

Python내에서 모델을 porting하는 방법은 단지 push_to_hub()라는 메소드를 통해 쉽게 할 수 있다. push_to_hub() 메소드에 모델명 및 API Token 정보만 파라미터로 전달해주면 Hub에 repository 생성 및 모델 포팅까지 한번에 이루어진다.

📌 자세한 내용은 공식 document 참고

## repo
MODEL_SAVE_REPO = 'repo-name' # ex) 'my-bert-fine-tuned'
HUGGINGFACE_AUTO_TOKEN = 'your-api-token' # https://huggingface.co/settings/token
 
## Push to huggingface-hub
model.push_to_hub(
			MODEL_SAVE_HUB_PATH, 
			use_temp_dir=True, 
			use_auth_token=HUGGINGFACE_AUTH_TOKEN
)
tokenizer.push_to_hub(
			MODEL_SAVE_HUB_PATH, 
			use_temp_dir=True, 
			use_auth_token=HUGGINGFACE_AUTH_TOKEN
)

API Token의 경우 본인 계정 로그인 후 https://huggingface.co/settings/token 해당 링크에서 확인할 수 있으며, use_auth_token에 값을 전달해준다.
use_temp_dir의 default값은 False인데, True로 지정할 경우 local 디렉토리에 모델을 저장하지 않고 hub로만 모델을 porting한다. local에 모델을 저장하고 싶을 경우 False로 두면 된다.

2.2.2. Option 2: by Terminal & git

Create a repository

# login
transformers-cli login

# create a repo
# transformers-cli repo create [your-huggingface-model-repository-url]
transformers-cli repo create 'my-bert-fine-tuned'  # example

terminal에서 사용할 경우, 우선 repository를 생성해야하며 위의 명령어를 사용한다.

📌 repository 생성은 termianl 말고 huggingface 홈페이지에서도 가능하다.

Clone the repository

# git clone [your-huggingface-model-repository-url]
git clone https://huggingface.co/jaehyeong/my-bert-fine-tuned # example 

위에서 생성한 repository를 내 local 디렉토리로 clone한다.

Upload your model to hub

# cd [your-huggingface-model-repository-dir]
cd my-bert-fine-tuned

git add .
git commit -m 'commit-message'
git push origin main

clone받은 repository에 저장된 모델을 이동 후, git 명령어를 통해 hub로 모델을 포팅한다.

3. Using my model

python에서 내가 업로드한 모델을 사용하고자 할 경우, 내가 업로드한 모델 저장소의 이름을 transformers의 from_pretrained() 메소드에 계정명/모델 저장소 이름 형식으로 전달해주면 바로 로드가 가능하다!
(아래는 예시 코드)

from transformers import BertTokenizer, BertModel

# Load Tokenizer
tokenizer = BertTokenizer.from_pretrained('jaehyeong/my-bert-fine-tuned')

# Load Model 
model = BertModel.from_pretrained('jaehyeong/my-bert-fine-tuned')

References

profile
🌒 Don't be a knew-it-all, Be a Learn-it-all

3개의 댓글

comment-user-thumbnail
2022년 11월 5일

안녕하세요 구글링하다 댓글남깁니다.
코랩에서 그라디오로 동작여부를 확인한 후
이제 허깅페이스에 올리려고하는데
코랩에서 pip install ~ 이렇게 설치하는 부분을
허깅페이스에서는 어떻게 해야할까요?
keras-cv와 한영번역을 위한 transper만 불러오면 됩니다.

2개의 답글