问题标签 [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.
tensorflow - 带有桶错误的 TensorFlow
我正在尝试使用 tensorflow 训练序列到序列模型。我在教程中看到,存储桶有助于加快训练速度。到目前为止,我能够仅使用一个存储桶进行训练,也可以仅使用一个 gpu 和多个存储桶使用或多或少的开箱即用代码,但是当我尝试使用多个具有多个 gpu 的存储桶时,我收到一条错误消息,指出 Invalid参数:您必须使用 dtype int32 为占位符张量“gpu_scope_0/encoder50_gpu0”提供一个值
从错误中,我可以看出我没有正确声明 input_feed,因此它期望输入每次都是最大桶的大小。不过,我对为什么会出现这种情况感到困惑,因为在我正在调整的示例中,它在初始化 input_feed 的占位符时会做同样的事情。据我所知,教程还初始化为最大大小的存储桶,但是当我使用教程的代码时不会发生此错误。
以下是我认为是相关的初始化代码:
以下是输入数据时的相关代码:
现在我正在考虑将每个输入填充到桶大小,但我希望这会失去桶的一些优势
multithreading - 如何同时在多个 GPU (2) 上运行 OpenCL?
我有两个 GPU、一个内核、一个上下文和两个命令队列(每个 GPU 1 个)。我试图在每个命令队列都运行的循环中运行它们,然后我尝试了两者queue.finish()
,并queue.flush()
希望同时在 GPU 上运行工作。
但实际发生的情况是,数据首先发送到一个设备,GPU 执行其工作,然后另一个 GPU 开始工作。它花费的时间是单个 GPU 的两倍。这不是我打算实现的!
虽然我也在将缓冲区读回主机代码,但有人可能认为这可能是第二个 GPU 等待第一个结果的问题。但我也注释掉了结果的回读,没有任何运气。它仍然是一样的。
我的问题是:我应该怎么做才能实现真正的并发性并使 GPU 同时运行而不等待另一个结果?我应该创建两个上下文吗?我应该做点别的吗?
请记住,只有一个内核
cuda - cuDeviceCanAccessPeer(...) 和 cuDeviceGetP2PAttribute(..., CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED, ...) 有什么区别?
我无法访问多 GPU 系统来测试这一点,但在 cuda.h 中我发现了两件看起来非常相似的事情。首先是功能
被描述成
返回
*canAccessPeer
值1
是否上下文 ondev
能够直接从上下文访问内存peerDev
,0
否则返回。如果可以直接访问peerDev
fromdev
,则可以通过调用在两个特定上下文上启用访问::cuCtxEnablePeerAccess()
。
第二个是
被描述成
返回和之间链接
*value the
的请求属性的值。支持的属性是:attrib
srcDevice
dstDevice
::CU_DEVICE_P2P_ATTRIBUTE_PERFORMANCE_RANK
:表示两个设备之间链路性能的相对值。
::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED
P2:
1` 如果启用 P2P 访问。
::CU_DEVICE_P2P_ATTRIBUTE_NATIVE_ATOMIC_SUPPORTED: 1
如果支持通过链接的原子操作。
该名称CU_DEVICE_ATTRUBUTE_ACCESS_SUPPORTED
表明调用 to 与cuDeviceCanAccessPeer
使用set to相同,但“如果启用 P2P 访问”的描述让我感到困惑。cuDeviceGetP2PAttribute
attrib
::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED P2P
1
它们真的一样吗,或者第二个应该测试链接是否已激活?
tensorflow - TensorFlow 的 Tesla K80 内存使用情况
我已经为带有 Tesla k80 GPU 的 TensorFlow 运行了卷积神经网络的示例代码。
“GPU 1”的内存使用量为 11Gb,约为 12Gb 最大值的 95%。但是“GPU 2”的内存使用量只有 64Mb。你能告诉我如何在 Tesla K80 上使用 GPU 的内存和 TensorFlow 吗?
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?
tensorflow - 如何使用正确配置的参数服务器在 SLURM 集群上运行 Tensorflow?
我很幸运能够访问我大学的 SLURM 驱动的 GPU 集群。我一直试图让 Tensorflow 在集群节点中运行,但到目前为止我还没有找到任何文档。(我在大学里交谈过的每个人都曾使用 CPU 节点或使用单个 GPU 节点来运行它。
我在这里从上一个问题中找到了一个很好的文档。不幸的是,它相当不完整。我发现的所有其他分布式示例(例如这个示例)都依赖于显式指定参数服务器。
当我尝试使用 SO question 中的代码运行它时,我似乎可以正常工作,直到它无法连接到不存在的参数服务器或在调用 server.join 并且没有向 sbatch outfile 提供打印输出(其中我明白应该发生)。
简而言之,我的问题是如何在 SLURM 集群上启动 Tensorflow?从批量阶段开始。这是我第一次在 AWS 上处理除 SPARK 之外的分布式计算框架,我很想了解更多关于如何正确配置 Tensorflow 的信息。如何指定 tf_hostlist 例如服务器中的哪一项作为参数服务器?或者,我可以像在其他示例中看到的那样,使用 sbatch 向每个工作人员发送稍微不同的命令吗?
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”上
cuda - cudaEventRecord 是否受当前设备的身份影响?
cudaEventRecord将事件 ID 和流 ID 作为参数。运行时 API 参考并没有说明是否需要将流与当前设备关联 - 我无法测试是否是这种情况,因为我现在可以访问的任何系统上最多只有一个 GPU。
假设它必须是当前设备上的流:
- 如果它在另一台设备上获得流会发生什么?
假设它可以是任何设备上的流:
- 当它获得(当前设备的)默认流的 ID 时会发生什么?毕竟,所有设备的默认流都具有相同的(空)ID?
- 基于流的设备是否是最新的,行为是否有任何差异?
tensorflow - TensorFlow:GPU 上的图像预处理
我有四张 GPU 卡,而 CPU 无法为所有这些卡进行足够快的图像预处理。队列很快就用完了,大部分时间卡都是空闲的。有没有办法将 QueueRunner 放在这四张 GPU 卡中的一张上,以便一张卡进行预处理并形成队列,而另外三张实际训练模型?
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() 的计时: