허깅페이스 모델 배포 방법

hugging face model upload 방법입니다.

KoGPT2를 사용해서 finetuning을 진행한 모델을 배포를 해보려고 합니다.

우분투에서 진행을 합니다. 윈도우 사용자분들은 WSL을 이용하시면 됩니다.


먼저 허깅페이스 홈페이지에 들어간후 아이디를 생성합니다.

그 후에 오른쪽위 동그라미를 눌러서 New Model을 생성합니다.

image

그 후에 원하시는 저장소 이름을 지정하고 공개할것인지 비공개 할것인지 정한 후에 저장소를 생성합니다.

image

빈 저장소가 생성되었습니다.

image

transformers를 설치합니다.

pip install transformers

transformers에 로그인을 합니다.

(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho]$ huggingface-cli login

        _|    _|  _|    _|    _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|_|_|_|    _|_|      _|_|_|  _|_|_|_|
        _|    _|  _|    _|  _|        _|          _|    _|_|    _|  _|            _|        _|    _|  _|        _|
        _|_|_|_|  _|    _|  _|  _|_|  _|  _|_|    _|    _|  _|  _|  _|  _|_|      _|_|_|    _|_|_|_|  _|        _|_|_|
        _|    _|  _|    _|  _|    _|  _|    _|    _|    _|    _|_|  _|    _|      _|        _|    _|  _|        _|
        _|    _|    _|_|      _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|        _|    _|    _|_|_|  _|_|_|_|

Username: ahdbsgh2@naver.com
Password:
Login successful

finetuning을 진행하기 전의 pretraining 된 모델을 git clone 을 진행합니다.

(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho]$ git clone https://huggingface.co/skt/kogpt2-base-v2

## hugging face 홈페이지에서 내가 사용하고자 하는 pretraining 모델에 들어가셔서 주소를 복사하시면 됩니다.

본인이 생성한 저장소도 git clone 을 진행합니다.

(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho]$ git clone https://huggingface.co/momo/test

pretraining 모델에 들어갑니다.

(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho]$ cd kogpt2-base-v2/
(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/kogpt2-base-v2]$ ls
config.json  flax_model.msgpack  pytorch_model.bin  README.md  tokenizer.json

모델이 저장되있는 flax_model.msgpack과 pytorch_model.bin을 삭제합니다.

(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/kogpt2-base-v2]$ rm pytorch_model.bin
(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/kogpt2-base-v2]$ rm flax_model.msgpack
(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/kogpt2-base-v2]$ ls
config.json  README.md  tokenizer.json

본인이 만든 저장소로 갑니다.

(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho]$ cd test/
(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/test]$ ls

##비어있습니다. 

여기 이곳에 삭제하고 남은 config.json 와 tokenizer.json 를 복사합니다.

(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/kogpt2-base-v2]$ cp *.json ../test/

다시 내 저장소로 가서 git add, git commit, git push를 진행합니다.

(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/test]$ ls
config.json  tokenizer.json
(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/test]$ git add .
(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/test]$ git commit -m 'add tokenizer'
[main dbcb2e0] add tokenizer
 2 files changed, 96857 insertions(+)
 create mode 100644 config.json
 create mode 100644 tokenizer.json
 (momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/test]$ git push
Username for 'https://huggingface.co': ahdbsgh2@naver.com
Password for 'https://ahdbsgh2@naver.com@huggingface.co':
Counting objects: 4, done.
Delta compression using up to 20 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 609.50 KiB | 6.42 MiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To https://huggingface.co/momo/test
   6d90a48..dbcb2e0  main -> main

이제 본인이 finetuning한 pt파일을 올릴 것 입니다.

본인 finetuning한 pt파일을 내 저장소로 옮기는데 이때 파일명을 pytorch_model.bin으로 해줍니다.

(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/test]$ ls
config.json  pytorch_model.bin  tokenizer.json

이제 옮겨졌으니 다시 git add, git commit, git push를 해야하는데 파일크기가 매우 크므로 여기서는 git lfs를 사용합니다.

본인이 만든 저장소로 갑니다.

(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/test]$ git lfs install
Updated git hooks.
Git LFS initialized.
(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/test]$ git lfs track pytorch_model.bin ## 내가 올릴 대용량 파일을 track합니다. 
Tracking "pytorch_model.bin"
(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/test]$ git add . ## 모두 git add를 합니다.
(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/test]$ git commit -m 'add model' ## commit 합니다. 
[main 6dd97bb] add model
 2 files changed, 4 insertions(+)
 create mode 100644 pytorch_model.bin
(momo) [nlplab@RTX30-nlplab: ~/Devlopment/yunho/test]$ git push
Username for 'https://huggingface.co': ahdbsgh2@naver.com
Password for 'https://ahdbsgh2@naver.com@huggingface.co':
Uploading LFS objects: 100% (1/1), 263 MB | 769 KB/s, done.
Counting objects: 4, done.
Delta compression using up to 20 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 526 bytes | 526.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0)
To https://huggingface.co/momo/test
   dbcb2e0..6dd97bb  main -> main 

이제 끝났습니다!! 이런 방식으로 생성을 하면 됩니다!

제가 했던 예시를 보여드리겠습니다.

image

잘 생성이 된것을 볼 수 있습니다.

이제 이것을 허깅페이스에서 불러와서 사용할 수 있습니다!

model_name = "momo/gpt2-kiosk"
model = AutoModelWithLMHead.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

이제 .pt 파일을 공유할때 이런 방법으로 허깅페이스에 배포 후 사용하면 됩니다.

Leave a comment