【分支结构源码底层】【学霸君源码】【抖音门店源码】cuda 源码编译

时间:2024-11-26 15:54:03 编辑:抓php源码 来源:opc c 源码

1.Windows用Visual Studio 2022编译支持CUDA12的源码gromacs 2024.2教程
2.入坑指南| OpenCV4.8 + CUDA + 扩展模块支持编译
3.Autoware.io源码编译安装
4.[技术随笔]🛠🛠从源码安装Pytorch3D详细记录及学习资料
5.AI模型部署实战:利用OpenCV的CUDA模块加速视觉模型部署流程
6.CUDA学习:基础知识小结

cuda 源码编译

Windows用Visual Studio 2022编译支持CUDA12的gromacs 2024.2教程

       为了在 Windows 上使用 Visual Studio 编译 Gromacs .2 版本支持 CUDA,您需要遵循以下步骤。编译

       首先,源码安装 Visual Studio ,编译无论是源码企业版、专业版还是编译分支结构源码底层社区版均可,确保在安装时选择使用 C++ 的源码桌面开发组件。

       其次,编译下载并安装 CUDA ,源码从官方 CUDA Toolkit Archive 获取。编译

       接着,源码下载并安装 FFTW3.3.,编译从 fftw.org 下载相应的源码库。

       打开命令提示符,编译解压 FFTW3.3. 的源码源码,并在目录中建立 build 文件夹。

       进入 build 文件夹,然后在命令提示符中执行编译安装命令。

       修改 CUDA 头文件中的 host_config.h,定位到大约第 行,将版本号从 改为 ,确保编译过程顺利。

       下载 Gromacs .2 的编译源码,从提供的链接获取。

       下载完成后,解压缩源码,进入 build 目录,执行 cmake 命令进行配置。

       在 cmake 配置时,选择合适的 GMX_CUDA_TARGET_SM 参数,根据您的显卡选择 sm_, sm_, sm_, sm_, sm_, sm_, sm_, sm_, sm_, sm_, sm_ 中的一个,我以 sm_ 为例,即 -DGMX_CUDA_TARGET_SM=。

       编译时可能会遇到错误,如 nvcc fatal 错误或 CMake 错误。解决这类问题需要耐心,确保按照配置正确地执行编译过程。

       如果需要比较修改的代码,可以使用 Beyond_Compare 工具进行代码对比,下载地址为提供的链接。

入坑指南| OpenCV4.8 + CUDA + 扩展模块支持编译

       欢迎关注最新版OpenCV4.8的CUDA加速编译指南。在深度学习模型部署速度提升方面,CUDA加速技术发挥着关键作用。为了顺利进行编译,首先需确保软件版本满足要求:使用CMake3.或更高版本,以及VS专业版或以上版本。配合ti显卡和CUDA.3版本,将OpenCV4.8源码包与扩展模块源码包解压至D盘。

       操作路径如下:D:\opencv-4.8.0与D:\opencv_contrib-4.8.0。启动CMake进行配置生成,点击Finish完成配置后,选择Generate,生成项目文件。设置扩展模块路径,并在搜索CUDA关键字后,学霸君源码勾选相关选项,再次点击Configure,生成配置文件。

       打开OpenCV.sln文件,切换到Release模式,生成安装文件。预计编译时间较长,耐心等待即可。最终,编译完成后的结果展示了CUDA加速下的性能提升。

       技巧提示:在编译过程中,注意避免下载第三方文件,可手动放置到source/.cache文件夹内的相应位置。无需编译xFeature2D、FaceModel、Test等模块,避免不必要的依赖下载。

       配置完成后,可运行人脸检测案例和YOLOv8姿态评估模型,验证CUDA加速效果。使用以下代码启用GPU推理执行。

       总之,OpenCV4.8通过CUDA支持实现GPU加速,显著提升图像处理程序性能。请参考本人新书《OpenCV应用开发:入门、进阶与工程化实践》获取更多CUDA函数使用知识。

Autoware.io源码编译安装

       要编译安装Autoware.io,首先请确保已安装ROS1,如Ubuntu .版本的Melodic。以下步骤将指导你完成依赖安装及源码编译过程。

       安装依赖

       1. 对于CUDA的支持(可选但建议),你需要下载CUDA .0,链接位于developer.nvidia.com/cuda。安装时,遇到驱动安装询问时选择n,后续步骤默认安装即可。

       2. 安装cudnn,从developer.nvidia.com/rd...获取并进行安装。在cuda目录下进行软链接配置,并通过验证测试。

       其他依赖安装

       3. 安装eigen3.3.7,接着是opencv3,安装时需先安装依赖库,然后解压、配置和编译。

       源码下载与编译

       4. 创建新的工作区,下载并配置工作区,然后下载Autoware.ai源码。

       5. 使用rosdep安装依赖库,有CUDA版本和无CUDA版本两种编译方式。

       测试与问题解决

       6. 下载并运行demo,可能遇到的问题包括编译错误和链接问题。

       问题1:calibration_publisher报错,需修改CMakeList.txt文件。抖音门店源码

       问题2:ndt_gpu编译错误,需替换Eigen3Config.cmake文件中的版本信息。

       问题3:opencv链接问题,需要检查和调整。

       问题4:rosdep更新慢,可通过修改源码和配置文件解决。

       问题5:runtime manager花屏,需安装wxPython 4.和libsdl1.2-dev。

       通过上述步骤,你应该能够成功编译并测试Autoware.io。如有任何疑问,查阅官方文档或社区论坛寻求帮助。

[技术随笔]🛠🛠从源码安装Pytorch3D详细记录及学习资料

       在启动安装Pytorch3D之前,首要任务是选择合适的pytorch基础镜像。我选择了包含CUDA组件和驱动的pytorch 1.9的devel版本,以确保满足Pytorch3D对于pytorch和cuda版本的要求。我使用的是python 3.7、pytorch 1.9和cuda.2,前提是你已经在宿主机上配置好了显卡驱动和nvidia-docker,以便在容器内映射宿主机的显卡信息。

       在安装前,确保nvcc编译器、CUDA工具箱和驱动正常运行,并且安装了git、vim、sudo和curl等基础工具。

       下一步是配置CUB工具。按照Pytorch3D的安装文档,为了支持CUDA,需要先配置CUB,并设置CUB_HOME环境变量。由于选择的镜像包含CUDA,编译过程中会自动包含cuda。为保险起见,可以指定FORCE_CUDA环境变量为1。

       从源码编译Pytorch3D时,避免了使用conda可能遇到的依赖冲突问题。在确认前两步没有问题后,编译过程通常顺利。安装完成后,检查日志和pytorch3d的版本信息。

       为了验证Pytorch3D的正常运行,从ARkit中导出BS系数,尝试使用它渲染一个简单的白模,并利用GPU。观察到显卡被充分利用,表明设置正确,可以进行后续操作。

       在完成安装并验证Pytorch3D的功能后,可以参考收集的资料来探索其更高级的用法。以下是几个示例:

       从Pytorch3D文档中获取的教程和代码示例。

       开源社区的讨论和问题解答,特别是与Pytorch3D相关的话题。

       个人经验分享和案例研究,网站渗透看源码可以在GitHub、Stack Overflow等平台找到。

       通过这些资源,您可以深入学习Pytorch3D的功能和应用,进一步拓展其在计算机图形学、三维重建和深度学习等领域的应用。

AI模型部署实战:利用OpenCV的CUDA模块加速视觉模型部署流程

       本文介绍使用OpenCV的CUDA模块加速视觉模型部署流程的方法。在之前的介绍中,我们提到了CV-CUDA库,但其对系统版本和CUDA版本的要求较高。对于不熟悉CUDA编程但希望利用CUDA加速模型部署的人来说,OpenCV的CUDA接口提供了一种替代方案。以下是基于OpenCV CUDA模块的基本使用方法、安装CUDA版本OpenCV以及加速视觉模型部署流程的详细步骤。

       在Ubuntu .系统中安装OpenCV时,仅使用apt安装命令将不包含CUDA模块。要使用CUDA模块,需通过源码编译安装。此过程包括下载源码、安装必要的依赖、配置CMake以加速依赖下载(通过-DOPENCV_DOWNLOAD_MIRROR_ID=gitcode选项从国内镜像下载),并设置环境变量。

       OpenCV CUDA模块提供了基本数据结构GpuMat,与Mat相似但专用于GPU操作,封装接口与Mat一致。此外,OpenCV提供了简单接口实现CPU与GPU数据转换,通过cv::Mat与cv::gpu::GpuMat之间的转换实现。在进行图像预处理时,使用GpuMat替换Mat,可将预处理流程加速。

       在部署视觉AI模型时,预处理是关键步骤。使用CPU进行预处理时,代码可能如下所示。利用OpenCV CUDA模块的接口,代码可以优化为使用GPU加速。CUDA模块接口与CPU版本一致,仅在名称后添加了cuda命名空间标识。这使得使用CUDA模块的难度大大降低,只需对照CPU接口查找对应的GPU版本即可。

       为了提高设备利用率,OpenCV CUDA模块还支持CUDA流技术。CUDA流允许在设备上并发执行多个内核任务,通过创建cv::cuda::Stream类对象并在调用每个CUDA接口时传入该对象,最后调用waitForCompletion()确保流上所有操作完成。这种优化方式对于在嵌入式平台上有效减少CPU资源消耗非常有利。

       综上所述,使用OpenCV的CUDA模块可以有效加速视觉模型的部署流程。尽管OpenCV提供的CUDA接口有限,但在大多数情况下足以满足需求。当需要更多自定义CUDA代码时,可以考虑使用CUDA进行更深入的优化。

CUDA学习:基础知识小结

       在CUDA学习中,源码审计报告理解编译流程是基础。首先,让我们深入探讨nvcc的编译过程。在将源代码SRC编译为PTX时,编译选项中的XY代表虚拟架构的计算能力,它限制了代码可以利用的CUDA特性。接着,ZW在PTX到cubin的转换中表示真实架构的计算能力,确保执行文件能适配的GPU性能,必须注意ZW应大于等于XY。示例编译选项如下:

       除了常规编译,JIT编译方式会在执行时动态编译PTX,这里也有一个JIT编译选项示例。简化编译选项如-arch=sm_XY,等同于指定虚拟架构。

       CUDA编程中,SM、SP、grid、block、warp和thread等概念是关键。从软件角度看,它们之间有明确的关系。例如,grid和block的维度可以是三维的,而thread的索引通过维度转换来获取。这里有一张图展示了这些概念的关系。

       kernel function是CUDA程序的核心,它的定义和使用有一些限制。要正确调用,需要指定grid_size和block_size,它们对应于block的数量和thread的数量。这里详细解释了kernel function的定义和调用方式。

       CUDA函数的修饰词__host__、__device__、__global__决定函数的执行环境。CUDA程序通常分为数据准备、执行kernel、数据交换和错误处理等步骤,其中数据拷贝是一个关键环节,使用cudaMemcpy进行,它支持多种数据传输方向。

       计时是性能评估的重要手段,CUDA通过事件来实现。Debug功能则涉及API错误检测和kernel function的异步执行错误检查。CUDA-MEMCHECK工具集是调试工具的重要组成部分,可以通过特定命令调用。

win + CUDA 9.0 + cuDNN 7.0 + tensorflow源码编译安装

       在配置个人深度学习主机后,安装必备软件环境成为首要任务。使用Anaconda5.0.0 python3.6版本管理Win python环境,新建基于python3.5的tensorflow-gpu-py conda环境。直接使用conda安装tensorflow,会默认安装tensorflow-gpu 1.1.0并主动安装cudatoolkit8.0 + cudnn6.0。若需配置CUDA环境,需自行下载并安装cuda9.0 + cudnn7.0,配置环境变量。pip安装tensorflow,会默认安装最新版本tensorflow-gpu 1.3.0。配置不当导致import tensorflow时报错:'ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'。尝试源码编译tensorflow解决此问题。

       查阅tensorflow官网文档,了解cmake window build tensorflow方法。文档中提到,tensorflow源代码目录下有详细网页介绍Windows环境编译方法,包含重要信息。发现安装tensorflow-gpu版本、配置CUDA8.0 + cuDNN6.0/cuDNN5.1或CUDA9.0 + cuDNN7.0时,import tensorflow时报错。查阅错误信息,网上解答提及需要配置正确的CUDA和cuDNN版本。然而,尝试安装和配置后依然报错。安装tensorflow cpu版本无问题,确认CUDA环境配置错误。

       决定源码编译tensorflow-gpu以解决问题。查阅文档,执行编译操作。在window环境下编译tensorflow源码,需要准备的软件包括Git、tensorflow源码、anaconda、swig、CMake、CUDA、cuDNN、Visual Studio 。在百度网盘下载相关软件。

       配置过程中,修改CMakeLists.txt以适应CUDA 9.0 + cuDNN 7.0。在cmake目录下新建build文件夹,执行命令配置tensorflow。配置后进行编译,遇到问题如:cudnnSetRNNDescriptor参数不匹配、网络访问问题、编码问题、protobuf库下载问题、zlib.h文件不存在、下载链接失败、无法解决的错误等。

       为解决这些问题,采取相应措施,如修改cuda_dnn.cc文件、网络代理设置、文件编码转换、忽略警告信息、多次尝试下载、修改cmake配置文件等。遇到无法解决的问题,如CUDA编译器问题、特定源代码文件问题,提交至github tensorflow进行讨论。

       完成源码编译后,安装tensorflow-gpu并进行验证。在下一步中继续讨论验证过程和可能遇到的后续问题。整个编译过程耗时、复杂,需要耐心和细心,希望未来能有官方解决方案以简化编译过程。

在 Nvidia Docker 容器编译构建显存优化加速组件 xFormers

       本篇文章,聊聊如何在新版本 PyTorch 和 CUDA 容器环境中完成 xFormers 的编译构建。

       让你的模型应用能够跑的更快。

       写在前面

       xFormers[1] 是 FaceBook Research (Meta)开源的使用率非常高的 Transformers 加速选型,当我们使用大模型的时候,如果启用 xFormers 组件,能够获得非常明显的性能提升。

       因为 xFormers 对于 Pytorch 和 CUDA 新版本支持一般会晚很久。所以,时不时的我们能够看到社区提出不能在新版本 CUDA 中构建的问题( #[2]或 #[3]),以及各种各样的编译失败的问题。

       另外,xFormers 的安装还有一个问题,会在安装的时候调整当前环境已经安装好的 PyTorch 和 Numpy 版本,比如我们使用的是已经被验证过的环境,比如 Nvidia 的月度发布的容器环境,这显然是我们不乐见的事情。

       下面,我们就来解决这两个问题,让 xFormers 能够在新的 CUDA 环境中完成编译,以及让 xFormers 的安装不需要变动我们已经安装好的 Pytorch 或者 Numpy。

       环境准备

       环境的准备一共有两步,下载容器和 xFormers 源代码。

       Nvidia 容器环境

       在之前的 许多文章[4]中,我提过很多次为了高效运行模型,我推荐使用 Nvidia 官方的容器镜像( nvcr.io/nvidia/pytorch:.-py3[5])。

       下载镜像很简单,一条命令就行:

       完成镜像下载后,准备工作就完成了一半。

       准备好镜像后,我们可以检查下镜像中的具体组件环境,使用docker run 启动镜像:

       然后,使用python -m torch.utils.collect_env 来获取当前环境的信息,方便后续完成安装后确认原始环境稳定:

       获取 xFormers

       下载 xFormers 的源代码,并且记得使用--recursive 确保所有依赖都下载完毕:

       xFormers 的源码包含三个核心组件cutlass、flash-attention、sputnik,除去最后一个开源软件在 xFormers 项目 sputnik 因为 Google 不再更新,被固定了代码版本,其他两个组件的版本分别为:cutlass@3.2 和 flash-attention@2.3.6。

       Dao-AILab/flash-attention[6]目前最新的版本是 v2.4.2,不过更新的主干版本包含了更多错误的修复,推荐直接升级到最新版本。在 v2.4.2 版本中,它依赖的 cutlass 版本为 3.3.0,所以我们需要升级 cutlass 到合适的版本。

       Nvidia/cutlass[7] 在 3.1+ 的版本对性能提升明显。

       不过如果直接更新 3.2 到目前最新的 3.4flash-attention 找不到合适的版本,会发生编译不通过的问题,所以我们将版本切换到 v3.3.0 即可。

       另外,在前文中提到了在安装 xFormers 的时候,会连带更新本地已经安装好的依赖。想要保护本地已经安装好的环境不被覆盖,尤其是 Nvidia 容器中的依赖不被影响,我们需要将xformers/requirements.txt 内容清空。

       好了,到这里准备工作就结束了。

       完成容器中的 xFormers 的安装

       想要顺利完成 xFormers 的构建,还有一些小细节需要注意。为了让我们能够从源码进行构建,我们需要关闭我们下载 xFormers 路径的 Git 安全路径检查:

       为了让构建速度有所提升,我们需要安装一个能够让我们加速完成构建的工具ninja:

       当上面的工具都完成后,我们就可以执行命令,开始构建安装了:

       需要注意的是,默认情况下安装程序会根据你的 CPU 核心数来设置构建进程数,不过过高的工作进程,会消耗非常多的内存。如果你的 CPU 核心数非常多,那么默认情况下直接执行上面的命令,会得到非常多的Killed 的编译错误。

       想要解决这个问题,我们需要设置合理的MAX_JOBS 参数。如果你的硬件资源有限,可以设置 MAX_JOBS=1,如果你资源较多,可以适当增加数值。我的构建设备有 G 内存,我一般会选择设置 MAX_JOBS=3 来使用大概最多 GB 的内存,来完成构建过程,MAX_JOBS 的构建内存消耗并不是完全严格按照线性增加的,当我们设置为 1 的时候,GB 的设备就能够完成构建、当我们设置为 2 的时候,使用 GB 的设备构建会比较稳妥,当设置到 4 的时候,构建需要的内存就需要 GB 以上了。

       构建的过程非常漫长,过程中我们可以去干点别的事情。

       当然,为了我们后续使用镜像方便,最好的方案是编写一个 Dockerfile,然后将构建的产物保存在镜像中,以方便后续各种场景使用:

       在构建的时候,我们可以使用类似下面的命令,来搞定既使用了最新的 Nvidia 镜像,包含最新的 Pytorch 和 CUDA 版本,又包含 xFormers 加速组件的容器环境。

       如果你是在本机上进行构建,没有使用 Docker,那么构建成功,你将看到类似下面的日志:

       等待漫长的构建结束,我们可以使用下面的命令,来启动一个包含构建产物的容器,来测试下构建是否成功:

       当我们进入容器的交互式命令行之后,我们可以执行python -m xformers.info,来验证 xFromers 是否构建正常:

       以及,使用python -m torch.utils.collect_env 再次确认下环境是否一致:

       最后

       好了,这篇文章就先写到这里啦。

银河系CUDA编程指南(2.5)——NVCC与PTX

       在构建了一个以cuDNN和cuBLAS为基础的简单深度学习框架后,我已将其开源,并鼓励大家参与交流学习。未来计划逐步完善框架,将尝试使用纯CUDA C实现,并与cuDNN进行性能比较。关于cuDNN的使用,我也会后续专门撰写文章进行详细介绍。

       NVCC,CUDA的编译器,其核心是NVVM优化器,基于LLVM编译器结构。它本质上是一个集合,调用gcc、cicc、ptxas等工具编译CUDA源代码,区分主机代码(用ANSI C编写)和设备代码(CUDA扩展语言编写)。

       NVCC的编译过程分为离线编译和即时编译,通过预处理将源代码分为两部分,分别由不同编译器处理,最终合并为单个object文件。例如,通过dryrun选项可以查看编译步骤,包括头文件配置、CUDA设备代码编译等。

       PTX是CUDA的编程模型和指令集,是一种虚拟架构汇编,允许跨GPU优化。NVCC通过虚拟架构编译生成PTX,然后在实际GPU上执行为SASS。编译时,需设置虚拟和实际GPU架构以保证兼容性。

       Separate Compilation允许在编译阶段将device code分开处理,形成relocatable代码,然后在链接阶段定位到最终的host object。这与Whole Program Compilation不同,后者直接编译为executable device code。

       以cudnn-learning-framework的Makefile为例,需配置CUDA相关路径,添加cuDNN库,并调整编译生成部分,确保链接所有需要的.o文件。NVCC命令在编译时会执行链接任务。

GPU编程3:CUDA环境安装和IDE配置

       本文指导如何在个人机器上安装CUDA环境,结合集成开发环境Clion进行配置,以方便后续CUDA编程学习。

       安装CUDA环境如下:

       1. 针对显卡型号,从官方下载相应驱动。

       示例显卡型号:小米pro寸,GF MX 。

       参考链接:nvidia.cn/Download/index.aspx

       2. 阻止或卸载nouveau驱动。

       3. 通过控制台进入文本界面,安装NVIDIA驱动。

       步骤示例:调整引导运行级别,以便开机进入文本界面。

       网址参考:jingyan.baidu.com/article/0abcb0fbdf.html

       4. 确认驱动安装。

       5. 尽量与CUDA版本匹配安装NVIDIA驱动。

       6. 进行CUDA测试。

       CUDA代码编译与运行:

       编译CUDA源码时,包含两个部分:CUDA设备函数与主机函数,它们分开独立编译。CUDA 5.0+支持文件间设备代码独立编译,而整体编译是默认模式。

       编译三个文件(a.cu, b.cu, c.cpp),其中a.cu调用了b.cu中定义的设备代码,可以使用独立编译方式实现。

       详细编译步骤:使用nvcc编译设备函数,普通C/C++编译器编译主机代码。

       举例:`nvcc a.cu`编译设备文件。

       实际工程中,为了优化编译效率,常采用`makefile`或`CMake`工具配置源码编译。

       `nvcc`支持多种快捷开关,如`-arch=sm_`编译特定架构。

       基于Clion的CUDA配置流程:

       1. 遇到Clion创建CUDA可执行文件失败问题。

       检查是否已安装NVCC。

       验证机器安装GPU卡。

       检查安装路径:执行`which nvcc`,若未找到,则进行安装。

       确认安装位置:输入`nvcc`显示默认路径,通常为`/usr/bin/nvcc`。

       2. 利用Clion新建CUDA项目,并设置CMake。

       配置CMake代替`makefile`,简化编译过程。

       输出及结果:提供示例链接供参考。