问题标签 [multi-gpu]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
257 浏览

tensorflow - 带有桶错误的 TensorFlow

我正在尝试使用 tensorflow 训练序列到序列模型。我在教程中看到,存储桶有助于加快训练速度。到目前为止,我能够仅使用一个存储桶进行训练,也可以仅使用一个 gpu 和多个存储桶使用或多或少的开箱即用代码,但是当我尝试使用多个具有多个 gpu 的存储桶时,我收到一条错误消息,指出 Invalid参数:您必须使用 dtype int32 为占位符张量“gpu_scope_0/encoder50_gpu0”提供一个值

从错误中,我可以看出我没有正确声明 input_feed,因此它期望输入每次都是最大桶的大小。不过,我对为什么会出现这种情况感到困惑,因为在我正在调整的示例中,它在初始化 input_feed 的占位符时会做同样的事情。据我所知,教程还初始化为最大大小的存储桶,但是当我使用教程的代码时不会发生此错误。

以下是我认为是相关的初始化代码:

以下是输入数据时的相关代码:

现在我正在考虑将每个输入填充到桶大小,但我希望这会失去桶的一些优势

0 投票
1 回答
1191 浏览

multithreading - 如何同时在多个 GPU (2) 上运行 OpenCL?

我有两个 GPU、一个内核、一个上下文和两个命令队列(每个 GPU 1 个)。我试图在每个命令队列都运行的循环中运行它们,然后我尝试了两者queue.finish(),并queue.flush()希望同时在 GPU 上运行工作。

但实际发生的情况是,数据首先发送到一个设备,GPU 执行其工作,然后另一个 GPU 开始工作。它花费的时间是单个 GPU 的两倍。这不是我打算实现的!

虽然我也在将缓冲区读回主机代码,但有人可能认为这可能是第二个 GPU 等待第一个结果的问题。但我也注释掉了结果的回读,没有任何运气。它仍然是一样的。

我的问题是:我应该怎么做才能实现真正的并发性并使 GPU 同时运行而不等待另一个结果?我应该创建两个上下文吗?我应该做点别的吗?

请记住,只有一个内核

0 投票
1 回答
212 浏览

cuda - cuDeviceCanAccessPeer(...) 和 cuDeviceGetP2PAttribute(..., CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED, ...) 有什么区别?

我无法访问多 GPU 系统来测试这一点,但在 cuda.h 中我发现了两件看起来非常相似的事情。首先是功能

被描述成

返回*canAccessPeer1是否上下文 ondev能够直接从上下文访问内存peerDev0否则返回。如果可以直接访问peerDevfrom dev,则可以通过调用在两个特定上下文上启用访问::cuCtxEnablePeerAccess()

第二个是

被描述成

返回和之间链接*value the的请求属性的值。支持的属性是:attribsrcDevicedstDevice

::CU_DEVICE_P2P_ATTRIBUTE_PERFORMANCE_RANK:表示两个设备之间链路性能的相对值。

