Files
fastai--fastai/nbs/examples/train_imdbclassifier.py
2026-07-13 13:21:43 +08:00

41 lines
1.5 KiB
Python

from fastai.basics import *
from fastai.callback.all import *
from fastai.distributed import *
from fastprogress import fastprogress
from fastai.callback.mixup import *
from fastcore.script import *
from fastai.text.all import *
torch.backends.cudnn.benchmark = True
fastprogress.MAX_COLS = 80
def pr(s):
if rank_distrib()==0: print(s)
@call_parse
def main(
lr: Param("base Learning rate", float)=1e-2,
bs: Param("Batch size", int)=64,
epochs:Param("Number of epochs", int)=5,
fp16: Param("Use mixed precision training", store_true)=False,
dump: Param("Print model; don't train", int)=0,
runs: Param("Number of times to repeat training", int)=1,
):
"Training of IMDB classifier."
path = rank0_first(untar_data, URLs.IMDB)
dls = TextDataLoaders.from_folder(path, bs=bs, valid='test')
for run in range(runs):
pr(f'Rank[{rank_distrib()}] Run: {run}; epochs: {epochs}; lr: {lr}; bs: {bs}')
learn = rank0_first(text_classifier_learner, dls, AWD_LSTM, drop_mult=0.5, metrics=accuracy)
if dump: pr(learn.model); exit()
if fp16: learn = learn.to_fp16()
# Workaround: In PyTorch 1.4, need to set DistributedDataParallel() with find_unused_parameters=True,
# to avoid a crash that only happens in distributed mode of text_classifier_learner.fine_tune()
if num_distrib() > 1 and torch.__version__.startswith("1.4"): DistributedTrainer.fup = True
with learn.distrib_ctx(): # distributed traing requires "-m fastai.launch"
learn.fine_tune(epochs, lr)