我正在尝试安装一个开源软件“openpose”,为此我需要安装 cuda、cudnn 和 nvidia 驱动程序。nvidia-smi 的输出是:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.59 Driver Version: 440.59 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce 940MX Off | 00000000:01:00.0 Off | N/A |
| N/A 47C P8 N/A / N/A | 107MiB / 2004MiB | 7% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name …Run Code Online (Sandbox Code Playgroud) 我得到nvidia-smi的Memory-Usage是这样的
$nvidia-smi -i 0,1
Wed Mar 4 16:20:07 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.113 Driver Version: 418.113 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce RTX 208... Off | 00000000:18:00.0 Off | N/A |
| 27% 37C P8 1W / 250W | 10789MiB / 10989MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce RTX …Run Code Online (Sandbox Code Playgroud) 我想将 cuDF 数据帧转换为 cupy ndarray。我正在使用下面的代码:
import time
import numpy as np
import cupy as cp
import cudf
from numba import cuda
df = cudf.read_csv('titanic.csv')
arr_cupy = cp.fromDlpack(df.to_dlpack())
Run Code Online (Sandbox Code Playgroud)
输出:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-176-0d6ff9785189> in <module>
----> 1 arr_cupy = cp.fromDlpack(df.to_dlpack())
~/.conda/envs/rapids_013/lib/python3.7/site-packages/cudf/core/dataframe.py in to_dlpack(self)
3821 import cudf.io.dlpack as dlpack
3822
-> 3823 return dlpack.to_dlpack(self)
3824
3825 @ioutils.doc_to_csv()
~/.conda/envs/rapids_013/lib/python3.7/site-packages/cudf/io/dlpack.py in to_dlpack(cudf_obj)
72 )
73
---> 74 return libdlpack.to_dlpack(gdf_cols)
cudf/_libxx/dlpack.pyx in cudf._libxx.dlpack.to_dlpack()
ValueError: Cannot create a DLPack tensor with null …Run Code Online (Sandbox Code Playgroud) 我有一个使用协作组来执行某些操作的代码。因此我用以下方法编译我的代码:
/usr/local/cuda/bin/nvcc -arch=sm_61 -gencode=arch=compute_61,code=sm_61, --device-c -g -O2 foo.cu
Run Code Online (Sandbox Code Playgroud)
然后我尝试调用设备链接器:
/usr/local/cuda/bin/nvcc -arch=sm_61 -gencode=arch=compute_61,code=sm_61, -g -dlink foo.o
Run Code Online (Sandbox Code Playgroud)
然后它会产生错误:
ptxas 错误:文件使用太多全局常量数据(0x10100 字节,最大 0x10000)
该问题是由我分配常量内存的方式引起的:
__constant__ float d_cnst_centers[CONST_MEM / sizeof(float)];
Run Code Online (Sandbox Code Playgroud)
其中 CONST_MEM = 65536 字节,这是我从 SM_61 的设备查询中获得的。但是,如果我将常量内存减少到 64536 之类的值,问题就消失了。这几乎就像在编译期间为了某些目的而“保留”常量内存一样。我搜索了 CUDA 文档,但没有找到满意的答案。使用可用的最大常量内存是否安全?为什么会出现这个问题呢?
编辑:这是在 SM_61 上触发错误的代码片段:
#include <algorithm>
#include <vector>
#include <type_traits>
#include <cuda_runtime.h>
#include <cfloat>
#include <iostream>
#include <cooperative_groups.h>
using namespace cooperative_groups;
struct foo_params {
float * points;
float * centers;
int * centersDist;
int * centersIndex;
int numPoints;
};
__constant__ float d_cnst_centers[65536 / sizeof(float)]; …Run Code Online (Sandbox Code Playgroud) 这是demo.cu从 GPU 设备打印的目标:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
__global__ void hello_cuda() {
printf("hello from GPU\n");
}
int main() {
printf("hello from CPU\n");
hello_cuda <<<1, 1>>> ();
cudaDeviceSynchronize();
cudaDeviceReset();
printf("bye bye from CPU\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它编译并运行:
$ nvcc demo.cu
$ ./a.out
Run Code Online (Sandbox Code Playgroud)
这就是我得到的输出:
hello from CPU
bye bye from CPU
Run Code Online (Sandbox Code Playgroud)
问:为什么GPU没有打印结果?
看起来我确实错误配置了 cuda 工具包或其他东西,但是我可以从 cuda-samples 编译并运行各种程序。例如,matrixMul或deviceQuery
我编写了这个 pytorch 程序来在 GPU 上计算 5000*5000 矩阵乘法,迭代 100 次。
import torch
import numpy as np
import time
N = 5000
x1 = np.random.rand(N, N)
######## a 5000*5000 matrix multiplication on GPU, 100 iterations #######
x2 = torch.tensor(x1, dtype=torch.float32).to("cuda:0")
start_time = time.time()
for n in range(100):
G2 = x2.t() @ x2
print(G2.size())
print("It takes", time.time() - start_time, "seconds to compute")
print("G2.device:", G2.device)
start_time2 = time.time()
# G4 = torch.zeros((5,5),device="cuda:0")
G4 = G2[:5, :5]
print("G4.device:", G4.device)
print("G4======", G4)
# G5=G4.cpu()
# print("G5.device:",G5.device) …Run Code Online (Sandbox Code Playgroud) 运行时:
which nvcc
它说:
nvcc not found
而且我没有找到在 macOS catalina 10.15.7 上安装 nvcc 的明确指南。
因为我正在尝试运行https://github.com/jugg1024/Text-Detection-with-FRCN.git。但在摄像机上:
make -j16 && make pycaffe:
从这里:
这就是为什么我确实需要nvcc安装。
您能提供的任何帮助将不胜感激!
我有一台 NVidia GeForce GTX 770,希望将其 CUDA 功能用于我正在进行的项目。我的机器运行的是 Windows 10 64 位。
我已遵循提供的 CUDA Toolkit 安装指南:https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/。
安装驱动程序后,我打开示例解决方案(使用 Visual Studio 2019)并构建deviceQuery和bandwidthTest示例。这是输出:
设备查询:
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) 使用 nppi cuda 库中的 nppi 几何变换函数时,出现奇怪的错误。代码在这里:
#include <nppi.h>
#include <nppi_geometry_transforms.h>
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgcodecs.hpp>
#include <vector>
void write(const cv::Mat &mat1, const std::string &path) {
auto mat2 = cv::Mat(mat1.rows, mat1.cols, CV_8UC4);
for (int i = 0; i < mat1.rows; i++) {
for (int j = 0; j < mat1.cols; j++) {
auto &bgra = mat2.at<cv::Vec4b>(i, j);
auto &rgb = mat1.at<cv::Vec3b>(i, j);
bgra[0] = rgb[2];
bgra[1] = rgb[1];
bgra[2] = rgb[0];
bgra[3] = UCHAR_MAX;
}
}
std::vector<int> compression_params; …Run Code Online (Sandbox Code Playgroud) 张量核心可以通过 CUDA 中的 WMMA 接口以编程方式访问(请参阅https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#wmma和https://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 中的稀疏张量核心功能?