标签: multi-gpu

使用Java与Nvidia GPU(cuda)

我正在开发一个用java完成的业务项目,需要巨大的计算能力来计算业务市场.简单的数学,但有大量的数据.

我们订购了一些cuda gpu来尝试,因为cuda不支持Java,我想知道从哪里开始.我应该构建一个JNI接口吗?我应该使用JCUDA还是有其他方法?

我没有这方面的经验,我想如果有人可以指导我,我可以开始研究和学习.

java cuda gpu-programming multi-gpu

131
推荐指数
2
解决办法
9万
查看次数

多GPU基本用法

如何使用两个设备来改善例如以下代码的性能(向量之和)?是否可以"同时"使用更多设备?如果是,我如何管理不同设备的全局内存上的向量分配?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <cuda.h>

#define NB 32
#define NT 500
#define N NB*NT

__global__ void add( double *a, double *b, double *c);

//===========================================
__global__ void add( double *a, double *b, double *c){

    int tid = threadIdx.x + blockIdx.x * blockDim.x; 

    while(tid < N){
        c[tid] = a[tid] + b[tid];
        tid += blockDim.x * gridDim.x;
    }

}

//============================================
//BEGIN
//===========================================
int main( void ) {

    double *a, *b, *c;
    double *dev_a, *dev_b, *dev_c;

    // allocate …
Run Code Online (Sandbox Code Playgroud)

cuda gpu multi-gpu

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

有没有办法在多GPU环境中以编程方式选择渲染GPU?(视窗)

我有一个OpenGL应用程序,可以在具有多种多GPU配置的机器上运行(可能还有不同的Windows版本,从XP到7).是否有一般方法可以选择独立于GPU组合的OpenGL渲染器的特定GPU(例如NVIDIA + NVIDIA,NVIDIA + AMD,NVIDIA + Intel等)?它必须是可以从应用程序代码应用的解决方案,即直接在C++或将从应用程序调用的脚本,而无需最终用户干预.

以下是我尝试寻找解决方案的几项测试的详细信息,从非常具体的案例开始,但也许有一个解决方案可以在所有或大多数情况下工作.

是否有任何可靠的方法来强制哪些GPU进行OpenGL渲染?

任何提示都将非常感激.提前致谢!

试过可能的解决方案

Windows XP 64带有两个NVIDIA Quadro

使用两个Quadro卡组合进行测试

  • Quadro FX 1700 + Quadro FX 570
  • Quadro FX 1700 + Quadro FX 540
  • Quadro FX 1700 + Quadro NVS 285

在Windows XP 64位下使用相同的驱动程序(版本275.36),我在各种方法上取得了相对成功,例如:

  • 让司机决定.
    只要两张卡使用相同的驱动程序并决定使用所需的卡,此解决方案就是好的.所以它太具体,可能无法预测.

  • 在让司机决定之前,使用NVAPI更改代码中的驱动程序设置.
    有了这个解决方案,理论上可以让驱动程序按我的意愿决定,但很难,需要两张卡使用相同的驱动程序而且并不总是有效(使用FX 1700 + NVS 285它不起作用).

  • 更改主屏幕.
    这具有默认情况下应用程序在所选主屏幕中打开的效果.该解决方案仅与FX 1700 + FX 570组合一起使用.使用FX 1700 + FX 540,渲染器取决于驱动程序设置,独立于主屏幕,而FX 1700 + NVS 285渲染器始终为FX 1700.

  • 当窗口在特定屏幕中时创建OpenGL上下文.
    窗口可以在所需的屏幕中创建,独立于主屏幕,但它具有与上述解决方案相同的问题.

  • 创建OpenGL上下文,仅启用所需图形卡中的屏幕,然后启用其他/ s.
    这是我发现使用NVS 285作为渲染器的唯一方法,但它很难看,我不知道它是否可自动化,或者它是否适用于所有情况.

  • 尝试使用WGL_NV_gpu_affinity扩展名选择渲染GPU .
    通过FX 1700和FX 570的组合,扩展程序将两个GPU报告为兼容,并且我可以将渲染仅限制为其中一个.使用FX 1700 …

windows opengl multiple-monitors multi-gpu

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

多GPU编程如何与Vulkan一起使用?

在Vulkan中使用多GPU会不会像制作许多命令队列那样在它们之间划分命令缓冲区?

有两个问题:

  1. 在OpenGL中,我们使用GLEW来获取函数.拥有超过1个GPU,每个GPU都有自己的驱动程序.我们如何使用Vulkan?
  2. 框架的一部分是用GPU生成的,而其他GPU是用其他GPU生成的,例如使用Intel GPU来渲染UI和AMD或Nvidia GPU以在labtops中渲染游戏画面?或者是否会在GPU中生成帧并在另一个GPU中生成下一帧?

gpu multi-gpu vulkan

17
推荐指数
2
解决办法
7958
查看次数

使用同步手段和变量来实现多GPU BN层的方法

我想知道在使用多GPU进行训练时,通过同步批量统计来实现批量规范化层的可能方法.

Caffe也许有一些caffe可以做的变种,比如链接.但是对于BN层,我的理解是它仍然只同步层的输出,而不是平均值和变量.也许MPI可以同步手段和变量,但我认为MPI有点难以实现.

火炬我在这里这里看到了一些评论,它们显示了running_mean和running_var可以同步,但我认为批量平均值和批量变量不能或难以同步.

Tensorflow通常,它与caffe和torch相同.BN的实施是指这一点.我知道tensorflow可以将操作分配给指定的任何设备tf.device().但是平均值和变量的计算是在BN层的中间,所以如果我在cpu中收集平均值和变量,我的代码将是这样的:

cpu_gather = []
label_batches = []
for i in range(num_gpu):
    with tf.device('/gpu:%d' % i):
        with tf.variable_scope('block1', reuse=i > 0):
            image_batch, label_batch = cifar_input.build_input('cifar10', train_data_path, batch_size, 'train')
            label_batches.append(label_batch)

            x = _conv('weights', image_batch, 3, 3, 16, _stride_arr(1))
            block1_gather.append(x)

with tf.device('/cpu:0'):
    print block1_gather[0].get_shape()
    x1 = tf.concat(block1_gather, 0)
    # print x1.get_shape()
    mean, variance = tf.nn.moments(x1, [0, 1, 2], name='moments')

for i in range(num_gpu):
    with tf.device('/gpu:%d' % i): …
Run Code Online (Sandbox Code Playgroud)

multi-gpu torch caffe tensorflow batch-normalization

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

如何在具有数据并行性的多个GPU上运行Tensorflow Estimator

我有一个标准的tensorflow Estimator和一些模型,并希望在多个GPU而不是一个GPU上运行它.如何使用数据并行来完成?

我搜索了Tensorflow文档,但没有找到示例; 只有句子说Estimator会很容易.

有没有人使用tf.learn.Estimator有一个很好的例子?或指向教程的链接?

multi-gpu tensorflow tensorflow-gpu

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

Tensorflow Java多GPU推理

我有一个具有多个GPU的服务器,并希望在Java应用程序内的模型推理期间充分利用它们.默认情况下,tensorflow会占用所有可用的GPU,但仅使用第一个GPU.

我可以想出三个选项来克服这个问题:

  1. 限制设备在流程级别上的可见性,即使用CUDA_VISIBLE_DEVICES环境变量.

    这将要求我运行java应用程序的几个实例并在它们之间分配流量.不是那个诱人的想法.

  2. 在单个应用程序中启动多个会话,并尝试通过ConfigProto以下方式为每个会话分配一个设备:

    public class DistributedPredictor {
    
        private Predictor[] nested;
        private int[] counters;
    
        // ...
    
        public DistributedPredictor(String modelPath, int numDevices, int numThreadsPerDevice) {
            nested = new Predictor[numDevices];
            counters = new int[numDevices];
    
            for (int i = 0; i < nested.length; i++) {
                nested[i] = new Predictor(modelPath, i, numDevices, numThreadsPerDevice);
            }
        }
    
        public Prediction predict(Data data) {
            int i = acquirePredictorIndex();
            Prediction result = nested[i].predict(data);
            releasePredictorIndex(i);
            return result;
        }
    
        private synchronized int acquirePredictorIndex() {
            int i …
    Run Code Online (Sandbox Code Playgroud)

java multi-gpu tensorflow tensorflow-gpu

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

Pytorch Lightning 在 ddp 模式下复制主脚本

当我使用 ddp 模式(2 个 GPU)在集群上启动主脚本时,Pytorch Lightning 会复制主脚本中执行的任何内容,例如打印或其他逻辑。我需要一些扩展的训练逻辑,我想自己处理。例如,在之后做某事(一次!)Trainer.fit()。但随着主脚本的重复,这并不能按我的预期工作。我也尝试将其包装在 中if __name__ == "__main__",但它不会改变行为。如何解决这个问题呢?或者,如何在 Trainer 对象周围使用一些逻辑,而无需重复?

multi-gpu ddp pytorch pytorch-lightning

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

如何使用Keras进行多GPU培训?

我希望我的模型在多个GPU上运行,共享参数但具有不同批量的数据.

我可以这样做model.fit()吗?还有其他选择吗?

multi-gpu keras

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

2 个 IndexedSlices 不支持高效的 allreduce

我正在尝试在多个 GPU 上运行子类 Keras 模型。代码按预期运行,但是,在代码执行过程中会出现以下“警告”:

“2 个 IndexedSlices 不支持高效的 allreduce”

这是什么意思?我遵循了 Tensorflow 2.0 Beta 指南上的多 GPU 教程。我也在我的输入管道中使用数据集 API。

multi-gpu deep-learning keras tensorflow

10
推荐指数
0
解决办法
693
查看次数