标签: multi-gpu

在NUMA机器上使用CUDA进行多GPU编程

我目前将算法移植到两个GPU.硬件具有以下设置:

  • 两个CPU作为NUMA系统,因此主存储器被分成两个NUMA节点.
  • 每个GPU物理连接到其中一个GPU.(每个PCIe控制器都有一个GPU)

我在主机上创建了两个线程来控制GPU.线程每个都绑定到NUMA节点,即两个线程中的每一个都在一个CPU插槽上运行.如何确定GPU的数量,以便我可以使用cudaSetDevice()?选择直接连接的GPU ?

c multithreading cuda multi-gpu

3
推荐指数
2
解决办法
2528
查看次数

是否可以在多GPU机器上执行CUDA程序的多个实例?

背景:

我编写了一个CUDA程序,对一系列符号进行处理.该程序并行处理所有符号序列,并规定所有序列具有相同的长度.我正在将我的数据分组,每组完全由相同长度的序列组成.该程序一次处理1个组.

题:

我在具有4个GPU的Linux机器上运行我的代码,并希望通过运行我的程序的4个实例(每个GPU 1个)来利用所有4个GPU.是否可以让程序选择另一个CUDA应用程序未使用的GPU来运行?当程序在具有更多或更少GPU的不同硬件上运行时,我不想硬编码会导致问题的任何事情.

c++ cuda gpu multi-gpu

3
推荐指数
1
解决办法
789
查看次数

Cuda 多个 GPU:所有 GPU 型号相同?

多 GPU cuda 设置上的所有 GPU 都必须是使用 CUDA 的同一型号 GPU 吗?

例如,我现在有一块Geforce 950。如果我再多几张卡,是不是都是950的?(如果是这样,我是否必须继续使用同一个制造商?)


一个答案展示了如何控制每个 GPU 上的 CUDA(假设 GPU 都是具有相同计算级别的 CUDA),并确认我可以购买不同型号的 NVIDIA 卡(在我花费 300 美元之前)并安装在同一个 CUDA 上安装(因为 CUDA 工具是在每台机器上编译的)就足够了。

因此,例如,向我展示如何使用tensorflow .py 脚本并在我的主板上的三个 GPU 之一上运行它(使用下面答案中的 CUDA 命令)的答案也很好(对于为了这个问题;我想我现在肯定有足够的时间来找出答案)。

我相信这与 CUDA 软件处理硬件的方式有关,并且不是 SuperUser 的主题;不过我很乐意改变它。

cuda gpu multi-gpu

3
推荐指数
1
解决办法
5481
查看次数

Ubuntu 16.04 上的双 GPU 配置

客观的:

拥有一个多显示器扩展显示器,显示器位于两个相同的 GPU 上。

硬件:

  • Geforce GTX 970 (x2)
  • 戴尔 E207WFP 显示器 (x6)
  • Z97-PRO主板
  • i5-4690K CPU @3.50GHz
  • 24GB 内存

软件:

  • Ubuntu 16.04.04 LTS
  • 4.4.0-116-通用内核
  • NVIDIA 驱动程序版本 384.111

测试程序

1) 硬件测试

  • 测试了每台显示器及其端口。(成功)
  • 使用 GPU 和显示器一次一个地测试每个 Mobo PCI 端口。(成功)
  • 测试了每个 GPU 及其所有显示端口。(成功)

    注意:每个 GPU 有 1 个显示器、1 个 HDMI 和 2 个 DVI 端口。

    • 自己测试了每个端口。(成功)
    • 测试所有端口同时显示。(成功)
  • 单独测试了所有涉及的布线。(成功)

2) 软件测试

  • 测试 Ubuntu 是否可以在扩展模式下在 1 个 GPU 上处理 4 个显示器。(成功)
    • 监视器 1:全屏播放高清电影。
    • 监视器 2:玩方舟生存进化在最高质量的设置。
    • 监视器 3:Active …

multiple-monitors nvidia xorg multi-gpu ubuntu-16.04

3
推荐指数
1
解决办法
1万
查看次数

Keras MultiGPU 训练失败并显示错误消息“IndexError:从空列表中弹出”

我想利用多个 GPU 来使用该tf.distribute.MirroredStrategy()方法训练我的 Keras/Tensorflow 模型。

下面是我的代码片段:

# Imports
import tensorflow as tf
import model # Module of functions for building the model

# Check GPU availability
devices = tf.config.list_physical_devices('GPU')
print('Num GPUs:', len(devices))
print(devices)

# Prepare dataset (Xtrain/Xtest are Numpy arrays with shape, (None, 600, 23))
Xtrain, Xtest = models.get_dataset() 

# Datasets as tf.data.dataset objects
batch_size = 256
train_dataset = tf.data.Dataset.from_tensor_slices((Xtrain, Xtrain)).batch(batch_size)
test_dataset = tf.data.Dataset.from_tensor_slices((Xtest, Xtest)).batch(batch_size)

# Build model for synchronous multi-GPU training
strategy = tf.distribute.MirroredStrategy()
print('Number of devices …
Run Code Online (Sandbox Code Playgroud)

python gpu multi-gpu keras tensorflow

3
推荐指数
1
解决办法
1071
查看次数

在两个GPU上运行的代码无法达到并发执行且具有无关的加速

我有这样的代码:

for(int i =0; i<2; i++)
{
    //initialization of memory and some variables
    ........
    ........
    RunDll(input image, output image); //function that calls kernel
}
Run Code Online (Sandbox Code Playgroud)

上述循环中的每次迭代都是独立的.我想同时运行它们.所以,我试过这个:

for(int i =0; i<num_devices; i++)
{
    cudaSetDevice(i);
    //initialization of memory and some variables
    ........
    ........
    RunDll(input image, output image); 
    {
        RunBasicFBP_CUDA(parameters); //function that calls kernel 1

        xSegmentMetal(parameters); //CPU function

        RunBasicFP_CUDA(parameters);  //function that uses output of kernel 1 as input for kernel 2

        for (int idx_view = 0; idx_view < param.fbp.num_view; idx_view++)
        {
            for (int idx_bin …
Run Code Online (Sandbox Code Playgroud)

cuda gpgpu multi-gpu

2
推荐指数
1
解决办法
149
查看次数

NVRM: RmInitAdapter failed: Xid: 79, GPU has fall off the bus

有两次,当我使用 4x1080ti 完成训练模型时,服务器宕机了。服务器为什么会崩溃?

我得到 sysylog 并发现 Nvidia 驱动程序或 GPU 有问题。

系统日志:(和nvidia-bug-report.log

[第二个]

9 月 6 日 21:11:41 gpu-8-server-intesight 内核:[31429.221258] NVRM:RmInitAdapter 失败!(0x30:0xffff:682)

9 月 6 日 21:11:41 gpu-8-server-intesight 内核:[31429.221337] NVRM:rm_init_adapter 设备承载次要编号 0 失败

9 月 6 日 21:13:54 gpu-8-server-intesight 内核:[31562.154256] NVRM:RmInitAdapter 失败!(0x30:0xffff:682)

9 月 6 日 21:13:54 gpu-8-server-intesight 内核:[31562.154306] NVRM:rm_init_adapter 失败,设备承载次要编号 1

[第一个]

9 月 6 日 02:48:40 gpu-8-server-intesight 内核:[557998.990374] NVRM:PCI 上的 GPU:0000:04:00:GPU-bc54db68-a3cb-54e9-7287-b95c69e41cf1

9 月 6 日 02:48:40 gpu-8-server-intesight 内核:[557998.990375] NVRM:GPU 板序列号:

9 月 6 日 02:48:40 gpu-8-server-intesight 内核:[557998.990376] …

crash ubuntu driver nvidia multi-gpu

2
推荐指数
1
解决办法
7663
查看次数

使用CUDA6.5 + MPI时是否必须使用MPS(多处理服务)?

通过以下链接编写:https://docs.nvidia.com/deploy/pdf/CUDA_Multi_Process_Service_Overview.pdf

1.1.乍看上去

1.1.1.MPS

多进程服务(MPS)是CUDA应用程序编程接口(API)的替代二进制兼容实现.MPS运行时架构旨在透明地启用协作式多进程CUDA应用程序(通常为MPI作业),以在最新的NVIDIA(基于Kepler的)Tesla和Quadro GPU上使用Hyper-Q功能.Hyper-Q允许在同一GPU上同时处理CUDA内核; 当GPU计算容量未被单个应用程序进程利用时,这可以提高性能.

  1. 使用CUDA6.5 + MPI(OpenMPI/IntelMPI)时是否必须使用MPS(多进程服务),或者我可以使用MPS而丢失一些性能但没有任何错误?

  2. 如果我使用MPS,是否意味着单个服务器上的所有MPI进程将在单个GPU卡上顺序执行(而非并发)GPU内核函数,但所有其他行为将保持不变?

cuda gpgpu nvidia mpi multi-gpu

1
推荐指数
1
解决办法
2844
查看次数

理解“nvidia-smi topo -m”输出

为了在系统上利用 GPU,我希望能够绘制框图并理解“nvidia-smi topo -m”输出表示的连接。

这是一个示例输出: 在此处输入图片说明

在此处输入图片说明

有人可以提供一个系统级框图吗?连接的描述也会很棒。我相信这会帮助很多人利用他们的多 GPU 系统。

cuda gpu mpi multi-gpu pci-e

1
推荐指数
1
解决办法
1619
查看次数

一个K80内两个GPU的CUDA感知MPI

我正在尝试优化称为LAMMPS的MPI + CUDA基准测试的性能(https://github.com/lammps/lammps).现在我运行两个MPI进程和两个GPU.我的系统有两个插座,每个插座连接到2个K80.由于每个K80内部包含2个GPU,因此每个插槽实际连接到4个GPU.但我只使用一个插槽中的2个内核和连接到该插槽的2个GPU(1个K80).MPI编译器是MVAPICH2 2.2rc1,CUDA编译器版本是7.5.

那是背景.我分析了应用程序,发现通信是性能瓶颈.我怀疑是因为没有应用GPUDirect技术.所以我切换到MVAPICH2-GDR 2.2rc1并安装了所有其他必需的库和工具.但MVAPICH2-GDR需要的Infiniband接口卡,不可用我的系统上,所以我必须运行时错误"通道初始化失败.在系统上未找到有效的HCAs".根据我的理解,Infiniband的卡则不需要,如果我们只是想在一个节点上使用1 K80内的GPU,因为K80具有这两个GPU的内部PCIe交换机.这些都是我的疑惑.为了清楚地说明问题,我将其列出如下:

  1. 在我的系统中,一个插座连接到两个K80.如果一个K80中的两个GPU需要与另一个K80中的GPU通信,那么如果我们想使用GPUDirect,我们必须拥有IB卡,是吗?

  2. 如果我们只需要在1 K80内使用两个GPU,那么这两个GPU之间的通信不需要IB卡,对吗?但是,MVAPICH2-GDR至少需要一张IB卡.那么有什么解决方法可以解决这个问题吗?或者我必须在系统上插入IB卡?

cuda mpi multi-gpu infiniband mvapich2

0
推荐指数
1
解决办法
492
查看次数

如何简化CUDA_VISIBLE_DEVICES=0,1,6,7

每次开始训练时,我都需要手动输入类似的命令CUDA_VISIBLE_DEVICES=0,1,6,7,具体取决于我将使用多少个 GPU 以及哪些当前是空闲的。

这个答案提供了一个丑陋但实用的解决办法。即在 bashrc 中为每个组合编写一个别名:

alias gpu4='CUDA_VISIBLE_DEVICES=4'
alias gpu25='CUDA_VISIBLE_DEVICES=2,5'
alias gpu256='CUDA_VISIBLE_DEVICES=2,5,6'
alias gpu0467='CUDA_VISIBLE_DEVICES=0,4,6,7'
Run Code Online (Sandbox Code Playgroud)

例如,这可以节省输入“CUDA_VISIBLE_DEVICES”的大量时间。

如何进一步简化使用CUDA_VISIBLE_DEVICES

或者,有人可以分享一种更优雅的方法来替换alias上面的 -list 吗?

bash alias multi-gpu

-2
推荐指数
1
解决办法
3852
查看次数