9.5 KiB
BioGPT biogpt
๊ฐ์ overview
BioGPT๋ Renqian Luo, Liai Sun, Yingce Xia, Tao Qin, Sheng Zhang, Hoifung Poon, Tie-Yan Liu์ ์ํด BioGPT: generative pre-trained transformer for biomedical text generation and mining ์์ ์ ์๋ ๋ชจ๋ธ์ ๋๋ค. BioGPT๋ ์๋ฌผ์ํ ํ ์คํธ ์์ฑ๊ณผ ๋ง์ด๋์ ์ํด ๋๋ฉ์ธ์ ํนํ๋ ์์ฑํ ์ฌ์ ํ์ต ํธ๋์คํฌ๋จธ ์ธ์ด ๋ชจ๋ธ์ ๋๋ค. BioGPT๋ ํธ๋์คํฌ๋จธ ์ธ์ด ๋ชจ๋ธ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๋ฉฐ, 1,500๋ง ๊ฐ์ PubMed ์ด๋ก์ ์ด์ฉํด ์ฒ์๋ถํฐ ํ์ต๋์์ต๋๋ค.
๋ ผ๋ฌธ์ ์ด๋ก์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
์๋ฌผ์ํ ๋ถ์ผ์์ ์ฌ์ ํ์ต๋ ์ธ์ด ๋ชจ๋ธ์ ์ผ๋ฐ ์์ฐ์ด ์ฒ๋ฆฌ ๋ถ์ผ์์์ ์ฑ๊ณต์ ์๊ฐ์ ๋ฐ์ ์ ์ ๋ ๋ง์ ์ฃผ๋ชฉ์ ๋ฐ๊ณ ์์ต๋๋ค. ์ผ๋ฐ ์ธ์ด ๋ถ์ผ์์ ์ฌ์ ํ์ต๋ ์ธ์ด ๋ชจ๋ธ์ ๋ ๊ฐ์ง ์ฃผ์ ๊ณํต์ธ BERT(๋ฐ ๊ทธ ๋ณํ)์ GPT(๋ฐ ๊ทธ ๋ณํ) ์ค ์ฒซ ๋ฒ์งธ๋ ์๋ฌผ์ํ ๋ถ์ผ์์ BioBERT์ PubMedBERT์ ๊ฐ์ด ๊ด๋ฒ์ํ๊ฒ ์ฐ๊ตฌ๋์์ต๋๋ค. ์ด๋ค์ ๋ค์ํ ๋ถ๋ฅ ๊ธฐ๋ฐ์ ์๋ฌผ์ํ ์์ ์์ ํฐ ์ฑ๊ณต์ ๊ฑฐ๋์์ง๋ง, ์์ฑ ๋ฅ๋ ฅ์ ๋ถ์กฑ์ ๊ทธ๋ค์ ์ ์ฉ ๋ฒ์๋ฅผ ์ ํํ์ต๋๋ค. ๋ณธ ๋ ผ๋ฌธ์์๋ ๋๊ท๋ชจ ์๋ฌผ์ํ ๋ฌธํ์ ์ฌ์ ํ์ตํ ๋๋ฉ์ธ ํนํ ์์ฑํ ํธ๋์คํฌ๋จธ ์ธ์ด ๋ชจ๋ธ์ธ BioGPT๋ฅผ ์ ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ 6๊ฐ์ ์๋ฌผ์ํ ์์ฐ์ด ์ฒ๋ฆฌ ์์ ์์ BioGPT๋ฅผ ํ๊ฐํ ๊ฒฐ๊ณผ, ๋๋ถ๋ถ์ ์์ ์์ ์ด์ ๋ชจ๋ธ๋ณด๋ค ์ฐ์ํ ์ฑ๋ฅ์ ๋ณด์์ต๋๋ค. ํนํ, BC5CDR, KD-DTI, DDI ์๋-ํฌ-์๋ ๊ด๊ณ ์ถ์ถ ์์ ์์ ๊ฐ๊ฐ 44.98%, 38.42%, 40.76%์ F1 ์ ์๋ฅผ ๊ธฐ๋กํ์์ผ๋ฉฐ, PubMedQA์์ 78.2%์ ์ ํ๋๋ฅผ ๋ฌ์ฑํด ์๋ก์ด ๊ธฐ๋ก์ ์ธ์ ์ต๋๋ค. ๋ํ ํ ์คํธ ์์ฑ์ ๋ํ ์ฌ๋ก ์ฐ๊ตฌ๋ ์๋ฌผ์ํ ์ฉ์ด์ ๋ํ ์ ์ฐฝํ ์ค๋ช ์ ์์ฑํ๋ ๋ฐ ์์ด BioGPT์ ์ฅ์ ์ ๋์ฑ ์ ์ฆํ์ต๋๋ค.
์ด ๋ชจ๋ธ์ kamalkraj์ ์ํด ๊ธฐ์ฌ๋์์ต๋๋ค. ์๋ณธ ์ฝ๋๋ ์ฌ๊ธฐ์์ ์ฐพ์ ์ ์์ต๋๋ค.
์ฌ์ฉ ํ usage-tips
- BioGPT๋ ์ ๋์ ์์น ์๋ฒ ๋ฉ(absolute position embedding)์ ์ฌ์ฉํ๋ฏ๋ก, ์ ๋ ฅ์ ์ผ์ชฝ์ด ์๋ ์ค๋ฅธ์ชฝ์์ ํจ๋ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
- BioGPT๋ ์ธ๊ณผ์ ์ธ์ด ๋ชจ๋ธ๋ง(Causal Langague Modeling, CLM) ๋ชฉํ๋ก ํ์ต๋์๊ธฐ ๋๋ฌธ์, ๋ค์ ํ ํฐ์ ์์ธกํ๋ ๋ฐ ๊ฐ๋ ฅํ ์ฑ๋ฅ์ ๋ณด์
๋๋ค. ์ด ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ BioGPT๋ ๊ตฌ๋ฌธ์ ์ผ๋ก ์ผ๊ด๋ ํ
์คํธ๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ์์ ์คํฌ๋ฆฝํธ
run_generation.py์์ ์ด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. - ์ด ๋ชจ๋ธ์
past_key_values(PyTorch ์ฉ)๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ ์๋๋ฐ, ์ด๋ ์ด์ ์ ๊ณ์ฐ๋ ํค/๊ฐ ์ดํ ์ ์์ ๋๋ค. ์ด ๊ฐ์ ์ฌ์ฉํ๋ฉด ํ ์คํธ ์์ฑ ์ค ์ด๋ฏธ ๊ณ์ฐ๋ ๊ฐ์ ๋ค์ ๊ณ์ฐํ์ง ์๋๋ก ํ ์ ์์ต๋๋ค. PyTorch์์past_key_values์ธ์๋ BioGptForCausalLM.forward() ๋ฉ์๋์์ ์์ธํ ์ค๋ช ๋์ด ์์ต๋๋ค.
Scaled Dot Product Attention(SDPA) ์ฌ์ฉ using-scaled-dot-product-attention-sdpa
PyTorch๋ torch.nn.functional์ ์ผ๋ถ๋ก ์ค์ผ์ผ๋ ์ ๊ณฑ ์ดํ
์
(SDPA) ์ฐ์ฐ์๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจํฉ๋๋ค. ์ด ํจ์๋ ์
๋ ฅ๊ณผ ์ฌ์ฉ ์ค์ธ ํ๋์จ์ด์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ตฌํ์ ์ ์ฉํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๊ณต์ ๋ฌธ์ ๋๋ GPU ์ถ๋ก ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
torch>=2.1.1์์ ๊ตฌํ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ SDPA๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ, attn_implementation="sdpa"๋ฅผ from_pretrained()์์ ์ค์ ํ์ฌ SDPA ์ฌ์ฉ์ ๋ช
์์ ์ผ๋ก ์์ฒญํ ์ ์์ต๋๋ค.
from transformers import BioGptForCausalLM
model = BioGptForCausalLM.from_pretrained("microsoft/biogpt", attn_implementation="sdpa", dtype=torch.float16)
NVIDIA GeForce RTX 2060-8GB, PyTorch 2.3.1, Ubuntu 20.04 ํ๊ฒฝ์์ float16 ๋ฐ CausalLM ํค๋๊ฐ ์๋ microsoft/biogpt ๋ชจ๋ธ๋ก ๋ก์ปฌ ๋ฒค์น๋งํฌ๋ฅผ ์ํํ ๊ฒฐ๊ณผ, ํ๋ จ ์ค ๋ค์๊ณผ ๊ฐ์ ์๋ ํฅ์์ ํ์ธํ์ต๋๋ค.
์ต์ ์ ์๋ ํฅ์์ ์ํด ๋ชจ๋ธ์ ๋ฐ์ ๋ฐ๋(์: torch.float16 ๋๋ torch.bfloat16)๋ก ๋ก๋ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
| num_training_steps | batch_size | seq_len | is cuda | Time per batch (eager - s) | Time per batch (sdpa - s) | Speedup (%) | Eager peak mem (MB) | sdpa peak mem (MB) | Mem saving (%) |
|---|---|---|---|---|---|---|---|---|---|
| 100 | 1 | 128 | False | 0.038 | 0.031 | 21.301 | 1601.862 | 1601.497 | 0.023 |
| 100 | 1 | 256 | False | 0.039 | 0.034 | 15.084 | 1624.944 | 1625.296 | -0.022 |
| 100 | 2 | 128 | False | 0.039 | 0.033 | 16.820 | 1624.567 | 1625.296 | -0.045 |
| 100 | 2 | 256 | False | 0.065 | 0.059 | 10.255 | 1672.164 | 1672.164 | 0.000 |
| 100 | 4 | 128 | False | 0.062 | 0.058 | 6.998 | 1671.435 | 1672.164 | -0.044 |
| 100 | 4 | 256 | False | 0.113 | 0.100 | 13.316 | 2350.179 | 1848.435 | 27.144 |
| 100 | 8 | 128 | False | 0.107 | 0.098 | 9.883 | 2098.521 | 1848.435 | 13.530 |
| 100 | 8 | 256 | False | 0.222 | 0.196 | 13.413 | 3989.980 | 2986.492 | 33.601 |
NVIDIA GeForce RTX 2060-8GB, PyTorch 2.3.1, Ubuntu 20.04 ํ๊ฒฝ์์ float16 ๋ฐ AutoModel ํค๋๊ฐ ์๋ microsoft/biogpt ๋ชจ๋ธ๋ก ์ถ๋ก ์ค ๋ค์๊ณผ ๊ฐ์ ์๋ ํฅ์์ ํ์ธํ์ต๋๋ค.
| num_batches | batch_size | seq_len | is cuda | is half | use mask | Per token latency eager (ms) | Per token latency SDPA (ms) | Speedup (%) | Mem eager (MB) | Mem BT (MB) | Mem saved (%) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 50 | 1 | 64 | True | True | True | 0.115 | 0.098 | 17.392 | 716.998 | 716.998 | 0.000 |
| 50 | 1 | 128 | True | True | True | 0.115 | 0.093 | 24.640 | 730.916 | 730.916 | 0.000 |
| 50 | 2 | 64 | True | True | True | 0.114 | 0.096 | 19.204 | 730.900 | 730.900 | 0.000 |
| 50 | 2 | 128 | True | True | True | 0.117 | 0.095 | 23.529 | 759.262 | 759.262 | 0.000 |
| 50 | 4 | 64 | True | True | True | 0.113 | 0.096 | 18.325 | 759.229 | 759.229 | 0.000 |
| 50 | 4 | 128 | True | True | True | 0.186 | 0.178 | 4.289 | 816.478 | 816.478 | 0.000 |
๋ฆฌ์์ค resources
BioGptConfig transformers.BioGptConfig
autodoc BioGptConfig
BioGptTokenizer transformers.BioGptTokenizer
autodoc BioGptTokenizer - save_vocabulary
BioGptModel transformers.BioGptModel
autodoc BioGptModel - forward
BioGptForCausalLM transformers.BioGptForCausalLM
autodoc BioGptForCausalLM - forward
BioGptForTokenClassification transformers.BioGptForTokenClassification
autodoc BioGptForTokenClassification - forward
BioGptForSequenceClassification transformers.BioGptForSequenceClassification
autodoc BioGptForSequenceClassification - forward