标签: gpu

NVIDIA P100 GPU 与 GCP 中承诺的 NVIDIA P100 GPU 限制名称之间的差异

目前,我正在尝试增加 GKE 中 NVIDIA P100 GPU 的配额限制。当我使用限制名称过滤配额时,我得到两种类型的选项 - NVIDIA P100 GPU承诺的 NVIDIA P100 GPU。这两者有什么区别?

gpu google-cloud-platform google-kubernetes-engine

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

Nvidia CUDA 错误:没有可在设备上执行的内核映像

我有一台 NVidia GeForce GTX 770,希望将其 CUDA 功能用于我正在进行的项目。我的机器运行的是 Windows 10 64 位。

我已遵循提供的 CUDA Toolkit 安装指南:https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/

安装驱动程序后,我打开示例解决方案(使用 Visual Studio 2019)并构建deviceQuerybandwidthTest示例。这是输出:

设备查询:

C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.3\bin\win64\Debug\deviceQuery.exe Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "NVIDIA GeForce GTX 770"
  CUDA Driver Version / Runtime Version          11.3 / 11.3
  CUDA Capability Major/Minor version number:    3.0
  Total amount of global memory:                 2048 MBytes (2147483648 bytes)
  (008) Multiprocessors, (192) CUDA Cores/MP:    1536 …
Run Code Online (Sandbox Code Playgroud)

cuda gpu driver nvidia

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

Onnxruntime 与 PyTorch

我使用 PyTorch 在我的自定义数据集上训练了 YOLO-v3 tiny。为了比较推理时间,我尝试了 CPU 上的 onnxruntime 以及 PyTorch GPU 和 PyTorch CPU。平均运行时间约为:

onnxruntime cpu: 110 ms - CPU 使用率: 60%
Pytorch GPU: 50 ms
Pytorch CPU: 165 ms - CPU 使用率: 40%
并且所有模型都使用批量大小 1。

但是,我不明白 onnxruntime 与 PyTorch CPU 相比如何更快,因为我没有使用 onnxruntime 的任何优化选项。我刚刚用过这个:

onnx_model = onnxruntime.InferenceSession('model.onnx')
onnx_model.run(None,{onnx_model.get_inputs()[0].name: input_imgs })
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么在没有任何优化的情况下速度更快吗?以及为什么使用 onnxruntime 时 CPU 使用率更高。有什么办法可以让它保持下去吗?

提前致谢。

cpu gpu onnxruntime

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

如果没有 sudo 命令,Docker 标志“--gpu”将无法工作

我是ubuntu用户。我使用以下泊坞窗图像,tensorflow/tensorflow:nightly-gpu

如果我尝试运行这个命令

$ docker run -it --rm --gpus all tensorflow/tensorflow:nightly-gpu bash
Run Code Online (Sandbox Code Playgroud)

存在权限被拒绝错误。

docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: Running hook #0:: error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: mount error: open failed: /sys/fs/cgroup/devices/user.slice/devices.allow: permission denied: unknown.
Run Code Online (Sandbox Code Playgroud)

当然,如果我正在使用 ,我可以运行此命令sudo,但我想在gpu不使用 的情况下使用sudo

有什么好的解决办法吗?请问有什么线索吗?

linux ubuntu gpu docker

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

根据这些统计数据,为什么这么多 GPU 不支持常见图像类型的传输操作?

显示了支持任何给定图像格式用于不同用途(例如采样、传输、作为深度和模板缓冲区等)的 GPU 的百分比。如果您查看它,您会发现支持许多最常见的格式对于采样和深度缓冲区使用等用途,百分比显示为 99% 或 100%,而对 TRANSFER_SRC 和 TRANSFER_DST 的支持为 78%。我想知道为什么会这样,因为几乎任何格式都应该能够传输以进行读取和写入。上传用作纹理的图像时,不需要将 TRANSFER_DST 位设置为标志吗?同样,这是否意味着存在支持 R8G8B8A8_UINT 之类的 GPU(显然是 100%),但只有 78% 支持传输它们?这对我来说没有意义。奇怪的是,其中许多对 TRANSFER_SRC 和 TRANSFER_DST 的支持显示为 78%,而 BLIT_SRC 和 BLIT_DST 显示为 100%。我遵循的教程展示了使用复制命令和 TRANSFER_DST 上传纹理以将图像复制到 GPU,例如从暂存缓冲区复制图像时。

graphics gpu image vulkan

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

PyTorch Lightning 子模型列表不会传输到 GPU

在 CPU 上使用 PyTorch Lightning 时,一切正常。然而,当使用 GPU 时,我得到一个RuntimeError: Expected all tensors to be on the same device.

问题似乎来自于使用未传递给 GPU 的子模型列表的模型:

class LambdaLayer(LightningModule):
    def __init__(self, fun):
        super(LambdaLayer, self).__init__()
        self.fun = fun

    def forward(self, x):
        return self.fun(x)

