Pytorch 评估期间出现内存不足错误,但培训效果良好

Pytorch 评估期间出现内存不足错误,但培训效果良好,pytorch,Pytorch,我最近将PyTorch从0.2升级到了0.3。令人惊讶的是,我的旧程序在求值过程中(在eval()模式下)抛出内存不足错误,但训练效果很好。我使用相同的批量进行培训和评估。我完全不知道发生了什么事?有人面临过类似的问题吗?有什么可能的解决办法吗 我尝试在变量上使用volatile=Trueparam,但没有效果。请注意,我没有做任何特殊的使用cuDNN。我使用的是默认设置 def validate(self, dev_corpus): # Turn on evaluation mode

我最近将PyTorch从0.2升级到了0.3。令人惊讶的是,我的旧程序在求值过程中(在eval()模式下)抛出内存不足错误,但训练效果很好。我使用相同的批量进行培训和评估。我完全不知道发生了什么事?有人面临过类似的问题吗?有什么可能的解决办法吗


我尝试在变量上使用
volatile=True
param,但没有效果。请注意,我没有做任何特殊的使用cuDNN。我使用的是默认设置

def validate(self, dev_corpus):
    # Turn on evaluation mode which disables dropout.
    self.model.eval()

    dev_batches = helper.batchify(dev_corpus.data, self.config.batch_size)
    print('number of dev batches = ', len(dev_batches))

    dev_loss = 0
    num_batches = len(dev_batches)
    for batch_no in range(1, num_batches + 1):
        session_queries, session_query_length, rel_docs, rel_docs_length, doc_labels = helper.session_to_tensor(
            dev_batches[batch_no - 1], self.dictionary)
        if self.config.cuda:
            session_queries = session_queries.cuda()
            session_query_length = session_query_length.cuda()
            rel_docs = rel_docs.cuda()
            rel_docs_length = rel_docs_length.cuda()
            doc_labels = doc_labels.cuda()

        loss = self.model(session_queries, session_query_length, rel_docs, rel_docs_length, doc_labels)
        if loss.size(0) > 1:
            loss = loss.mean()
        dev_loss += loss.data[0]

    return dev_loss / num_batches
我正在使用上述函数进行评估。这里,session\u查询,session\u查询长度。。。。通过启用
volatile=True
创建rest变量


请帮忙

我认为它在验证过程中失败,因为
volatile
标志现在已被弃用,并且没有任何效果。从0.4.0开始,为了避免在验证期间为所有变量计算梯度,应该使用上下文管理器。代码示例:

with torch.no_grad():
    # Your validation code
这样,就不会存储操作历史和梯度。因此,这将节省内存

有关更多详细信息,请参阅

此外,您可以在完成评估后删除对这些变量的引用,如下所示:

someVar = Variable(someVar)
del someVar