这周尝试meta公司也就是改名前的Facebook出的分割模型–––Segment anything时,用官方给的代码示例,跑出来的结果非常慢,示例图耗时11秒,你没看错,真的是11秒。
然后,直觉一想不太可能,去翻了官网的介绍,在FAQ中说了,在A100显卡上耗时0.15ms。
这差距也太大了吧。
感觉肯定哪里也不对,翻了一下segment anything的代码仓库,有几个issue在说这个网页链接,还有这个网页链接。感觉群众都遇到了这个问题,说明这不是个例。
那问题出在哪里呢?去翻了一下实现源码,原来示例代码没有设置到gpu上,并且没有执行eval模式,所以结论很明显了,那些问问题的人没有深入去了解,导致出了一个乌龙。
sam = sam_model_registry[MODEL_TYPE](checkpoint=CHECKPOINT_PATH)
sam.to(device=DEVICE)
sam.eval()
就这两行,让模型使用GPU进行推理,速度直接上来了,通过watch -n 0.01 nvidia-smi 查看,推理时显卡的确有在工作。
不设置这2行,直接是CPU上运行,然后就掉坑里面了。