class TorchModel(LightningModule):
    def __init__(self):
        super(TorchModel, self).__init__()
        self.cat_layers = [TorchCatEmbedding(cat) for cat in columns_to_embed]
        self.num_layers = [LambdaLayer(lambda x: x[:, idx:idx+1]) for _, idx in numeric_columns]
        self.ffo = TorchFFO(len(self.num_layers) + sum([embed_dim(l) for l in self.cat_layers]), y.shape[1])
        self.softmax = torch.nn.Softmax(dim=1)

model = TorchModel()
trainer = Trainer(gpus=-1) …
Run Code Online (Sandbox Code Playgroud)

python gpu pytorch pytorch-lightning

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

“docker:19.03-dind”无法选择具有以下功能的设备驱动程序“nvidia”:[[gpu]]

我遇到了 K8S+DinD 问题:

  • 启动 Kubernetes 集群
  • 在该集群内启动一个主 docker 镜像和一个 DinD 镜像
  • 运行请求 GPU 的作业时出现错误could not select device driver "nvidia" with capabilities: [[gpu]]

完全错误

http://localhost:2375/v1.40/containers/long-hash-string/start: Internal Server Error ("could not select device driver "nvidia" with capabilities: [[gpu]]")
Run Code Online (Sandbox Code Playgroud)

execK8S pod 内的 DinD 映像nvidia-smi不可用。

一些调试,似乎是由于 DinD 缺少 Nvidia-docker-toolkit,当我直接在本地笔记本电脑 docker 上运行相同的作业时,我遇到了相同的错误,我通过安装nvidia-docker2 sudo apt-get install -y nvidia-docker2修复了相同的错误。

我想也许我可以尝试将 nvidia-docker2 安装到 DinD 19.03 (docker:19.03-dind),但不知道该怎么做?通过多阶段 docker 构建?

非常感谢!


更新:

吊舱规格:

spec:
    containers:
      - name: dind-daemon
        image: docker:19.03-dind
Run Code Online (Sandbox Code Playgroud)

gpu docker kubernetes nvidia-docker docker-in-docker

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

将句子转换器模型从 GPU 分离到 CPU

我在 GPU 上训练了一个 SentenceTransformer 模型并保存了它。现在我想在另一台没有 GPU 的机器上使用它,但我找不到将它加载到 CPU 上的方法。

from sentence_transformers import SentenceTransformer

model_name = 'all-MiniLM-L6-v2'
model = SentenceTransformer(model_name, device='cuda')
Run Code Online (Sandbox Code Playgroud)

python cpu gpu sentence-transformers

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

如何访问 CUDA 中的稀疏张量核心功能?

张量核心可以通过 CUDA 中的 WMMA 接口以编程方式访问(请参阅https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#wmmahttps://developer.nvidia.com/博客/programming-tensor-cores-cuda-9/)。最近,在 Ampere 一代卡中,Nvidia 宣布能够使用稀疏矩阵执行稀疏张量运算,如下所示:https ://developer.nvidia.com/blog/acceleating-inference-with-sparsity-using-ampere-和-tensorrt/

所呈现的格式似乎采用元素对及其在四个元素段(2 位索引)内的顺序。然而,查看wmma 文档,我找不到任何提及这一点的内容,也找不到如何访问这些特殊的张量核心操作。AFAICT 的该功能的公告页面也没有说明这一点。

如何访问 cuda 中的稀疏张量核心功能?

cuda gpu nvidia cuda-wmma

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

Cuda 中的线程内如何管理堆栈帧?

假设我们有一个调用一些函数的内核,例如:

__device__ int fib(int n) {
    if (n == 0 || n == 1) {
        return n;
    } else {
        int x = fib(n-1);
        int y = fib(n-2);
        return x + y;
    }
    return -1;
}

__global__ void fib_kernel(int* n, int *ret) {
    *ret = fib(*n);
}
Run Code Online (Sandbox Code Playgroud)

内核fib_kernel将调用 function fib(),该函数在内部将调用两个fib()函数。假设GPU有80个SM,我们正好启动80个线程来进行计算,并传入n10个。我知道会有大量的重复计算,这违反了数据并行性的思想,但我想更好地理解线程的堆栈管理。

根据Cuda PTX 的文档,它声明如下:

GPU 维护每个线程的执行状态,包括程序计数器和调用堆栈

  1. 堆栈位于本地内存中。当线程执行内核时,它们的行为是否与CPU中的调用约定一样?换句话说,是不是对于每个线程,对应的栈都会动态增长和收缩呢?

  2. 每个线程的堆栈都是私有的,其他线程无法访问。有没有一种方法可以手动检测编译器/驱动程序,以便堆栈分配在全局内存中,而不是本地内存中?

  3. 有没有一种方法可以让线程获取当前的程序计数器、帧指针值?我认为它们存储在一些特定的寄存器中,但 PTX 文档没有提供访问这些寄存器的方法。我可以知道我必须修改什么(例如驱动程序或编译器)才能获取这些寄存器吗?

  4. 如果我们将输入增加到fib(n)10000,很可能会导致堆栈溢出,有办法处理吗?问题2的答案或许可以解决这个问题。任何其他想法将不胜感激。

cuda gpu driver

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