Search

Unicore Plug-ins Overview

Plug-ins overview

Unicore에는 총 5가지의 plug-in이 있다.
•
Model
Neural net 구조, parameter 정의
•
Loss (참고: fairseq 에서는 criterion)
loss function (output, target에 대해)
•
Task
주로 dictionary 형태로 object들을 저장하여
◦
Dataset loading, iterator helper function
◦
Model 초기화 helper function
◦
Criterion 초기화 helper function
◦
Loss 계산
•
Optimizer
Model parameter update
•
Learning rate scheduler
LR update

Training flow

•
unicore-train 이라는 command를 실행하면, 모든 plug-in들이 잘 정의되어 있을 때, high-level에서는 아래와 같은 방식으로 학습이 진행된다.
for epoch in range(num_epochs): itr = task.get_batch_iterator(task.dataset('train')) for num_updates, batch in enumerate(itr): task.train_step(batch, model, loss, optimizer) average_and_clip_gradients() optimizer.step() lr_scheduler.step_update(num_updates) lr_scheduler.step(epoch)
Python
복사
◦
이때, task.train_step 의 high-level code는 아래와 같다.
def train_step(self, batch, model, loss, optimizer): loss = criterion(model, batch) optimizer.backward(loss) return loss
Python
복사

Register new plug-ins

@register 라는 function decorator로 등록할 수 있다.
# unicore/model.py @register_model('my_model') class MyModel(BaseUnicoreModel): (...) #----------------------------------------# # unicore/loss.py @register_loss('my_loss') class MyLoss(UnicoreLoss): (...) #----------------------------------------# # unicore/task.py @register_task('my_task') class MyTask(UnicoreTask): (...) #----------------------------------------# # unicore/optim/optim.py @register_optimizer("my_opt") class MyOpt(UnicoreOptimizer): (...) #----------------------------------------# # unicore/optim/lr_scheduler/lr_scheduler.py @register_lr_scheduler("my_lr_sche") class MyLRScheduler(UnicoreLRScheduler): (...) #----------------------------------------#
Python
복사
→ 이렇게 등록한 plug-in 들은 Command-line Tool의 argument로 입력해서 선택, 사용할 수 있다.
예시)