最近我们的小伙伴有问我,trt 中buildEngineWithConfig配置参数中的setMaxWorkspaceSize作用不理解的setworkspace函数的作用是什么,不是很理解。我这里给出一点简单解释。
回答如下:
在编译阶段,每个layer都去寻找最优解,trt会在所有的解空间中搜寻最优的优化实现,不同的实现其使用的显存大小是不同的,这个workspace就是约束显存的使用量的。
有时候我们会看到出现优化策略无法进行的警告,这就是由于显存开的太小没法找到最优解。直接显示给出防止编译时出现不确定,造成使用超出预期的内存空间。
如果你不加限制有可能会造成系统中途内存挂掉。实际简单理解就是你如果不去给出一个明确的大小去限制这个,到时候有些层会尽力优化从而耗尽你的内存(显卡),你的内存就会挂掉。但是有个矛盾的地方就是你给的太小,优化不到位,就是性能会差一些。目前最新的8.4版本就不需要再给出workspace了。
Some tactics do not have sufficient workspace memory to run. Increasing workspace size may increase performance, please check verbose output.,
这个就是典型的开的太小,没有优化好。它根据你给的大小,只会还给你一个当前条件下最优的优化效果。