万能的 V 圈,请教一个关于如何调用 GPU 资源来训练程序的问题

2020-03-10 21:18:31 +08:00
 suifengingo
自己写的程序由于使用 CPU 训练时速度太慢,所以想调用 GPU 来运行程度,网上有查资料说可以加入以下代码片:

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1"

但是本人这个并不是网络训练的代码,只是一个关于普通图像处理的代码,所以上述的代码片加入后并不能成功地调用到服务器的 GPU,百思不得其解,所以特来在线请教,望能得到解答!
1100 次点击
所在节点    问与答
11 条回复
favourstreet
2020-03-10 21:28:08 +08:00
楼主你自己说“使用 CPU **训练**时速度太慢”,又接着说“本人这个**并不是**网络训练的代码”。到底是不是啊[抓狂]。普通图像处理的 GPU 加速完全是另外一个领域的事情了。
suifengingo
2020-03-10 21:33:47 +08:00
@favourstreet 这个是普通的图像处理代码,老哥有什么可以使用 GPU 来加速运行的代码介绍吗?
suifengingo
2020-03-10 21:35:13 +08:00
标题不是“训练程序”,而应该是“运行程序”,说顺嘴了不好意思
lsvih
2020-03-10 21:50:54 +08:00
可以试试 numba 的 cuda jit
favourstreet
2020-03-10 21:54:15 +08:00
@suifengingo opencv 支持 cuda,但是楼主不要抱过多期待,放到 gpu 上算没变慢就不错了。如果楼主对图像的操作真的十分普通,我推荐楼主写一个 Photoshop 批处理脚本,可以用 js 写,Photoshop 也支持 gpu 加速。
suifengingo
2020-03-10 22:07:07 +08:00
@favourstreet 谢谢你,不过我这个代码里面没有调用到 opencv,而且程序我是放到服务器上运行的,貌似没法使用到 PS 来运行[哭
jaswer
2020-03-11 07:56:41 +08:00
nivdia-smi 看看服务器有几块 GPU,os.environ["CUDA_VISIBLE_DEVICES"] = "1"里面那个“1”是 GPU 的编号,从 0 开始,要是你服务器就一块卡,肯定是调不起来的。CUDA_VISIBLE_DEVICES 就是在多块 GPU 情况下指定特定 GPU 用的。另外你的代码要支持 GPU 才行,图像处理用 TF pytorch 写吧,nb 的直接 CUDA
jaswer
2020-03-11 07:58:02 +08:00
另外要看你的算法是否复杂,有的时候数据在内存和显存中传的开销比你算法加速的时间还多。
drawstar
2020-03-11 10:08:51 +08:00
先看你代码支不支持 cuda

再看你电脑支不支持 cuda
suifengingo
2020-03-11 15:08:37 +08:00
@jaswer 服务器中只有一块编号为 0 的 GPU,我加上了 os.environ["CUDA_VISIBLE_DEVICES"] = "1"
并且改为使用 opencv 的 cv2.imwrite() 函数来保存图像了,可是通过输入 nvidia-smi 指令发现运行程序时候还是没有调用到 GPU,求大佬的解答
jaswer
2020-03-11 15:27:17 +08:00
@suifengingo 我看你还是放弃吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/651673

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX