我有一个python脚本,该脚本循环遍历视频数据集,并将脸部和嘴唇检测器功能应用于每个视频。该函数返回每个帧中以人的嘴唇为中心的3D numpy像素数据数组。
数据集非常大(总计70GB,每个持续时间约1秒钟,每个视频约有500,000个视频),在正常的CPU上执行将需要几天的时间。我有一个Nvidia 2080 Ti,我想用来执行代码。是否可以包含一些在可用GPU上执行我的整个脚本的代码?还是我简化了一个复杂的问题?
到目前为止,我一直在尝试使用numba和pycuda进行实现,但是由于所提供的示例并不完全适合我的问题,因此没有取得任何进展。
答案 0 :(得分:1)
您的第一个问题实际上是让您的Python代码在所有CPU内核上运行!
Python并不快,这在很大程度上是设计使然。更准确地说,Python的设计强调了其他品质。通常,多线程相当困难,由于这些设计约束,Python无法使其变得简单。可惜,因为现代CPU是高度并行的。就您而言,这是个幸运的逃生。您的问题也是高度并行的。您可以将这500,000个视频的CPU内核划分。每个内核都在其自己的输入上运行Python脚本的副本。即使是四核,使用该策略也可以处理4x125.000个文件。
对于GPU,这对Python代码没有多大帮助。 Python根本不知道如何将数据发送到GPU,如何将命令发送到CPU或获取结果。一些Python扩展可以使用GPU,例如Tensorflow。但是他们将GPU用于内部目的,而不是运行Python代码。