在onnx生成engine的代码执行过程中,用8G显存的GPU跑程序一启动就报错:../rtSafe/safeRuntime.cpp (25) - Cuda Error in allocate: 2 (out of memory),报这个错倒不一定是因为模型本身太大了,而可能是workspace size值设置得太大了,把代码中
config->setMaxWorkspaceSize(size_t(1) << 40);
改成
config->setMaxWorkspaceSize(size_t(1) << 30);
然后执行程序就不报错了。
但如果是设置了FP16量化模式
config->setFlag(nvinfer1::BuilderFlag::kFP16);
所需的workspace size变大,得需要把上面设置的值试着加大,当然此时GPU显存小了可能跑不了
反过来,如果不是程序一运行就报错,而是生成egine程序运行了一段时间后报类似下面这样的错误:
[localCheckMacros.cpp::getErrorStr::70] Error Code 2: OutOfMemory (no further information)
如果观察到报错前GPU显存和主板内存都有空闲并不存在耗尽的话,那肯定是workspace size设置小了,可能需要把:
config->setMaxWorkspaceSize(size_t(1) << 30);
改成
config->setMaxWorkspaceSize(size_t(1) << 40);
然后engine文件能顺利生成