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
не удалось.