标签: nvidia

在 Python 中访问 GPU 硬件规格?

我想使用 Numba 或类似的 Python CUDA 包访问各种 NVidia GPU 规范。可用设备内存、二级缓存大小、内存时钟频率等信息。

通过阅读这个问题,我了解到我可以通过 Numba 的 CUDA 设备接口访问一些信息(但不是全部)。

from numba import cuda

device = cuda.get_current_device()
attribs = [s for s in dir(device) if s.isupper()]
for attr in attribs:
    print(attr, '=', getattr(device, attr))
Run Code Online (Sandbox Code Playgroud)

测试机上的输出:

ASYNC_ENGINE_COUNT = 4
CAN_MAP_HOST_MEMORY = 1
COMPUTE_CAPABILITY = (5, 0)
MAX_BLOCK_DIM_X = 1024
MAX_BLOCK_DIM_Y = 1024
MAX_BLOCK_DIM_Z = 64
MAX_GRID_DIM_X = 2147483647
MAX_GRID_DIM_Y = 65535
MAX_GRID_DIM_Z = 65535
MAX_SHARED_MEMORY_PER_BLOCK = 49152
MAX_THREADS_PER_BLOCK = 1024
MULTIPROCESSOR_COUNT = 3
PCI_BUS_ID = …
Run Code Online (Sandbox Code Playgroud)

python cuda gpu nvidia numba

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

如何使用ffmpeg的overlay_cuda过滤器制作SBS视频?

FFMPEG 几个月前推出了新版本的 FFMPEG,其中包含新的过滤器“overlay_cuda”,该过滤器与“overlay”相同,但使用 Nvidia 卡来应用它。

我在FFMPEG网站上找到了该过滤器的描述,但没有如何使用它的示例。我发现的唯一示例来自开发人员提交,但是将视频或照片放在另一个视频上。

我在普通覆盖过滤器之前使用宽度两倍的 nullsrc 图像来执行此操作,但现在我不知道如何使用此过滤器。

提交描述: https: //patchwork.ffmpeg.org/project/ffmpeg/patch/20200318071955.2329-1-yyyaroslav@gmail.com/ ffmpeg 文档网页:https: //ffmpeg.org/ffmpeg-filters.html#overlay_005fcuda-1

我希望你可以帮助我。

更新:

我做了这个 FFmpeg 命令:

  1. 输入每个视频。
  2. 第一个视频创建右侧填充,然后上传到卡的内存中。
  3. 使用叠加 Cuda,另一个视频会放在原始视频的右侧。
ffmpeg -y -loglevel info \
-i $video_1  \
-hwaccel cuda -hwaccel_output_format cuda -i $video_2 \
-filter_complex \
" \
[0:v]pad=w=2*iw:h=ih:x=0:y=0,hwupload_cuda[base];
[base][1:v]overlay_cuda=x=800:y=0" \
-an -c:v h264_nvenc overlay_test.mp4
Run Code Online (Sandbox Code Playgroud)

但我收到此错误消息:

[overlay_cuda @ 0x55fdec4b2ec0] Can't overlay nv12 on yuv420p 
[Parsed_overlay_cuda_2 @ 0x55fdec4b2d80] Failed to configure output pad on Parsed_overlay_cuda_2
Error reinitializing filters!
Failed to inject frame into filter network: Invalid …
Run Code Online (Sandbox Code Playgroud)

video ffmpeg nvidia video-processing

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

将 ffpmeg OpenCL 过滤器输出传递到 NVenc 而不需要 hwdownload?

我正在尝试使用 ffmpeg 对 UHD HDR 视频流进行色调映射(和调整大小)。以下命令:

ffmpeg -vsync 0 -hwaccel cuda -init_hw_device opencl=ocl -filter_hw_device ocl 
    -threads 1 -extra_hw_frames 3 -c:v hevc_cuvid -resize 1920x1080 -i "INPUT.hevc" 
    -vf "hwupload,
         tonemap_opencl=tonemap=mobius:param=0.01:desat=0:r=tv:p=bt709:t=bt709:m=bt709:format=nv12,
         hwdownload,format=nv12,hwupload_cuda" 
    -c:v hevc_nvenc -b:v 8M "OUTPUT.hevc"
