Hugging Face์์ ๐ค `transformers` ์ฌ์ฉํ๊ธฐ
Hugging Face์์ ๐ค transformers ์ฌ์ฉํ๊ธฐ
๐ค transformers๋ Hugging Face์ ์ปค๋ฎค๋ํฐ๊ฐ ์ ์ง ๊ด๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, PyTorch, TensorFlow, JAX๋ฅผ ์ํ ์ต์ (state-of-the-art) ๋จธ์ ๋ฌ๋์ ์ ๊ณตํด์. ํ
์คํธ, ๋น์ , ์ค๋์ค ๊ฐ์ ๋ค์ํ ๋ชจ๋ฌ๋ฆฌํฐ์ ํ์คํฌ๋ฅผ ์ํํ ์ ์๋ ์์ฒ ๊ฐ์ ์ฌ์ ํ์ต ๋ชจ๋ธ์ ์ ๊ณตํฉ๋๋ค. ๋ค์ ํธํฅ์ ์ด๊ธด ํ์ง๋ง ์ ํฌ๋ ๐ค transformers๋ฅผ ์ ๋ง ์ข์ํด์!
์ถ์ฒ: ๋ฌธ์
๋ณธ๋ฌธ
ํ๋ธ์์ ๐ค transformers ํ์ํ๊ธฐ
ํ๋ธ์๋ 630,000๊ฐ ์ด์์ transformers ๋ชจ๋ธ์ด ์์ผ๋ฉฐ, ๋ชจ๋ธ ํ์ด์ง ์ผ์ชฝ์ ํํฐ๋ก ์ฐพ์ ์ ์์ด์.
๋ค์ํ ํ์คํฌ์ ๋ชจ๋ธ์ ์ฐพ์ ์ ์์ต๋๋ค:
- ๋ฌธ๋งฅ์์ ๋ต ์ถ์ถ (question-answering)
- ํฐ ํ ์คํธ์์ ์์ฝ ์์ฑ (summarization)
- ํ ์คํธ ๋ถ๋ฅ(์: ์คํธ ์ฌ๋ถ, text-classification)
- GPT ๊ฐ์ ๋ชจ๋ธ๋ก ์ ํ ์คํธ ์์ฑ (text-generation)
- ๋ฌธ์ฅ์์ ํ์ฌ(๋์ฌ, ์ฃผ์ด ๋ฑ)๋ ๊ฐ์ฒด(๊ตญ๊ฐ, ์กฐ์ง ๋ฑ) ์๋ณ (token-classification)
- ์ค๋์ค ํ์ผ์ ํ ์คํธ๋ก ๋ณํ (automatic-speech-recognition)
- ์ค๋์ค ํ์ผ์ ํ์ ๋๋ ์ธ์ด ๋ถ๋ฅ (audio-classification)
- ์ด๋ฏธ์ง์์ ๊ฐ์ฒด ๊ฐ์ง (object-detection)
- ์ด๋ฏธ์ง ๋ถํ (image-segmentation)
- ๊ฐํํ์ต ์ํ (reinforcement-learning)!
๋ธ๋ผ์ฐ์ ๋ด ์์ ฏ ๋๋ถ์ ๋ค์ด๋ก๋ ์์ด ๋ฐ๋ก ๋ชจ๋ธ์ ์ํํด ๋ณด๊ณ ์ถ๋ค๋ฉด ๋ธ๋ผ์ฐ์ ์์ ์ง์ ์คํํด ๋ณผ ์๋ ์์ด์!
Transformers ์ ์ฅ์ ํ์ผ
Transformers ๋ชจ๋ธ ์ ์ฅ์์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ธ ํ์ผ๊ณผ ์ ์ฒ๋ฆฌ๊ธฐ(preprocessor) ํ์ผ์ด ๋ค์ด ์์ด์.
๋ชจ๋ธ (Model)
-
config.jsonํ์ผ์ ์๋ ๋ ์ด์ด ์, ์ดํ ํฌ๊ธฐ, ์ดํ ์ ํค๋ ์, ๊ฐ ํค๋์ ์ฐจ์ ๋ฑ ๋ชจ๋ธ ์ํคํ ์ฒ์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ ์ฅํด์. ์ด ๋ฉํ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ธ์ ์ฒญ์ฌ์ง์ด์์. -
model.safetensorsํ์ผ์ ๋ชจ๋ธ์ ์ฌ์ ํ์ต ๋ ์ด์ด์ ๊ฐ์ค์น๋ฅผ ์ ์ฅํด์. ํฐ ๋ชจ๋ธ์ ๊ฒฝ์ฐ ๋ก๋์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ํํ๊ธฐ ์ํด safetensors ํ์ผ์ ์ค๋ฉ(sharding)ํฉ๋๋ค.model.safetensors.index.jsonํ์ผ์ ์ด์ด ๋ชจ๋ธ ๊ฐ์ค์น๊ฐ ์ด๋ค safetensors ํ์ผ์์ ๋ก๋๋๋์ง ํ์ธํ ์ ์์ด์.{ "metadata": { "total_size": 16060522496 }, "weight_map": { "lm_head.weight": "model-00004-of-00004.safetensors", "model.embed_tokens.weight": "model-00001-of-00004.safetensors", ... } }๋ชจ๋ธ ์นด๋์ โ ๋ฒํผ์ ํด๋ฆญํด ์ด ๋งคํ์ ์๊ฐํํ ์๋ ์์ด์.
Safetensors๋ pickle๋ณด๋ค ๋ ์์ ํ๊ณ ๋น ๋ฅธ, ๋ชจ๋ธ ๊ฐ์ค์น ์ ์ฅ์ฉ ์ง๋ ฌํ ํ์์ด์์.
bin,pth,ckpt๊ฐ์ ํ์์ ํผํด ๊ฐ์ค์น๋ฅผ ๋ง๋ ์๋ ์์ง๋ง,safetensors๋ ๋ ๋์ ๋์์ผ๋ก ๋ชจ๋ธ ์ํ๊ณ์์ ์ ์ ๋ ์ฑํ๋๊ณ ์์ด์. -
๋ชจ๋ธ์๋ ์ํ๋ง ์ฌ๋ถ, ์ํ๋งํ ์์ ํ ํฐ, temperature, ์์ฑ ์์ยท์ข ๋ฃ์ฉ ํน์ ํ ํฐ ๋ฑ ํ ์คํธ ์์ฑ ๋ฐฉ๋ฒ์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ ์ฅํ๋
generation_config.jsonํ์ผ์ด ์์ ์๋ ์์ด์.
์ ์ฒ๋ฆฌ๊ธฐ (Preprocessor)
tokenizer_config.jsonํ์ผ์ ๋ชจ๋ธ์ด ์ถ๊ฐํ ํน์ ํ ํฐ์ ์ ์ฅํด์. ์ด ํน์ ํ ํฐ์ ๋ฌธ์ฅ์ ์์, ์ฑํ ํ ํ๋ฆฟ์ ์ํ ํน์ ํ์, ์ด๋ฏธ์ง ํ์ ๋ฑ ๋ง์ ๊ฒ์ ๋ชจ๋ธ์ ์๋ ค ์ค์. ์ด ํ์ผ์ ๋ชจ๋ธ์ด ์์ฉํ ์ ์๋ ์ต๋ ์ ๋ ฅ ์ํ์ค ๊ธธ์ด, ์ ์ฒ๋ฆฌ๊ธฐ ํด๋์ค, ๋ฐํํ๋ ์ถ๋ ฅ๋ ๋ณด์ฌ์ค์.tokenizer.jsonํ์ผ์ ๋ชจ๋ธ์ ํ์ต๋ ์ดํ(vocabulary)๋ฅผ ์ ์ฅํด์.- **
special_tokens_map.json**์ ํน์ ํ ํฐ์ ๋งคํ์ด์์. ์๋ฅผ ๋ค์ด Llama 3.1-8B-Instruct์์ ๋ฌธ์์ด ์์ ํ ํฐ์"<|begin_of_text|>"์์.
[!TIP] ๋ค๋ฅธ ๋ชจ๋ฌ๋ฆฌํฐ์ ๊ฒฝ์ฐ
tokenizer_config.jsonํ์ผ์preprocessor_config.json์ผ๋ก ๋์ฒด๋ฉ๋๋ค.
๊ธฐ์กด ๋ชจ๋ธ ์ฌ์ฉํ๊ธฐ
๋ชจ๋ transformers ๋ชจ๋ธ์ ํ ์ค์ด๋ฉด ์ฌ์ฉํ ์ ์์ด์! ์ฌ์ฉ ๋ฐฉ์์ ๋ฐ๋ผ pipeline ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ณ ์์ค API๋ฅผ ์ฐ๊ฑฐ๋, ๋ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ํด AutoModel์ ์ฌ์ฉํ ์ ์์ด์.
# With pipeline, just specify the task and the model id from the Hub.
from transformers import pipeline
pipe = pipeline("text-generation", model="distilbert/distilgpt2")
# If you want more control, you will need to define the tokenizer and model.
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
ํน์ ๋ฒ์ (์ปค๋ฐ ํด์, ํ๊ทธ ์ด๋ฆ, ๋๋ ๋ธ๋์น ๊ธฐ๋ฐ)์์ ๋ชจ๋ธ์ ๋ก๋ํ ์๋ ์์ด์:
model = AutoModel.from_pretrained(
"julien-c/EsperBERTo-small", revision="v2.0.1" # tag name, or branch name, or commit hash
)
ํน์ ๋ชจ๋ธ ๋ก๋ ๋ฐฉ๋ฒ์ ๋ณด๊ณ ์ถ๋ค๋ฉด Use in Transformers๋ฅผ ํด๋ฆญํ๋ฉด ๋ก๋ํ ์ ์๋ ๋์ํ๋ ์ค๋ํซ์ ์ป์ ์ ์์ด์! ๋ชจ๋ธ ์ํคํ
์ฒ์ ๋ํ ์ถ๊ฐ ์ ๋ณด๊ฐ ํ์ํ๋ฉด ์ค๋ํซ ํ๋จ์ "Read model documentation"์ ํด๋ฆญํ ์๋ ์์ด์.
๋ชจ๋ธ ๊ณต์ ํ๊ธฐ
transformers๋ก ๋ชจ๋ธ์ ๊ณต์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ์ฒด ๋ด์ฉ์ ๊ณต์ ๋ฌธ์์ Share a model ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
transformers์ ๋ง์ ํด๋์ค(๋ชจ๋ธ, ํ ํฌ๋์ด์ ๋ฑ)์๋ ์ ์ฅ์๋ก ํ์ผ์ ์ฝ๊ฒ ์
๋ก๋ํ ์ ์๋ push_to_hub ๋ฉ์๋๊ฐ ์์ด์.
# Pushing model to your own account
model.push_to_hub("my-awesome-model")
# Pushing your tokenizer
tokenizer.push_to_hub("my-awesome-model")
# Pushing all things after training
trainer.push_to_hub()
ํ ์ ์๋ ์ผ์ด ํจ์ฌ ๋ ๋ง์ผ๋ Share a model ๊ฐ์ด๋๋ฅผ ํ์ธํด ๋ณด์๊ธธ ๊ถํด์.
์ถ๊ฐ ์๋ฃ
- Transformers ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- Transformers ๋ฌธ์
- Share a model ๊ฐ์ด๋
๋ ์์๋ณด๊ธฐ (Learn more)
- Transformers ๊ณต์ ๋ฌธ์์์ ํ์ดํ๋ผ์ธ๊ณผ AutoModel์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ฐฐ์ธ ์ ์์ด์.
- ํ๋ธ์
transformers๋ชจ๋ธ ๋ชฉ๋ก์ ํ์ํด ๋ณด์ธ์.