LibTorch CPU推理重复调用forward导致OOM问题求助
LibTorch CPU推理内存泄漏问题
我将PyTorch训练后的模型导出为TorchScript,在LibTorch中实现CPU推理,但重复调用推理方法时出现内存泄漏,最终导致程序OOM崩溃。
核心代码
重复调用的推理方法(简化版)
void Backend::perform(std::vector<float *> in_buffer, std::vector<float *> out_buffer) { c10::InferenceMode guard; at::Tensor tensor_out; at::Tensor tensor_in = torch::zeros({ 1, 16, 2 }); std::vector<torch::jit::IValue> inputs = { tensor_in }; // 调用模型的"decode"方法,内存泄漏发生在此处 tensor_out = m_model.get_method("decode")(inputs).toTensor(); auto out_ptr = tensor_out.contiguous().data_ptr<float>(); for (int i(0); i < out_buffer.size(); i++) { memcpy(out_buffer[i], out_ptr + i * n_vec, n_vec * sizeof(float)); } }
模型加载代码
m_model = torch::jit::load(path); m_model.eval();
问题细节
- 每次调用
perform方法,Torch图内存持续增长且未释放,最终触发OOM崩溃 - 注释掉模型forward调用后,内存使用趋于稳定
- 已通过
c10::InferenceMode guard关闭自动求导,排除了反向传播内存堆积的常见诱因 - 在PyTorch中模拟循环调用forward的场景,未出现内存问题,推测问题源于LibTorch而非模型本身
系统环境
- 操作系统:Windows 10/11
- PyTorch版本:1.11.0
- LibTorch版本:1.11.0
内容的提问来源于stack exchange,提问作者Nicholas Shaheed
相关产品推荐
相关产品推荐