Run Code Online (Sandbox Code Playgroud)

似乎有效(RTX 3080 上大约 200 FPS)。然而,我注意到它仍然使用一个 CPU 核心,并且 GPU 使用率据报告仅为 60-70%。当我只在没有任何滤镜的情况下调整大小时,我会在 100% GPU 使用率下获得大约 400FPS 的速度。

我怀疑最后的hwdownload,format=nv12,hwupload_cuda语句有问题,因为这增加了通过主内存的绕道。我尝试只使用hwupload_cuda而不使用hwdownload(就像这里建议的那样: https: //stackoverflow.com/a/55747785/929037在本答案末尾附近的过滤器示例中),但后来出现以下错误:

Impossible to convert between the formats supported by the filter 'Parsed_tonemap_opencl_1' and the filter 'auto_scaler_0'
Error reinitializing filters!
Failed to inject …
Run Code Online (Sandbox Code Playgroud)

video ffmpeg nvidia opencl nvenc

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

NVIDIA OpenCL 设备版本

NVIDIA 最近宣布其显卡支持 OpenCL 3.0。我有 NVIDIA Geforce MX150 卡,并且已将 CUDA 工具包更新至版本 11.3,驱动程序为 465.19.01。我已经安装了 clinfo 工具,它显示有关 OpenCL 平台和设备的所有信息。当我运行它时,它显示:

  • 设备版本 = OpenCL 3.0 CUDA
  • 驱动程序版本 = 465.19.01
  • 设备 OpenCL C 版本 = OpenCL C 1.2

我在这里有点困惑。设备版本和设备 OpenCL C 版本有什么区别?我是否能够在我的卡上运行 OpenCL 3.0 代码,或者它仍然支持 OpenCL 1.2 规范?

gpu nvidia opencl

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

如何使用 ffmpeg GPU 编码将视频帧保存到内存?

我正在尝试从视频中提取帧并将它们保存到内存(RAM)中。使用CPU编码,我没有任何问题:

ffmpeg -i input -s 224x224 -pix_fmt bgr24 -vcodec rawvideo -an -sn -f image2pipe -
Run Code Online (Sandbox Code Playgroud)

但当我尝试使用某些 NVIDIA GPU 编码时,我总是会得到嘈杂的图像。我尝试使用不同的命令,但在 Windows 和 Ubuntu 上结果始终相同。

ffmpeg -hwaccel cuda -i 12.mp4 -s 224x224 -f image2pipe - -vcodec rawvideo
Run Code Online (Sandbox Code Playgroud)

将 JPG 保存到磁盘上后,我没有任何问题。

ffmpeg -hwaccel cuvid -c:v h264_cuvid -resize 224x224 -i {input_video} \
     -vf thumbnail_cuda=2,hwdownload,format=nv12 {output_dir}/%d.jpg
Run Code Online (Sandbox Code Playgroud)

我有用于测试这些命令的 python 代码:

import cv2
import subprocess as sp
import numpy

IMG_W = 224
IMG_H = 224
input = '12.mp4'

ffmpeg_cmd = [ 'ffmpeg','-i', input,'-s', '224x224','-pix_fmt', 'bgr24',  '-vcodec', 'rawvideo', …
Run Code Online (Sandbox Code Playgroud)

python video jpeg ffmpeg nvidia

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

无法导入 nvidia_smi

我倾向于在 python 代码运行期间收集 GPU 状态。我需要import nvidia_smi在我的代码中执行此操作。但即使通过安装它pip install nvidia_smi遇到此错误: No module named 'nvidia_smi'

任何想法?

python nvidia

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

docker:来自守护程序的错误响应:无法选择具有功能的设备驱动程序“”:[[gpu]]。安装 nvidia-docker2 之后

我按照官方文档https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html中的说明安装 nvidia-docker2

每当我运行他们的测试示例时:

sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
Run Code Online (Sandbox Code Playgroud)

我仍然收到错误:

docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]. 3
Run Code Online (Sandbox Code Playgroud)

我重启了还是没有效果。

我使用的是 Ubuntu 22.04,并且我的 nvidia 驱动程序已更新。Nvidia-smi 在机器上工作但无法使用 docker 工作

编辑(已解决):最后我发现发生了什么事。重新安装时,它可以工作,但是如果重新启动,它又会回到之前不工作的状态。

这是由于使用“snapd”安装了另一个 docker 服务,所以我必须完全清除 docker: sudo snap remove docker在我可以“重新安装所有内容”之后,它最终稳定下来,即使在重新启动后也是如此

nvidia docker nvidia-docker

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

将 nvidia 运行时添加到 Windows WSL 上的 docker 运行时

我想将 nvidia 运行时添加到我的 docker 中。请注意,我正在运行 Windows 11。Windows 上的 Docker Desktop v.4.24.2 集成在 WSL 2 NVIDIA 驱动程序 545.84 上

我将所有内容安装为 nvidia-container-toolkit 并在运行 ubuntu 22.04 LTS 的 wsl 中我能够运行

docker run --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 -it --rm -v .:/app nvcr.io/nvidia/pytorch:22.07-py3
Run Code Online (Sandbox Code Playgroud)

它实际上为我的 GPU 加载了它需要的一切。我知道这一点是因为我能够在 jupyter 笔记本中执行

import torch
for i in range(torch.cuda.device_count()):
   print(torch.cuda.get_device_properties(i).name)
Run Code Online (Sandbox Code Playgroud)

它显示了我的 GPU (RTX 2080 SUPER)

但如果我想使用标志 --runtime=nvidia 它说

docker:来自守护进程的错误响应:未知或无效的运行时名称:nvidia。请参阅“docker run --help”。

我想在 docker compose 中使用它:

version: '3'
services:
  pytorch_container:
    image: nvcr.io/nvidia/pytorch:22.07-py3
    command: ["bash"]
    volumes:
      - .:/app
    runtime: …
Run Code Online (Sandbox Code Playgroud)

nvidia docker windows-subsystem-for-linux pytorch wsl-2

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

CUDA NVCC编译器二进制变量

我正在尝试在CUDA做类似的事情:

char_sig=code[k][1] & 0b00000010;
Run Code Online (Sandbox Code Playgroud)

并且NVCC编译器一直给我错误预期";"

相同的代码适用于GCC C编译器.我注意到问题是将二进制值设置为0b00000010,还有其他一些NVCC预期的表示法吗?

binary cuda nvidia nvcc

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

阻止cuda的每网格分配习惯

在cuda示例中,当他们分配网格大小时,我有一个共同的习惯.以下是一个例子:

int 
main(){

    ...
    int numElements = 50000;
    int threadsPerBlock = 1024;
    int blocksPerGrid =(numElements + threadsPerBlock - 1) / threadsPerBlock;

    vectorAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, numElements);
    ...
}

__global__ void
vectorAdd(const float *A, const float *B, float *C, int numElements)
{
    int i = blockDim.x * blockIdx.x + threadIdx.x;

    if (i < numElements)
    {
        C[i] = A[i] + B[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

我很好奇的是blocksPerGrid的初始化.我不明白为什么会这样

int blocksPerGrid = (numElements + threadsPerBlock - 1) / threadsPerBlock;
Run Code Online (Sandbox Code Playgroud)

而不是直截了当

int blocksPerGrid = numElements / threadsPerblock;
Run Code Online (Sandbox Code Playgroud)

这似乎是一种很常见的习惯.我在各种项目中看到过.他们都是这样做的.我是cuda的新手.欢迎任何解释或背后的知识.

cuda gpgpu nvidia

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