首页 > 解决方案 > Azure Batch VM 中 CUDA 初始化的执行时间很慢

问题描述

在 Azure Batch 的一个 VM 中运行某些 CUDA 程序时,我遇到了初始化时间缓慢的问题。

经过一些故障排除后,我做了一个简单的测试来运行这个调用,如下面的代码所示。

#include <stdio.h>
#include <cuda.h>
#include <cuda_runtime_api.h>
#include <time.h>

clock_t start, end;
double cpu_time_used;

int main()
{
    CUresult result;
    printf("CUDA version %d \n", CUDA_VERSION);    
    start = clock();
    result = cuInit(0);
    if (result != CUDA_SUCCESS) {
        printf("cuInit failed with error code %d: %s\n", result, cudaGetErrorString(result));
        return 1;
    }
    end = clock();
    cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;    
    printf("cuInit took %f seconds to execute \n", cpu_time_used); 
    return 0;
}

平均需要大约 1.9 秒。

一些规格:

作为比较,相同的代码在我的桌面(Windows)以及另一个自定义 Azure VM(nc6,不是 Azure Batch)上运行,给出了 0.03 秒的类似结果。(cudatoolkit 10.2)

-- 更新 1 --

通过 Torch 调用 CUDA 初始化也显示出明显的延迟(对于第一次调用),如此测试所示:

run: 0, import torch: 0.430, cuda_available: 4.921
run: 1, import torch: 0.000, cuda_available: 0.000
run: 2, import torch: 0.000, cuda_available: 0.000
run: 3, import torch: 0.000, cuda_available: 0.000
max time for import torch: 0.43 s,  max time for cuda_available: 4.92 s
torch.version 1.7.1+cu101 torch.version.cuda: 10.1

导入火炬代码为:

import torch

cuda_available 代码是:

torch.cuda.is_available()

我的问题是 Azure Batch 为 CUDA 初始化正常行为所花费的时间?

标签: azurecudapytorchtorchazure-batch

解决方案


VirtualMachineConfiguration 模式下的 Azure Batch 在内部分配虚拟机规模集。Azure Batch 分配的底层硬件没有区别。进一步调查:

  1. 你的样本集有多大?您的开始时间是否可以在不同 Batch 池中的不同 VM 之间重现?也许你有一个坏的或降级的 VM 或 GPU。
  2. nvidia-smi在有问题的计算节点上告诉你什么?是否存在任何潜在的硬件故障?
  3. 您是在使用 Azure Batch 任务,还是远程进入 VM 并以交互方式执行任务?

推荐阅读