优化方案一:C++重构
我想到的第一个方案,就是C++重构,将所有的显存和句柄定义为成员变量,在构造函数中申请,析构函数中释放。难度比较低,但是工作量比较大,因为不同变量申请的显卡大小不一样,输入图像的大小是不一定的,所以对于每一个变量,必须申请足够大的内存,而且这种情况下,如果发生显存越界,则很难定位。而且参数名非常乱,着实费了一些劲才重构完。
优化方案二
因为这个算法中变量比较多,重构完后,输入大图像果然出现显存越界问题……真的是非常懒得去定位。某天灵光突现,可以用Tensorflow里的显存管理方式进行重构啊,先申请一块非常大的显存,程序中需要的时候直接分配即可。这样可以最大程度上的少修改原代码,并且可以有效的解决大图像情况容易出现的显存越界问题。
可以参考以下链接:https://blog.csdn.net/litdaguang/java/article/details/79330973
收起是的,如楼上所言,GPU可以采用Kubernetes的方式进行管理。我们的Aerial SDK也是基于K8S进行部署的,同时vGPU的方式通常会引入过多的延迟,对于实时的应用,我们通常建议直接使用不同的容器装在不同的应用。
收起