Train bert получил 'RuntimeError: transform: не удалось синхронизировать: cudaErrorAssert: инициировано утверждение на стороне устройства - PullRequest
0 голосов
/ 05 февраля 2020

RuntimeError: transform: не удалось синхронизировать: cudaErrorAssert: инициировано подтверждение на стороне устройства

Попытка обучить команду

data_test[100]
(array([   2, 4681, 6085, 6139, 6705, 3758, 7533, 5957,  517, 6896, 6037,
         703,  703,  703,  517,  398,  439,  423,  517,  380,  440,  157,
         517,  405,  423,  432,  430,  442,  637,  389,  367,  452,  405,
         398,  447,  343,  427,  446,  432,  517,  398,  439,  423,  517,
         450,  420,  420,  405,  380,  517,   54,  517,  437,  433,  446,
         396,  517,  405,  423,  432,  430,  442,  517,    3], dtype=int32),
 array(64, dtype=int32),
 array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       dtype=int32),
 5)

model = BERTClassifier(bertmodel,  dr_rate=0.5).to(device)
%%time
for e in range(num_epochs):
    train_acc = 0.0
    test_acc = 0.0
    model.train()
    for batch_id, (token_ids, valid_length, segment_ids, label) in enumerate(tqdm_notebook(train_dataloader)):
        optimizer.zero_grad()
        token_ids = token_ids.long().to(device)
        segment_ids = segment_ids.long().to(device)
        valid_length= valid_length
        label = label.long().to(device)
        out = model(token_ids, valid_length, segment_ids)
        loss = loss_fn(out, label)
        loss.backward()
        torch.nn.utils.clip_grad_norm_(model.parameters(), max_grad_norm)
        optimizer.step()
        scheduler.step()  # Update learning rate schedule
        train_acc += calc_accuracy(out, label)
        if batch_id % log_interval == 0:
            print("epoch {} batch id {} loss {} train acc {}".format(e+1, batch_id+1, loss.data.cpu().numpy(), train_acc / (batch_id+1)))
    print("epoch {} train acc {}".format(e+1, train_acc / (batch_id+1)))
    model.eval()
    for batch_id, (token_ids, valid_length, segment_ids, label) in enumerate(tqdm_notebook(test_dataloader)):
        token_ids = token_ids.long().to(device)
        segment_ids = segment_ids.long().to(device)
        valid_length= valid_length
        label = label.long().to(device)
        out = model(token_ids, valid_length, segment_ids)
        test_acc += calc_accuracy(out, label)
    #torch.cuda.reset_max_memory_cached()
    print("epoch {} test acc {}".format(e+1, test_acc / (batch_id+1)))

но я получил следующую ошибку

----------------------------------------- ---------------------------------- RuntimeError Traceback (последний последний вызов) в

~ /venv/lib/python3.7/site-packages/torch/tensor.py в отсталых (сам, градиент, retain_graph, create_graph) 164 товарах. По умолчанию False. 165 "" "-> 166 torch.autograd.backward (self, градиент, retain_graph, create_graph) 167 168 def register_hook (self, hook):

~ / venv / lib / python3 .7 / site-packages / torch / autograd / init .py в обратном направлении (тензоры, grad_tensors, retain_graph, create_graph, grad_variables) 97 Variable._execution_engine.run_backward (98 тензоров, grad_tensors, retain_graph, create_graph, ---> 99 allow_unreachable = True) # allow_unreachable flag 100 101

RuntimeError: transform: не удалось синхронизировать: cudaErrorAssert: инициировано подтверждение на стороне устройства

e = float, Acctype = float]: block: [0 , 0,0], нить: [27,0,0] Утверждение t >= 0 && t < n_classes не выполнено. /Pytorch/aten/src/THCUNN/ClassNLLCriterion.cu:106: void cunn_ClassNLLCriterion_updateOutput_kernel (Dtype *, Dtype *, Dtype *, long * , Dtype *, int, int, int, int, long) [с Dtype = float, Acctype = float]: блок: [0,0,0], поток: [28,0,0] Утверждение t >= 0 && t < n_classes не выполнено. /pytorch/aten/src/THCUNN/ClassNLLCriterion.cu:106: void cunn_ClassNLLCriterion_upd ateOutput_kernel (Dtype *, Dtype *, Dtype *, long *, Dtype *, int, int, int, int, long) [с Dtype = float, Acctype = float]: блок: [0,0,0], поток: [29,0,0] Утверждение t >= 0 && t < n_classes не удалось. /pytorch/aten/src/THCUNN/ClassNLLCriterion.cu:106: void cunn_ClassNLLCriterion_updateOutput_kernel (Dtype *, Dtype *, Dtype *, long *, Dtype *, int, int, int, int, long) [с Dtype = float, Accty = float]: блок: [0,0,0], нить: [30,0,0] Утверждение t >= 0 && t < n_classes не выполнено. /pytorch/aten/src/THCUNN/ClassNLLCriterion.cu:106: void cunn_ClassNLLCriterion_updateOutput_kernel (Dtype *, Dtype *, Dtype *, long *, Dtype *, int, int, int, int, long) [с Dtype = float, Accty = float]: блок: [0,0,0], нить: [31,0,0] Утверждение t >= 0 && t < n_classes не удалось.

...