azure - 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 秒。
一些规格:
- 英伟达驱动:460.32.03
- CUDA工具包:10.2
- Azure Batch:nc6、Tesla K80
作为比较,相同的代码在我的桌面(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 初始化正常行为所花费的时间?
解决方案
VirtualMachineConfiguration 模式下的 Azure Batch 在内部分配虚拟机规模集。Azure Batch 分配的底层硬件没有区别。进一步调查:
- 你的样本集有多大?您的开始时间是否可以在不同 Batch 池中的不同 VM 之间重现?也许你有一个坏的或降级的 VM 或 GPU。
nvidia-smi
在有问题的计算节点上告诉你什么?是否存在任何潜在的硬件故障?- 您是在使用 Azure Batch 任务,还是远程进入 VM 并以交互方式执行任务?
推荐阅读
- java - 如何编写一个 Java 程序,将 CSV 文件从所有 covid 19 数据转换为 JSON
- jquery - 如何在 jquery 和 asp Mvc 中刷新页面
- sql - 使用数据类型“几何”时使用 mariadb/phpmyadmin 时会发生什么
- permissions - ECS 任务访问启用阻止公共访问的 S3 存储桶网站:“访问被拒绝”
- ios - xCode 项目未在 macOS Catalina 10.15.5 上找到 c++ 标准库
- object - 如何切割 3D 对象的一部分?
- python - Flask SQLAlchemy:按 id 获取记录
- mysql - 续集错误:包括意外。元素必须是模型、关联或对象
- node.js - 我们可以使用客户端 IP 地址在 node.js 上发出 http 请求吗?
- angular - Dotnet 核心 3.1 返回 401 和状态文本 OK