我是多GPU编程的新手,我对multi-gpu计算有一些疑问.例如,我们来看点产品示例.我正在运行一个CPU线程,它创建了2个大型数组A [N]和B [N].由于这些阵列的大小,我需要将他们的点积计算分成2个GPU,两个都是Tesla M2050(计算能力2.0).问题是我需要在由我的CPU线程控制的do-loop中多次计算这些点积.每个点积都需要前一个点的结果.我已经阅读了关于创建2个不同的线程来分别控制2个不同的GPU(如例子中的cuda所述),但我不知道如何在它们之间同步和交换数据.还有另一种选择吗?我非常感谢任何帮助/例子.谢谢!
我有一个双 GPU 系统,Geforce 8400 GS 和 Geforce GT 520。我可以在两个 GPU 上运行我的 cuda 程序。但是当我使用 cuda-gdb 来调试它们时,我收到一个错误,指出另外Cuda driver initialization failed.,当我使用 运行程序时cuda-gdb,它cudaGetDeviceCount说我只有 1 个 GPU。如果我不使用cuda-gdb. 有人可以帮我解决这个问题吗?
我运行的是 Ubuntu 11.04。
在Nvidia的网站上,它解释了超时问题:
问:最大内核执行时间是多少?在Windows上,单个GPU程序启动的最大运行时间约为5秒。超过此时间限制通常会导致通过CUDA驱动程序或CUDA运行时报告启动失败,但在某些情况下可能会挂起整个计算机,需要进行硬重置。这是由Windows“看门狗”计时器引起的,该计时器导致使用主图形适配器的程序运行时间超过允许的最长时间。
因此,建议在未连接显示器且未扩展Windows桌面的GPU上运行CUDA。在这种情况下,系统必须至少包含一个用作主要图形适配器的NVIDIA GPU。
资料来源:https : //developer.nvidia.com/cuda-faq
因此,nvidia相信或至少强烈暗示拥有多个(nvidia)gpu并配置正确,可以防止这种情况发生?
但是如何?到目前为止,我尝试了很多方法,但是GK110 GPU上仍然存在令人讨厌的超时问题:(1)插入辅助PCIE 16X插槽;(2)未连接任何显示器(3)已设置为在驱动程序控制面板中用作physX专用卡(某些其他人的建议),但仍然可以使用。
我的工作站中有 3 个显卡,其中一个是 Quadro K620,另外两个是 Titan X。现在我想在其中一个显卡上运行我的张量流代码,这样我就可以让其他显卡闲置起来任务。
但是,无论设置tf.device('/gpu:0')还是tf.device('/gpu:1'),我发现第 1 个 Titan X 显卡始终可以工作,我不知道为什么。
import argparse
import os
import time
import tensorflow as tf
import numpy as np
import cv2
from Dataset import Dataset
from Net import Net
FLAGS = None
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--foldername', type=str, default='./data-large/')
parser.add_argument('--batch_size', type=int, default=100)
parser.add_argument('--num_epoches', type=int, default=100)
parser.add_argument('--learning_rate', type=float, default=0.5)
FLAGS = parser.parse_args()
net = Net(FLAGS.batch_size, FLAGS.learning_rate)
with tf.Graph().as_default():
# Dataset is a class for encapsulate the …Run Code Online (Sandbox Code Playgroud) 首先,我还是张量流的新手.我正在使用v0.9并试图使用我们拥有的机器中安装的2个GPU.那么,这是发生了什么:
training data在机器上启动脚本时,它仅适用于2个GPU中的一个.它默认采用第一个gpu:0/.training data脚本在第二个GPU上运行(在完成所需的更改之后with tf.device..),同时保持第一个进程在第一个GPU上运行时,tensorflow会杀死第一个进程并仅使用第二个GPU来运行第二个进程.所以似乎张量流一次只允许一个进程?我需要的是:能够training data在同一台机器上安装的2个不同的GPU上为2个不同的模型启动两个单独的脚本.我在这种情况下遗漏了什么吗?这是预期的行为吗?我应该在本地计算机上执行分布式tensorflow吗?
我有一台具有4个GPU的服务器(Ubuntu 16.04)。我的团队对此表示赞同,并且我们当前的方法是使用Docker容器化我们所有的工作,并使用来将容器限制为GPU $ NV_GPU=0 nvidia-docker run -ti nvidia/cuda nvidia-smi。当我们都非常清楚谁在使用哪个GPU时,这种方法很好用,但是我们的团队已经壮大,我希望有一种更强大的方法来监视GPU的使用,并禁止在使用GPU时对其进行访问。nvidia-smi是“ GPU-Util”的一个信息通道,但有时当容器中的某人当前将其保留时,GPU可能在某一时刻具有0%的GPU-Util。
您对以下方面有什么建议吗?
$ NV_GPU='gpu_id' nvidia-docker run$ NV_GPU='same_gpu_id' nvidia-docker run我可能也在想这错误的方式,因此欢迎其他想法。谢谢!
在我们的实验室中,我们具有具有以下特征的NVIDIA Tesla K80 GPU加速器计算:Intel(R) Xeon(R) CPU E5-2670 v3 @2.30GHz, 48 CPU processors, 128GB RAM, 12 CPU cores在Linux 64位下运行。
我正在运行以下代码,该代码GridSearchCV在将不同的数据帧集垂直追加到单个RandomForestRegressor模型系列中之后执行。我正在考虑的两个样本数据集可在此链接中找到
import sys
import imp
import glob
import os
import pandas as pd
import math
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
import matplotlib
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt
import numpy as np
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection …Run Code Online (Sandbox Code Playgroud) 我正在尝试在集群内的 GPU 节点上运行 keras 代码。GPU 节点每个节点有 4 个 GPU。我确保 GPU 节点中的所有 4 个 GPU 可供我使用。我运行下面的代码让 TensorFlow 使用 GPU:
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
logical_gpus = tf.config.list_logical_devices('GPU')
print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
print(e)
Run Code Online (Sandbox Code Playgroud)
输出中列出了 4 个可用的 GPU。但是,我在运行代码时遇到以下错误:
Traceback (most recent call last):
File "/BayesOptimization.py", line 20, in <module>
logical_gpus = tf.config.experimental.list_logical_devices('GPU')
File "/.conda/envs/thesis/lib/python3.9/site-packages/tensorflow/python/framework/config.py", line 439, in list_logical_devices
return context.context().list_logical_devices(device_type=device_type)
File "/.conda/envs/thesis/lib/python3.9/site-packages/tensorflow/python/eager/context.py", line 1368, in list_logical_devices
self.ensure_initialized()
File "/.conda/envs/thesis/lib/python3.9/site-packages/tensorflow/python/eager/context.py", line …Run Code Online (Sandbox Code Playgroud) 目前我正在使用两个gtx 650.我的程序类似于简单的客户端/服务器结构.我在两个gpus上分配工作线程.Server线程需要从客户端线程收集结果向量,所以我需要在两个gpu之间复制内存.不幸的是,cuda样本中的简单P2P程序不起作用,因为我的卡没有TCC驱动程序.花两小时内谷歌搜索,等等,我找不到answer.Some源说,我应该使用cudaMemcpyPeer,以及一些其他的消息来源说,我应该使用cudaMemcpy带cudaMemcpyDefault.就是有一些简单的办法让我的工作做得比拷贝到主机的话,其他复制到设备.我知道它必须在某处记录,但我找不到它.谢谢你的帮助.
我想并行运行多个GPU上的内核.为此,我在设备之间切换cudaSetDevice(),然后在相应的设备中启动我的内核.现在,通常一个流中的所有调用都是顺序执行的,如果它们必须并行执行,则必须使用不同的流.在使用不同的设备时也是这种情况,或者在这种情况下我是否可以在两台设备上的默认流上运行内核调用,它们仍将并行运行?
multi-gpu ×10
cuda ×5
gpu ×4
tensorflow ×3
docker ×1
dot-product ×1
gpgpu ×1
nvidia ×1
python ×1
python-3.x ×1
tesla ×1
tf.keras ×1
timeout ×1
windows ×1