我仍然对这些未知大小的矩阵感到生气,这些矩阵的每个维度可能在10-20.000之间变化.
我正在看CUDA sdk并想知道:如果我选择的块数太高会怎么样?
像X和Y尺寸的9999 x 9999块网格,如果我的硬件有SM不能容纳所有这些块,那么内核会出现问题还是性能会崩溃?
我不知道如何在块/线程中维度可能变化很大的东西.我正在考虑使用我的硬件支持的最大块数,然后使其中的线程在所有矩阵中工作,这是正确的方法?
我正在开发一个在Fermi卡上运行的CUDA 4.0应用程序.根据规范,Fermi具有Compute Capability 2.0,因此应该支持非内联函数调用.
我在一个不同的obj文件中用nvcc 4.0编译我的每个类.然后,我用g ++ - 4.4将它们全部链接起来.
请考虑以下代码:
[文件A.cuh]
#include <cuda_runtime.h>
struct A
{
__device__ __host__ void functionA();
};
Run Code Online (Sandbox Code Playgroud)
[文件B.cuh]
#include <cuda_runtime.h>
struct B
{
__device__ __host__ void functionB();
};
Run Code Online (Sandbox Code Playgroud)
[File A.cu]
#include "A.cuh"
#include "B.cuh"
void A::functionA()
{
B b;
b.functionB();
}
Run Code Online (Sandbox Code Playgroud)
试图编译A.cu与nvcc -o A.o -c A.cu -arch=sm_20输出Error: External calls are not supported (found non-inlined call to _ZN1B9functionBEv).
我一定做错了什么,但是什么?
在CUDA 4.x上第一次调用cudaMalloc
可能是非常慢的(这被报告过几次)并不是秘密,似乎是CUDA驱动程序中的一个错误.
最近,我注意到了奇怪的行为:运行时间cudaMalloc
直接取决于我链接到我的程序的第三方CUDA库(请注意,我不使用这些库,只是将程序链接到它们)
我使用以下程序运行了一些测试:
int main() {
cudaSetDevice(0);
unsigned int *ptr = 0;
cudaMalloc((void **)&ptr, 2000000 * sizeof(unsigned int));
cudaFree(ptr);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
挂具:-lcudart -lnpp -lcufft -lcublas -lcusparse -lcurand运行时间:5.852449
链接:-lcudart -lnpp -lcufft -lcublas运行时间:1.425120
链接:-lcudart -lnpp -lcufft运行时间:0.905424
链接:-lcudart运行时间:0.394558
根据'gdb',时间确实进入了我的cudaMalloc,所以它不是由某些库初始化例程引起的.
我想知道是否有人对此有合理的解释?
我正在研究PTX,我不明白CTA(计算线程数组)与CUDA块的不同之处.
它们是一样的吗?在我看来,现在(我只是在PTX文件的开头)他们是一样的
我无法解决我遇到的一个特殊问题:我无法查明罪魁祸首.
系统: Jetson TX1,arm64内核,32b用户空间,opencv4tegra
情况:使用以下方式构建项目:
find_package( OpenCV )
Run Code Online (Sandbox Code Playgroud)
这已经很好地编译了.
故障:我从源码构建并安装了CMake 3.5.2.现在我不再构建任何依赖OpenCV的项目了.我收到了点找不到的链接器错误:
opencv_dep_cudart
Run Code Online (Sandbox Code Playgroud)
我假设问题是在OpenCVCConfig.cmake这一点引起的:
# Import target "opencv_core" for configuration "Release"
set_property(TARGET opencv_core APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(opencv_core PROPERTIES
IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE "opencv_dep_cudart;opencv_dep_nppc;opencv_dep_nppi;opencv_dep_npps;dl;m;pthread;rt;tbb"
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libopencv_core.so.2.4.12"
IMPORTED_SONAME_RELEASE "libopencv_core.so.2.4"
)
Run Code Online (Sandbox Code Playgroud)
出文件: /usr/share/OpenCV/OpenCVModules-release.cmake
但是,此文件在CMake版本之间不会更改,因为它是OpenCV文件.所以这必须是它的处理方式.
手动将我的CMake恢复到2.8.12.2允许我再次构建.以下是使用OpenCV的make命令的示例.注意正确的cuda libs:
Linking CXX executable DuoInterfaceTest
/usr/local/bin/cmake -E cmake_link_script CMakeFiles/DuoInterfaceTest.dir/link.txt --verbose=1
/usr/bin/c++ -O2 -g -DNDEBUG -std=gnu++11 CMakeFiles/DuoInterfaceTest.dir/src/mainTest.cpp.o -o DuoInterfaceTest -L/home/ubuntu/catkin_ws/duointerface/lib/linux/arm -rdynamic libDuoInterface.a /usr/lib/libopencv_vstab.so.2.4.12 /usr/lib/libopencv_tegra.so.2.4.12 /usr/lib/libopencv_imuvstab.so.2.4.12 /usr/lib/libopencv_facedetect.so.2.4.12 /usr/lib/libopencv_esm_panorama.so.2.4.12 /usr/lib/libopencv_detection_based_tracker.so.2.4.12 /usr/lib/libopencv_videostab.so.2.4.12 /usr/lib/libopencv_video.so.2.4.12 /usr/lib/libopencv_ts.a /usr/lib/libopencv_superres.so.2.4.12 /usr/lib/libopencv_stitching.so.2.4.12 /usr/lib/libopencv_photo.so.2.4.12 /usr/lib/libopencv_objdetect.so.2.4.12 /usr/lib/libopencv_ml.so.2.4.12 /usr/lib/libopencv_legacy.so.2.4.12 /usr/lib/libopencv_imgproc.so.2.4.12 …Run Code Online (Sandbox Code Playgroud) 我正在使用nvidia GTX1080 gpu(8GB)在tensorflow 上运行Inception模型,当我设置batch_size = 16和image_size = 400时,然后在我启动程序后,我的ubuntu14.04将自动重启.
我已经通过以下方式在 virtualenv 下安装了 pytorch:
pip3 install https://download.pytorch.org/whl/cu100/torch-1.0.1.post2-cp35-cp35m-linux_x86_64.whl
pip3 install torchvision
Run Code Online (Sandbox Code Playgroud)
但出于某种原因:
import torch
torch.cuda.device_count()
0
torch.cuda.is_available()
False
Run Code Online (Sandbox Code Playgroud)
看起来 pytorch 出于某种原因检测到了 cuda 9:
torch._C._cuda_getDriverVersion()
9010
Run Code Online (Sandbox Code Playgroud)
我的系统:
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.5 LTS
Release: 16.04
Codename: xenial
nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Fri_Feb__8_19:08:17_PST_2019
Cuda compilation tools, release 10.1, V10.1.105
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
ls -l /usr/local/ …Run Code Online (Sandbox Code Playgroud) 我正在尝试在一个 NVIDIA Tesla V100 GPU 上运行 Tensorflow 作为服务。作为服务器,我的程序需要同时接受多个请求。所以,我的问题如下:
当多个请求同时到达时,假设我们没有使用批处理,这些请求是在 GPU 上顺序运行还是并行运行?我了解独立进程具有单独的 CUDA 上下文,它们在 GPU 上按顺序运行。但这些请求实际上是同一进程中的不同线程,应该共享一个 CUDA 上下文。所以根据文档,GPU 可以同时运行多个内核。如果这是真的,是否意味着如果我有大量请求同时到达,GPU 利用率可以达到 100%?但这在我的实验中从未发生过。
在不同线程中运行一个会话与在不同线程中运行不同会话有什么区别?哪个是实现 Tensorflow 服务器的正确方法?Tensorflow Serving 使用哪一种?
任何建议将被认真考虑。谢谢!
我很困惑是否可以在 CUDA 上运行 int8 量化模型,或者只能使用 fakequantise 在 CUDA 上训练量化模型以部署在另一个后端(例如 CPU)上。
我想使用实际的 int8 指令而不是 FakeQuantized float32 指令在 CUDA 上运行模型,并享受效率提升。奇怪的是,Pytorch 文档对此没有具体说明。是否可以使用不同的框架在 CUDA 上运行量化模型,例如TensorFlow我很想知道。
这是准备量化模型的代码(使用训练后量化)。该模型是带有 nn.Conv2d 和 nn.LeakyRelu 以及 nn.MaxPool 模块的普通 CNN:
model_fp = torch.load(models_dir+net_file)
model_to_quant = copy.deepcopy(model_fp)
model_to_quant.eval()
model_to_quant = quantize_fx.fuse_fx(model_to_quant)
qconfig_dict = {"": torch.quantization.get_default_qconfig('qnnpack')}
model_prepped = quantize_fx.prepare_fx(model_to_quant, qconfig_dict)
model_prepped.eval()
model_prepped.to(device='cuda:0')
train_data = ImageDataset(img_dir, train_data_csv, 'cuda:0')
train_loader = DataLoader(train_data, batch_size=32, shuffle=True, pin_memory=True)
for i, (input, _) in enumerate(train_loader):
if i > 1: break
print('batch', i+1, end='\r')
input = input.to('cuda:0')
model_prepped(input) …Run Code Online (Sandbox Code Playgroud) 我创建了一个 Python 3.7 conda 虚拟环境并使用此命令安装了以下软件包:
conda install pytorch torchvision torchaudio cudatoolkit=11.3 matplotlib scipy opencv -c pytorch
它们安装得很好,但是当我运行我的程序时,出现以下错误,表明未找到启用 CUDA 的设备:
raise RuntimeError('Attempting to deserialize object on a CUDA '
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location=torch.device('cpu') to map your storages to the CPU.
Run Code Online (Sandbox Code Playgroud)
我有一个 NVIDIA RTX 3060ti GPU,据我所知,它启用了 cuda,但每当我进入 conda 环境中的 Python 交互式 shell 时,我都会在False评估时得到torch.cuda.is_available()建议,可能 CUDA 未正确安装或未找到。
当我执行 …