草庐IT

pytorch-gpu-cuda

全部标签

c++ - 用于 openmp 4.5 卸载到 (gpu) 设备的 nvptx gcc (9.0.0/trunk) 找不到 libgomp.spec

一段时间以来,我一直在尝试安装OpenMP4.5卸载到NvidiaGPU版本的gcc,但到目前为止没有成功,尽管我越来越接近了。这次我关注了thisscript,我做了两个更改:首先,我指定了gcc的主干版本而不是7.2,其次,根据github存储库,nvptx-newlib现在包含在nvptx-tools中,所以我删除了那部分脚本。为便于引用,原脚本为#!/bin/sh##BuildGCCwithsupportforoffloadingtoNVIDIAGPUs.#work_dir=$HOME/offload/wrkinstall_dir=$HOME/offload/install#L

PyTorch深度学习实战(37)——CycleGAN详解与实现

PyTorch深度学习实战(37)——CycleGAN详解与实现0.前言1.CycleGAN基本原理2.CycleGAN模型分析3.实现CycleGAN小结系列链接0.前言CycleGAN是一种用于图像转换的生成对抗网络(GenerativeAdversarialNetwork,GAN),可以在不需要配对数据的情况下将一种风格的图像转换成另一种风格,而无需为每一对输入-输出图像配对训练数据。CycleGAN的核心思想是利用两个生成器和两个判别器,它们共同学习两个域之间的映射关系。例如,将马的图像转换成斑马的图像,或者将夏天的风景转换成冬天的风景。在本节中,我们将学习CycleGAN的基本原理,

c++ - 非确定性输出的 CUDA 调试程序

我正在我的Ubuntu10.1064位系统上调试我的基于CUDA4.0/Thrust的图像重建代码,我一直在尝试找出如何调试我的输出图像出现的运行时错误一些随机的“噪音”。我的代码中没有随机数生成器输出,所以我希望输出在运行之间保持一致,即使它是错误的。然而,这不是……我只是想知道是否有人有调试此类CUDA运行时错误的通用程序。我没有在我的cuda内核中使用任何共享内存。我努力避免任何涉及全局内存的竞争条件,但我可能会遗漏一些东西。我试过使用gpuocelot,但它在识别我的一些CUDA和CUSPARSE函数调用时遇到了问题。此外,我的代码通常可以正常工作。就在我更改此设置时,我得到了

c++ - 使用cuda创建共现矩阵

//Thisismykernelfunction__global__voidcreateSCM(Pixel*pixelMat,//imageintimgRows,//imagedimensionsintimgCols,int*matrizSCM,//CoocurrencematrixintnumNiveles,//coocurrencematrixlevels=256intdelta_R,//value={-1,0or1}intdelta_C)//value={-1,0or1}{inti=blockIdx.y*blockDim.y+threadIdx.y;intj=blockIdx.x

c++ - CUDA 推力 : copy from device to device

我使用标准CUDAmalloc在CUDA中分配了一个内存数组,并将其传递给函数,如下所示:voidMyClass::run(uchar4*input_data)我还有一个类成员,它是一个推力device_ptr声明为:thrust::device_ptrdata=thrust::device_malloc这里的num_pts是数组中值的个数,input_data指针保证是num_pts长。现在,我想将输入数组复制到thrust_device_ptr中。我看过推力文档,其中很多都在谈论从设备复制到主机内存,反之亦然。我想知道在推力上执行此设备到设备复制的最佳性能最佳方式是什么,还是我应该

c++ - 为维数增加(点数)的点云分配 CUDA 设备内存

我正在编写一个程序,我需要:对图像的每个像素进行测试如果测试结果为真,我必须向点云中添加一个点如果测试结果为假,什么都不做我已经在CPU端C++上编写了一个工作代码。现在我需要使用CUDA加速它。我的想法是让一些block/线程(我猜是每个像素一个线程)并行执行测试,如果测试结果为真,则让线程向云中添加一个点。我的麻烦来了:如果我事先不知道要插入到点云中的点数,我如何在设备内存中为点云分配空间(使用cudaMalloc或类似工具)?我是否必须分配固定数量的内存,然后在每次点云达到限制维度时增加它?还是有一种“动态”分配内存的方法? 最佳答案

Python 基于pytorch从头写GPT模型;实现gpt实战

1.GPT简介        GPT(GenerativePre-trainedTransformer)模型是一种基于Transformer架构的生成式预训练模型,由OpenAI开发。它采用了无监督学习的方式进行预训练,然后通过微调适应特定的任务。GPT模型的结构由多层Transformer解码器组成,每个解码器由多头自注意力机制和前馈神经网络组成。自注意力机制能够对输入的序列进行编码,并捕捉序列中的上文关系,而前馈神经网络则负责对编码后的向量进行进一步的非线性转换。通过堆叠多个解码器,GPT模型能够学习到更加丰富的语义表示。        在预训练阶段,GPT模型采用了大规模的无标签文本数据

单GPU就能压缩模型,性能不变参数少25%!微软提出模型稀疏化新方法

众所周知,对于大语言模型来说,规模越大,所需的算力越大,自然占用的资源也就越多。研究人员于是乎把目光转到了这片领域,即模型的稀疏化(Sparsification)。今天要介绍的SliceGPT,则可以实现模型的事后稀疏。也就是说,在一个模型训练完了以后再进行稀疏化操作。该模型由微软研究院和苏黎世联邦理工学院联合发表在了arXiv上。目前主流的稀疏化技术面临着挺多挑战和困难。比方说,需要额外的数据结构,而且在当下的硬件条件下,速度有限。SliceGPT就能很好的解决这些问题——它能用一个较小的矩阵来替换每个权重矩阵,从而降低网络的嵌入维度。而实际结果也是非常不错的,在LLAMA-270B、OPT

c++ - cuda-memcheck,如何从地址到源代码?

我成功地使用cuda-memcheck获取有关错误内存访问的错误。使用-g-G编译cuda代码给出了很好的源位置,如下所示:=========Error:processdidn'tterminatesuccessfully=========Invalid__global__readofsize1=========at0x00000710in/some/path/somefile.cu:117:some_function=========bythread(0,14,0)inblock(1,16,0)=========Address0x00abac20isoutofbounds现在我尝试使

c++ - 封装 CUDA 内核的最佳方式是什么?

我正在尝试使CUDA项目尽可能接近OO设计。目前,我找到的解决方案是使用Struct来封装数据,对于每个需要一些GPU处理的方法,需要实现3个函数:对象将调用的方法。一个__全局__函数,它将调用该结构的__设备__方法。__device__结构内的方法。我举个例子。假设我需要实现一种方法来初始化结构内的缓冲区。它看起来像这样:structFoo{float*buffer;short2buffer_resolution_;short2block_size_;__device__initBuffer(){intx=blockIdx.x*blockDim.x+threadIdx.x;int