해당 코드를 복사하여 서버에 저장하고 아래와 같이 사용하면 됩니다(저는 optimizer.py로 저장하였습니다).
from importlib import import_module
...
optimizer = None
lr_scheduler = None
if args.optimizer != "defualt":
opt_module = getattr(import_module('optimizer'), args.optimizer)
optimizer = opt_module(model.parameters(), lr=args.lr)
trainer = Trainer(
model=model, # the instantiated 🤗 Transformers model to be trained
args=training_args, # training arguments, defined above
train_dataset=RE_train_dataset, # training dataset
eval_dataset=RE_valid_dataset, # evaluation dataset
compute_metrics=compute_metrics, # define metrics function
optimizers = (optimizer , lr_scheduler)
)
결과
undersampling의 데이터로 MLM을 epoch 2 수행한 후 batch_size = 32, epoch = 4, oprimizer=madgrad를 사용하여 fine-tuning을 했을때 결과는 아래와 같습니다.
madgrad를 사용하지 않았을때와는 mircro_f1이 1.2, auprc는 0.3 정도 떨어졌습니다.
TMI
이것에 대해서 hugging face trainer코드를 분석하고 이해하는데 4~5시간 정도 걸린 것 같습니다 ㅠㅠ
시간이 오래 걸린 이유는 코드를 제대로 보고 이해한 후 넘어가야 했는데 빨리 적용시키고 싶은 마음에 대충대충 보고 빨리빨리 넘어 갔더니 코드에 대한 이해도가 떨어져서 자꾸 optimizers과 관련된 부분의 코드를 잘못 이해해서 시간이 오래 걸렸던 것 같습니다.....ㅠㅠㅠㅠㅠㅠㅠㅠ
나중에 토론 게시판을 보니 아래와 같이 친절하게 설명이 되어있었네요. 하하하하..... 삽질 덕분에 시간.... 순삭 당해버렸습니다 하하하핳.......
huggingface train의 optimizers인자로 (optmizer, lr_shceduler)를 주면 해당 값을 train시 이용하게 됩니다.
MADGRAD는 상민님이 추천해준 optimizer로 2021년1월26일에 처음 소개된 방식입니다.
해당 방식을 이용하기 위해서 facebook research의 madgrad.py 코드를 이용하면 됩니다. https://github.com/facebookresearch/madgrad/blob/main/madgrad/madgrad.py
해당 코드를 복사하여 서버에 저장하고 아래와 같이 사용하면 됩니다(저는 optimizer.py로 저장하였습니다).
결과
undersampling의 데이터로 MLM을 epoch 2 수행한 후 batch_size = 32, epoch = 4, oprimizer=madgrad를 사용하여 fine-tuning을 했을때 결과는 아래와 같습니다.
madgrad를 사용하지 않았을때와는 mircro_f1이 1.2, auprc는 0.3 정도 떨어졌습니다.
TMI 이것에 대해서 hugging face trainer코드를 분석하고 이해하는데 4~5시간 정도 걸린 것 같습니다 ㅠㅠ 시간이 오래 걸린 이유는 코드를 제대로 보고 이해한 후 넘어가야 했는데 빨리 적용시키고 싶은 마음에 대충대충 보고 빨리빨리 넘어 갔더니 코드에 대한 이해도가 떨어져서 자꾸 optimizers과 관련된 부분의 코드를 잘못 이해해서 시간이 오래 걸렸던 것 같습니다.....ㅠㅠㅠㅠㅠㅠㅠㅠ