::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTEDP2 :1` 如果启用 P2P 访问。

::CU_DEVICE_P2P_ATTRIBUTE_NATIVE_ATOMIC_SUPPORTED: 1如果支持通过链接的原子操作。

该名称CU_DEVICE_ATTRUBUTE_ACCESS_SUPPORTED表明调用 to 与cuDeviceCanAccessPeer使用set to相同,但“如果启用 P2P 访问”的描述让我感到困惑。cuDeviceGetP2PAttributeattrib::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED P2P1

它们真的一样吗,或者第二个应该测试链接是否已激活?

0 投票
0 回答
1700 浏览

tensorflow - TensorFlow 的 Tesla K80 内存使用情况

我已经为带有 Tesla k80 GPU 的 TensorFlow 运行了卷积神经网络的示例代码。

https://www.tensorflow.org/versions/r0.9/tutorials/deep_cnn/index.html#launching-and-training-the-model-on-multiple-gpu-cards

“GPU 1”的内存使用量为 11Gb,约为 12Gb 最大值的 95%。但是“GPU 2”的内存使用量只有 64Mb。你能告诉我如何在 Tesla K80 上使用 GPU 的内存和 TensorFlow 吗?

0 投票
1 回答
1871 浏览

tensorflow - 在 Tensorflow 代码中指定 gpu:/gpu:0 始终有效?

我的工作站有 3 个显卡,其中一个是 Quadro K620,另外两个是 Titan X。现在我想在其中一个显卡上运行我的 tensorflow 代码,这样我就可以让其他显卡闲置任务。

但是,无论设置tf.device('/gpu:0')还是tf.device('/gpu:1'),我发现第一块 Titan X 显卡一直在工作,我不知道为什么。

关于行“ <=== THIS LINE:”

如果我设置tf.device('/gpu:0'),监视器会说:

显示第一张 Titan X 卡正在工作。

如果我设置tf.device('/gpu:1'),监视器会说:

表明两张 Titan X 卡都在工作,而不仅仅是第二张 Titan X。

那么这背后的任何原因以及如何指定我希望我的程序运行的gpu?

0 投票
0 回答
1083 浏览

tensorflow - 如何使用正确配置的参数服务器在 SLURM 集群上运行 Tensorflow?

我很幸运能够访问我大学的 SLURM 驱动的 GPU 集群。我一直试图让 Tensorflow 在集群节点中运行,但到目前为止我还没有找到任何文档。(我在大学里交谈过的每个人都曾使用 CPU 节点或使用单个 GPU 节点来运行它。

我在这里从上一个问题中找到了一个很好的文档。不幸的是,它相当不完整。我发现的所有其他分布式示例(例如这个示例)都依赖于显式指定参数服务器。

当我尝试使用 SO question 中的代码运行它时,我似乎可以正常工作,直到它无法连接到不存在的参数服务器或在调用 server.join 并且没有向 sbatch outfile 提供打印输出(其中我明白应该发生)。

简而言之,我的问题是如何在 SLURM 集群上启动 Tensorflow?从批量阶段开始。这是我第一次在 AWS 上处理除 SPARK 之外的分布式计算框架,我很想了解更多关于如何正确配置 Tensorflow 的信息。如何指定 tf_hostlist 例如服务器中的哪一项作为参数服务器?或者,我可以像在其他示例中看到的那样,使用 sbatch 向每个工作人员发送稍微不同的命令吗?

0 投票
1 回答
632 浏览

tensorflow - Tensorflow:在Multigpu训练中将变量固定到CPU不起作用

我正在使用 tensorflow 训练我的第一个多 GPU 模型。正如教程所述,变量使用 name_scope 固定在每个 GPU 上的 CPU 和操作上。

当我正在运行一个小型测试并记录设备放置时,我可以看到操作被放置在带有 TOWER_1/TOWER_0 前缀的相应 GPU 上,但变量没有被放置在 CPU 上。

我是否遗漏了什么,或者我是否错误地理解了设备放置日志。

附上测试代码,这是设备放置日志

谢谢

测试代码

编辑 基本上'with slim.arg_scope([tf.contrib.framework.python.ops.variables.variable], device='/cpu:0'):' 行应该强制cpu上的所有变量,但它们是被创建的在“GPU:0”上

0 投票
1 回答
167 浏览

cuda - cudaEventRecord 是否受当前设备的身份影响?

cudaEventRecord将事件 ID 和流 ID 作为参数。运行时 API 参考并没有说明是否需要将流与当前设备关联 - 我无法测试是否是这种情况,因为我现在可以访问的任何系统上最多只有一个 GPU。

假设它必须是当前设备上的流:

  • 如果它在另一台设备上获得流会发生什么?

假设它可以是任何设备上的流:

  • 当它获得(当前设备的)默认流的 ID 时会发生什么?毕竟,所有设备的默认流都具有相同的(空)ID?
  • 基于流的设备是否是最新的,行为是否有任何差异?
0 投票
1 回答
836 浏览

tensorflow - TensorFlow:GPU 上的图像预处理

我有四张 GPU 卡,而 CPU 无法为所有这些卡进行足够快的图像预处理。队列很快就用完了,大部分时间卡都是空闲的。有没有办法将 QueueRunner 放在这四张 GPU 卡中的一张上,以便一张卡进行预处理并形成队列,而另外三张实际训练模型?

0 投票
2 回答
554 浏览

python - 用于多 GPU 的 TensorFlow

如果有人可以帮助我了解情况,那就太好了。提前致谢。我的设置:操作系统:Ubuntu 16.04、2 个 Titan X GPU。TensorFlow(0.12.1 版)使用 pip 安装在 conda 环境中,如 TF 文档中所示。蟒蛇 3.5。

代码:我运行以下代码来测试我的 2 GPU 设置。一次与random_matrix = tf.zeros(...)random_matrix = tf.random_uniform(...)。输出如下所示。

问题:1)当我使用tf.zeros. CPU 和 GPU 上的时序是相同的。但是tf.random_uniform我看到 GPU 更快(正如我所料)。为什么tf.zeros在 GPU 上速度较慢?我错过了什么?2)我已经修复了全局种子和本地种子。为什么 GPU 内的输出因tf.random_uniform案例而异?

非常感谢您提前提供的任何见解。

tf.random_uniform() 的计时:

tf.zeros() 的计时: