1.极智开发 | 你真的码查了解GPU nvidia-smi指令吗
2.Python语言学习(三):Tensorflow_gpu搭建及convlstm核心源码解读
3.lightgbm-gpu安装-踩坑现场
4.视频和视频帧:Intel GPU(核显)的编解码故事
5.[推理部署]👋解决: ONNXRuntime(Python) GPU 部署配置记录
6.GPU编程3:CUDA环境安装和IDE配置
极智开发 | 你真的了解GPU nvidia-smi指令吗
在GPU管理中,你对nvidia-smi指令是码查否已经了如指掌?这篇文章将深入探讨这个看似常见的工具背后的细节。 在使用GPU时,码查nvidia-smi指令的码查重要性不容小觑。尽管日常操作中可能感觉它平淡无奇,码查但当你面对那些详细的码查a20 源码指标时,你会发现其价值不凡。码查比如这张nvidia-smi命令截图揭示了三个关键区域:蓝色区域包含版本信息,码查如NVIDIA-SMI、码查CUDA驱动和CUDA支持的码查最高版本,其中CUDA版本可能与你安装的码查不一致,可以通过nvcc -V查询。码查
红色区域是码查执行状态参数,包括GPU型号、码查风扇、码查温度、性能状态、电源使用情况等,这些都是监控GPU健康和性能的宝贵数据。
绿色区域则展示了正在运行的CUDA程序状态,特别是PID和GPU内存使用率,这些对于理解程序运行情况至关重要。
此外,nvidia-smi指令还有更多用法,如快速查询所有GPU信息、特定GPU详情或显存信息。掌握这些命令,能帮助你更好地管理GPU资源。 如果你对人工智能和AI项目充满兴趣,欢迎加入我的知识星球「极智视界」,那里有丰富的项目实战源码和资源,让你在实践中深化对nvidia-smi指令的理解。快来体验科技的魅力,让学习变得更有趣:t.zsxq.com/0aiNxERDqPython语言学习(三):Tensorflow_gpu搭建及convlstm核心源码解读
在探索深度学习领域,使用Python语言进行编程无疑是一条高效且灵活的途径。尤其在科研工作或项目实施中,Python以其丰富的库资源和简单易用的特性,成为了许多专业人士的首选。本文旨在分享在Windows系统下使用Anaconda搭建TensorFlow_gpu环境及解读ConvLSTM核心源码的过程。在提供具体步骤的同时,也期待读者的反馈,以持续改进内容。
为了在Windows系统下搭建适合研究或项目的TensorFlow_gpu环境,首先需要确认TensorFlow_gpu版本及其对应的uniapp答题系统源码cuDNN和CUDA版本。访问相关网站,以获取适合自身硬件配置的版本信息。以TensorFlow_gpu2.为例,进行环境搭建。
在Anaconda环境下,通过命令行操作来创建并激活特定环境,如`tensorflow-gpu`环境,选择Python3.版本。接着,安装cuDNN8.1和CUDA.2。推荐使用特定命令确保安装过程顺利,亲测有效。随后,使用清华镜像源安装TensorFlow_gpu=2..0。激活虚拟环境后,使用Python环境验证安装成功,通常通过特定命令检查GPU版本是否正确。
为了在Jupyter Notebook中利用该环境,需要安装ipykernel,并将环境写入notebook的kernel中。激活虚拟环境并打开Jupyter Notebook,通过命令确保内核安装成功。
对于ConvLSTM核心源码的解读,重点在于理解模型的构建与参数设置。模型核心代码通常包括输入数据维度、模型结构、超参数配置等。以官方样例为例,构建模型时需关注样本整理、标签设置、卷积核数量等关键参数。例如,输入数据维度为(None,,,1),输出数据维度为(None,None,,,)。通过返回序列设置,可以控制模型输出的arch源码安装软件形态,是返回单个时间步的输出还是整个输出序列。
在模型改造中,将彩色图像预测作为目标,需要调整模型的最后层参数,如将`return_sequence`参数更改为`False`,同时将`Conv3D`层修改为`Conv2D`层以适应预测彩色图像的需求。此外,选择合适的损失函数(如MAE)、优化器(如Adam)以及设置Metrics(如MAE)以便在训练过程中监控模型性能。
通过上述步骤,不仅能够搭建出适合特定研究或项目需求的TensorFlow_gpu环境,还能够深入理解并灵活应用ConvLSTM模型。希望本文内容能够为读者提供有价值的指导,并期待在后续过程中持续改进和完善。
lightgbm-gpu安装-踩坑现场
为了实现lightgbm的GPU支持,您需要准备一些必要的工具包并遵循特定的步骤。首先,您需要下载并安装cmake、boost和lightgbm。
对于cmake,您可以从其官方网站下载最新版本。当您下载并安装了cmake后,请确保将boost库文件的路径进行适当的修改。
接下来,使用git从github下载lightgbm源代码。在下载的文件夹中创建一个名为“build”的文件夹并进入,然后在该文件夹内创建一个空的CMakeList.txt文件。
在命令行中,定位到“build”目录并运行以下命令进行配置和构建:
cmake -A x -DUSE_GPU=1 -DBOOST_ROOT=D:/software_work_install/boost_1__0 -DBOOST_LIBRARYDIR=D:/software_work_install/boost_1__0/lib -DOpenCL_LIBRARY="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v.0/lib/x/OpenCL.lib" -DOpenCL_INCLUDE_DIR="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v.0/include" ..
为了确保正确安装,参考链接提供了详细的cmake命令行安装指南以及安装SDK的步骤。执行上述命令后,您将看到“build”目录下生成了许多文件。
接下来,通过执行命令“cmake --build . --target ALL_BUILD --config Release”,在“build/x”目录下生成“Release”文件夹。然后,通过命令“cd ..”回到上一层目录,进入“python-package”文件夹并执行“python setup.py install –-precompile”以完成安装。
请注意,尽管您可能已经成功安装了GPU版本的lightgbm,但您在Jupyter中使用自己的代码时仍可能遇到缺少GPU的错误。这可能与依赖库的兼容性问题有关。因此,发财乾坤眼源码尽管您尝试了多次安装,但为了节省时间,您可能决定暂时放弃安装GPU版本的包。
除了使用git clone和pip安装方式外,还有另一种方法是直接使用pip进行安装。您可以使用以下命令行命令:
pip install lightgbm --install-option=--gpu --install-option="--boost-root=D:/software_work_install/boost_1__0" --install-option="--boost-librarydir=D:/software_work_install/boost_1__0/lib" --install-option="--opencl-include-dir=/usr/local/cuda/include/"
如果您选择使用cmake GUI进行安装,步骤类似,但操作方式有所不同。通过GUI界面配置和生成构建文件后,您可能会遇到与版本兼容性相关的问题。
安装过程可能会涉及一些挑战,例如确保所有依赖包的兼容性。在尝试解决安装问题时,可能会遇到各种错误和警告。在安装过程中遇到问题时,查看错误日志文件(如CMakeError.log)可能会提供进一步的线索和解决方案。
请确保在安装过程中遵循正确的步骤和注意事项,并在遇到问题时查阅相关文档或论坛以寻求帮助。安装lightgbm GPU支持的完整过程可能涉及多个步骤和调整,确保您的开发环境与所有依赖库兼容至关重要。
视频和视频帧:Intel GPU(核显)的编解码故事
一般提及基于“显卡或多媒体处理芯片对视频进行解码”为硬解码,本文将探讨如何利用Intel的核显,即集成GPU实现硬解码。提及QSV,全称为Quick Sync Video,Intel在年发布Sandy Bridge CPU时,一同推出了这项基于核显进行多媒体处理,包括视频编解码的技术。集成核显,官方称HD Graphics,最早在Sandy Bridge前一代制程已推出,但性能提升及充分发挥在Sandy Bridge时期。Haswell及后续制程发布更高级的Iris架构。最近Intel宣布将开发独立显卡,核显发展具体走向未知。
接手QSV项目时,预期会有很多相关资料,实则相反。因此,将记录自己学习过程。
本文将介绍:
I. Intel的核显(集成GPU):
了解核显很有必要,几个月前,作者对CPU的工厂源码设计模式认识还停留在“南北桥”架构。以下内容若有不准确之处,欢迎指正。
查看Gen CPU结构图,首先看CPU核心部分。在整块CPU芯片中,核显占比不小,算力不容小觑。在没有独立显卡的笔记本上,可以运行大量大型游戏,虽偶有卡顿、掉帧情况,整体表现已相对不错。
接下来,看官方给出的GPU内部结构图。GPU内部远比图上所示复杂,图中介绍的仅为部分Subslice芯片结构。GPU分为Slice部分和Un-Slice部分,Slice部分已介绍,接下来介绍Un-Slice部分。
作者找到了一张图,展示了在MFF上进行视频处理的流程:1) 首先在MFX/VDBOX模块上进行编解码;2) 接着送到VQE/VEBOX上做图像增强和矫正处理;3) 然后送到SFC上做scale和transcode;4) 最后送出到显示屏上展示。是否完全正确,作者这里做个记录。
推荐知乎文章《转》Intel Gen8/Gen9核芯显卡微架构详细剖析,深入浅出,关于thread dispatch的说明即出自该文。
最后,总结Intel集成GPU/核显结构图。
注意,这是skylake架构下的GT2/GT3/GT4 GPU结构图,X数字越大,集成的Slice和Unslice芯片更多,能力越强,价格也更高。
II. Quick Sync Video(QSV)技术:
QSV是Intel推出的将视频处理任务直接送到GPU上进行专门负责视频处理的硬件模块处理的软件技术。与CPU或通用GPU上的视频编码不同,QSV是处理器芯片上的专用硬件核心,这使得视频处理更为高效。
要了解QSV如何驱动GPU的MFF,首先看官方Intel® Video and Audio for Linux上的图。在介绍QSV之前,提及Intel在FFmpeg上提供的插件,包括ffmpeg-qsv、ffmpeg-vaapi和ffmpeg-ocl。详细描述如下:
· FFmpeg-vaapi提供基于低级VAAPI接口的硬件加速,在VA API标准下在Intel GPU上执行高性能视频编解码器、视频处理和转码功能。
· FFmpeg-qsv提供基于Intel GPU的硬件加速,基于Intel Media SDK提供高性能视频编解码器、视频处理和转码功能。
· FFmpeg-ocl提供基于工业标准OpenCL在CPU/GPU上的硬件加速,主要用于加速视频处理过滤器。
接下来,介绍QSV在ffmpeg2.8及以上版本的支持,经过MSDK、LibVA、UMD和LibDRM。分层进行分析:
· MSDK:Intel的媒体开发库,支持多种图形平台,实现通用功能,可用于数字视频的预处理、编解码和不同编码格式的转换。源码地址为Intel® Media SDK,在Linux平台上编译使用。
· VA-API:Video Acceleration API,提供类unix平台的视频硬件加速开源库和标准。Intel源码地址在Intel-vaapi-driver Project,在Linux平台上使用。
· UMD:User Mode Driver的缩写,指VA-API Driver。Intel提供了两个工具:intel-vaapi-driver 和 intel-media-driver,推荐使用后者。
· LibDRM:Direct Rendering Manager,解决多个程序协同使用Video Card资源问题,提供一组API访问GPU。与VA-API,LibDRM是一套通用的Linux/Unix解决方案。
· Linux Kernel:Intel的Kernel是i driver,描述了libDRM和Kernel Driver之间的关系。
至此,整个关系图较为清晰。
III. FFMPEG+QSV解码:
QSV硬解的任务主要包括:
关于3-4步操作的详细实现,底层库会帮助完成。但作为一个优秀的工程师,研究FFMPEG源码依然十分重要。接下来,介绍如何使用FFmpeg API中的h_qsv解码器插件。
提及FFmpeg命令行使用方法,推荐阅读官方资料《QuickSync》或《Intel_FFmpeg_plugins》。
关于示例代码,作者曾遇到许多坑,总结为:多数中文博客不可靠,官方demo最可信。官方代码提供了两份可用:qsvdec.c和hw_decode.c。作者最早使用的是第一段代码,核心部分如下:
然而,这段代码存在问题。测试发现,对于赛扬系列一款CPU,在p视频上MSDK达到fps,理论上h_qsv平台上限也应为fps,但实际测试不到fps。排查后发现是av_hwframe_transfer_data()性能较弱。
最终,与Intel一起解决了性能问题。那么,性能提升方案为何是GPU-COPY技术做Memory-Mapping?
解释GPU和CPU渲染图像的过程,包括坐标系转化、纹理叠加等,仅需了解两点:
后者的数据组织方式能充分利用GPU的并行特性,加速图像处理、渲染。尽管存在一些纹理叠加的技术难题,但性能提升足以补偿。
接下来,解释Memory-Mapping:从Intel CPU架构图中可见,GPU和CPU位于同一芯片上,各自寄存器/缓存区有限,视频数据主要存储在内存上。GPU和CPU的数据组织方式不同,同一帧数据存于内存同一位置,数据格式不同,因此需要做Memory-Mapping。Memory-Mapping相较于Memory-Copy,减少了数据从内存区域A移动到区域B的操作,已经是优化。进一步优化:GPU完成Memory-Mapping以及数据从GPU到内存和CPU的操作。
在av_hwframe_transfer_data()内部,Memory-Mapping由CPU完成,性能受限于CPU,只能并行。修改后,整体性能从不到fps提升至fps,虽然与理想fps仍有差距,但满足性能需求。
据悉,Intel将在FFmpeg 4.3开源出这个解决方案。
写在后面:
了解GPU底层对应用开发人员帮助不大,毕竟了解芯片布线的重新设计、制程工艺提升、GPU-COPY技术的数据I/O提升等,也不能做什么。最终,芯片架构是芯片工程师的事,底层逻辑实现是嵌入式工程师的事。应用开发人员无法做出实质贡献,但作为知识库扩充或休闲阅读,了解也无妨。
希望有机会接触CUDA的编解码,深入学习N卡设计。
感谢因《视频和帧》系列文章结识的朋友,热心指出文章描述不准确的地方。文中如有不严谨之处,欢迎指正。
[推理部署]👋解决: ONNXRuntime(Python) GPU 部署配置记录
在探索深度学习推理部署过程中,ONNXRuntime(GPU)版本提供了简化ONNX模型转换和GPU加速的途径。本文将分享ONNXRuntime GPU部署的关键步骤,以助于高效解决问题和提高部署效率。
首先,选择正确的基础镜像是部署ONNXRuntime GPU的关键。ONNXRuntime GPU依赖CUDA库,因此,镜像中必须包含CUDA动态库。在Docker Hub搜索PyTorch镜像时,选择带有CUDA库的devel版本(用于编译)是明智之举,尽管runtime版本在某些情况下也有效,但devel版本提供了更好的CUDA库支持。
对于runtime和devel版本的选择,重要的是理解它们各自的用途。runtime版本适用于直接使用ONNXRuntime GPU进行推理,而devel版本则用于构建过程,确保在构建过程中可以访问CUDA库,从而避免因版本不匹配导致的问题。在使用pip安装时,两者都是可行的;若需从源码构建,则需使用devel版本。
启动Docker镜像时,使用nvidia-docker启动并登录PyTorch 1.8.0容器至关重要,以确保能够访问GPU资源。确保宿主机显卡驱动正常,以避免在容器内无法使用GPU的情况。
安装ONNXRuntime-GPU版本后,通过pip进行安装,检查是否能正常利用GPU资源。ONNXRuntime将自动识别可用的CUDA执行提供者(如TensorrtExecutionProvider和CUDAExecutionProvider),确保GPU推理加速。
若发现无法利用GPU,可以尝试调整配置或确保已正确设置CUDA路径到PATH环境变量(在使用devel版本时)。在成功安装和配置后,ONNXRuntime将提供GPU加速的推理性能提升。
在部署ONNXRuntime GPU时,确保在新建InferenceSession时加入TensorrtExecutionProvider和CUDAExecutionProvider,以充分利用GPU资源。性能测试显示,与CPU相比,GPU部署在推理任务上表现更优。
总结而言,ONNXRuntime GPU部署涉及选择合适的基础镜像、正确启动Docker容器、安装ONNXRuntime GPU、配置GPU资源访问以及优化推理性能。通过遵循上述步骤,可以顺利实现ONNX模型在GPU上的高效部署。
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`,简化编译过程。
输出及结果:提供示例链接供参考。