关于gpu:便捷快速稳定高性能以-GPU-实例演示-Alibaba-Cloud-Linux-3-对-AI-生态的支持

日前,Alibaba Cloud Linux 3 为使 AI 开发体验更高效,提供了一些优化降级,本文为“Alibaba Cloud Linux 3 AI 能力介绍”系列文章预告篇,以 GPU 实例为例,为大家演示 Alibaba Cloud Linux 3 对 AI 生态的反对。接下来还将陆续公布 2 篇系列文章,次要介绍基于 Alinux 的云市场镜像为用户提供开箱即用的 AI 根底软件环境,以及基于 AMD 介绍 AI 能力差异化。敬请期待。更多 Alibaba Cloud Linux 3 信息可返回官网查看:https://www.aliyun.com/product/ecs/alinux 当在 Linux 操作系统上开发人工智能(AI)应用程序时,研发人员可能会遇到一些挑战,这些挑战包含但不限于: GPU 驱动程序:为了在 Linux 零碎上应用 NVIDIA GPU 进行训练或推理,须要装置和配置正确的 NVIDIA GPU 驱动程序。因为不同的操作系统和 GPU 型号可能须要不同的驱动程序,因而可能须要一些额定的工作。AI 框架编译:在 Linux 零碎上应用 AI 框架进行编程时,须要装置和配置适当的编译器和其余依赖项。这些框架通常须要进行编译,因而须要确保正确装置了编译器和其余依赖项,并正确配置编译器。软件兼容性:Linux 操作系统反对许多不同的软件和工具,但不同版本和发行版之间可能存在兼容性问题。这可能会导致某些程序无奈失常运行或者在某些操作系统上不可用。因而,研发人员须要理解其工作环境的软件兼容性,并进行必要的配置和批改。性能问题:AI 软件栈是一个异样简单的零碎,通常须要对不同型号的 CPU 和 GPU 进行业余的优化,能力施展其最佳性能。软硬件协同的性能优化对于 AI 软件栈来说是一个具备挑战性的工作,须要领有高超的技术水平和专业知识。阿里云第三代云服务器操作系统 Alibaba Cloud Linux 3(以下简称“Alinux 3”)是基于龙蜥操作系统 Anolis OS 研发的商业版操作系统,为开发人员提供了弱小的 AI 开发平台,通过反对龙蜥生态 repo(epao),Alinux 3 实现了对支流的 nvidia GPU 和 CUDA 生态的全面反对,使得 AI 开发更加便捷高效。此外,Alinux 3 还反对支流的 AI 框架 TensorFlow/PyTorch,intel/amd 等不同 CPU 平台对 AI 的优化,还将引入了 modelscope、huggingface 等大模型 SDK 的原生反对,为开发人员提供了丰盛的资源和工具。这些反对,使得 Alinux 3 成为了一个欠缺的 AI 开发平台,解决 AI 开发人员的痛点问题,不必始终折腾环境,让 AI 开发体验更容易更高效。 ...

September 8, 2023 · 2 min · jiezi

关于gpu:从驾考科目二到自动驾驶聊聊GPU为什么对自动驾驶很重要

“下一个我的项目,坡道起步。” …… “考试不合格,请将车子开到终点,从新验证考试。你的扣分项是:起步工夫超30秒:扣100分。行驶过程中车轮轧到边线:扣100分。” 想必经验过驾驶证考试的同学,对科目二的坡道起步都有说不清道不明的情感。我在坡道起步我的项目上间断“挂”了 3 次后,就忍不住想主动驾驶什么时候能够遍及,来援救屡次驾考没过的我。为此,我去简略理解了主动驾驶,不经意间发现又拍云的 GPU 居然在主动驾驶上也有利用,接下来就来具体说说。 对于主动驾驶主动驾驶的倒退历程主动驾驶技术的倒退能够追溯到 20 世纪 80 年代,过后的钻研次要集中在车辆的辅助驾驶零碎上,如自适应巡航管制、主动泊车等。随着计算机技术和传感器技术的不断进步,主动驾驶技术逐步走向成熟。21 世纪初,谷歌开始钻研主动驾驶技术,并在 2010 年左右开始进行路测。目前,主动驾驶技术曾经成为了汽车行业的重要倒退方向,各大车企和科技公司纷纷投入巨资进行钻研和开发。 国内各大品牌的电车主动驾驶能力在不同水平上都有了倒退和提高,能够在高速公路和城市道路上实现主动跟车、主动变道、主动泊车等性能,这些能力离不开先进的感应设施:激光雷达(Lidar),毫米波雷达(Millimeter-wave Radar),摄像头(Camera),超声波雷达(Ultrasonic Radar),GPS(Global Positioning System)以及INS(Inertial Navigation System)等设施。 而在行将举办亚运会的绍兴棒垒球场馆外,呈现了可恶的纯电动巴士,它是 L4 主动驾驶小巴车,不仅能够主动实现转弯及靠站操作,遇障还会主动加速避让。 绍兴市曾经向两家主动驾驶测试主体发放了全市首批主动驾驶路测牌照,其中一家是将来社区开发建设有限公司,另一家是绍兴市城投阿波罗科技有限公司。这些测试主体将应用不同类型的主动驾驶汽车,包含纯电动巴士和纯电动轿车,将来社区应用的是一款5.5米纯电动巴士,最高设计时速40公里,搭载了L4级主动驾驶零碎,可实现车道放弃、超级巡航、主动避障等性能。市民可通过新推出的小程序,在手机上收费预约乘坐。该专线也将在杭州亚运会期间提供接驳服务。 主动驾驶技术分级下面提到了 L4 级别主动驾驶,这是十分当先的级别了,依据主动驾驶等级的不同,能够分为以下几级: L0级别:人工驾驶,齐全由驾驶员来操作驾驶汽车,包含转向、制动、油门等。L1级别:辅助驾驶,可能帮忙驾驶员实现某些驾驶工作,如转向、制动、油门等,但驾驶员仍需放弃对路线的留神。L2级别:局部主动驾驶,车辆可能实现局部驾驶工作,如对方向盘和加加速中的多项操作提供驾驶,驾驶员负责其余的驾驶动作。像全速自适应巡航就属于L2级别,能够跟着后面的车走,后面的车停,我也停,后面的车走了我也走,速度根本保持一致。L3级别:条件主动驾驶,车辆在特定环境中能够实现主动加加速和转向,但仍须要人类驾驶员在某些状况下接管车辆管制。L4级别:高度主动驾驶,除了一些十分非凡的状况外,个别不须要人工控制。L5级别:齐全主动驾驶,全程不须要人工干预,能够在所有路况下实现齐全主动驾驶。总的来说,每一级别的主动驾驶都建设在前一级别的技术根底之上,同时,每一级别的主动驾驶都不是相对平安的,它须要驾驶员在应用过程中依然保持警惕并做好随时接管的筹备。 GPU在主动驾驶技术中的作用目前国内汽车广泛搭载的是 L2 级别及以下的主动驾驶技术,但即使在这些较低级别的主动驾驶零碎中,汽车中的各种传感器每小时也能够生成 25GB 数据,这些数据蕴含前车和本车的间隔,左右两边的路线批示标记,四周汽车的间隔,后方路线批示标记,红绿灯信号,马路边行人,非机动车等信息等,大量的图像和视频信息被转换成电脑能解决的二进制信息,这就须要 CPU 和 GPU 的独特加持能力实现平安稳固的主动驾驶工作。 大家都晓得一台电脑的运行少不了CPU,能够简略地了解为 CPU 是一个教授级人物,CPU 能够解决非常复杂的问题,但 CPU 没有那么多外围,对于同时解决数以亿计的小学生算术题,比方 100000000 道算术题,须要在 1 秒内实现,这个传授就没有那么灵便了。而 GPU 外围多,像 Nvidia 的 A100 领有 6912 个CUDA外围,这种宏大的计算量就非常适合 GPU 了。在某些状况下,传统在 CPU 上运行的代码优化为 GPU 上运行时,执行速度最高可晋升 20 倍。借助人工智能加速器能够进一步晋升,从而显著节约电力,而这也是电动汽车的一个关键问题。 GPU 作为驾驶零碎的外围元件之一,让汽车能够在“环境感知与建模”、“门路布局与决策”、“感知与决策的实时性”、“数据处理与存储”等方面实现指定的工作。GPU 通过其弱小的计算能力和并行处理能力来减速感知算法的运行,不仅仅减速了简单的门路布局和决策算法,例如基于强化学习的算法。还提供了更快的计算速度和更高的并行处理能力,从而帮忙主动驾驶汽车更快地做出决策和布局。 ...

September 7, 2023 · 1 min · jiezi

关于gpu:复现笔记-jetsondlatutorial复现笔记

前言本文形容以下知识点:1.基于cifar-10的模型训练,导出,转换为tensorrt模型,并应用Nsight剖析;2.tensorRT Python API,并进行数据校准(Calibration)和模型评估(eval)性能;预计浏览工夫15分钟左右,复现工夫1小时左右;明天来整顿之前复现jetson上的DLA Core应用入门资料:jetson_dla_tutorial。DLA全称Deep Learning Accelerator简略来说是Nvidia在嵌入式设施上实现的用于减速神经网络层的硬件外围,相似RKNN开发板上的NPU。算是继tensor core当前目前最新的减速core(当然Nvidia卡上减速神经网络的货色很多)。因为DLA core是物理外围,目前反对DLA core的设施就不像tensor core那么多了,能够参看下表: 设施DLAv1.0DLAv2.0jetson xavier nx series反对xjetson orin seriesx反对NVIDIA DRIVE Hyperionx反对Nvidia凭借做硬件的技术劣势,逐渐在降维打击国内外的中小算例嵌入式开发板厂商。Jetson Orin系列基本上就是老黄一统江湖的野心体现。Jetson基本上是单位瓦数里能达到的最高算力(当然价格根本也是最高)。在用于SLAM,主动驾驶方面都有后劲。我隐约感觉这方面仿佛有点能做的货色,故买了Jetson Agx Orin和Jetson Orin nano开始学习相干的材料。jetson_dla_tutorial这篇教程绝对简略,包含以下几方面: torch模型转换tensorRT模型Nsight System 做性能剖析DLA core 根底应用作为jetson的在深度学习方面利用的入门资料很不错,进而编写了这篇复现的文章,心愿有谬误的中央,读者不吝惜赐教。 筹备环境和数据集先说说硬件环境,我应用的是一块64GB的jetson Agx Orin toolkit,算是官网举荐设施。官网教程举荐应用jetson Orin系列(jetson Agx Orin和Jetson Orin nano),我预计NVIDIA DRIVE Hyperion也是能够的。git clone我的项目: git clone https://github.com/NVIDIA-AI-IOT/jetson_dla_tutorial.git# home/jou/Documents/jetson_dla_tutorialmdkir data/cifar下载cifar-10的数据集压缩包,放到data/cifar目录下(也能够本人用迅雷之类的下载,放到同一目录即可) curl -O https://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gzcp cifar-10-binary.tar.gz /home/jou/Documents/jetson_dla_tutorial/data/cifar这里将应用docker治理环境,docker镜像能够从NGC查问 和拉取(Docker镜像须要和你应用Jetson的Jetpack对齐): sudo docker pull nvcr.io/nvidia/l4t-ml:r35.2.1-py3启动docker时, 将我的项目挂载进docker sudo docker run -it --rm --runtime nvidia --network host -v /home/jou/Documents/jetson_dla_tutorial:/home/ nvcr.io/nvidia/l4t-ml:r35.2.1-py3这样根底的工作就筹备好了。接下来,让咱们看看jetson_dla_tutorial 训练model_GN模型docker中蕴含所有的pip包,所以咱们不须要重下pip包。model_gn的定义在models.py 中,构造大抵如下: ...

September 7, 2023 · 3 min · jiezi

关于gpu:一文读懂GPU显卡的10个重要参数

在当今的高性能计算机世界中,GPU显卡的性能至关重要。这一畛域的疾速倒退,使得图形渲染、游戏体验、视频编辑等高性能计算工作变得更加高效和晦涩。正因如此,抉择一款适合的GPU显卡变得越来越重要。在筛选GPU显卡时,理解其要害参数是至关重要的。上面,咱们将具体介绍GPU显卡的10个重要参数,帮忙您成为显卡畛域的达人。 显存类型:显存类型指的是显卡所应用的内存规格,常见的有DDR4、GDDR5、GDDR6等。其中,GDDR6显存是高端显卡罕用的规格,它具备更快的速度和更高的带宽,能够满足高性能计算工作对数据传输速度的需要。 显存容量:显存容量是指显卡内存的具体容量,它间接关系到显卡的性能。一般来说,显存容量越大,显卡性能越强。例如,对于一款高端游戏显卡,其显存容量通常在12GB甚至16GB以上,以确保在高分辨率下晦涩运行最新的3D游戏。 显存带宽:它指的是显卡每秒钟所能传输的数据量。显存带宽间接决定显卡的性能,越高则性能越强。它受到显存类型和显存容量的独特影响。 外围频率:外围频率是指GPU芯片每秒钟执行的次数。外围频率越高,显卡性能越强。在筛选显卡时,应留神外围频率与显存类型和显存容量的搭配,以确保整体性能的均衡。 CUDA外围数:它指的是显卡处理器中的流处理器数量。CUDA外围数越多,显卡性能越弱小。例如,NVIDIA的GeForce RTX 30系列显卡领有数千个CUDA外围,使得其在进行光线追踪、人工智能等高性能计算工作时具备杰出的性能体现。 根本频率:根本频率是指显卡GPU芯片的根本工作频率。根本频率越高,显卡性能越好。在抉择显卡时,应留神根本频率与外围频率的搭配,以取得更好的性能。 减速频率:减速频率是指显卡GPU芯片在短时间内所能达到的最高频率。减速频率越高,显卡性能越优越。这也是掂量一款显卡性能的重要参数之一。 Vulkan API:Vulkan API是一种跨平台的图形接口,能提供更高的图形性能和更低的能耗。反对Vulkan API的显卡在运行Vulkan游戏或利用时性能更佳。这对于谋求高帧率、低提早的游戏玩家来说是一个重要的参数。 DirectX反对:DirectX是微软开发的一组多媒体编程接口,用于解决图形、音频和输入输出等多媒体工作。反对DirectX的显卡通常在运行DirectX游戏时性能更佳。因而,如果您是一个热衷于玩DirectX游戏的游戏玩家,那么这一参数对您来说尤为重要。 热设计功耗(TDP):它指的是显卡运行时所产生的最大热量输入。TDP越低,显卡的散热和电源需要就越低,相应的老本也越低。因而,在抉择显卡时,应依据本人的需要和估算来均衡TDP与性能的关系。 总之,随着科技的飞速发展,GPU显卡曾经成为古代计算机系统中不可或缺的一部分。在筛选一款适合的GPU显卡时,理解其要害参数是至关重要的。通过本文的介绍,置信您曾经对GPU显卡的要害参数有了更加深刻的理解,并可能更好地抉择适宜本人的显卡。

September 5, 2023 · 1 min · jiezi

关于gpu:聊透-GPU-通信技术GPU-DirectNVLinkRDMA

最近人工智能大火,AI 利用所波及的技术能力包含语音、图像、视频、NLP 等多方面,而这些都须要弱小的计算资源反对。AI 技术对算力的需要是十分宏大的,尽管 GPU 的计算能力在继续晋升,然而对于 AI 来说,单卡的计算能力就算再强,也是有极限的,这就须要多 GPU 组合。而 GPU 多卡的组合,次要分为单个服务器多张 GPU 卡和多个服务器,每个服务器多张卡这两种状况,无论是单机多卡还是多机多卡,GPU 之间须要有超强的通信反对。接下来,咱们就来聊聊 GPU 通信技术。 单机多卡GPU通信GPU DirectGPU Direct 是 NVIDIA 开发的一项技术,可实现 GPU 与其余设施(例如网络接口卡 (NIC) 和存储设备)之间的间接通信和数据传输,而不波及 CPU。 传统上,当数据须要在 GPU 和另一个设施之间传输时,数据必须通过 CPU,从而导致潜在的瓶颈并减少提早。应用 GPUDirect,网络适配器和存储驱动器能够间接读写 GPU 内存,缩小不必要的内存耗费,缩小 CPU 开销并升高提早,从而显著进步性能。GPU Direct 技术包含 GPUDirect Storage、GPUDirect RDMA、GPUDirect P2P 和 GPUDirect 视频。 GPUDirect StorageGPUDirect Storage 容许存储设备和 GPU 之间进行间接数据传输,绕过 CPU,缩小数据传输的提早和 CPU 开销。 通过 GPUDirect Storage,GPU 能够间接从存储设备(如固态硬盘(SSD)或非易失性内存扩大(NVMe)驱动器)拜访数据,而无需将数据先复制到 CPU 的内存中。这种间接拜访可能实现更快的数据传输速度,并更高效地利用 GPU 资源。 GPUDirect Storage 的次要特点和劣势包含: 缩小 CPU 参加:通过绕过 CPU,实现 GPU 和存储设备之间的间接通信,GPUDirect Storage 缩小了 CPU 开销,并开释 CPU 资源用于其余工作,从而改善零碎的整体性能。低提早数据拜访:GPUDirect Storage 打消了数据通过 CPU 的传输门路,从而最小化了数据传输的提早。这对于实时剖析、机器学习和高性能计算等对提早敏感的利用十分无益。进步存储性能:通过容许 GPU 间接拜访存储设备,GPUDirect Storage 实现了高速数据传输,能够显著进步存储性能,减速数据密集型工作负载的处理速度。加强的可扩展性:GPUDirect Storage 反对多 GPU 配置,容许多个 GPU 同时拜访存储设备。这种可扩展性对于须要大规模并行处理和数据分析的利用至关重要。兼容性和生态系统反对:GPUDirect Storage 设计用于与各种存储协定兼容,包含 NVMe、NVMe over Fabrics和网络附加存储(NAS)。它失去了次要存储供应商的反对,并集成到风行的软件框架(如NVIDIA CUDA)中,以简化与现有的 GPU 减速应用程序的集成。GPUDirect P2P某些工作负载须要位于同一服务器中的两个或多个 GPU 之间进行数据交换,在没有 GPUDirect P2P 技术的状况下,来自 GPU 的数据将首先通过 CPU 和 PCIe 总线复制到主机固定的共享内存。而后,数据将通过 CPU 和 PCIe 总线从主机固定的共享内存复制到指标 GPU,数据在达到目的地之前须要被复制两次。 ...

September 5, 2023 · 2 min · jiezi

关于gpu:便捷快速稳定高性能以-GPU-实例演示-Alibaba-Cloud-Linux-3-对-AI-生态的支持-龙蜥技术

编者按:日前,Alibaba Cloud Linux 3 为使 AI 开发体验更高效,提供了一些优化降级,本文为“Alibaba Cloud Linux 3 AI 能力介绍”系列文章预告篇,以 GPU 实例为例,为大家演示 Alibaba Cloud Linux 3 对 AI 生态的反对。接下来还将陆续公布 2 篇系列文章,次要介绍基于 Alinux 的云市场镜像为用户提供开箱即用的 AI 根底软件环境,以及基于 AMD 介绍 AI 能力差异化。敬请期待。更多 Alibaba Cloud Linux 3 信息可返回官网查看:https://www.aliyun.com/product/ecs/alinux 当在 Linux 操作系统上开发人工智能(AI)应用程序时,研发人员可能会遇到一些挑战,这些挑战包含但不限于: GPU 驱动程序:为了在 Linux 零碎上应用 NVIDIA GPU 进行训练或推理,须要装置和配置正确的 NVIDIA GPU 驱动程序。因为不同的操作系统和 GPU 型号可能须要不同的驱动程序,因而可能须要一些额定的工作。AI 框架编译:在 Linux 零碎上应用 AI 框架进行编程时,须要装置和配置适当的编译器和其余依赖项。这些框架通常须要进行编译,因而须要确保正确装置了编译器和其余依赖项,并正确配置编译器。软件兼容性:Linux 操作系统反对许多不同的软件和工具,但不同版本和发行版之间可能存在兼容性问题。这可能会导致某些程序无奈失常运行或者在某些操作系统上不可用。因而,研发人员须要理解其工作环境的软件兼容性,并进行必要的配置和批改。性能问题:AI 软件栈是一个异样简单的零碎,通常须要对不同型号的 CPU 和 GPU 进行业余的优化,能力施展其最佳性能。软硬件协同的性能优化对于 AI 软件栈来说是一个具备挑战性的工作,须要领有高超的技术水平和专业知识。阿里云第三代云服务器操作系统 Alibaba Cloud Linux 3(以下简称“Alinux 3”)是基于龙蜥操作系统 Anolis OS 研发的商业版操作系统,为开发人员提供了弱小的 AI 开发平台,通过反对龙蜥生态 repo(epao),Alinux 3 实现了对支流的 nvidia GPU 和 CUDA 生态的全面反对,使得 AI 开发更加便捷高效。此外,Alinux 3 还反对支流的 AI 框架 TensorFlow/PyTorch,intel/amd 等不同 CPU 平台对 AI 的优化,还将引入了 modelscope、huggingface 等大模型 SDK 的原生反对,为开发人员提供了丰盛的资源和工具。这些反对,使得 Alinux 3 成为了一个欠缺的 AI 开发平台,解决 AI 开发人员的痛点问题,不必始终折腾环境,让 AI 开发体验更容易更高效。 ...

September 5, 2023 · 2 min · jiezi

关于gpu:如何评估计算机的算力从-CPU-到-GPU-的演变

计算机的算力始终是科学技术倒退的重要驱动力之一。从最早的计算机到古代的超级计算机,计算机的算力一直进步,为人类社会带来了前所未有的改革。其中,CPU(中央处理器)和 GPU(图形处理器)是计算机中最为外围的两个组件,它们的算力和性能对于计算机的整体性能具备决定性的影响。 CPU和GPUCPU 是计算机的外围组件之一,它的次要性能是执行指令、管制计算机的运行和解决数据等工作。CPU 通常由运算器、控制器、寄存器和高速缓存等组件形成。 CPU 的算力通常由其时钟频率、处理器外围数量、缓存大小等指标来掂量。 时钟频率:CPU 每秒钟能够执行的指令次数,通常用 GHz 示意。处理器外围数量:CPU 中蕴含的处理器外围数,能够同时解决多个工作。缓存大小:CPU 内置的高速缓存容量,能够减速数据的读取和写入。晚期计算机的 CPU 算力较低,通常只能执行简略的指令。随着从单核心 CPU 到多外围 CPU,再到当初的高性能多外围 CPU,CPU 的算力和性能曾经获得了微小的飞跃。 目前,支流的 CPU 都是多外围 CPU,多外围 CPU 能够同时执行多个工作,大幅晋升了计算机的算力和性能。例如,英特尔的酷睿 i9-13900K 处理器,采纳 24 外围 32 线程设计,时钟频率高达 5.8 GHz,性能十分强劲。 图形处理器(GPU)是计算机中的另一个重要组件,次要用于解决图形和视频。与中央处理器(CPU)不同,GPU的并行计算能力更强,因而在某些利用中比 CPU 更具劣势。 GPU 通常位于计算机主板上独立的插槽中,并且通常由多个处理器外围和大量的显存组成。GPU 的次要性能是执行图形和视频解决工作,例如 3D 游戏、视频编解码、图形渲染等。 GPU 的算力通常由其外围数量、时钟频率、存储带宽等指标来掂量。与 CPU 不同,GPU 的外围数量通常是数百个,甚至上千个。存储带宽是 GPU 的显存和其余组件之间传输数据的速度,通常用 GB/s 示意。 CPU VS GPUCPU 和 GPU 是计算机中的两个重要组件,它们各自具备不同的特点和劣势。 上面将从架构设计、计算能力、能耗和散热、价格和可用性、利用场景等方面来探讨 CPU 和 GPU 的比拟。 计算能力 形成 CPU 和 GPU 的组件是相似的:它们都蕴含管制单元、算术逻辑单元 (ALU)、高速缓存和 DRAM。次要区别在于 GPU 具备更小、更简略的管制单元、ALU 和缓存,而且数量很多。因而,尽管 CPU 能够解决任何工作,但 GPU 能够十分疾速地实现某些特定工作。GPU 的设计目标是为了实现高效的图形和视频解决、机器学习等利用。 ...

August 25, 2023 · 1 min · jiezi

关于gpu:保姆级教程用GPU云主机搭建AI大语言模型并用Flask封装成API实现用户与模型对话

导读在当今的人工智能时代,大型AI模型已成为取得人工智能应用程序的要害。然而,这些微小的模型须要宏大的计算资源和存储空间,因而搭建这些模型并对它们进行交互须要弱小的计算能力,这通常须要应用云计算服务。从云产品性能上来看,GPU云主机是最适宜的工具之一,对于业务方或者集体开发者来讲,应用GPU云主机搭建AI大语言模型有以下劣势: •高性能计算:GPU云主机提供了高性能GPU处理器,减速模型的训练和推理; •高性价比:灵便资源管理、可扩展性、弹性伸缩等云计算劣势,依据业务或集体训练的须要,疾速调整计算资源,满足模型的训练和部署需要; •开放性:云计算的开放性让用户更容易进行资源的共享和合作,为AI模型的钻研和利用提供了更宽泛的单干机会; •丰盛的API和SDK:云计算厂商提供了丰盛的API和SDK,使得用户可能轻松地接入云平台的各种服务和性能,进行定制化开发和集成。 在本文中,咱们将以chatglm-6b为例具体介绍GPU云主机搭建AI大语言模型的过程,并应用Flask构建前端界面与该模型进行对话。 整个流程也比较简单:配置GPU云主机 → 搭建Jupyterlab开发环境 → 装置ChatGLM → 用Flask输入模型API 一、Start:配置GPU云主机GPU 云主机(GPU Cloud Virtual Machine )是提供 GPU 算力的弹性计算服务,具备超强的并行计算能力,在深度学习、科学计算、图形图像解决、视频编解码等场景被宽泛应用。GPU驱动,提供大量的GPU内存和强悍的计算性能,非常适合运行深度学习应用程序。 绝对于实体卡,一张售价个别都是几万左右,而GPU云主机费用门槛很低,按时计费,一小时才十几元,能够依据本人的需要调配。 •本次选取的是P40卡: https://www.jdcloud.com/cn/calculator/calHost •零碎环境:Ubuntu 20.04 64位 二、搭建Jupyterlab开发环境 下载Anaconda包须要在终端里执行以下命令: mkdir anaconda # 创立文件夹cd anaconda # 进入文件夹wget https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-x86_64.sh # 下载安装包bash Anaconda3-2023.03-Linux-x86_64.sh # 装置也能够用清华源,速度更快:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2023.03-Linux-x86_64.sh 接下来进行环境变量设置 cd /root/anaconda3/binvim ~/.bashrc在.bashrc下增加以下内容:#Anacondaexport PATH="/root/anaconda3/bin:$PATH"而后退出编辑source ~/.bashrcconda create -n jabari python=3.8 装置python3.8版本# 创立环境jupyter lab --generate-config# 生成配置文件Writing default config to: /root/.jupyter/jupyter_lab_config.py[root@lavm-ba6po1r9fh bin]# vim /root/.jupyter/jupyter_lab_config.py # 编辑配置文件c.ServerApp.ip = '*' # 设置拜访的IP地址c.ServerApp.open_browser = False # 不主动关上浏览器c.ServerApp.port = 6888 #(本人能够本人设置端口,这里设置了6888)# ServerApp的端口号c.MappingKernelManager.root_dir = '/root/jupyter_run' # 设置Jupyter Notebook的根文件夹c.ServerApp.allow_remote_access = True # 容许近程拜访c.ServerApp.password = '' # 不设置登录明码c.ServerApp.allow_origin='*' # 容许任何起源的申请c.ServerApp.password_required = False # 不须要明码c.ServerApp.token = ''# 不设置验证tokenjupyter lab --allow-root # 启动JupyterLab ...

April 27, 2023 · 2 min · jiezi

关于gpu:DatenLord前沿技术分享-No19

达坦科技专一于打造新一代开源跨云存储平台DatenLord,致力于解决多云架构、多数据中心场景下异构存储、数据对立治理需要等问题,以满足不同行业客户对海量数据跨云、跨数据中心高性能拜访的需要。GPU编程能够大幅晋升计算速度和效率,从而使得许多计算工作得以在正当工夫内实现。随着GPU硬件技术的倒退和大规模数据处理需要的减少,GPU编程的利用范畴不断扩大。在本周的前沿科技分享中,咱们邀请到了上海交通大学并行与分布式研究所的韩明聪博士来给咱们分享GPU抢占式任务调度。 1、演讲题目GPU抢占式任务调度 2、演讲工夫2023年3月5日上午10:30 3、演讲人韩明聪 上海交通大学并行与分布式研究所(IPADS)博士研究生 4、引言GPU目前被广泛应用在人工智能、图形渲染、科学计算等畛域,是最支流的加速器设施之一。随着GPU计算能力的一直进步,多个工作共享GPU成为很常见的应用形式。本次分享将简述GPU多任务共享的根本机制,以及近几年学术界在GPU多任务抢占式调度技术的研究进展。 5、内容简介分享的内容次要涵盖以下三方面:1、CUDA 编程根底与NVIDIA GPU 架构简介。2、CUDA 多任务并发执行机制与原理。3、GPU Kernel抢占技术相干钻研介绍。 6、直播预约欢迎您预约直播,或者登陆腾讯会议观看直播:会议号:955-6910-3992

March 3, 2023 · 1 min · jiezi

关于gpu:通用-GPU-领先企业登临科技加入龙蜥社区完成与龙蜥操作系统的兼容适配

近日,上海登临科技有限公司(以下简称“登临科技”)签订了 CLA(Contributor License Agreement,贡献者许可协定),正式退出龙蜥社区(OpenAnolis)。 作为国内通用 GPU 当先企业,登临科技保持核心技术齐全原生研发,其翻新的GPU+(基于 GPGPU 的软件定义的片内异构计算架构)兼容 CUDA 在内的编程模型和软件生态的根底上,通过架构翻新,完满解决了通用性和高效率的双重难题。目前,登临科技首款基于 GPU+ 的系列产品 Goldwasser™(高凛™)已在智慧城市、交通、金融、能源、电力、教育、无人驾驶、互联网等泛滥行业实现商业化落地,客户订单达数万片,并已实现批量量产交付。 目前,登临科技翻新通用 GPU—Goldwasser 系列产品与龙蜥操作系统(Anolis OS)8 实现并通过互相兼容性测试认证,单方进行严格测试后,结果显示:互相兼容,运行稳固。 登临科技联结创始人王晨辉示意:“操作系统与芯片是 AI 产业生态的外围,软硬协同能力施展产品的最大化能效,作为国内当先的算力提供商,对开源软件社区的反对和投入,是登临科技生态建设的重要局部。此次登临科技退出龙蜥社区,并与龙蜥操作系统(Anolis OS )8 实现产品兼容互认证,一方面借助龙蜥社区的开放平台,登临科技可与更多生态搭档实现资源共享,生态共建;另一方面良好的产品兼容性能,将助力登临科技为更多行业用户提供更加高能效、高可靠性、高通用性的产品,减速产业 AI 利用落地。” 龙蜥社区理事李祥凯示意:“登临科技专一于高性能通用计算平台的芯片研发与技术创新,是国内率先实现规模化商业落地的 GPU 企业。目前,登临科技曾经和龙蜥操作系统实现生态适配,置信在将来,登临科技也将与龙蜥进行更加严密的单干,共推 AI 产业在更宽泛的利用落地。” 截至目前,已有 290+ 家企业签订 CLA 协定退出龙蜥社区,包含平安厂商格尔软件、海泰方圆,数据库厂商南大通用、巨杉数据库,中间件厂商西方通、中创中间件、宝兰德等,欢送更多企业退出。 龙腾打算 2.0 可参看:首批招募 50 家!「龙腾社区生态倒退打算」正式公布 —— 完 ——

February 17, 2023 · 1 min · jiezi

关于gpu:移动端GPU性能深度优化分析

对于开发一款游戏,大多数的开发人员仅仅停留在会应用Unity提供的组件来做游戏开发,至于这些组件的底层是什么?渲染队列、深度写入以及Overdraw这些波及到GPU的名词到底是什么?如何依据GPU性能指标来调优?这些基本上对于大多数开发人员都是生疏的。  对于有机会去手写Shader的开发人员,是否对Shader有足够的理解,在兼顾GPU性能的同时又能够实现完满的成果?  该课程从挪动端GPU的架构动手,深刻各种GPU性能指标来一一剖析哪些个性会拖垮GPU性能,小到数据类型,大到GPU硬件缓冲去全方位剖析GPU性能的晋升。  挪动端GPU架构简介GPU性能指标Shader代码优化以“水”特效实例从硬件层到软件层进行性能一步一步调优 作者于洋,Unity技术专家、引擎组组长。曾就任于人人网、Kabam、竞技世界。从事游戏开发十余年,经验了从Flash到Unity的游戏开发过程,长期从事游戏渲染和性能优化相干工作,对PBR、云、雾、地形、URP管线等有深入研究,曾参加过《Legacy of Zeus》、《荒岛求生》、《mythwar puzzle》等游戏的渲染和性能优化工作,乐于分享渲染和优化的相干技术。 目录1|简介2|挪动端GPU架构简介3|测试条件和小程序4|采集GPU性能指标5|论断剖析6|Shader代码优化7|“水”特效优化 本篇转载自《挪动端GPU性能深度优化剖析》的第1节。  1|简介 当初市面上的手机游戏,不论是哪一种类型的,在场景设计上,不论是大世界、小城镇、森林、哪怕是沙漠中,或多或少都会呈现“海”、“湖”等自然景观组成因素,以下咱们统称为“水”特效,如下图,出自手游《原神》。  有的手游中甚至为了还原真切成果,对“水”特效加上了一些计算较为简单,重大拖慢GPU性能的成果,比方“折射”、“反射”、甚至海底“焦散”,这些成果如果真的依照场景中动静实时渲染的话,对于挪动设施来说,压力会相当大。如果遇上了低端机,比方红米7A、晚期的摩托罗拉、LG等几款机型,想要实时跑起来这些成果,更是难上加难。  本文将从挪动端GPU架构、渲染队列、ZWrite、OverDraw等硬件方面和Shader代码复杂度方面,联合GPU性能剖析工具对GPU性能从浅入深进行剖析,最初拿“水”特效这个实例讲述如何在低端机设备上通过优化GPU,进步帧率。 对于GPU的优化,个别从带宽、OverDraw、Shader复杂度等方面来思考,本文将波及到OverDraw和shader复杂度方面,带宽优化后续文章会波及到。  OverDraw是当同一个像素被进行屡次绘制导致的一种景象。这种景象会产生比较严重的填充率问题。要了解OverDraw, 咱们必须要晓得Unity场景中渲染对象的渲染程序。在不同渲染队列中的对象也是依照不同的程序进行排列。比方,Unity在几何体队列(Geometry Queue)中,是依照从前到后(front-to-back)的程序来对几何体进行绘制,这样能够最小化OverDraw,然而在通明队列(Transparent Queue)中,是依照从后到前(back-to-front)的程序来实现屏幕上物体的通明成果。  OverDraw的优化是一个比较复杂的话题,没有一个万能的解决方案,然而咱们能够通过缩小那些无奈主动排列的渲染对象的重叠(Overlapping)。从Unity的Scene视图着手钻研,在咱们编辑器下的Draw Mode里能够让咱们看到以后场景中的OverDraw状况。 以上就是《挪动端GPU性能深度优化剖析》的第1节,此篇文章比拟适宜从事游戏开发的Unity客户端开发人员、心愿晋升GPU性能优化能力的人以及对性能优化以及Shader感兴趣的同学。  读完全篇后你会深刻理解挪动端GPU架构,对各种GPU性能指标的调优技能晋升,并优化书写Shader的能力。  作者的另一篇文章《深刻UGUI Mask组件原理和性能深度优化》也同时上线,组合购买仅需19.9元。

January 13, 2023 · 1 min · jiezi

关于gpu:超强总结GPU-渲染管线和硬件架构

导语| 本文简述了 GPU 的渲染管线和硬件架构,对一些常见问题进行了探讨和剖析。有以下几点核心内容:(1)挪动平台渲染管线 TBDR 的介绍;(2)GPU 缓存体系的介绍;(3)Warp 的执行机制;(4)常见的如 AlphaTest 或者分支对性能的影响。 GPU 渲染管线 一、渲染管线简述 所谓渲染管线,就是 CPU 传送给 GPU 一堆数据(顶点、纹理等),通过一系列解决,最初渲染得进去一副二维图像。有以下几个阶段。 应用程序阶段1.粗粒度剔除、渲染状态设置、筹备数据。 2.咱们在游戏引擎中所做的视锥剔除、遮挡剔除等,都是粗粒度剔除,是基于模型级别的。 3.这一步是在 CPU 进行的,前面的步骤都是在 GPU 外部进行的。 顶点解决阶段1.顶点着色器、曲面细分、几何着色器、顶点裁剪、屏幕映射。 2.这里会做反面剔除等裁剪,确保只有真正须要绘制的图元才会进入光栅化。 3.顶点解决是可编程的(Vertex Shader,Geometry Shader 和 Compute Shader)。 光栅化阶段1.三角形设置、三角形遍历、片元着色器。 2.光栅化引擎会将图元(Primitive)映射为与屏幕像素对应的片元(Fragment)。片元蕴含每个像素的坐标、色彩、深度、法线、导数、纹理坐标等信息。这个数据通过片元着色器的计算失去最终的色彩值。 3.像素解决是可编程的(OpenGL 中叫做片元着色器,Fragment Shader,DirectX 中叫做像素着色器,Pixel Shader)。这里通常是性能瓶颈所在,所以古代 GPU 做了很多的优化来尽可能防止执行有效的像素解决,比方 EarlyZ、隐面剔除等。 逐片元操作1.裁剪测试、深度测试、模板测试、混合。 2.光栅化阶段失去的色彩值通过一些列的测试、混合,最终写入到 FrameBuffer 中。 3.ROP (Raster Operations),是由一个独立的硬件单元来实现的。这个硬件单元的数量和性能限度了 GPU 每秒写入 FrameBuffer 的数据量。在一些低端机这个阶段也十分有可能成为性能瓶颈,即每秒 ROP 解决数据量。即使应用最简略的全屏半透明 shader,多叠加一两层就会因 overdraw 而重大降帧,很有可能就是 ROP 瓶颈。 二、IMR: Immediate Mode Rendering ...

November 30, 2022 · 18 min · jiezi

关于gpu:最新MLPerf基准测试基于阿里云GPU云服务器的AIACC在图像识别封闭式场景下夺冠

近日,寰球权威 AI 基准评测组织 MLCommons 颁布了最新一期 MLPerf™ v2.1 推理性能基准测试后果。阿里云在 Edge 封闭式、数据中心和 Edge 开放式、数据中心网络等场景均体现亮眼。其中,基于阿里云弹性计算 GPU 云服务器的神龙 AI 减速引擎(AIACC)在图像识别的 Edge 封闭式场景中实现了最低延时,突破性能天花板,处于业界第一。 MLPerf Benchmark 是一套用于测量机器学习软硬件性能的通用基准,由来自学术界、钻研实验室和相干行业的 AI 领导者组成的联盟,旨在“构建偏心和有用的基准测试”;评估在不同条件下,不同企业硬件、软件和服务的训练和推理性能;能够帮忙企业简化抉择 AI 软硬件服务的流程。 MLPerf 笼罩了图像分类、指标检测、医学图像宰割、自然语言解决等不同的 AI 服务场景,阿里云 AIACC 本次参加的次要是图像识别的封闭式推理场景。 封闭式即指在不对模型进行任何改变,仅优化底层软硬件平台的状况下取得的性能,具备极大优化难度。往期的封闭式场景后果中,搭载最新的 NVIDIA TensorRT 版本是所有 NVIDIA GPU 硬件平台的性能天花板,不同厂商的差距仅在于不同 GPU 硬件产生的小幅性能差别。本次 MLPerf™ v2.1 推理后果的 Edge 封闭式计算中,神龙 AI 减速引擎(AIACC)针对 ResNet50 的单流(单任务解决)推理进行了专门的深刻优化,超过了间接应用 NVIDIA TensorRT 的用例,取得了 0.38 毫秒的最低延时,意味着在阿里云上辨认一张图片只须要 0.38 毫秒。 MLPerf Inference Edge v2.1 截图 阿里云神龙减速引擎 AIACC 团队本次次要基于两款阿里云 GPU 云服务实例——gn7i、gn7e 实例。 ...

September 22, 2022 · 1 min · jiezi

关于gpu:基于阿里云GPU云服务器的AIACC助力UC搜索业务性能提效380每年节省数千万成本

文丨阿里云神龙计算平台 AI 减速团队 & UC 搜寻架构部推理引擎团队 导语:作为国产行列里占有率排名第一的挪动浏览器,UC 浏览器本身承载着数以亿计的用户量,以后 UC 浏览器每天的服务申请对服务器的算力及带宽要求极高,因而也带来了巨额的经营老本。因为业务是动态变化的,UC 对计算资源也有动静扩缩容的需要。阿里云 GPU 云服务器是提供 GPU 算力的弹性计算服务,具备超强的计算能力,服务于深度学习、科学计算、图形可视化、视频解决多种利用场景,能为客户提供软件与硬件联合的残缺服务体系,助力客户在理论业务中实现资源的灵便调配、弹性扩大、算力的晋升以及老本的管制。而基于阿里云 GPU 云服务器的神龙 AI 减速引擎(AIACC)是为了极致性能而生,旨在打造世界级无可比拟的 AI 性能体验,同时为了客户降本增效,实现共赢。据悉,刚颁布的最新世界 MLPerfTM推理榜单中,基于阿里云 GPU 云服务器的 AIACC 首次冲破封闭式场景世界第一。 本篇文章将带大家理解阿里云 AIACC 如何基于阿里云 GPU 云服务器助力 UC 浏览器的搜寻业务均衡计算性能与经营老本之间的矛盾,使其大幅实现降本增效,胜利在阿里云的 GPU 云服务器落地。 背  景1.业务背景UC 搜寻承载着 UC 次要业务入口,场景包含:大搜、各种垂搜业务、夸克 app 等。搜寻流程个别通过几个阶段:召回 –> 粗排 -> 精排(L2->L4) -> 混排等。架构如下: 在业务中,L3/L4 排序局部都应用了 QTC 外围模型。随着业务流量的增长,目前精排打分阶段面临微小挑战,提早和吞吐都要兼得。 2.QTC 模型下图是用 TF-summary 对 QTC 模型做可视化, QTC 模型属于排序外围模型,模型构造分为 3 个 BERT+ 多层 Conv + 多层 MLP 等,其中 Bert 输出 seq length 最大长度是 512。模型总共有大概 4500 个算子,计算量微小。 ...

September 13, 2022 · 3 min · jiezi

关于gpu:如何创建前端-WebGPU-项目

如何创立前端 WebGPU 我的项目? 1. 丐版 HelloWebGPU最简略的 WebGPU 程序应该是这样的: <script>const init = () => { if ('gpu' in navigator) { console.log(navigator.gpu) } else { console.log('浏览器不反对 WebGPU;浏览器未开启 WebGPU 性能。') }}init()</script>将下面的代码保留成 index.html,双击关上就能够在控制台看到输入的对象: 如果你是什么都不会的老手,那么接下来这几个问题我只说一次。当然,新手能够选择性跳过。 ① 为什么是 index.html不为什么,你喜爱能够改成 home.html,main.html,然而文件的后缀名得是 html,用 index.html 是习惯。 ② 你这个代码为什么浏览器没有显示货色?如果你没有浏览过我之前的文章,没有仔细阅读过,天然是不晓得为什么。 WebGPU 不像 WebGL,它解除了与 DOM - HTMLCanvasElement 的强关联。很简略: WebGPU focus on GPU. Rendering is part of GPU's features, not all.意思是,渲染绘图只是 GPU 的一部分性能,WebGPU 更靠近古代 GPU 的功能定位。 所以,作为浏览器内置的一个 API,你只须要 JavaScript 就能够获取到这套全新设计的 API,它挂载于 navigator 上。 ...

September 1, 2022 · 3 min · jiezi

关于gpu:在-WebGPU-中使用时间戳查询

原文 https://github.com/OmarShehat... 本文如何应用 WebGPU 的工夫戳查问(timestamp-query)性能来计算你的 GPU 指令执行耗时。 在 WebGPU 中,工夫戳查问是一项可选性能,不肯定全副实现版本都有。撰写本文时,出于平安思考,在浏览器上是禁用的(具体起因参考 gpuweb/gpuweb #2218) 概述上面先简略介绍工夫戳查问的流程: 申请设施对象时加上 timestamp-query 性能申请创立一个容量为 N 的查问集(以后帧要存多少个工夫戳)创立一个存储型缓冲对象(storage-buffer),大小为 8×N 字节,因为工夫戳查问的后果须要用 64 位存储;调用 commandEncoder.writeTimestamp 办法记录时间戳;它会在所有的指令完结后记录时间戳;调用 commandEncoder.resolveQuerySet 办法将工夫戳查问后果写入存储型缓冲将存储型缓冲复制到 CPU 可读的内存中,解码为 BigInt64Array(参考 BigInt - JavaScript | MDN)按步教学可在这个 PR 中找到残缺的示例:Example usage of timestamp queries by OmarShehata · Pull Request #5 · OmarShehata/webgpu-compute-rasterizer · GitHub 0. 让浏览器具备工夫戳查问性能默认浏览器是敞开不平安的 API 的,应用下列参数启动 Chrome 浏览器即可: --disable-dawn-features=disallow_unsafe_apis译者注:从 --disable-dawn-features 能够看出,这个启动参数是 Chrome 系特有的,火狐和 Safari 不通用。具体操作能够右击 Chrome 或 Edge 的快捷方式,在“属性” - “指标”后追随这一串字符串。1. 创立 Queryset 和缓冲对象申请设施对象时,须要把 timestamp-query 增加进 requiredFeatures 数组中: ...

August 31, 2022 · 2 min · jiezi

关于gpu:云上生长网络研讨会|使用-GPU-和-VPU-等异构硬件加速视频转码

随着 AI 技术的成熟,以及云游戏、直播等新利用的遍及,流量的模式曾经从文字、图形、图像转变为音频、视频等流媒体。在此背景下,企业对极高效率、极低提早的谋求与传统硬件瓶颈、算力闲置的现状发生冲突,如何高效组合异构硬件,充沛进步硬件利用率,降低成本,就成为当下值得思考的一个问题。 GPU 能够为很多畛域提供弹性计算能力,对视频转码的反对便是 GPU 利用最宽泛的畛域之一。云计算中的计算资源来自不同的硬件,其中最具代表性的就是 CPU 和 GPU,以及前期衰亡的VPU、NPU、TPU 等业余计算硬件。而每种硬件都有不同的个性和应用老本,间接决定任务调度模块的设计与实现。 青云云点播服务中的转码服务(公测期间收费),就是 GPU 在视频转码中的理论利用。其搭载 GPU 后,可通过算法调度充分利用私有云宏大的全产品服务能力,为用户提供海量视频的高效解决,满足用户视频转码、格局转换、裁剪、视频水印等常见的媒体解决需要,大幅升高用户对于多媒体文件的解决难度。 本次研讨会,咱们邀请到了青云科技音视频技术专家李小文,为大家分享 GPU、VPU 等异构硬件在视频转码服务中的利用与实际。 李小文青云科技参谋级研发工程师,主导青云音视频解决相干技术架构设计。长期从事分布式系统的设计开发,在音视频畛域耕耘多年,致力于继续晋升青云音视频相干的产品能力和服务质量。 9 月 1 日(星期四)下午 3:00青云“云上成长”系列网络研讨会第一期扫描二维码报名即有机会取得热门技术书籍!

August 31, 2022 · 1 min · jiezi

关于gpu:GPU加速Pinterest推荐模型参数量增加100倍用户活跃度提高16

作为图片届的“Twitter”,Pinterest首页展现给用户的图片也离不开背地的举荐模型。近期,其工程团队通过将机器学习服务从CPU转移到GPU上,使得Pinterest能够上线比之前大100倍的举荐模型。上线大模型给模型品质带来了阶跃式的晋升,最终将Pinterest首页feed流的用户活跃度进步了16%。 在本文中,他们分享了如何只通过渺小的投入和提早的老本实现这一优化指标,这包含优化特定算子,整合内存传输,通过CUDA Graph技术在设施上执行动态图,以及分布式系统的从新设置。他们的实践证明,要想进步模型成果,模型参数就得变大,而应用GPU服务计划的经济效益远超CPU服务计划。 起源|Pinterest Engineering翻译|郑泽康 Pinterest的使命是给每个人带来发明他们所热爱生活的灵感。为了实现这一使命,咱们所有产品中都蕴含的一个要害组件就是各式各样的举荐模型,它们负责在适合的工夫给适合的人展现适合的内容。咱们的举荐模型是通过高级算法进行训练的一系列机器学习模型,用于了解用户在Pinterest上破费工夫时的行为,这些举荐模型是通过定制的机器学习模型服务器(Scorpion Model Server, 即SMS)来运行的。 SMS 上须要面对十分艰巨的技术挑战,基于3000多亿个Pin的语料库,它必须在毫秒内为4亿多个用户提供相干举荐。之前,SMS在CPU上进行模型推理,其内核通过了多年的优化以满足咱们对提早和基础设施老本的严格要求,但即便最新一代的CPU也简直达到了SMS服务的极限。咱们必须十分审慎地确保,每次因模型变动而带来的提早和基础设施老本的减少都是荒诞不经的。 机器学习畛域里模型参数和计算量减少的趋势让问题变得更加严厉。在举荐零碎中,具备1000亿参数量的模型曾经很常见,并在业内常被提及。 在Pinterest,咱们采纳了略微不同的形式,通过应用诸如Transformer的古代模型架构来扩充模型。在更大模型下,咱们立刻观测到模型准确率产生的量变——其大幅晋升了Pinner(译注:Pinterest用户)的参与度。然而,在CPU服务器上运行这些古代模型架构简直让老本和提早都晋升了40倍,这一代价难以承受。因而,咱们转而寻求应用GPU来减速模型推理,从而能够应用正当的老本来运行这些模型。 1 优化当咱们尝试那些开箱即用的GPU服务时,很快意识到在经济高效地利用GPU运行举荐模型服务之前须要对其优化。咱们首先应用剖析工具来剖析在模型推理过程中产生了什么,在仔细观察剖析后果时,咱们留神到工夫线上有大量的小CUDA Kernel在执行。 这是举荐零碎模型的预期行为,其中数百个特色在模型前期阶段进行特色拼接之前须要独自解决。然而,对于大量的小算子,启动CUDA Kernel带来的开销比计算开销还要低廉。与训练时的batchsize相比,模型服务时的batchsize绝对更小,进而加剧了这一问题。 上图别离是模型优化前和优化后的剖析后果。CUDA Kernel工夫线(用红框突出显示)表明,Kernel的启动开销(蓝色块之间的间隙)显著缩小,因而GPU失去了更好得利用,它将大部分工夫破费在Kernel执行中。 2 缩小小op的数量咱们采取的第一个办法是找出缩小小op数量的机会。咱们寻找常被应用的模型组件,并尽可能对其优化。其中一个例子是Embedding的查表模块,它蕴含两个计算步骤:原始ID到索引的查找,索引到Embedding的查找。因为咱们有大量特色,这两步操作会被反复数百次。通过应用cuCollections (https://github.com/NVIDIA/cuC...) 以反对GPU上原始ID的哈希表,并实现了自定义的Embedding查找模块以合并多个查找操作,咱们显著地缩小了op的数量。在执行一些优化后,马上看到了更优的性能体现。 3 合并内存拷贝同样,当咱们在主机和GPU显存之间搬运Tensor时,也存在整合数据传输的机会。通用举荐模型里的一个候选样例通常会应用数百个特色作为输出,对于每一次推理,各个特色作为一个独自的tensor被拷贝到GPU显存中。尽管在主机和GPU显存之间搬运数据十分快,然而为每个申请调度数百个cudaMemcpy()函数调用的开销很快成为瓶颈。 从主机独自拷贝Tensor到 GPU vs 一次拷贝整个内存缓冲区 为了解决这个问题,咱们利用了一个简略的优化将cudaMemcpy()调用次数从几百次缩小到一次:不再应用Torch框架将Tensor独自挪动到GPU上,而是先将所有Tensor的数据搁置到一块事后调配好的间断内存缓冲区中,并一次性将缓冲区内容拷贝到GPU里,最终通过指向GPU显存缓冲区的不同偏移量来重构失去GPU上的所有张量。 该优化带来的代价是要显式治理事后调配的内存缓冲区的生命周期,以及须要对不同数据类型手动解决GPU显存对齐。但作为后果,P50数据拷贝提早从10ms 升高到1ms以下,这证实了该优化带来的复杂性是能够承受的。 4 利用CUDA Graph为了进一步优化模型推理过程,咱们应用CUDA Graph(https://pytorch.org/blog/acce...) 来齐全打消残余小op的开销。CUDA Graph容许咱们将模型推理过程捕获为动态图,而不是独自调度。它能够让整个计算作为一个单元进行执行,而不产生任何Kernel启动开销。咱们反对将CUDA Graph作为模型服务的一个新后端。一开始加载模型时,模型服务执行一次模型推理以构建图实例,该实例能够针对实时流量反复执行。 CUDA Graph在一个批处理内(下图)执行Kernel,而不是在一个序列中一一执行(上图),这缩小了Kernel之间CPU启动带来的开销。图表来自:https://pytorch.org/blog/acce... CUDA Graph本身的一些限度给咱们的模型服务带来了额定的复杂性。其中最大的限度是CUDA Graph要求所有Tensor都具备动态形态和布局,这对动静大小批次和不规则的变长Tensor带来了挑战。然而,咱们置信为了取得更好性能进行的衡量是值得的,并且咱们能够将输出Tensor补齐到精心筛选的动态形态。 5 应用更大的batchsize最初,咱们从新钻研了SMS为模型推理执行的批处理策略。SMS反对动静批处理,能够让多个申请合并成更大的批次。它通常能带来更好的吞吐量,但代价是须要较短的工夫以期待申请序列收集足够多的项(item)。对于CPU上的ML推断,咱们通常想要将申请分成小批量来进步并行度以减小延时。然而对于GPU,其延时对batchsize并不敏感,应用更大的batchsize对GPU晋升工作负载效率更重要。 这种batchsize的需要使咱们从新思考了SMS里的分布式系统设置。对于CPU上的ML推断,咱们应用scatter-gather构造将原始申请拆分,并在多个叶子结点上并行执行,以取得更小的延时。 此外,该架构容许咱们为每个叶子结点调配一个固定的数据切片,以优化特征提取期间的缓存命中率。然而,因为GPU偏向应用大batchsize,因而删除root layer间接在原始申请中应用大batchsize更有意义。最终咱们应用了CacheLib的混合缓存,它用DRAM和SSD来弥补与scatter-gather 架构设置相比的缓存容量损失。 6 后果咱们首先测量了模型单次推理的延时。咱们应用c5.18x AWS实例提供CPU服务,g5.4 AWS实例提供GPU服务。 CPU延时随着batchsize线性增长,在较小的batchsize下,GPU延时简直雷同,此时Kernel启动开销占延时主导因素。然而随着batchsize减少,理论计算工夫主导了延时,GPU延时以亚线性模式增长。在实践中,GPU效率晋升的亮点在于SMS能够应用更大的batch工作。联合了所有优化之后,咱们取得了惊人的后果,相比 CPU 服务,GPU服务在较大batchsize下的每批次的提早晋升了100倍以上。 咱们的服务指标也展现了令人印象粗浅的后果。通过优化模型操作,从新设置分布式系统以及优化数据传输并应用CUDA Graph,咱们以30%的更低延时上线了77倍大的模型,并以适当成本增加了20%的吞吐量。 最初,两个数量级效率晋升开启了Pinterest最先进的举荐模型架构。能够看到,模型品质显著地晋升间接转化为更高的用户参与度。在过来的一年,咱们以适当的基础设施老本将一个次要产品的用户参与度晋升了16%。很快,咱们将推出比咱们的CPU模型大100倍的最大模型。 7 ...

August 10, 2022 · 1 min · jiezi

关于gpu:云GPU如何安装和启动VNC远程桌面服务

平台默认状况下未提供桌面,如需桌面服务,可依照以下文档步骤进行装置及应用,平台提供装置文档中会装置Ubuntu的xfce4桌面。 恒源云平台地址:https://gpushare.com/ 装置桌面执行如下命令,进行桌面装置。 #下载安装脚本~# curl -OL https://download.gpushare.com/download/platform/install_desktop/install_desktop#装置脚本赋于执行权限~# chmod +x ./install_desktop#执行装置桌面脚本,装置速度取决于实例带宽,最快须要5-10分钟,最慢可能须要30-60分钟。~# ./install_desktop#装置到最初会提醒输出VNC明码,该明码须要本人去定义,前面须要通过VNC登录桌面应用,文档中应用gpushare作为VNC明码。请输出VNC连贯明码,该明码须要自定义: gpushare您的VNC明码是: gpusharespawn vncpasswdPassword:Verify:Would you like to enter a view-only password (y/n)? n启动桌面桌面装置后,须要通过VNC进行治理,所以须要启动VNC服务后,通过VNC来连贯实例桌面。 #执行manage_vnc命令查看应用办法~# manage_vnc usage: 1): VNC Server 启动命令 manage_vnc start 2): VNC Server 敞开命令 manage_vnc stop#而后执行manage_vnc start来启动VNC服务~# manage_vnc startVNC服务器已胜利启动!拜访桌面VNC服务启动后,默认占用了实例的8080端口,关上控制台-》点击自定义服务即可通过浏览器拜访桌面服务。 点击vnc.html进入VNC页面 进入VNC页面后点击连贯 输出在装置桌面服务最初让自定义输出的VNC明码,而后点击Send Credentials进行登录。 显示如下则已胜利登录桌面 桌面设置(重要)1.批改实例桌面 灭屏工夫默认状况下,长时间不操作桌面会进行灭屏,灭屏后无奈通过点击鼠标来激活桌面,只能重启VNC服务,所以拜访桌面后的第一件事件就是批改桌面灭屏工夫为用不灭屏。 点击左上角的Applications -> Settings -> Light Locker Settings,而后批改如下选项为Never。 2.创立浏览器快捷方式 下面装置桌面服务时,同时装置了Firefox以及Chrome浏览器,这里将他们创立快捷方式到桌面。 (创立Chrome浏览器快捷方式)点击鼠标右键-〉Create Launcher如下几个选项,Name选项填入Chrome、而后会跳出Chrome浏览器,点击下方跳出的浏览器即可。 Command为启动该浏览器的命令,须要在主动生成的命令前面增加 –no-sandbox 命令,否则Chrome浏览器启动会闪退。 (创立Firefox浏览器快捷方式)点击鼠标右键-〉Create LauncherName选项填入Firefox,跳出Firefox浏览器,点击下方跳出的浏览器即可。 无需更改Firefox浏览器的Command命令,点击右下角的Create即可。 创立实现后,桌面会显示出创立的两个浏览器的图标,点击运行即可。 批改浏览器搜索引擎浏览器装置后,默认是google搜索引擎,须要更改为国内可拜访搜索引擎,否则搜寻会超时。 装置工具(可选)装置VScode #下载VsCode~# sudo wget https://az764295.vo.msecnd.net/stable/30d9c6cd9483b2cc586687151bcbcd635f373630/code_1.68.1-1655263094_amd64.deb#装置VsCode~# sudo chmod +x code_1.68.1-1655263094_amd64.deb~# sudo apt-get install ./code_1.68.1-1655263094_amd64.deb创立VsCode桌面快捷方式,Name填入code,而后选中跳出的VsCode,而后增加--no-sandbox命令到启动Command。 ...

August 3, 2022 · 1 min · jiezi

关于gpu:十分钟生成影视级室内设计效果红星美凯龙设计云如何升级传统家居行业

红星美凯龙家居是一家专一于家居批发的大型连锁企业,截至 2021 年底,红星美凯龙经营了 485 家家居商场,覆盖全国超过 224 座城市。 红星美凯龙作为国内家居行业的当先品牌,其实始终在思考一个问题,那就是如何更好的服务本人的家居品牌客户和消费者。 随着近年来国内“新批发”和“业务数字化”等科技浪潮衰亡,以虚拟现实、人工智能等高科技伎俩推动传统家居行业营销改革和业务降级成为必然之路,而红星美凯龙设计云在这个背景下应运而生。 视频截图:红星美凯龙设计云应用界面 聚焦设计与营销两大外围业务,胜利服务 200+品牌红星美凯龙设计云心愿通过 AI 人工智能以及营销流传数字化解决方案,联合红星美凯龙 30 多年的营销教训,帮忙消费者取得更好的生产体验。 红星美凯龙设计云的外围业务有两块。一个是 3D 云设计解决方案,为客户提供 3D 在线设计、在线渲染能力,在门店实现疾速设计,生成 3D 效果图和视频,晋升消费者沉迷式体验。第二块业务是萤火引擎——帮忙品牌实现门店数字降级,赋能导购疾速设计、内容获客,晋升销售转化。 视频截图:导购可应用红星美凯龙设计云一键替换瓷砖成果 目前红星美凯龙设计云服务了包含芝华仕、CASA、恒久、梦百合、雅士林等在内的超过 200 多个品牌,取得了客户的统一好评和信赖。 设计云的产品次要是提供给设计师与导购用户用的,帮忙其晋升设计效率、晋升营销转化。为了给用户最好的设计体验,红星美凯龙设计云渲染的视频须要出现影视级渲染成果,让用户感触光、影、色调所带来的实在震撼感。因而弹性化的算力和时效性是红星美凯龙重点关注的,云也成为的最佳解决方案。 云端实时渲染生成影视级设计成果,帮忙门店疾速成单红星美凯龙设计云场景的特点次要是数据传输极大、渲染与视觉计算须要用到的算力需要也很大,对生成的工夫要求也很高,须要短时间出成果,在传统的计算体系下很难实现。 视频截图:红星美凯龙设计云 CTO 兼执行总裁分享应用阿里云带来的价值 为了满足红星美凯龙在这种超强算力方面的需要,阿里云提供了搭载业界当先的 NVIDIA A10 GPU 的 gn7i 实例,同时基于阿里云自研的第三代神龙架构,提供了高性能、高稳固的海量算力,在网络方面提供高达 100G 的传输速度,在存储方面提供高达 60 万 IOPS,反对高保真模型疾速载入;同时利用该实例提供的 NVIDIA RTX 实时光线追踪技术,实时、真切还原出了不同光源在不同材质的体现。同时,云的资源弹性试用与灵便付费形式也大大降低了美凯龙设计云的运维老本和资源老本。 阿里云提供了弱小的弹性云上 GPU 算力,能够随用随开,通过红星美凯龙设计云和阿里云异构计算团队的通力协作,平台实现了高自由度设计、真切还原、实时渲染的影视级成果,做到 10 分钟出视频,还大大降低了老本。在红星美凯龙设计云的帮忙下,设计云用户的满意度大大晋升,设计师成单率晋升 30%。 视频截图:红星美凯龙设计云渲染效果图 依靠于阿里云弱小的弹性云上 GPU 算力,红星美凯龙能够为客户提供疾速的、高质量的渲染,实现秒级的门店疾速设计。 与阿里云独特助力家居行业数字化降级设计云将会持续深耕泛家居行业的营销数字化业务,以弱小的 3D 设计平台为根底,打造精细化内容创作和高效的营销流传解决方案,继续赋能品牌批发门店,晋升消费者生产体验。 红星美凯龙是一个联合云计算先进的产品和技术构建的云原生应用服务的典型案例,随着云计算、虚拟现实、5G 和视觉计算等技术的倒退,以及阿里云无影这种云网端一体化的新算力模式的呈现,再联合产业数字化降级的深刻倒退,我置信,云和家居等传统行业将来会碰撞出更多的火花;并且在供应链、营销和消费者体验等全流程开展全面的单干。 点击这里,理解阿里云视觉计算解决方案。

July 19, 2022 · 1 min · jiezi

关于gpu:XGRIDS-三维重建服务构建云上数字孪生世界

摘要:高精度 3D 建模企业 XGRIDS 其域翻新基于阿里云建设本身高精 3D 重建云平台,应用阿里容器服务及基于 NVIDIA A10 Tensor Core GPU 的 ECS 云服务器,帮忙 XGRIDS 在数小时内部署好本人的 3D 重建计算资源池,大大节俭资源部署工夫;无需线下硬件投入,升高部署与运维老本。同时,云上弹性保障 XGRIDS 在长期突增业务可疾速扩容,让计算更高效、调度更弹性,助力守业期客户迅速开展业务。援用 XGRIDS 其域翻新是一家寰球当先的三维技术软硬一体化科技公司,致力于打造高精度的三维重建技术,通过分布式高性能计算、边缘计算和深度学习技术的研发,助力打造修建、数字孪生、影视、娱乐、游戏、智能制作等畛域的 3D 内容疾速生成与利用,打造三维内容引擎,在阿里云上构建三维内容创作生态,成为数字虚拟世界内容基座。 在计算机视觉中,三维重建是指依据单视图或者多视图的图像重建三维信息的过程。例如,交融某个区域多角度的摄影影像,通过三维重建服务疾速生成该地区的三维模型,无需 3D 建模师从零开始建模。这将大大晋升三维建模效率。 图:XGRIDS 其域翻新三维重建展现,从城市级到小物体 三维重建技术利用非常宽泛。近几年引起热议的 XR(指蕴含 VR 虚拟现实、AR 加强事实和 MR 混合事实在内的扩大事实技术与利用)相干利用中就须要大量的生物、物体、空间等主题的三维模型。在数字孪生城市治理场景下的三维地图重建,数字工厂畛域的工业仿真、机器人仿真,都有着丰盛利用。 在 2021 年 11 月的 NVIDIA GTC 大会上,XGRIDS 其域翻新凭借国内当先的三维重建技术,成为 NVIDIA Omniverse 中国区合作伙伴。 三维重建场景的计算需要:弹性、高性能XGRIDS 其域翻新提供的 SaaS 服务,客户需要往往是随机的,因而对 GPU 计算资源的需要是弹性的,我的项目期间可能通过简单的算法要剖析计算上万张照片,而后计算出相干的 3D 模型,我的项目过后对资源的需要即回落。面对业务突增期间,一旦资源无限,导致无奈在规定期限内实现我的项目工作,将影响我的项目交付;应用传统 IDC 机房部署大量的 GPU 又会呈现计算资源不足弹性,在不同的业务阶段都会受到资源限度。 我的项目制的业务属性要求 IT 零碎较为麻利,因而 XGRIDS 其域翻新抉择基于容器的架构。如果自建容器对企业技术人员业余度要求较高,且搭建周期较长,无奈满足业务落地的诉求。 对于在守业初期、高速倒退的 XGRIDS 其域翻新而言,在业务拓展的同时,传统自建硬件机房的计划过于轻便且工夫周期较长。弹性、麻利的计算需要也跟云非常符合,加上重建的三维模型对其本身与企业而言,都是重要资产,如果通过移动硬盘等形式流转将有较大的数据泄露危险,因而 XGRIDS 其域翻新诞生之初就抉择基于云。 ...

July 14, 2022 · 1 min · jiezi

关于gpu:Unity移动端游戏性能优化简谱之-画面表现与GPU压力的权衡

《Unity挪动端游戏性能优化简谱》共分为四个局部,明天向大家介绍文章的最初一个局部:画面体现与GPU压力的衡量,共8大节,蕴含了带宽、Overdraw、渲染成果、后处理、渲染策略、Shader复杂度等多项常见的游戏画面体现解说。(全文长约4400字,预计浏览工夫约15分钟) 前三局部可点击以下对应文章查看: 一、《Unity挪动端游戏性能优化简谱之 前言》二、《Unity挪动端游戏性能优化简谱之 常见游戏内存管制》三、《Unity挪动端游戏性能优化简谱之 CPU耗时调优》 1. 总览当初,越来越多的挪动端游戏开发团队对游戏的画面体现成果谋求也越来越高。GPU端曾经超过了CPU端,成了许多我的项目性能压力的最次要起源,但GPU端往往更多地波及到硬件层面的问题,市面上不同的厂商不同的芯片会反馈出不同的景象,为开发者进行机型分档和规范制订造成了困扰;从另一个角度来说,针对GPU性能的检测往往不是Unity引擎相干的工具所能提供的,而硬件厂商提供的各类工具则繁多而难用,看得人目迷五色而抓不住重点,本质上为GPU性能问题的排查和优化带来了微小的艰难。 2. 带宽2.1 GPU压力与发热/耗能尽管UWA外部做过一些带宽与发热/耗能关系的定量实现,但芯片底层的状况远比咱们设想的简单。咱们从教训和跟芯片厂家的业余硬件工程师沟通后得出的论断是:挪动设施上GPU带宽的压力还是比拟影响能耗的,特地是在发热这一方面也有不小的影响。但这是定性的说法,目前咱们和芯片厂商都没有特地定量的公式来具体阐明其影响大小。因而,当一个我的项目的发热或者能耗较大,带宽是开发者特地须要关注的中央。 UWA工具可能监控游戏测试过程中硬件温度的变动,一般而言长时间维持在55℃以上就是须要警觉的温度了。在UWA进一步的GPU专项服务中,还会更具体的采集和展现GPU和CPU别离的温度。 2.2 GPU压力与帧率上文中已提到过,GPU压力大会使得CPU期待GPU实现工作的耗时减少,与此同时,也会使得渲染模块CPU端的次要函数耗时回升,从而影响帧率、造成卡顿。 除此之外,因为挪动端硬件主观上存在体积较小、散热难的问题,使得GPU发热会物理上显著影响到CPU芯片温度同时回升,重大的即产生降频景象。 除了通过UWA工具监控Gfx.WaitForPresent和渲染模块主函数的耗时数据外,GOT Online Overview模式下还反映了测试中GPU耗时数据,从而直观地监控GPU性能瓶颈;而目前GOT Online还集成了Mali GPU统计带宽的API,应用Mali芯片的测试机提交Overview报告,就能够取得GPU着色和带宽数据。后续也将逐渐增加对于高通等硬件的相干性能反对。 在UWA进一步的GPU专项服务中,还会联合带宽数据和Clocks数据,针对低压场景逐DrawCall地剖析其占用带宽和GPU耗时过高的起因,4.3开始的局部会探讨一些常见的起因。 2.3 优化带宽带宽数据是掂量GPU压力的重要参考。以绝对高端的小米10机型而言,全分辨率状况下,如果须要跑满30帧并发热状况稳固,则须要将总带宽管制到3000MB/s以下。为此,常见的优化伎俩有: (1)压缩格局在内存的章节中曾经或多或少地探讨过,应用正当的压缩格局,可能无效升高纹理带宽。 (2)纹理Mipmap对于3D场景而言,对其中的物体所用到的纹理开启Mipmap设置,可能用一小部分内存回升作为代价无效升高带宽。当物体离相机越远,引擎就会应用更低层级的Mipmap进行纹理采样。但Mipmap设置也与正当的纹理分辨率挂钩,一个常见的景象是在理论渲染过程中只用到或者绝大部分用了Mipmap的第0层进行采样,从而节约了内存,所以要思考升高这类纹理的分辨率。 UWA工具应用不同色彩来示意应用不同Mipmap层级采样的像素以便定位问题;在进一步的服务中,还会依据Mipmap各层级使用率列举出每个场景中存在上述节约景象的纹理。 (3)正当的纹理采样形式除了正当应用Mipmap非0层采样外,还应关注我的项目中各向异性采样和三线性插值采样。概括来说,纹理压缩采样时会去读缓存外面的货色,如果没读到就会往离GPU更远的中央去读System Memory,因而所花的周期越多。采样点增多的时候,cache miss的概率就会变大,造成带宽回升。各向异性采样次数在Unity中设置有1-16,应尽量设置为1;三线性采样采8个顶点,绝对于双线性采样是翻倍的。 UWA的本地资源检测服务可能统计并列出开启各向异性或三线性采样的纹理资源。 (4)批改渲染分辨率间接批改渲染分辨率为0.9倍乃至更低,缩小参加纹理采样的像素,更加无效地升高带宽。 此外,还应留神读顶点的带宽。相比纹理,它的占比个别会比拟小。但不同于纹理的是,批改渲染分辨率能够无效升高读纹理的带宽,但读顶点的带宽不会受到影响。所以在上文中针对网格资源和同屏渲染面片数的管制行之有效后,读顶点的带宽值应该占总带宽的10%-20%较为正当。 3. OverdrawOverdraw,即屡次绘制同一像素造成的GPU开销。在场景中渲染顺序控制正当的现实情况下,不通明物体的Overdraw应管制在1层。所以,造成Overdraw的次要首恶就是半透明物体,也即粒子系统和UI。 3.1 粒子系统灵便应用UWA的性能剖析工具,能够无效定位对GPU压力奉献大的粒子系统。 一种做法是,建设一个专门的空的测试场景,在其中依次播放咱们我的项目中要用到的粒子系统,而后应用UWA SDK进行打包测试提交GOT Online Overview报告,就能够在GPU耗时曲线处,联合测试截图找到播放时GPU耗时较高的粒子系统了。 还有一种做法是间接应用UWA本地资源检测报告,能够间接看到造成Overdraw较高的粒子列表作为参考。 在筛选出须要优化的粒子系统后,对于低端设施尽可能升高它们的复杂程度和屏幕覆盖面积,从而升高其渲染方面的开销,晋升低端设施的运行流畅性。具体做法如下: (1)在中低端机型上对粒子系统的Max Particles最大粒子数量进行限度; 批改前: 限度Max Particles为10后: (2)在中低端机型上只保留“重要的”的粒子系统,比方对于一个火焰焚烧的特效,只保留火焰自身,而敞开掉周边的烟尘成果; (3)尽可能升高粒子特效在屏幕中的覆盖面积,覆盖面积越大,越容易产生重叠遮蔽,从而造成更高的Overdraw。 对于粒子系统的优化,咱们曾在UWA DAY 2018中对移动游戏的GPU性能优化中做了些分析,通过从Fillrate和Shader等几方面登程,联合大量优化过程中的理论案例剖析游戏在GPU端的性能瓶颈:《移动游戏的GPU性能优化》。 3.2 UI(1)当某个全屏UI关上时,能够将被背景遮挡住的其余UI进行敞开。(2)对于Alpha为0的UI,能够将其Canvas Renderer组件上的CullTransparent Mesh进行勾选,这样既能保障UI事件的响应,又不须要对其进行渲染。(3)尽可能减少Mask组件的应用,不仅进步绘制的开销,同时会造成DrawCall回升。在Overdraw较高的状况下,能够思考应用RectMask2D代替。(4)在URP下须要额定关怀是否有没必要的Copy Color或者Copy Depth存在。尤其是在UI和战斗场景中的相机应用同一个RendererPipelineAsset的状况下,容易呈现不必要的渲染耗时和带宽节约,这样会对GPU造成不必要的开销。通常倡议UI相机和场景相机应用不同的RendererData。 4. 渲染成果除了粒子特效外,咱们往往还喜爱用一些炫酷的渲染成果来丰盛游戏的体现,比方体积雾、体积光、水体、次外表反射等等,然而场景中用到的此类成果越多,Shader越简单,给GPU带来的压力越是大到远远超出承受范畴的水平。 优化和衡量是决定最初留下哪些渲染成果的次要伎俩。 一方面,从多个计划中比照选取成果和性能较优的,对开源计划依据本身我的项目须要进行精简优化;另一方面,依据机型分档和以后GPU压力,取重点而舍主要。能够在UWA社区的博客、学堂和开源库中发现一些优化良好、通过实际测验的优良计划。 ...

July 2, 2022 · 1 min · jiezi

关于gpu:算力时代GPU开拓新场景

一、人工智能经验过三个阶段,迎来爆发式增长 狭义上讲只有可能运行人工智能算法的芯片都叫作AI芯片。然而通常意义上的AI芯片指的是针对人工智能算法做了非凡减速设计的芯片。 AI芯片也被称为AI加速器或计算卡,即专门用于解决人工智能利用中的大量计算工作的模块(其余非计算工作仍由CPU负责)。 第一阶段:因为芯片算力有余,所以神经网络没有受到重视; 第二阶段:通用芯片CPU的算力大幅晋升,但依然无奈满足神经网络的需要; 第三阶段:GPU和和新架构的AI芯片推动人工智能落地。 事件1:2014年李天石博士“DianNao”系列论文让科学界看到,在冯诺依曼架构下也能够实现AI专用芯片; 事件2:Google推出的TPU运算架构的AlphaGo,接连战胜李世石和柯洁,看到了专用芯片的商业价值。 二、举荐式零碎模型参数,复杂度大幅减少 GPT-3模型目前已入选了《麻省理工科技评论》2021年“十大突破性技术。 GPT-3的模型应用的最大数据集在解决前容量达到了45TB。依据OpenAI的算力统计单位petaflops/s-days,训练AlphaGoZero须要1800-2000pfs-day,而GPT-3用了3640pfs-day。 算力时代,GPU开辟新场景 三、深度学习模型复杂度对芯片,算力需要激增 AI运算指以“深度学习”为代表的神经网络算法,须要零碎可能高效解决大量非结构化数据(文本、视频、图像、语音等)。须要硬件具备高效的线性代数运算能力,计算工作具备:单位计算工作简略,逻辑管制难度要求低,但并行运算量大、参数多的特点。对于芯片的多核并行运算、片上存储、带宽、低延时的访存等提出了较高的需要。 自2012年以来,人工智能训练任务所需要的算力每3.43个月就会翻倍,大大超越了芯片产业长期存在的摩尔定律(每18个月芯片的性能翻一倍)。 针对不同利用场景,AI芯片还应满足:对支流AI算法框架兼容、可编程、可拓展、低功耗、体积及价格等需要。 算力时代,GPU开辟新场景 四、部署地位对AI芯片性能,要求差别 依据机器学习算法步骤,可分为训练芯片和推断芯片。训练芯片次要是指通过大量的数据输出,构建简单的深度神经网络模型的一种AI芯片,运算能力较强。推断芯片次要是指利用训练进去的模型加载数据,计算“推理”出各种论断的一种AI芯片,偏重思考单位能耗算力、时延、老本等性能。 从部署的地位来看,AI芯片可分为云端(服务器端)、终端(挪动端)两大类。 云端芯片,是指部署在私有云、公有云或混合云上的AI芯片,不仅可用于训练,还可用于推断,算力强劲。终端芯片,是指利用于手机等嵌入式、挪动终端等畛域的AI芯片,此类芯片个别体积小、耗电低、性能无需特地弱小。 五、GPU是较为成熟的通用型,人工智能芯片 从技术架构来看,AI芯片次要分为图形处理器、现场可编程门阵列、专用集成电路、类脑芯片四大类。 其中,GPU是较为成熟的通用型人工智能芯片,FPGA和ASIC则是针对人工智能需要特色的半定制和全定制芯片,类脑芯片颠覆传统冯诺依曼架构,是一种模仿人脑神经元构造的芯片,类脑芯片的倒退尚处于起步阶段。 六、GPU设计之初用于显示,图像应用 GPU图形渲染流水线的具体实现可分为六个阶段,如图所示。 顶点着色器(VertexShader);形态拆卸(ShapeAssembly),又称图元拆卸;几何着色器(GeometryShader);光栅化(Rasterization);片段着色器(FragmentShader);测试与混合(TestsandBlending)。七、GPU适宜并行运行,大量计算 GPU(图形处理器)又称显示外围、显卡、视觉处理器、显示芯片或绘图芯片,是一种专门在个人电脑、工作站、游戏机和一些挪动设施(如平板电脑、智能手机等)上运行绘图运算工作的微处理器。 GPU使显卡缩小对CPU的依赖,并分担局部本来是由CPU所担当的工作,尤其是在进行三维绘图运算时,效用更加显著。图形处理器所采纳的核心技术有硬件坐标转换与光源、平面环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等。 GPU是一种非凡类型的处理器,具备数百或数千个内核,通过优化,可并行运行大量计算。尽管GPU在游戏中以3D渲染而闻名,但它们对运行剖析、深度学习和机器学习算法尤其有用。 起源:本文整顿【驭势资本】

April 2, 2022 · 1 min · jiezi

关于gpu:国产GPU全面开花GPU时代来临

近几年,GPU受到越来越多人的关注,尤其是国产GPU,堪称是全面开花! 那么,什么是GPU?它有着怎么样的魔力? 一、什么是GPU? 依据维基百科定义,GPU中文名为图形处理器,是一种在个人电脑、工作站、游戏机和一些挪动设施(如平板电脑、智能手机等)上做图像和图形相干运算工作的微处理器。 VR、区块链、3D建模、渲染等所有跟图像无关的处理过程都须要GPU。除了图形处理性能,GPU还是目前公认最好的AI加速器,尤其是在云端训练大模型利用场景中。 换言之,只有有高清画质需要,只有有AI解决需要,就离不开GPU。因而,随着这两大需要的持续增长和微小的市场设想空间,寰球GPU龙头英伟达凭借GPU芯片的劣势,市值就高达5753亿美元(约合人民币36358亿元,截至2022年3月10日),晋升为当下寰球市值最高的半导体企业。 那现如今,GPU有着怎么样的市场规模? 二、GPU市场规模 依据Verified Market Research数据,2020年寰球GPU市场价值为254.1亿美元,2027年无望达到1853.1亿美元,年复合增长32.82%。 2021年一季度,在寰球PC端GPU市场中,英特尔以68%的市场份额位居榜首,AMD和英伟达别离以17%和15%的市场份额名列第二和第三;在PC端独立GPU畛域中,英伟达占据81%的市场份额领有当先劣势,AMD以19%的市场份额排名第二。 2020年中国大陆的独立GPU市场规模为47.39亿美元,预计2027年中国大陆GPU市场规模将超过345.57亿美元。随着政策端对信息要害基础设施自主可控的器重,国产代替浪潮降临,国内独立GPU产商的广大市场空间已被关上。 三、GPU芯片研发有多难 国内企业做GPU次要有两大难,一是难在专利壁垒;二是难在GPU芯片的体系化翻新。 在专利壁垒方面,GPU是先进制程数字芯片,对于GPU企业来说,高技术含量的自有IP的继续演进是技术自主和市场竞争劣势的保障。但在该畛域起步早的寰球GPU巨头们已筑建了层层专利爱护墙。以GPU架构IP专利为例,就连寰球科技领头羊企业苹果,在该畛域也绕不开专利受权:苹果从A4到A10X所有处理器芯片都是采纳Imagination的IP,到A10之后苹果通过架构受权,有了本人的GPU架构把控,仍然是基于Imagination的TBDR架构专利受权,隶属于该架构分支。但一旦架构受权后独立演进了,也就不再被专利卡脖子了。 在GPU芯片设计方面,GPU也绝非简略的芯片设计,其设计较个别芯片更简单,零碎更宏大,涉及面更广。做GPU须要极其业余的团队,团队从前到后要包圆,做到软硬全栈。专业人才要涵盖架构、算法、硬件、软件以及各种验证形式,包含后端、幅员、驱动、测试、机械构造、生产、供应链等畛域。这意味着,GPU研发团队须要在全链条节点上都装备丰盛的量产教训人才,能力实现这样十分商业化的体系。 四、国产GPU最新进展 多家国产GPU厂商公布了产品的研发和商用状况。 2021年10月上旬,壁仞科技首款通用GPU芯片BR100正式交付台积电生产,这款芯片次要聚焦人工智能(AI)训练和推理、通用运算等泛滥计算利用场景,可广泛应用于包含智慧城市、私有云、大数据分析、主动驾驶、医疗衰弱、生命科学、云游戏等畛域。壁仞科技成立两年,累计融资50亿元。 10月29日,天数智芯发表公司全自研、国内首款云端7纳米GPGPU产品卡——“天垓100”已正式进入量产环节。这颗芯片次要利用于数据中心和服务器等畛域。在2021年3月,天数知芯还颁布公司获C轮12亿元融资。 11月,景嘉微发表JM9系列曾经实现流片、封装、初步测试工作。依据测试后果,这款芯片能够满足地理信息系统、媒体解决、CAD 辅助设计、游戏、虚拟化等高性能显示需要和人工智能计算需要。 同期,登临科技的Goldwasser系列产品商业化落地,曾经利用于互联网、智慧安防等畛域。此外,登临科技在11月取得新一轮融资,由高通创投及数家行业顶级企业联结策略投资。2020年6月Goldwasser系列产品在台积电12nm工艺上Full Mask流片胜利。 还有,芯动科技示意首款国产高性能服务器级GPU“风华1号”测试胜利,搭载寰球顶尖的GDDR6X和chiplet技术,利用于5G数据中心、云游戏、元宇宙等畛域。 另一大动作是摩尔线程推出首款国产全功能GPU,内置自主研发的3D图形计算核芯、AI训练与推理计算核芯、高性能并行计算核芯、超高清视频编解码计算等核芯。摩尔线程的融资也备受关注 ,公司在一年内实现了三轮融资,累计超30亿元。 无论是壁仞、天数智芯还是登临科技、摩尔线程等GPU守业公司,资本对其都是大手笔投资。究其原因,离不开GPU人才少、技术难度高、生态建设匮乏等因素,同时在被巨头垄断的市场,国产GPU迫切需要获得冲破。 五、GPU有三大利用场景:游戏 、 AI和主动驾驶 1、游戏 IDC数据显示,2020年游戏PC和显示器的出货量同比增长26.8%,达到5500万台。游戏笔记本电脑在2020年增长了创纪录的26.9%。与PC并行,游戏显示器在2020年也达到了新的高度,与2019年相比增长了77%以上,出货量达到了1430万台。 IDC预计2021年游戏显示器的销量将首次超过游戏台式机。即便游戏台式机逐步受到青眼,游戏笔记本电脑的显示器连贯率一直进步也意味着游戏监控器市场的五年复合年增长率预计将超过10%。IDC预计2025年寰球销量达到7290万,复合年增长率为5.8%。 2、AI 挪动端AI芯片市场不止于智能手机,潜在市场还包含:智能手环/手表、 VR/AR眼镜等市场。 人工智能服务器通常搭载GPU、FPGA、ASIC等减速芯片,利用CPU与减速芯片的组合能够满足高吞吐量互联的需要,为自然语言解决、计算机视觉、语音交互等人工智能利用场景提供弱小的算力反对,在提供雷同算力状况下,GPU服务器在老本、空间占用和能耗别离为传统计划的1/8、1/15和1/8。 以后在云端场景下被最广泛应用的AI芯片是英伟达的GPU,次要起因是:弱小的并行计算能力(相比CPU)、通用性以及成熟的开发环境。2020年寰球AI服务器市场规模为122亿美元,预计到2025年寰球AI智能服务器市场将达到288亿美元,5年CAGR达到18.8%。 ▲2020-2025年寰球AI服务器行业市场规模及增速(单位:亿美元) 3、主动驾驶 寰球主动驾驶迈入商用阶段,将来可期。IDC最新公布的数据显示,2024年寰球L1-L5级主动驾驶汽车出货量预计将达到约5425万辆,2020至2024年的年均复合增长率(CAGR)达到18.3%。 我国汽车市场规模一直增长,主动驾驶由L2向L3过渡。多地发展主动泊车、主动驾驶公交车、无人智能重卡等方面的示范利用。 到2025年,我国PA(局部主动驾驶)、CA(有条件主动驾驶)级智能网联汽车销量占当年汽车总销量比例超过50%,C-V2X(以蜂窝通信为根底的挪动车联网)终端新车拆卸率达50%。 随着传感器、车载处理器等产品的进一步欠缺,将会有更多L3级车型呈现。而L4、L5级主动驾驶预计将会率先在关闭园区中的商用车平台上实现利用落地,更宽泛的乘用车平台高级别主动驾驶,须要随同着技术、政策、基础设施建设的进一步欠缺,预计至多在2025年~2030年当前才会呈现在个别路线上。 感知路境,短时解决海量数据。行车过程中依赖雷达等传感器对情理信息进行采集后,处理器每秒需实时数据解析几G量级数据,每秒能够产生超过 1G 的数据。对处理器的计算量要求较高。 主动布局,刹时反馈保障平安。解决剖析实时数据后,须要在毫秒的工夫精度下对行车门路、车速进行布局,保障行车过程平安,对处理器的计算速度要求较高。 兼具技术老本劣势,GPU为主动驾驶畛域支流。 小结 在传统GPU市场中,排名前三的Nvidia、AMD、Intel的营收简直能够代表整个GPU行业的支出。国产GPU的倒退远远落后,然而国内市场规模和后劲微小,在国产芯片自主翻新和摩尔定律放缓等因素的驱动下,国产GPU和海内巨头的差距会逐渐缩小。

March 31, 2022 · 1 min · jiezi

关于gpu:阿里云神龙AI加速引擎帮助vivo将训练性能提升3070

公司简介vivo是专一于智能手机畛域的国际化品牌,vivo谋求乐趣、充满活力、业余音质、极致影像、愉悦体验的智能产品,并将敢于谋求极致、继续发明惊喜作为vivo的动摇谋求。 2014年vivo品牌的国际化之路全面开启,除中国大陆市场外,vivo进驻的海内市场蕴含印度、泰国、缅甸、马来西亚、印度尼西亚、越南和菲律宾。 业务痛点GPU利用率不高,资源节约显著:VIVO客户的业务场景中应用的是大规模多模态模型。对该类模型进行分布式训练时,通常应用单步更新的训练模式,即每一次单步训练之后都会进行一次梯度通信,这样会导致短时间内呈现大量的通信申请,造成很大的通信压力。同时,该模型的参数量较大,每次梯度通信的通信量与模型参数量成正比,这进一步的减少了通信压力。另外,该模型的训练过程中也没有对计算和通信进行工夫上的重叠,这也显著的导致了训练过程中的通信时长的减少。整个分布式训练过程中大量的工夫被梯度通信占据,GPU的计算资源在大多数工夫处于期待状态,无奈完满发挥作用。训练工夫长,业务模型迭代周期太长:客户业务模型的更新频率很高,每次模型迭代期间不仅要进行模型的分布式训练,还要进行测试,上线等流程。在这个迭代周期内,分布式训练占据了大量的工夫,导致其它流程不得不精简以保障迭代周期,这也使得客户的业务团队承当不小的压力。解决方案对大规模多模态模型进行分布式训练时,因为通信压力微小,相比于单机训练,多机训练取得的性能增益并不多,在双机场景下甚至察看到性能的负增长。于是,阿里云的神龙AI减速引擎AIACC团队,针对VIVO的场景,在底层针对通信、计算、时延和带宽等做了深度优化。因为客户训练集群的网络情况有可能发生变化,AIACC团队采纳了自适应优化策略,可能实时的依据网络情况对通信优化策略进行调整,从而大大晋升了GPU的利用率。在多种简单的网络条件下,将大规模多模态模型的训练性能晋升了30%-70%。AIACC团队帮助VIVO客户大大的缩短了的模型训练工夫,减速了模型迭代,助力业务模型疾速上线。 业务价值在多种简单的网络条件下,将大规模多模态模型的训练性能晋升了30%~70%。缩短了客户业务模型的迭代周期,为客户的业务团队加重了压力。相干产品神龙AI减速引擎神龙AI减速引擎是AIACC业界首个对立减速Tensorflow、MXNet、Caffe、PyTorch等支流深度学习框架的减速引擎,拿下斯坦福深度学习榜单Dawnbench图像识别四个世界第一。更多对于神龙AI减速引擎的介绍,参见神龙AI减速引擎帮忙文档。 GPU云服务器GPU 云服务器(GPU Cloud Computing,GPU)是提供 GPU 算力的弹性计算服务,具备超强的计算能力,服务于深度学习、科学计算、图形可视化、视频解决多种利用场景。阿里云作为亚洲第一的云服务提供商,随时为您提供触手可得的算力,无效缓解计算压力,晋升您的业务效率,助您进步企业竞争力。 更多对于GPU服务器的介绍,参见GPU服务器产品详情页。

March 31, 2022 · 1 min · jiezi

关于gpu:优雅的在NVIDIA-GPU上实现sleep

当咱们在测试或者其余状况下,兴许须要GPU执行完某步后sleep一会儿。这时咱们就能够通过cuda所提供的C编程接口clock64()这个函数来实现。这里摘录一段cuda手册中对clock64()函数的阐明: when executed in device code, returns the value of a per-multiprocessor counter that is incremented every clock cycle. Sampling this counter at the beginning and at the end of a kernel, taking the difference of the two samples, and recording the result per thread provides a measure for each thread of the number of clock cycles taken by the device to completely execute the thread, but not of the number of clock cycles the device actually spent executing thread instructions. The former number is greater than the latter since threads are time sliced.clock64()这个函数将返回线程所处的SM上的时钟周期数。如果在线程的开始和完结进行采样,并获取差值,将取得线程执行所破费的总时钟周期数,这将比线程理论运行的时钟周期数稍大,因为SM上多个线程之间是分工夫片执行的。 ...

March 16, 2022 · 1 min · jiezi

关于gpu:AlluxioNVIDIA-GPUs-加速分析和人工智能

越来越多的数据处理应用NVIDIA 计算来实现大规模并行。减速计算的倒退意味着无论是在剖析、人工智能 (AI) 还是机器学习 (ML) 过程中,对存储的拜访也须要更快。 如果数据拜访很大水平影响执行工夫,那么GPU减速带来的益处将是无限的。基于GPU的解决与基于CPU 的集群相比,能够驱动更高的数据拜访吞吐量。随着用于剖析和人工智能的解决集群与数据存储系统的拆散,减速数据拜访将变得更加重要。 NVIDIA曾经和Alluxio社区发展单干,对大规模数据集缓存和GPU数据可用性进行高性能数据编排零碎测试。Apache Spark 3.0,RAPIDS Accelerator for Apache Spark和 Alluxio 可用于:(1) 数据分析和商业智能;(2) 数据迷信的数据预处理和特色工程。对于模型训练或推理,GPU 集群上的Spark 和分布式 TensorFlow 或PyTorch 都受害于应用分布式平台无关(distributed platform agnostic)的编排层所带来的 I/O 减速。 在本文中,咱们将探讨: 在数据工作流的各个阶段,包含从数据提取-转换-加载(ETL) 到剖析和人工智能/机器学习(AI/ML)阶段应用Alluxio数据编排平台的部署架构。 如何通过用于RAPIDS Accelerator for Apache Spark和Alluxio在无需批改任何代码的状况下减速Spark SQL/Dataframe。 应用Alluxio和RAPIDS Accelerator for Apache Spark的最佳实际。 GPU减速的Apache Spark,TensorFlow 或PyTorch在应用 Alluxio时的部署选项。 典型的剖析、机器学习或人工智能工作流是蕴含数据导入到数据筹备,再到剖析或人工智能的一系列步骤。为模型训练筹备数据波及数据预处理和特色工程,咱们将其称为 ETL(提取-转换-加载)。剖析工作流中的数据清理须要采纳相似的步骤。 数据分析和ETL多应用Spark SQL和Dataframe API,二者通常都是迭代程序。随着GPU 和大型数据集的应用越来越多,对数据源的间接解决将得益于分布式缓存起到的I/O减速作用。 Alluxio数据编排层可用作数据流多个步骤共享的多数据源分布式缓存。Alluxio不受平台影响,提供了与平台的解耦,无论平台是部署在本地还是云上托管的 Hadoop 或 Kubernetes上。如图 1 所示,该架构通常实用于多种环境,能够依据以后阶段和工作负载类型灵便抉择最适宜的数据处理技术和基础架构。图 1:在NVIDIA GPU 集群上部署多阶段剖析或AI工作流用于计算减速并部署Alluxio用于减速数据拜访。应用 RAPIDS Accelerator for Apache Spark的Apache Spark 3.0 可能在GPU减速的集群上对Spark SQL 或 DataFrame 作业进行并行计算。然而,此类作业的很大一部分是从近程数据源读取数据。如果数据访问速度迟缓,I/O 可能会影响端到端的应用程序执行工夫。 ...

February 18, 2022 · 2 min · jiezi

关于gpu:WebGPU-中消失的-VAO

1 VAO 是 OpenGL 技术中提出来的参考: https://www.khronos.org/openg...,_VBOs,_Vertex_and_Fragment_Shaders_(C_/_SDL) 其中有一段文字记录了 VAO 是什么: A Vertex Array Object (VAO) is an object which contains one or more Vertex Buffer Objects and is designed to store the information for a complete rendered object. In our example this is a diamond consisting of four vertices as well as a color for each vertex.VAO 记录的是多个(一组) VBO 的 gl.bindBuffer 和 gl.vertexAttribPointer (WebGL API)的状态,省去切换另一组 VBO 时再次设置绑定关系和读取规定的老本。 外面也形容了 VBO 是什么:一个 VBO 能够是 position,也能够是 uv,甚至能够是 indices;当然,在 WebGL 中,你能够用 1 个 VBO 来存储 position + uv + normal,然而不能和 indices 混用(和 type 无关)。 ...

February 9, 2022 · 2 min · jiezi

关于gpu:恒源云实例关机后如何操作迁移

文章起源 | 恒源云 原文地址 | 迁徙 明天来和大家聊一聊,何为迁徙,如何迁徙! 一、何为迁徙?当实例关机后GPU被占,无奈启动,或者训练过程中想换一台机器显卡,即可关机后进行实例迁徙。迁徙胜利后即可从新开始训练! 二、如何迁徙?实例迁徙注意事项实例迁徙过程不会迁徙实例中的/hy-tmp/目录,并且会革除实例中/hy-tmp/目录下的数据,如果您须要迁徙,则须要把实例中的/hy-tmp/目录中的数据通过OSS命令工具上传至集体数据空间。实例迁徙必须先将实例进行关机操作。如果应用了/hy-nas目录,则在迁徙时也须要抉择具备 “共享存储”的实例。实例迁徙过程中不免费。实例迁徙步骤备份实例中/hy-tmp/目录中的数据,而后通过OSS命令工具上传至集体数据空间。通过恒源云控制台关机实例。点击实例治理进行迁徙。迁徙实现后进入实例,通过OSS命令工具将备份的数据下载到实例/hy-tmp/中。实例迁徙过程演示1.备份实例中/hy-tmp/目录中的数据,而后通过OSS命令工具上传至集体数据空间 #查看/hy-tmp目录中的数据,我这里有5个文件和5个目录root@I87f7d582c00801bcf:~# cd /hy-tmp/root@I87f7d582c00801bcf:/hy-tmp# lsdataset1 dataset2 dataset3 dataset4 dataset5 datasetDir1 datasetDir2 datasetDir3 datasetDir4 datasetDir5#将/hy-tmp目录中的数据打包压缩root@I87f7d582c00801bcf:/hy-tmp# tar zpcf dataset.tar.gz ./*#通过OSS命令将打包好的数据上传至集体数据空间root@I87f7d582c00801bcf:/hy-tmp# oss loginUsername:139xxxxxxxxPassword:**********139xxxxxxxx login successfully!root@I87f7d582c00801bcf:/hy-tmp# oss cp dataset.tar.gz oss://#而后查看集体数据空间是否上传胜利root@I87f7d582c00801bcf:/hy-tmp# oss ls -s -d oss://Listing objects .Object list:oss://dataset.tar.gz #这里为刚上传的数据文件File number is: 12.通过恒源云控制台关机实例 3.点击开始迁徙实例 迁徙的指标实例倡议与以后实例的GPU型号雷同 提醒/hy-tmp/目录被革除,如果您没有备份数据,应先去备份数据,而后进行迁徙。 4.进入实例通过OSS命令工具下载数据到以后实例/hy-tmp/目录中 #进入/hy-tmp/目录,而后登录OSSroot@I87f7d582c00801bcf:~# cd /hy-tmp/t@I87f7d582c00801bcf:/hy-tmp# oss loginUsername:139xxxxxxxxPassword:**********139xxxxxxxx login successfully!#查看OSS集体数据空间root@I87f7d582c00801bcf:/hy-tmp# oss ls -s -d oss://Listing objects .Object list:oss://dataset.tar.gzFile number is: 1#下载集体数据空间中的dataset.tar.gz到实例中的当前目录root@I87f7d582c00801bcf:/hy-tmp# oss cp oss://dataset.tar.gz ./#查看下载的数据root@I87f7d582c00801bcf:/hy-tmp# lsdataset.tar.gz#解压数据到当前目录root@I87f7d582c00801bcf:/hy-tmp# tar zxvf dataset.tar.gz#查看解压后的数据文件root@I87f7d582c00801bcf:/hy-tmp# lsdataset1 dataset2 dataset3 dataset4 dataset5 datasetDir1 datasetDir2 datasetDir3 datasetDir4 datasetDir5 dataset.tar.gz

January 17, 2022 · 1 min · jiezi

关于gpu:高通芯片GPU是否有类似于HSR功能

1)高通芯片GPU是否有相似于HSR的性能2)UGUI上的RT动图会不会导致UI更新3)UI常常迭代外观,如何尽量少改代码4)开发过程中该应用AssetBundle包模式,还是模仿模式? 这是第279篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。 UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员) GPUQ:高通芯片GPU是否有相似于HSR性能?望解答,谢谢。 A:参考如下:测试案例1:小米9点击按钮增加全屏不通明的Quad,应用Standard Shader,离相机越远,RenderQueue越小。 后果:从FPS上看,到100层,帧率也都是60帧。阐明小米9上的确有相似于HSR的性能,就是不通明对象不须要手动调整渲染队列从而让凑近相机的先渲染。 测试案例2:小米5X点击按钮增加全屏不通明的Quad,应用Standard Shader,离相机越远,RenderQueue越小。 后果:从FPS上看,1层的时候43帧,2层就掉到25帧,3层掉到17帧。阐明小米5X上没有相似于HSR的性能。 测试案例3:小米5X点击按钮增加全屏不通明的Quad,应用Standard Shader,离相机越远,不调整RenderQueue。 后果:从FPS上看,1层的时候43帧,5层的时候仍旧43帧。不调整RenderQueue后,因为Unity的不通明是依照由近到远绘制的,因为Early-Z的关系,导致被遮挡的物体不会进行Fragment Shader计算了,所以帧率比较稳定。 总结:对于像地形这样的大面积且Shader复杂度通常比拟高的对象,还是须要调整渲染队列到比拟靠后的,因为对于低端机型,并没有HSR这样的性能。所以能够通过调整地形的渲染队列靠后,从而让Early-Z对于大地形失效,从而缩小地形的渲染像素。 对于高端机型,如小米9,因为其GPU硬件反对HSR性能,所以对于不通明物体来说,渲染队列没有关系。 总体来说,还是倡议调整大地形的渲染队列,对低端机型有益处。 感激小苗子@UWA问答社区提供了答复 UGUIQ:在UGUI组件上应用RenderTexture动图会不会导致UI更新? A:对于这个问题进行了简略的试验:试验设置了一个相机拍摄不停在静止两个物体,而后失去的RenderTexture赋给UGUI上的100个RawImage。在真机上运行,此时UI更新耗时简直为0。 实践上,这些RawImage的顶点属性没有发生变化,的确不会导致UI更新。 感激Faust@UWA问答社区提供了答复 UGUIQ:问题:之前的我的项目是用Lua做UI开发的。一个ToLua,一个XLua。策动或美术常常要调曾经做好的UI的外观,个别须要变布局或节点层级。最早,代码里拜访某个节点都是用GameObject.Find找到节点,层级关系一变,就须要程序配合改,很麻烦。怎么做到调整UI,不必改代码呢? 思路:想到一个命名标准计划:程序拿到UI的Prefab绑上UI关联Lua的脚本后,把所有程序须要拜访的节点,改名成rd_xxxxx,脚本管制下的子节点rd_结尾的不能反复,如果有列表的子节点,下面再挂一个辅助的脚本(比方UItemHelper)。 Lua第一次加载时遍历所有节点,缓存所有rd_xxx的节点关系到脚本里(Lua里),这样,Lua代码里间接用self.rd_xxxxx就能失去对象,也不怕Prefab层级调整,也不必屡次调用GameObject.Find。 规定其余人员调整UI Prefab时,不能改掉rd_xxxxx,如果须要改则要程序配合。 参考代码:ToLua我的项目的一个参考批改: 关联Lua脚本对象的LuaXXX.cs里(比方叫LuaMono.cs)初始化,减少: …… if (m_params.Count == 0) { //lua关联对象主动收集 SetRDObjectRef(luaClass, this.gameObject, true); } else { //节点整顿期间的兼容(复用UI也走这里,防止重复收集) foreach (ParamItem pi in m_params) { luaClass[pi.name] = pi.value; } }…… /// <summary> /// 把节点下所有节点查一下,如果名字是"rd_"结尾的则是程序须要 /// </summary> /// <param name="luaClass"></param> /// <param name="go"></param> void SetRDObjectRef(LuaTable luaClass,GameObject go,bool is_root = false) { if(go) { if(MyExtensions.StringStartsWith(go.name,"rd_")) {#if UNITY_EDITOR //查看是否有反复 if(luaClass[go.name] != null && !luaClass[go.name].Equals(null)) { GameFramework.Log.Error("{0} LuaClass already have GO key:{1} {2}", LuaScript, go.name, luaClass[go.name]); }#endif luaClass[go.name] = go; ParamItem item = new ParamItem(); item.name = go.name; item.value = go; m_params.Add(item); } if(is_root || (go.GetComponent<LuaMono>() == null && go.GetComponent<UItemHelper>() == null)) { //遍历所有子节点 for(int i=0;i<go.transform.childCount;++i) { SetRDObjectRef(luaClass, go.transform.GetChild(i).gameObject); } } } }UItemHelper.cs ...

December 20, 2021 · 3 min · jiezi

关于gpu:系统硬件英伟达安培卡-vs-老推理卡硬

 欢送关注我的公众号 [极智视界],回复001获取Google编程标准 O_o >_<  o_O O_o ~_~ o_O 本文分享一下英伟达安培卡 vs 老推理卡硬件参数比照。   其中安培卡次要包含 A100、A40、A30、A16、A10、A2,老推理卡次要包含 T4、P4、P40、V100,本文次要用于从老推理卡迁徙到新安培卡时应该会用到的参数比照调研,属于人肉汇总型,若数据有误,欢送斧正。   咱们都晓得,推理卡的倒退速度很快,具备里程碑意义的是英伟达于 2018年9月3日公布了革命性的专为人工智能设计的 GPU 高性能推理产品 Tesla T4,特地是其中的 Turing Tensor Core 矩阵运算单元;过后除了这个新的芯片之外,英伟达还推出了一款专用于减速深度学习推理的框架,也就是当初大家熟知的 TensorRT,这两者的配合,在前面很长一段时间给深度学习的部署插上了一双翱翔的翅膀,也催生了很多的深度学习落地我的项目。以至当初国产 GPGPU 的守业之火,在推理板卡端大都会对标 T4。而英伟达总是快人一步两步三步,当初安培卡来了,带着更大的带宽、更大的显存、更强的算力、更强的编解码能力向咱们走来,所以咱们有必要理解一些安培卡的个性及参数。历史总在提高,迁徙永不进行。都说到这个份上了,那就来张图渲染一下气氛。 好了,话不多说,上才艺:  以上给出了数据,我就不剖析了,有须要本人比照、查阅。 本文属于人肉汇总型,如有误,肯定要帮我指出哈,心愿我的分享能对你的学习有一点帮忙。 【公众号传送】《【零碎硬件】英伟达安培卡 vs 老推理卡硬件参数比照》

December 4, 2021 · 1 min · jiezi

关于gpu:经验分享GPU-CUDA-使用-memory-padding-避免-bank-conflict

 欢送关注我的公众号 [极智视界],回复001获取Google编程标准 O_o >_<  o_O O_o ~_~ o_O 本文聊一下如何在 GPU CUDA 编程里应用 memory padding 来防止 bank conflict。 1、Shared memory Shared memory 是一块很小、低提早的 on-chip memory,比 global memory 快上百倍,能够把 shared memory 当作可编程的 cache,次要作用有: An intra-block thread communication channel:线程间的交换通道;A program-managed cache for global memory data:可编程的 cache;Scratch pad memory for transforming data to improve global memory access patterns:通过缓存数据缩小 glabal memory 访存次数。   能够动静或者动态的调配 shared memory,其申明既能够在 kernel 外部也能够作为全局变量,能够通过以下关键字进行申明: __shared__ /// 标识符__shared__ float tile[_y][_x]; /// 动态的申明了一个2D浮点型数组 /// kernel 内申明extern __shared__ int tile[];kernel<<<grid, block, isize * sizeof(int)>>>(...); 为了取得高带宽,shared memory 被分成 32 个等大小的内存卡,对应 warp 中的 thread,他们能够同时被拜访。 ...

November 22, 2021 · 2 min · jiezi

关于gpu:如何用-GPU硬件层加速优化Android系统的游戏流畅度

作为一款VR实时操作游戏App,咱们须要依据重力感应零碎,实时监控手机的角度,并渲染出相应地位的VR图像,因而在不同 Android 设施之间,因为应用的芯片组和不同架构的GPU,游戏性能会因而受到影响。举例来说:游戏在 Galaxy S20+ 上可能以 60fps 的速度渲染,但它在HUAWEI P50 Pro上的体现可能与前者天壤之别。 因为新版本的手机具备良好的配置,而游戏须要思考基于底层硬件的运行状况。 如果玩家遇到帧速率降落或加载工夫变慢,他们很快就会对游戏失去趣味。如果游戏耗尽电池电量或设施过热,咱们也会散失处于长途旅行中的游戏玩家。如果提前预渲染不必要的游戏素材,会大大增加游戏的启动工夫,导致玩家失去急躁。如果帧率和手机不能适配,在运行时会因为手机自我爱护机制造成闪退,带来极差的游戏体验。 基于此,咱们须要对代码进行优化以适配市场上不同手机的不同帧率运行。 所遇到的挑战首先咱们应用Streamline 获取在 Android 设施上运行的游戏的配置文件,在运行测试场景时将 CPU 和 GPU性能计数器流动可视化,以精确理解设施解决 CPU 和 GPU 工作负载,从而去定位帧速率降落的次要问题。 以下的帧率剖析图表显示了应用程序如何随工夫运行。 在上面的图中,咱们能够看到执行引擎周期与 FPS 降落之间的相关性。显然GPU 正忙于算术运算,并且着色器可能过于简单。 为了测试在不同设施中的帧率状况,应用友盟+U-APM测试不同机型上的卡顿情况,发现在onSurfaceCreated函数中进行渲染时呈现卡顿, 应证了前文的剖析,能够确定GPU是在算数运算过程中产生了卡顿: 因为不同设施有不同的性能预期,所以须要为每个设施设置本人的性能估算。例如,已知设施中 GPU 的最高频率,并且提供指标帧速率,则能够计算每帧 GPU 老本的相对限度。 数学公式: $ 每帧 GPU 老本 = GPU 最高频率 / 指标帧率 $ CPU 到 GPU 的调度存在肯定的束缚,因为调度上存在限度所以咱们无奈达到目标帧率。 另外,因为 CPU-GPU 接口上的工作负载序列化,渲染过程是异步进行的。CPU 将新的渲染工作放入队列,稍后由 GPU 解决。 数据资源问题CPU 管制渲染过程并且实时提供最新的数据,例如每一帧的变换和灯光地位。然而,GPU 解决是异步的。这意味着数据资源会被排队的命令援用,并在命令流中停留一段时间。而程序中的OpenGL ES 须要渲染以反映进行绘制调用时资源的状态,因而在援用它们的 GPU 工作负载实现之前无奈批改资源。 调试过程咱们曾做出尝试,对援用资源进行代码上的编辑优化,然而当咱们尝试批改这部分内容时,会触发该局部的新正本的创立。这将可能肯定水平上实现咱们的指标,然而会产生大量的 CPU 开销。 ...

October 26, 2021 · 2 min · jiezi

关于gpu:优优工场云原生的GPU虚拟化AI平台产品-XPU-通过亚马逊-AWS-Marketplace对外发布

AWS Marketplace是寰球规模最大最胜利的私有云生态产品和服务目录,它使客户可能轻松查找、测试、部署和治理他们在AWS寰球范畴内以后20个区域(AWS 中国包含北京和宁夏两个区域)运行零碎所须要的第三方软件和服务。借助AWS Marketplace,客户能够从这一应用软件商店查找和比拟软件产品,并在登录其AWS账户后,几分钟内疾速部署和应用预配置的软件产品。客户能够在AWS Marketplace寰球官方网站(https://aws.amazon.com/market...)或 AWS Marketplace 中国官方网站(https://awsmarketplace.amazon...)。 优优工场(YOYOWORKS)作为Amazon AWS寰球和亚马逊云科技(中国)的官网合作伙伴,帮忙客户轻松实现的AI 计算云原生的GPU虚拟化计划。XPU是优优工场(YOYOWORKS)推出的容器GPU虚拟化产品。XPU核心思想是将GPU在内核层进行切分,向上模拟出对立的XPU设施供容器应用,即多个容器共享一张GPU卡。XPU实现了一套框架可能很好的屏蔽异构GPU和利用(TensorFlow,PyTorch等)之间的耦合,对GPU进行故障隔离,显存隔离,算力隔离,从而实现业务的平安隔离,进步GPU硬件资源的利用率并升高应用老本。XPU 云原生AI平台解决方案,次要劣势如下: XPU采纳零侵入式架构设计,通过kernel module,services及container runtime为容器提供虚构的GPU设施,在保障性能的前提下隔离显存和算力,为充分利用GPU硬件资源进行训练和推理提供无效保障。 高性能采纳本地应用GPU计算资源的架构,有人造的性能劣势,相比于物理GPU,性能损耗简直为零。反对将GPU切片为任意大小的XPU,从而容许多AI负载并行运行,进步物理GPU利用率。进步GPU综合利用率多达3-10倍,1张卡相当于起到N张卡的成果,真正做到低廉算力平民化。 安全性完满反对GPU单卡和多卡的算力隔离,显存隔离及故障隔离。 兼容性零侵入设计: 最大的限度保障向后和向前兼容。用户零开销在 XPU 平台上经营现有AI利用,无缝兼容已有NGC等容器镜像。硬件兼容性: 完满反对包含NVIDIA Pascal及当前架构的系列 GPU(GeForce,Quadro/RTX,Tesla);反对裸金属和虚拟环境,反对物理GPU和vGPU。架构兼容性:依靠实现在内核模块层的通用接口能力,XPU 完满反对CUDA8.0 及当前所有版本的框架和利用。生态兼容性:兼容业界规范的Kubernetes和NVIDIA Docker产品和计划。AWS Marketplace 寰球网站和AWS Marketplace中国网站是用户应用 AWS 云产品和服务的对立入口。 上面我一 AWS Marketplace 寰球为例介绍用户应用优优工场 XPU 产品和办法(AWS Marketplace中国的办法十分相似,请通过其拜访)AWS Marketplace官网反对英文关键词搜寻。以下咱们就向您展现如何通过AWS Marketplace官方网站订阅以及应用XPU。第一步:通过AWS Marketplace官方网站搜寻框,搜寻“yoyoworks”或者“XPU”,点击产品并抉择右侧“Continue to Subscribe”XPU下拉查看详细信息:第二步:进入下一页浏览相干内容,以及条款阐明后,点击“Continue to Configuration”按钮。第三步:点击“Continue to Configuration”后进入产品配置软件步骤,您能够按需抉择Delivery Method、Software Version、Region三个选项,而后点击“Continue to Launch”按钮第四步:在您承受软件相干条款确认订阅并确定区域和软件版本后,您进入“Launch this software”的界面,在此界面中您能够抉择通过网站或者Amazon Elastic Compute Cloud (Amazon EC2)控制台启动Amazon零碎映像(AMI)产品。“Launch from Website”选项应用软件供应商举荐的软件配置帮忙客户通过几次点击就能够疾速启动一个实例。如下图所示,在软件启动页面,您能够分明看到“Launch from Website”选项。在您实现一些根本设置后,例如VPC、平安组、密钥对和Amazon EC2实例类型,您就能够间接启动软件。如果须要更多的配置选项,您仍能够抉择通过Amazon EC2控制台启动产品。所有在AWS Marketplace下面的产品都曾经通过品质和平安验证并在 AWS基础设施上预配置了疾速启动性能。集中化软件治理此次官网上线,AWS Marketplace还配合推出了AWS Marketplace订阅控制台以帮忙您查看和治理所有您在AWS Marketplace下面的订阅。在这个控制台中,您能够查看每个产品的Amazon EC2实例状态,启动一个新实例,或者勾销您的软件订阅。要拜访这个控制台,您能够在登陆后,在网站的右上角您的用户名的下拉菜单中抉择您的AWS Marketplace软件选项,或者您能够在Amazon EC2控制台的左侧查找服务中间接输出AWS Marketplace。如下图所示,AWS Marketplace订阅控制台蕴含所有您订阅过的产品列表,点击每项产品,你还能够看到产品概述以及相干治理选项。例如,您能够查看某一个产品正在运行的所有实例信息。消息来源:优优工场(YOYOWORKS)

October 21, 2021 · 1 min · jiezi

关于gpu:GPU虚拟化现状及新技术方案XPU

AI行业现状随着我国“新基建”的启动,AI(Artificial Intelligence,人工智能)和5G、大数据中心、工业互联网等一起形成了新基建的7大外围冲破畛域。AI将渗透到各个行业,变得越来越“基础设施化”。 德勤在2020上半年公布的《寰球人工智能倒退白皮书》预测数据表明:2025年世界人工智能市场将超过6万亿美元;中国人工智能外围产业规模到2020年将增长至1600亿元,带动相干产业规模超过一万亿元。 作为AI市场中的重要组成,以GPU、FPGA等为主的AI加速器市场倒退也随之水涨船高。2020年5月11日IDC公布的《人工智能基础架构市场(2019下半年)跟踪》报告表明,到2024年中国GPU服务器市场规模将达到64亿美元。 GPU虚拟化背景目前来看,绝大多数公司应用的是英伟达(NVIDIA)的公司的计算卡,所以上面次要介绍基于NVIDIA的技术现状。 从用户角度,GPU虚拟化实现能够分为2种类型: 硬件层面次要是NVIDIA自身的虚拟化计划:NVIDIA GRID以及NVIDIA MPS。 NVIDIA GRID这个技术目前来看次要针对的是虚拟机平台,在技术个性方面也有明确写出某些性能不反对,其次NVIDIA GRID技术须要购买NVIDIA公司的软件受权能力应用,这个受权费相当低廉。 NVIDIA MPS技术是NVIDIA对GPU共享的最早的一种反对模式,通过MPS server和MPS client就能够让多个GPU工作共享GPU的计算能力。对于容器平台,这种共享GPU的形式是一种可行性的抉择。不过,这种指令代理技术有一个弊病,就是如果MPS Server挂掉或者其余MPS client端造成的非正常性退出,会导致处于同一个MPS server下的所有MPS client都受到影响,这种影响对于提供共享服务的平台来说是灾难性的,所以在生产环境简直没有应用该计划。 NVIDIA以上2种的共享形式都不反对依据用户申请的申请对GPU计算能力的工夫分片个性,GPU的应用是抢占式应用,无奈做到资源的隔离。 软件层面该层面实现GPU虚拟化,又分为两种次要实现形式: 实现在NVIDIA CUDA Library API之上,它通过劫持对CUDA API的调用来做到GPU的虚拟化,此类计划毛病是兼容性依赖于厂商,每个版本须要对齐,同时须要从新编译AI利用,对于用户来说应用老本较高。实现在内核NVIDIA Driver之上。采纳零侵入式的设计,应用上对用户能够做到无感知,对于CUDA的版本依赖较小。但该计划整体实现难度较大,须要对Linux内核和GPU架构的原理和实现有深刻了解。XPU计划XPU是优优工场(YOYOWORKS)推出的容器GPU虚拟化产品。XPU正是采纳前文所述的第二种实现形式,核心思想是将GPU在内核层进行切分,向上模拟出对立的XPU设施供容器应用,即多个容器共享一张GPU卡。XPU实现了一套框架可能很好的屏蔽异构GPU和利用(TensorFlow,PyTorch等)之间的耦合,对GPU进行故障隔离,显存隔离,算力隔离,从而实现业务的平安隔离,进步GPU硬件资源的利用率并升高应用老本。 XPU特点XPU采纳零侵入式架构设计,通过kernel module,services及container runtime为容器提供虚构的GPU设施,在保障性能的前提下隔离显存和算力,为充分利用GPU硬件资源进行训练和推理提供无效保障。 高性能采纳本地应用GPU计算资源的架构,有人造的性能劣势,相比于物理GPU,性能损耗简直为零。反对将GPU切片为任意大小的XPU,从而容许多AI负载并行运行,进步物理GPU利用率。进步GPU综合利用率多达3-10倍,1张卡相当于起到N张卡的成果,真正做到低廉算力平民化。 安全性完满反对GPU单卡和多卡的算力隔离,显存隔离及故障隔离。 兼容性零侵入设计: 最大的限度保障向后和向前兼容。用户零开销在 XPU 平台上经营现有AI利用,无缝兼容已有NGC等容器镜像。硬件兼容性: 完满反对包含NVIDIA Pascal及当前架构的系列 GPU(GeForce,Quadro/RTX,Tesla);反对裸金属和虚拟环境,反对物理GPU和vGPU。架构兼容性:依靠实现在内核模块层的通用接口能力,XPU 完满反对CUDA8.0 及当前所有版本的框架和利用。生态兼容性:兼容业界规范的Kubernetes和NVIDIA Docker产品和计划。 软件架构一个典型的XPU部署架构,次要蕴含两大部分: 零碎相干局部及容器相干局部性能组件。XPU通过将物理GPU等设施进行划分和隔离,向上提供切分后的算力,无效进步异构计算资源的利用率。其逻辑结构图如下所示:零碎相干局部包含:XPU toolkit,XPU services & XPU driver module,其中XPU driver module为内核驱动,给容器提供虚构的GPU设施,提供有QoS保障的显存和算力。 容器相干局部为XPU container runtime,作为Docker container的对应工具,次要实现将XPU设施映射给容器,让容器内的可能辨认通过虚拟化的GPU设施,从而实现在容器内运行GPU相干负载。 部署状态XPU的各个组件,反对间接部署在裸金属服务器上,即装置操作系统后,间接以Binary模式部署,也反对虚拟化部署。XPU具备适配多种Linux操作系统和云平台的能力,因而,XPU具备多样化的部署模式。 XPU反对CentOS、Ubuntu等支流Linux发行版本,同时反对基于KVM的虚拟机云平台和基于Docker的容器云平台。尤其是反对原生容器,并实现了和Kubernetes的平滑对接。 XPU与容器的集成XPU采纳0侵入部署形式,反对原生容器,即可运行AI利用,大大简化了客户算法工程师运维、治理AI基础架构的工作。在NVIDIA Docker的根底上,通过实现一套XPU container runtime,实现XPU在容器内的创立,删除以及监控等性能。用户通过设置Docker环境变量的形式,用于为容器申请不同规格的XPU设施,XPU container runtime将虚构进去的XPU,通过Docker裸露给容器内的程序应用。在K8S集群中,该组件用于接管K8S调度Pod设置的环境变量来负责创立相应规格的XPU容器。 XPU与Kubernetes集成利用K8S的device plugin及extended resources机制,将XPU集成到K8S集群中。 K8S device plugin机制如下图所示:XPU为Kubernetes提供两个插件,实现与K8S的集成对接。集成后,系统管理员只须要在K8S中,即可实现对GPU资源的集中配置和调度治理。并且,容许系统管理员通过繁多接口调度全副数据中心资源,实现SDDC(Software Defined Data Center,软件定义的数据中心),这样就简化了运维工作。 ...

October 21, 2021 · 1 min · jiezi

关于gpu:WebGPU-补充篇之-Uniform

系列博客总目录:https://segmentfault.com/a/1190000040716735 参考自 WebGPU 8. Resource Binding(资源绑定) WGSL 5.1. Module Scope Variables(全局对象) WGSL 9.3.2. Resource interface(资源接口) WebGPU 中的 Uniform接口预览: GPUBindGroupGPUBindGroupLayoutGPUBufferGPUBufferUsageGPUSamplerGPUTextureWebGPU 中,uniform 资源的传递是通过 UBO 实现的,会用到 GPUBindGroup、GPUBindGroupLaayout 来治理一组绑在一块的资源,正如 GPUBindGroup 的形容一样所说: A GPUBindGroup defines a set of resources to be bound together in a group and how the resources are used in shader stages.GPUBindGroup 治理了一组绑在一块的资源,并决定了在着色器阶段如何应用。 这里所谓的资源,有如下几种: 一般常量数字、类型数组纹理采样器1 如何创立 Uniform 资源① 一般常量数字/类型数组const uniformBuffer = device.createBuffer({ size: 16, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST})// ---- 写入const color = new Float32Array([0, .5, 0, 1])device.queue.writeBuffer( uniformBuffer, // 传给谁 0, color.buffer, // 传递 ArrayBuffer color.byteOffset, // 从哪里开始 color.byteLength // 取多长)② 纹理对象 GPUTextureconst texture = device.createTexture({ size: [256, 256], format: "rgba8unorm", // 8 bit RGBA, un normal usage: GPUTextureUsage.SAMPLED | GPUTextureUsage.COPY_DST})将图片数据写入纹理另开一坑写,在这里提一下,是 GPUQueue.prototype.copyImageBitmapToTexture 办法 ...

September 22, 2021 · 3 min · jiezi

关于gpu:WebGPU-补充篇之-VertexBuffer

系列博客总目录:https://segmentfault.com/a/1190000040716735 VertexBuffer 的创立VertexBuffer 的本体就是一个 GPUBuffer,次要就是指定其 usage,以及在创立 ShaderModule 时配置好 VertexAttribute。 顶点属性,所谓的 VertexAttribute,在 VertexBuffer 中的排列是顶点程序优先。比方在某个 VertexBuffer 中,一个顶点领有 f32 二维坐标属性、f32 RGBA色彩属性,那么它大略长这样: 依次排列↓ 顶点1(24 bytes) 坐标x 坐标y R重量 G重量 B重量 A重量↓ 顶点2(24 bytes) 坐标x 坐标y R重量 G重量 B重量 A重量↓ ...上代码: const vbodata = new Float32Array([ // 坐标 xy // 色彩 RGBA -0.5, 0.0, 1.0, 0.0, 0.0, 1.0, // ← 顶点 1 0.0, 0.5, 0.0, 1.0, 0.0, 1.0, // ← 顶点 2 0.5, 0.0, 0.0, 0.0, 1.0, 1.0 // ← 顶点 3])const vbo = device.createBuffer({ size: vbodata.byteLength, usage: GPUBufferUsage.VERTEX, mappedAtCreation: true // 创立时立即映射,让 CPU 端能读写数据})// 实例化一个新的 Float32Array,并获取 GPUBuffer 的映射范畴,传入下面的数据,这样 ArrayBuffer 就有值了new Float32Array(vbo.getMappedRange()).set(vbodata)vbo.unmap() // 肯定要解除映射,GPU 能力读写// ...const vsShaderModule = device.createShaderModule({ code: vsSource, entryPoint: 'main', buffers: [ { shaderLocation: 0, offset: 0, format: 'float32x2' }, { shaderLocation: 1, offset: 2 * vbodata.BYTES_PER_ELEMENT, format: 'float32x4' } ]})WGSL 端承受输出与 GLSL 略有不同,当新语法学习即可。 ...

September 22, 2021 · 1 min · jiezi

关于gpu:WebGPU-规范篇-11-Canvas上下文

系列博客总目录:https://segmentfault.com/a/1190000040716735 对应标准中 Canvas Rendering 一章 1 GPUCanvasContextGPUCanvasContext 类型,其对象被称作 WebGPU 上下文。 它的作用就是让 HTML 上的 Canvas 元素,作为 WebGPU 中的一个纹理,与 WebGPU 进行渲染互动。 它的获取办法同 WebGLRenderingContext: const canvas = document.createElement('canvas')const context = canvas.getContext('webgpu')然而它与 WebGLRenderingContext 最大的不同是,它只负责与 Canvas 的沟通,在 WebGPU 端简略地扮演着 Canvas 与 WebGPU 的沟通桥梁,让 Canvas 作为一个纹理对象;而后者除了上述职责外,还包含创立 WebGL 子对象,绑定、编译着色器、触发渲染等等等等。 它的定义如下: [Exposed=(Window, DedicatedWorker), SecureContext]interface GPUCanvasContext { readonly attribute (HTMLCanvasElement or OffscreenCanvas) canvas; undefined configure(GPUCanvasConfiguration configuration); undefined unconfigure(); GPUTextureFormat getPreferredFormat(GPUAdapter adapter); GPUTexture getCurrentTexture();};canvas 属性,你能够再获取 Canvas 元素;configure 办法,用于配置 Canvas 的上下文,通知 WebGPU 这个 Canvas 能表演一个什么样的纹理对象;它接管一个对象参数,它的类型是 GPUCanvasConfiguration;unconfigure 办法是 configure 办法的副作用,即勾销配置,并移除配置时产生的纹理对象;getPrefferedFormat 办法接管一个适配器对象,返回一个适合适配器对象的纹理格局;getCurrentTexture 办法返回 Canvas 所表演的那个 GPUTexture 对象,须要留神的是,每一帧都要应用这个办法获取对应的 GPUTexture(如果是渲染管线用到了色彩附件来输入的话)。2 GPUCanvasConfiguration 类型配置 Canvas 时的对象参数的类型。 ...

September 22, 2021 · 2 min · jiezi

关于gpu:WebGPU-规范篇-10-指令编码与队列

系列博客总目录:https://segmentfault.com/a/1190000040716735 介绍原文 11 章、局部 12 章和 17 章的内容。 1 指令缓存:GPUCommandBuffer指令缓存(又译作命令缓冲区),GPUCommandBuffer,是一个能当时存储 GPU 指令的存储容器。它能够提交给 [GPUQueue]() 执行。每个 GPU 指令代表一个要被 GPU 执行的工作,能够是绘图、设置数据、复制资源等。 [Exposed=(Window, DedicatedWorker), SecureContext]interface GPUCommandBuffer { readonly attribute Promise<double> executionTime;};GPUCommandBuffer includes GPUObjectBase;它有一个 resolve 值是 double 数值的 Promise,其 resolve 值是指令缓存上的预存 GPU 指令的执行工夫。 如果在创立指令编码器时,其参数对象的 measureExecutionTime 若为 true 才无效,若为 false,这个 Promise 会 reject,你能够捕捉一个 OperationError 谬误。 如何创立调用 指令编码器 的 finish 办法,即可获取指令缓存对象。它个别用来提交给队列: device.queue.submit([ commandEncoder.finish()])2 指令编码器:GPUCommandEncoder用处:①创立通道编码器;②复制 GPUBuffer/GPUTexture;③调试、查问等其余性能(略) 本文次要介绍罕用的 ①、② 两种性能。 留神,指令编码器用完并提交给队列后,它就变得不再可用。 扩大浏览:Metal 中的指令编码器它的 WebIDL 定义如下: [Exposed=(Window, DedicatedWorker), SecureContext]interface GPUCommandEncoder { GPURenderPassEncoder beginRenderPass(GPURenderPassDescriptor descriptor); GPUComputePassEncoder beginComputePass(optional GPUComputePassDescriptor descriptor = {}); undefined copyBufferToBuffer( GPUBuffer source, GPUSize64 sourceOffset, GPUBuffer destination, GPUSize64 destinationOffset, GPUSize64 size); undefined copyBufferToTexture( GPUImageCopyBuffer source, GPUImageCopyTexture destination, GPUExtent3D copySize); undefined copyTextureToBuffer( GPUImageCopyTexture source, GPUImageCopyBuffer destination, GPUExtent3D copySize); undefined copyTextureToTexture( GPUImageCopyTexture source, GPUImageCopyTexture destination, GPUExtent3D copySize); undefined pushDebugGroup(USVString groupLabel); undefined popDebugGroup(); undefined insertDebugMarker(USVString markerLabel); undefined writeTimestamp(GPUQuerySet querySet, GPUSize32 queryIndex); undefined resolveQuerySet( GPUQuerySet querySet, GPUSize32 firstQuery, GPUSize32 queryCount, GPUBuffer destination, GPUSize64 destinationOffset); GPUCommandBuffer finish(optional GPUCommandBufferDescriptor descriptor = {});};GPUCommandEncoder includes GPUObjectBase;2.1 如何创立由设施对象的 createCommandEncoder 办法创立 ...

September 22, 2021 · 3 min · jiezi

关于gpu:WebGPU-规范篇-09-通道

系列博客总目录:https://segmentfault.com/a/1190000040716735 Pass,通道。 通道容许应用多个 Pipelines。 Pipelines 容许切换不同的资源(bindGroup、VBO)。 通道在设置好 Pipelines (setPipeline)和资源绑定(setVertexBuffer、setBindGroup)、绘制命令(draw)触发之后,要进行编码(endPass),编码实现即可通知指令编码器实现一个通道编码器的编码,并将指令编码器提交到渲染队列。 通道有两种 GPUProgrammablePassEncoder├ GPURenderPassEncoder└ GPUComputePassEncoder本文介绍原文 13、14、15 章的局部内容。 可编程通道编码器:GPUProgrammablePassEncoder简称为通道编码器,它有两种子类型,渲染通道编码器 GPURenderPassEncoder 和计算通道编码器 GPUComputePassEncoder。 通道编码器的次要性能就是将不同的 pipeline 和绑定组依据理论须要排列组合在一起,实现一帧残缺的渲染或一次残缺的计算。 通道编码器的次要性能是,设置(切换)绑定组、VBO和设置(切换)管线。除此之外,还能够进行调试,然而调试并不作为此文关注的内容,有趣味的读者能够自行查阅文档。 创立通道编码器由某个指令编码器创立,具体见下文两种编码器的创立大节。 设置绑定组 setBindGroup此办法是每一种具体的通道编码器都具备的性能,有两种重载 setBindGroup(index, bindGroup, dynamicOffsets)setBindGroup(index, bindGroup, dynamicOffsetsData, dynamicOffsetsDataStart, dynamicOffsetsDataLength)其目标都是向位于 index 地位的 bindGroupLayout 传递 GPUBindGroup 对象 bindGroup,前面的动静偏移值、动静偏移数据等高级用法见官网文档。 通常,只用到后面两个参数即可。 1 渲染通道编码器1.1 创立应用指令编码器(GPUCommandEncoder)的 beginRenderPass 办法即可创立一个渲染通道编码器: const renderPassEncoder = commandEncoder.beginRenderPass({ /* {}: GPURenderPassDescriptor */})参数对象是 GPURenderPassDescriptor 类型的,它不能是空且必须传递。 dictionary GPURenderPassDescriptor : GPUObjectDescriptorBase { required sequence<GPURenderPassColorAttachment> colorAttachments; GPURenderPassDepthStencilAttachment depthStencilAttachment; GPUQuerySet occlusionQuerySet;};它有一个必选的数组参数 colorAttachments,数组元素类型是 GPURenderPassColorAttachment,示意其色彩附件,此数组长度≤8且>0;若为 0,那么深度模板附件参数 depthStencilAttachment 不能为 null。 ...

September 22, 2021 · 3 min · jiezi

关于gpu:WebGPU-规范篇-08-管线

系列博客总目录:https://segmentfault.com/a/1190000040716735 https://www.w3.org/TR/webgpu/... GPUPipelineBase├ GPURenderPipeline└ GPUComputePipeline管线管线代表某种计算的过程,在 WebGPU 中,有渲染管线和计算管线两种。 这一过程须要用到绑定组、VBO、着色器等对象或资源,而后最终能输入一些内容,譬如渲染管线输入色彩值(以色彩附件模式),计算管线输入到其指定的中央,此处就不列举太具体了。 管线在结构上看,由一系列 可编程阶段 和一些固定的状态组合而成。 留神,依据操作系统、显卡驱动不同,有局部固定的状态会编译到着色器代码中,因而将他们组合成一个管线对象里是不错的抉择。两种管线对象均可由设施对象创立。 在对应的通道编码器中,能够切换管线以进行不同的计算过程。 1 根底管线dictionary GPUPipelineDescriptorBase : GPUObjectDescriptorBase { GPUPipelineLayout layout;};interface mixin GPUPipelineBase { GPUBindGroupLayout getBindGroupLayout(unsigned long index);};两种管线在创立时均须要参数对象,参数对象各自有不同的具体类型,但均继承自这里的 GPUPipelineDescriptorBase 类型。 两种管线也均继承自根底管线类型 GPUPipelineBase。 1.1 根底管线的 getBindGroupLayout 办法每个管线对象均有此办法,它承受一个 unsigned long 类型的数字作为参数,返回一个管线布局对象中对应地位的绑定组布局对象。 译者注:若创立管线时没有传递布局对象,这个办法会依据着色器代码内的 group 个性主动结构出绑定组布局对象。有一个须要留神的,那就是这个数字参数要小于设施限度列表中的 maxBindGroups 值。 1.2 默认管线布局如果创立一个管线时,没有设置管线布局对象,那么会主动在外部创立一个默认的布局对象。这个过程在文档中尚未详尽解释,只说了是一种“反射”技术,而后一步一步结构进去。 具体过程要参考文档中 WebGPU Spec 10.1.1 默认管线布局 的创立步骤。 默认的管线布局对象,其 bindGroupLayouts 数组是空数组。 1.3 可编程阶段:GPUProgrammableStage在创立管线对象时,须要用到参数对象,这个参数对象有不同可编程阶段能够设置,其中每一个阶段都是一个 GPUProgrammableStage 对象。这一点在下文管线创立局部会具体列举进去。 GPUProgrammableStage 类型的对象组织起了管线中具体的一个阶段用到什么 GPUShaderModule,其 WGSL 入口点函数名是什么,须要传递哪些常量值这些信息。 会有具体介绍。 dictionary GPUProgrammableStage { required GPUShaderModule module; required USVString entryPoint; record<USVString, GPUPipelineConstantValue> constants;};typedef double GPUPipelineConstantValue;每一个这样的对象,有两个必选参数: ...

September 22, 2021 · 8 min · jiezi

关于gpu:WebGPU-规范篇-07-着色器模块

系列博客总目录:https://segmentfault.com/a/1190000040716735 对应文档中的 https://www.w3.org/TR/webgpu/... 对于着色器模块的创立,与 WebGL 中的 Shader 有改良,提供了编译信息。 GPUShaderModule 接口这个接口是能够序列化的,意味着能够传递其援用进行多线程编程。 它是不可变对象(只读),所以不存在抵触的问题。 [Exposed=(Window, DedicatedWorker), SecureContext]interface GPUShaderModule { Promise<GPUCompilationInfo> compilationInfo();};GPUShaderModule includes GPUObjectBase;创立创立一个 GPUShaderModule,须要调用 device.createShaderModule 办法。 此办法承受一个 GPUShaderModuleDescriptor 接口类型的对象,它不能为空对象,也不能不传递。 dictionary GPUShaderModuleDescriptor : GPUObjectDescriptorBase { required USVString code; object sourceMap;};如果传递了 sourceMap,即可应用一些工具来调试。这个是可选的。 例子: const vsModule = device.createShaderModule({ code: ` struct PositionColorInput { [[location(0)]] in_position_2d: vec2<f32>; [[location(1)]] in_color_rgba: vec4<f32>; }; struct PositionColorOutput { [[builtin(position)]] coords_output: vec4<f32>; [[location(0)]] color_output: vec4<f32>; }; // 能够写正文 [[stage(vertex)]] fn main(input: PositionColorInput) -> PositionColorOutput { var output: PositionColorOutput; output.color_output = input.in_color_rgba; output.coords_output = vec4<f32>(input.in_position_2d, 0.0, 1.0); return output; } `})const fsModule = device.createShaderModule({ code: ` [[stage(fragment)]] fn main([[location(0)]] in_color: vec4<f32>) -> [[location(0)]] vec4<f32> { return in_color; }`,})获取编译信息enum GPUCompilationMessageType { "error", "warning", "info"};[Exposed=(Window, DedicatedWorker), Serializable, SecureContext]interface GPUCompilationMessage { readonly attribute DOMString message; readonly attribute GPUCompilationMessageType type; readonly attribute unsigned long long lineNum; readonly attribute unsigned long long linePos; readonly attribute unsigned long long offset; readonly attribute unsigned long long length;};[Exposed=(Window, DedicatedWorker), Serializable, SecureContext]interface GPUCompilationInfo { readonly attribute FrozenArray<GPUCompilationMessage> messages;};编译信息是由 GPUShaderModule 在编译着色器代码时生成的编译日志,包含信息、正告、谬误。 ...

September 22, 2021 · 1 min · jiezi

关于gpu:WebGPU-规范篇-06-资源及其打组绑定

系列博客总目录:https://segmentfault.com/a/1190000040716735 资源绑定,即 JavaScript 中(即 CPU 端)如何看待传递到 GPU 的数据进行组织、调配的一种设计。 为了实现这个过程(CPU到GPU),WebGPU 设计了几个对象用于治理这些数据,这些数据包含 某些GPUBuffer(例如UBO,然而不包含VBO)、GPUTexture、GPUSampler、存储型纹理、内部纹理五种,这几个对象是: 资源绑定组(当前均简称绑定组)- GPUBindGroup资源绑定组布局(当前称为绑定组的布局对象)- GPUBindGroupLayout管线布局 - GPUPipelineLayout和标准中程序略有不同,我按我下面这个来。 1 关系繁难图解 GPUBindGroup <--- 1 ---┓ 动区 GPUBindGroupLayout -----------GPUPipelineLayout <--- N ---┛ 静区 | 1 ↓GPUPipelineBase简略的说就是绑定组有其布局,管线也有其布局; 绑定组的布局负责通知资源长什么样子,管线的布局通知管线着色器外头有多少类和别离有多少个资源坑位要进来; 两个布局负责沟通,那绑定组、管线就各司其职(一个负责组织管线所需的资源,一个负责某个渲染过程)。 2 资源绑定组 GPUBindGroup资源绑定组,GPUBindGroup,个别会简略称之为“绑定组”,它组织了一些 资源,这些资源在某个具体的着色阶段一起起作用。 所谓的资源,就是 GPUBuffer、纹理、采样器等数据类型的对象。 如何创立通过设施对象的 createBindGroup 办法创立,它须要一个必选的对象参数,这个对象参数要满足 GPUBindGroupDescriptor 类型。 dictionary GPUBindGroupDescriptor : GPUObjectDescriptorBase { required GPUBindGroupLayout layout; required sequence<GPUBindGroupEntry> entries;};看得出 GPUBindGroupDescriptor 类型须要两个必选参数: 参数 layout,GPUBindGroupLayout 类型,通常称这个参数为资源绑定组的布局对象,有时候简略点就说对应的布局对象,上面会具体介绍这个类型;参数 entries,一个数组,每个元素皆为 GPUBindGroupEntry 类型,具体解释见下文。GPUBindGroupEntry 类型GPUBindGroupEntry 类型的对象,指代一种在着色阶段要用到的资源,包含一些简略的元数据。 这里的资源,在 WebGPU 中应用 GPUBindingResource 来定义。 ...

September 22, 2021 · 5 min · jiezi

关于gpu:WebGPU-规范篇-05-采样器

系列博客总目录:https://segmentfault.com/a/1190000040716735 GPUSampler:采样器GPUSampler 采样器对象,对着色器中的纹理资源进行过滤或者编码。 [Exposed=(Window, DedicatedWorker), SecureContext]interface GPUSampler {};GPUSampler includes GPUObjectBase;采样器的创立通过 device.createSampler() 办法即可创立,这个办法一样须要一个对应类型为 GPUSamplerDescriptor 的参数对象。 dictionary GPUSamplerDescriptor : GPUObjectDescriptorBase { GPUAddressMode addressModeU = "clamp-to-edge"; GPUAddressMode addressModeV = "clamp-to-edge"; GPUAddressMode addressModeW = "clamp-to-edge"; GPUFilterMode magFilter = "nearest"; GPUFilterMode minFilter = "nearest"; GPUFilterMode mipmapFilter = "nearest"; float lodMinClamp = 0; float lodMaxClamp = 32; GPUCompareFunction compare; [Clamp] unsigned short maxAnisotropy = 1;};其中, 参数 addressModeU、addressModeV、addressModeW 是 GPUAddressMode 枚举类型的,默认值均为 "clamp-to-edge",意义是纹理宽度、高度、深度三个方向上的填充模式,详见下文 GPUAddressMode 的解释;参数 magFilter、minFilter 和 mipmapFilter 是 GPUFilterMode 枚举类型的,默认值均为 "nearest"。别离示意放大、放大时的采样形式,以及 mipmap(多级纹理) 切换等级时的采样形式,详见下文对于 GPUFilterMode 的解释;参数 lodMinClamp、lodMaxClamp 指定细节档次的最大和最小级别,默认别离为 0、32,应该是对应的 Mipmap;参数 compare 类型是 GPUCompareFunction,如果指定这个参数,该采样器将变成一个具备指定比拟性能的比拟采样器;参数 maxAnisotropy 默认值是 1,示意采样器能用到的最大各向异性值,大多数对这个的实现是 1 到 16。各向异性无关概念见文末参考资料局部。GPUAddressModeenum GPUAddressMode { "clamp-to-edge", "repeat", "mirror-repeat"};这个其实就是填充形式,有趣味的敌人能够本人设置一下 Windows 的壁纸。 ...

September 22, 2021 · 1 min · jiezi

关于gpu:WebGPU-规范篇-04-纹理

系列博客总目录:https://segmentfault.com/a/1190000040716735 WebGPU 之纹理 1 纹理的创立纹理由 device.createTexture() 创立,类型是 GPUTexture: [Exposed=(Window, DedicatedWorker), SecureContext]interface GPUTexture { GPUTextureView createView(optional GPUTextureViewDescriptor descriptor = {}); undefined destroy();};GPUTexture includes GPUObjectBase;createTexture 办法须要一个 GPUTextureDescriptor 类型的对象: dictionary GPUTextureDescriptor : GPUObjectDescriptorBase { required GPUExtent3D size; GPUIntegerCoordinate mipLevelCount = 1; GPUSize32 sampleCount = 1; GPUTextureDimension dimension = "2d"; required GPUTextureFormat format; required GPUTextureUsageFlags usage;};有三个必选参数: size: GPUExtent3D 类型,示意 GPUExtent3D 类型format: GPUTextureFormat 类型,即纹理的格局; GPUTextureFormat 是一个比拟大的局部,见本文中的前面局部介绍 纹理格局usage: GPUTextureUsageFlags 类型,即纹理的用处; GPUTextureUsage 是一个枚举类型,有 5 个可选值 COPY_SRC、COPY_DST、TEXTURE_BINDING、STORAGE_BINDING 和 RENDER_ATTACHMENT,别离代表十六进制值 0x01、0x02、0x04、0x08 和 0x10:typedef [EnforceRange] unsigned long GPUTextureUsageFlags;[Exposed=(Window, DedicatedWorker)]namespace GPUTextureUsage { const GPUFlagsConstant COPY_SRC = 0x01; const GPUFlagsConstant COPY_DST = 0x02; const GPUFlagsConstant TEXTURE_BINDING = 0x04; const GPUFlagsConstant STORAGE_BINDING = 0x08; const GPUFlagsConstant RENDER_ATTACHMENT = 0x10;};还有三个可选参数: ...

September 22, 2021 · 5 min · jiezi

关于gpu:WebGPU-规范篇-03-缓存对象

系列博客总目录:https://segmentfault.com/a/1190000040716735 WebGPU 中的缓存对象:GPUBufferGPUBuffer 示意一块显存。显存中的数据是线性排列的,也就是能够通过偏移量来寻找显存中的数据。有些 GPUBuffer 能够被映射,被映射后的 GPUBuffer 能够通过 JavaScript 中的 ArrayBuffer 拜访。 GPUBuffer 能够用 GPUDevice.createBuffer(descriptor) 来创立。 [Exposed=(Window, DedicatedWorker), SecureContext]interface GPUBuffer { Promise<undefined> mapAsync(GPUMapModeFlags mode, optional GPUSize64 offset = 0, optional GPUSize64 size); ArrayBuffer getMappedRange(optional GPUSize64 offset = 0, optional GPUSize64 size); undefined unmap(); undefined destroy();};GPUBuffer includes GPUObjectBase;GPUBuffer 对象有如下几个办法: mapAsync,即异步映射办法;getMappedRange,获取映射后的范畴,以 ArrayBuffer 示意;unmap,勾销映射;destroy,销毁并回收此 GPUBuffer 指向的显存GPUBuffer 对象是能够被序列化的。 1 创立创立一个 GPUBuffer 须要用到 GPUBufferDescriptor 类型的对象。 dictionary GPUBufferDescriptor : GPUObjectDescriptorBase { required GPUSize64 size; required GPUBufferUsageFlags usage; boolean mappedAtCreation = false;};对于设施对象和 descriptor 对象,是有要求的: ...

September 22, 2021 · 3 min · jiezi

关于gpu:WebGPU-规范篇-02-对象初始化

系列博客总目录:https://segmentfault.com/a/1190000040716735 参考自 https://www.w3.org/TR/webgpu/... 1 navigator.gpuGPU 对象能在浏览器环境(Window环境)获取,也能够在非共享全局 Worker 中获取,其接口定义如下: interface mixin NavigatorGPU { [SameObject, SecureContext] readonly attribute GPU gpu;};Navigator includes NavigatorGPU;WorkerNavigator includes NavigatorGPU;能够通过拜访 navigator.gpu 来拜访 GPU 对象。 2 GPU对应 https://www.w3.org/TR/webgpu/...GPU 是 WebGPU 的入口,能够通过 navigator.gpu 拜访它。 [Exposed=(Window, DedicatedWorker), SecureContext]interface GPU { Promise<GPUAdapter?> requestAdapter(optional GPURequestAdapterOptions options = {});};requestAdapter 办法接管参数为 GPURequestAdapterOptions 类型的对象,不可空(即不能为 {}),但可选。 GPURequestAdapterOptions 类型见 2.1 大节。 它返回一个 resolve 值为 null 或 GPUAdapter 对象的 Promise。 调用这个办法是有考究的,如果零碎产生一些无关显卡的更改,例如插入了显卡,驱动更新等,适配器将会标记为过期的,在进行申请设施之前,最好再调用一次这个办法。 例子:申请一个 GPUAdapter const adapter = await navigator.gpu.requestAdapter(/* ... */);const features = adapter.features;// ...2.1 适配器的抉择对应 https://www.w3.org/TR/webgpu/...本大节次要介绍 GPURequestAdapterOptions 接口。 ...

September 22, 2021 · 2 min · jiezi

关于gpu:WebGPU-规范篇-01-规范基础

系列博客总目录:https://segmentfault.com/a/1190000040716735 WebGPU 基本概念节选翻译,选自 WebGPU Spec 3 Fundamentals,本文列举一部分简略的内容,其余内容当前独自拉出去和其余材料一起谈。 1 公共约定节选自 WebGPU Spec 3.1 Conventions ① WebGPU 接口WebGPU 接口是外部对象的公开拜访模式,和大多数语言的接口语法提供的性能差不多。 这里只需注意,继承了 GPUObjectBase 的接口都是 WebGPU 接口。 interface mixin GPUObjectBase { attribute USVString? label;};label 字段用来形容对象本身,可空。 ② 对象形容者对象形容者蕴含创立一个对象所需的信息,通常调用 GPUDevice 的 createXXX 办法实现。 dictionary GPUObjectDescriptorBase { USVString label;};此处的 label 和 GPUObjectBase 的 label 含意差不多。 2 坐标零碎节选自 WebGPU Spec 3.3 Coordinate Systems 在 NDC 中,Y轴朝上。NDC的点 (-1.0, -1.0) 位于 NDC 的左下角。NDC的 X 和 Y 的最大最小值为 1 和 -1,Z 的取值范畴是 [0, 1]。NDC 中超出此范畴的点会被剪裁。在 Framebuffer、视口坐标系和 Fragment/像素坐标系中 Y轴朝下。原点 (0, 0) 位于这几个坐标系的左上角。视窗坐标和帧缓存(Framebuffer)坐标相匹配。纹理坐标的原点 (0, 0) 示意纹理数据的第一个纹素(texel)。WebGPU 的坐标系和 DirectX 坐标系匹配。 ...

September 22, 2021 · 3 min · jiezi

关于gpu:WebGPU-的类型约定之WebIDL

系列博客总目录:https://segmentfault.com/a/1190000040716735 阐明WebGPU 的标准是通过 WebIDL 语言来形容的,本篇次要介绍类型定义。 函数定义、继承形容较为简单,故略去。 用于定义类型的语法有以下五种。 enum枚举类型,通常其枚举值就是 JavaScript 字符串,取值时合乎外面的任意一个即可。 enum GPUTextureDimension { "1d", "2d", "3d",};于是,你能够在创立纹理对象时这样用这个枚举: const texture = device.createTexture({ /* ... */ dimension: "2d", // <- dimension 字段是 GPUTextureDimension 类型})你要是传 "36d" 那就不适合了。 namespace须要通过 Namespace.XXX 拜访,通常是二进制数字值,也算是一种枚举吧。 typedef [EnforceRange] unsigned long GPUBufferUsageFlags;[Exposed=(Window, DedicatedWorker)]namespace GPUBufferUsage { const GPUFlagsConstant MAP_READ = 0x0001; const GPUFlagsConstant MAP_WRITE = 0x0002; const GPUFlagsConstant COPY_SRC = 0x0004; const GPUFlagsConstant COPY_DST = 0x0008; const GPUFlagsConstant INDEX = 0x0010; const GPUFlagsConstant VERTEX = 0x0020; const GPUFlagsConstant UNIFORM = 0x0040; const GPUFlagsConstant STORAGE = 0x0080; const GPUFlagsConstant INDIRECT = 0x0100; const GPUFlagsConstant QUERY_RESOLVE = 0x0200;};那么创立一个 GPUBuffer 时,它的 usage 字段就能够这么设置: ...

September 22, 2021 · 2 min · jiezi

关于gpu:WebGPU-摘学总目录

思前想后,还是要讲一下“WebGPU Spec API”和“图形学”、“即时渲染技术”等概念的差别。 我所公布的这一系列博文,均为“WebGPU Spec API”的解读,而且是局部解读,还不肯定在概念、细节上齐全精确。只是,我喜爱吃这螃蟹,尽管确实有点扎嘴。 本篇不算教程,只能算是 WebGPU 公布拂晓前夕对规范的学习与自我演绎,心愿对你有帮忙,有概念上的错漏在劫难逃。WebGPU 的接口、对象类型、如何组合,以及其调用 GPU 的逻辑,深得 D3D12、Metal、Vulkan 这些古代图形开发技术的启发,多多少少都有它们的影子。然而,这并不是说把 WebGPU 的接口、对象的文档背熟,晓得如何组合对象和传递数据,就能写出牛逼哄哄的渲染器、3D编辑器、通用计算工具的,那些仍须要其余畛域的常识来辅助实现,这也阐明了 WebGPU 就是一个 API 罢了。 开发者对 WebGPU 使用得多纯熟,只能阐明此人对工具有多相熟,不肯定能拿工具雕出花来。 说实话,WebGPU 和 WebGL 一样,对一些初学者来说,是有门槛的,WebGPU 仿佛更高一些,如若再加上对即时渲染技术的掌控,对光照常识的了解,那属于难上加难,这样能劝退不少人,图形类编程技术人员是少一些。 WebGPU 是什么一种图形规范,次要在 Web 浏览器端应用 JavaScript 编程实现,也有其余语言(例如 Rust 的 Wgpu等)的实现。在这里以 Web 端为主,无非凡状况均指 Web 浏览器端的利用开发。 它通常会拿来与 WebGL 进行比拟,有人说它是 WebGL 的继任者,我感觉这种说法并不是很全面。 起源不同WebGL 的爹是 OpenGL,着色器语言 GLSL 继承自 OpenGL;WebGPU 的爹是 Metal、D3D12、Vulkan,规范的推动者有苹果、谷歌、Mozilla、科纳斯组(OpenGL 也是科纳斯组的标准之一)等,其着色器语言 WGSL 也是新设计的; 设计理念不同WebGL 是走一步算一步的 API,若应用原生 API,须要对渲染的每一步进行准确调整,而且得按程序,这意味着异步编程会比拟麻烦。 WebGPU 是当时打包好数据、设计好计算过程、约定好输入输出,最初一次编码提交才进行计算,这种带“提前设计”的思维,进步了 GPU 拜访数据的效率,缩小了 CPU 到 GPU 的过程。 ...

September 22, 2021 · 1 min · jiezi

关于gpu:新一代CTR预测服务的GPU优化实践

CTR模型在互联网的搜寻、举荐、广告等场景有着宽泛的利用。近年来,随着深度神经网络的引入,CTR模型的推理对硬件算力的要求逐步减少。本文介绍了美团在CTR模型优化的实际。通过分析模型构造特点,联合GPU硬件架构,咱们设计了一系列流程对模型进行定制优化,达到了升高提早、进步吞吐、节省成本的指标。1 背景CTR(Click-Through-Rate)即点击通过率,是指网络广告的点击达到率,即该广告的理论点击次数除以广告的展示量。为CTR指标服务的打分模型,个别称为CTR模型。咱们能够将此概念进一步扩大到互联网利用中各种预估转化率的模型。CTR模型在举荐、搜寻、广告等场景被广泛应用。绝对于CV(计算机视觉)、NLP(天然语音解决)场景的模型,CTR模型的历史构造比较简单,计算量较小。美团的CTR模型始终沿用CPU推理的形式。随着近几年深度神经网络的引入,CTR模型构造逐步趋于简单,计算量也越来越大,CPU开始不能满足模型对于算力的需要。 而GPU领有几千个计算外围,能够在单机内提供密集的并行计算能力,在CV、NLP等畛域展现了弱小的能力。通过CUDA[1]及相干API,英伟达建设了残缺的GPU生态。基于此,美团根底研发平台通过一套计划将CTR模型部署到GPU上。单从模型预测阶段看,咱们提供的基于英伟达T4的GPU深度优化计划,在雷同老本束缚下,比照CPU,晋升了10倍的吞吐能力。同时,在典型的搜寻精排场景中,从端到端的维度来看,整体吞吐能力晋升了一倍以上。 除了进步吞吐、降低成本外,GPU计划还为CTR模型的利用带来了额定的可能。例如,在某搜寻框主动补全的场景,因为人造的交互属性,时延要求十分刻薄,一般来说无奈应用简单的模型。而在GPU能力的加持下,某简单模型的均匀响应工夫从15毫秒升高至6~7毫秒,曾经达到了上线要求。 接下来,本文将与大家探讨美团机器学习平台提供的新一代CTR预测服务的GPU优化思路、成果、劣势与有余,心愿对从事相干工作的同学有所帮忙或者启发。 2 CTR模型GPU推理的挑战2.1 应用层的挑战CTR模型构造多变,蕴含大量业务相干的构造,同时新的SOTA模型也层出不穷,硬件供应商因为人力受限,会重点优化罕用的经典构造,如ResNet。对于没有收敛的构造,官网没有端到端的优化工具能够反对。CTR模型中通常蕴含较大的Embedding表构造,要思考到Embedding表存在显寄存不下的状况。在典型的举荐场景中,为了达到更快的POI曝光的目标,模型的时效性要求很高,在线模型服务须要提供增量更新模型的能力。2.2 框架层的挑战算子层面:目前支流的深度学习框架,如TensorFlow和PyTorch,能够说是深度学习第二代框架,它们首先要解决第一代框架Caffe的问题,Caffe有一个显著问题就是Layer的粒度过粗,导致那个时代的算法开发者都必须有“本人写自定义层”的能力。TensorFlow和PyTorch都把模型表达能力放在较高的优先级,导致算子粒度比拟小,无论是对CPU还是GPU架构,都会带来很大的额定开销。框架层面:TensorFlow和PyTorch实质都是训练框架,对算法开发者比拟敌对,但非部署敌对。其中隐含了很多为了不便分布式训练做的设计,比方TensorFlow为了不便将Variable拆到不同的PS上,内置了Partitioned_Variable的设计。在基于GPU单机预测的场景下,这些构造也会带来额定的开销。2.3 硬件层的挑战第一,TensorFlow的算子粒度划分较细,导致一个模型通常由几千个算子形成,这些算子在GPU上的执行转变为对应的GPU kernel的执行。kernel是GPU上并行执行的函数。 GPU kernel大体上能够划分为传输数据、kernel启动、kernel计算等几个阶段,其中每个kernel的启动须要约10左右。大量的小算子导致每个kernel的执行工夫很短,kernel启动的耗时占了大部分。相邻的kernel之间须要通过读写显存进行数据的传输,产生大量的访存开销。而GPU的访存吞吐远远低于计算吞吐,导致性能低下,GPU利用率并不高。 第二,GPU卡上蕴含多个计算单元,实践上,不同计算单元是能够跑不同kernel的,但实际上为了编程简略,CUDA默认假如在同一时刻一个Stream里跑同一个kernel。尽管能够通过多Stream的形式跑,然而多Steam之间又短少细粒度的协同机制。 在通过充沛调研与探讨后,咱们决定第一期重点关注TensorFlow框架下如何解决常见CTR模型构造在英伟达GPU上执行效率不高的问题,咱们先将问题收敛为以下两个子问题: 算子粒度过细,GPU执行效率低下。模型构造多变,手工优化投入大,通用性差。3 优化伎俩为了解决下面的问题,咱们对业界深度学习加速器进行了一些调研。业界比拟成熟的推理优化计划次要是TensorRT/XLA/TVM。TensorRT采纳手工优化,对一些定制的模型构造进行算子交融,并对计算密集型算子(如卷积)进行了高效调优。XLA是TensorFlow内置的编译优化工具,次要针对访存密集型构造,通过编译伎俩,实现算子的交融。TVM[2]具备较全面的优化能力,应用编译伎俩进行算子的交融,同时能够通过机器学习的形式实现计算密集型算子的主动调优。 通过宽泛的调研和比照,咱们最终抉择了TVM作为优化工具。TVM通过编译伎俩,能够较好地应答多变的模型构造,解决了手工优化通用性差的问题。但TVM利用在业务模型也存在一系列问题:反对的算子数较少,而且目前对动静Shape的反对还不够好。针对这两个问题,咱们将TVM和TensorFlow联合起来,联合CTR模型的构造特点与GPU的硬件个性,开发一系列流程,实现了对CTR模型的优化。 3.1 算子交融通过将多个小算子交融为一个语义等价的大算子,能够无效缩小GPU上的kernel数量。一方面,kernel数量缩小间接升高了kernel发射的开销;另一方面,交融后的大kernel执行的计算量减少,防止了多个kernel间数据传输导致的频繁访存,进步了计算的访存比。 能够看到,上图中的左右等价构造,左侧的21个算子执行的运算,能够在1个等价算子中实现。反映到GPU的流动上,左侧至多有21个GPU kernel以及21次显存的读写,而右侧只须要执行1个kernel以及1次显存读写。对于每个交融后的算子,须要有对应的kernel实现。然而,模型的算子组合是无穷的,对每种交融后算子手工实现kernel是不事实的。TVM通过编译伎俩,能够主动进行算子的交融以及设施代码生成,防止了逐个手写kernel的累赘。 3.1.1 TF-TVM主动切图优化TensorFlow模型中,如果蕴含TVM不反对的算子,会导致无奈执行TVM转换。咱们的思路是将能够用TVM优化的局部切出来,转为TVM的engine,其余局部仍然应用TensorFlow的算子。在XLA和TRT转换的时候也有相似问题,咱们剖析了TF-XLA和TF-TRT二者的实现: TF-XLA的实现计划,在Grappler[4]优化图之后,有一个POST_REWRITE_FOR_EXEC(通过这个关键字能够在源码中搜寻到)阶段,在这个阶段,会执行三个针对Graph的Pass,别离是用来标记算子,封装子图,改写子图并构建LaunchOp。TF-TRT的实现计划,TF-TRT在Grappler中注册了一个优化器,在这个优化器中,找到连通子图,并将其替换为TRT Engine。在最终计划实现上,咱们参考了TF-TRT的设计。这个设计比照XLA的劣势在于XLA切图计划与TensorFlow源码紧耦合,间接将XLA的三个Pass嵌入到了启动Session的主流程中。而切图策略,优化策略后续会有十分频繁的迭代,咱们不心愿与TensorFlow的源码太过耦合。咱们扩大了TF-TVM的计划,在理论应用中咱们把这个切图过程为一个独立流程。在模型部署或更新时,主动触发。 在推理阶段,优化过的子图应用TVM执行,其余的计算图应用TensorFlow原生实现执行,将两者联合共同完成模型的推理。因为TVM和TensorFlow的Runtime各自应用独立的内存治理,数据在不同框架间传输会导致额定的性能开销。为了升高这部分开销,咱们买通了两个框架的底层数据结构,尽可能防止额定的数据拷贝。 3.1.2 计算图等价替换TensorFlow模型中过多的不被TVM反对的算子会导致TF-TVM切图系统,影响最终的优化成果。为了让TF-TVM切图尽量大且残缺,以及让TVM优化过程中的交融力度更大,咱们对模型中的一些简单构造进行检测,替换为执行更高效或更易于交融的等价构造。 例如,TensorFlow原生EmbeddingLookup构造,为了反对分布式训练,会对Embedding表进行切分,产生DynamicPartition和ParallelDynamicStitch等动静算子。这些动静算子不被TVM反对,导致TF-TVM图切分过于细碎。为了让TF-TVM切图更残缺,咱们通过图替换,对这种构造进行批改,通过将Embedding分表提前合并,失去简化的EmbeddingLookup构造。 3.2 CPU-GPU数据传输优化TVM优化后的子图被替换为一个节点,该节点在GPU上执行,通常有几十甚至几百个输出,该节点的前置输出(如Placeholder)通常是在CPU上执行,会波及屡次的CPU-GPU传输。频繁的小数据量传输,无奈充分利用带宽。为了解决这个问题,咱们对模型构造进行批改,在计算图中增加合并与拆分节点,管制切图的地位,缩小数据传输的次数。 一种可能的合并形式是,对这些输出按雷同的Shape和Dtype进行合并,后续进行拆分,将拆分节点切入TVM的子图一起优化。这种形式会导致一些问题,如局部子图的算子交融成果不佳;另一方面,GPU kernel函数的参数传递内存限度在4KB,对于TVM节点输出十分多的状况(如超过512个),会遇到生成代码不非法的状况。 3.3 高频子图手工优化对于TVM无奈反对的子图,咱们对业务中高频应用的构造进行形象,采纳手写自定义算子的形式,进行了高效GPU实现。 例如,模型中有局部时序特色应用String类型输出,将输出的字符串转为补齐的数字Tensor,将int类型的Tensor作为下标进行Embedding操作。这部分子图的语义如图,以下简称SE构造(StringEmbedding): 这一部分构造,TensorFlow的原生实现只有基于CPU的版本,在数据量较大且并行度较高的情景下,性能降落重大,成为整个模型的瓶颈。为了优化这部分构造的性能,咱们在GPU上实现了高效的等价操作。 如图所示,PadString算子在CPU端将多个字符串按最大长度进行补齐,拼接成一个内存间断的uint8类型Tensor,以便一次性传输到GPU。StringEmbedding接管到补齐后的字符串后,利用GPU并行计算的个性,协同大量线程实现字符串的切分与查表操作。在波及规约求和、求前缀和等要害过程中,应用了GPU上的Reduce/Scan算法,编码过程应用warp_shuffle指令,不同线程通过寄存器替换数据,防止了频繁访存的开销,取得了很好的性能。 GPU Scan算法示意,一个8个元素的前缀和操作,只须要3个迭代周期。在一个有几十路相似操作的模型中,手工优化前后的GPU timeline对比方下图,能够看到H2D + StringEmbedding这部分构造的耗时有很大的缩减,从42毫秒缩减到1.83毫秒。 除了StringEmbedding构造,咱们对StringSplit + ToNumber + SparseSegmentSqrt、多路并行StringEmbedding等构造都进行了高效交融实现,在优化流程中通过构造匹配进行相应的替换。 3.4 CPU-GPU分流 理论线上的RPC申请,每个申请内的样本数(下文称Batch)是在[1,MaxValue]范畴内变动的,MaxValue受上游业务零碎,其余根底零碎能力等多方面因素制约,绝对固定。如上图所示,以某个搜寻服务为例,咱们统计了线上的Batch数值散布,Batch=MaxValue的申请占比约45%,Batch=45占比7.4%,Batch=1占比2.3%。其余的Batch占比从0.5%到1%不等。对于GPU来说,进步单个申请的Batch能更好地利用硬件资源,施展GPU的并行计算能力,体现出绝对CPU更优的提早和吞吐;当Batch较小时,GPU绝对CPU的劣势就不显著了(下图是咱们测试同样的模型在固定压力下,CPU/GPU上提早的变动)。 大部分申请都由GPU在做了,CPU资源有较多空余,咱们将一些小Batch的碎申请放在CPU运行,这样能够让整个Worker的资源利用更加平衡,进步零碎整体的性能。咱们依据测试设定了一个Batch阈值,以及计算图在异构硬件上区别执行的判断逻辑:对于小Batch的状况,间接在CPU上执行计算图,只有Batch超过阈值的申请才会在GPU上推理。从线上的统计数据来看,整体流量的77%跑在GPU上,23%跑在CPU上。 在GPU的一系列优化策略和动作中,Batch大小是很重要的信息,不同Batch下优化出的kernel实现可能是不同的,以达到对应workload下最优的计算性能;因为线上的流量特点,发送到GPU的申请Batch散布比拟细碎,如果咱们针对每个Batch都优化一个模型的kernel实现显然是不够经济和通用的。因而,咱们设计了一个Batch分桶策略,生成N个固定Batch的优化模型,在理论申请到来时找到Batch间隔最近的一个Bucket,将申请向上Padding到对应的Batch计算,从而进步了GPU的利用效率。 4 压测性能剖析咱们选取一个模型进行线上性能压测剖析。 CPU模型测试环境为16核Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz,16G内存。GPU模型测试环境为8核Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz,Tesla T4 GPU,16G内存。 ...

September 13, 2021 · 1 min · jiezi

关于gpu:如何用-GPU硬件层加速优化Android系统的游戏流畅度

作者:陈一萌本文出自于“「2021 友盟+ 挪动利用性能挑战赛」” 中的参赛作品,该文章表述了作者如何借助友盟+ U-APM工具进行了性能优化。 背景作为一款VR实时操作游戏APP,咱们须要依据重力感应零碎,实时监控手机的角度,并渲染出相应地位的VR图像,因而在不同 Android 设施之间,因为应用的芯片组和不同架构的GPU,游戏性能会因而受到影响。举例来说:游戏在 Galaxy S20+ 上可能以 60fps 的速度渲染,但它在HUAWEI P50 Pro上的体现可能与前者天壤之别。 因为新版本的手机具备良好的配置,而游戏须要思考基于底层硬件的运行状况。 如果玩家遇到帧速率降落或加载工夫变慢,他们很快就会对游戏失去趣味。如果游戏耗尽电池电量或设施过热,咱们也会散失处于长途旅行中的游戏玩家。如果提前预渲染不必要的游戏素材,会大大增加游戏的启动工夫,导致玩家失去急躁。如果帧率和手机不能适配,在运行时会因为手机自我爱护机制造成闪退,带来极差的游戏体验。 基于此,咱们须要对代码进行优化以适配市场上不同手机的不同帧率运行。 所遇到的挑战首先咱们应用Streamline 获取在 Android 设施上运行的游戏的配置文件,在运行测试场景时将 CPU 和 GPU性能计数器流动可视化,以精确理解设施解决 CPU 和 GPU 工作负载,从而去定位帧速率降落的次要问题。 以下的帧率剖析图表显示了应用程序如何随工夫运行。 在上面的图中,咱们能够看到执行引擎周期与 FPS 降落之间的相关性。显然GPU 正忙于算术运算,并且着色器可能过于简单。 为了测试在不同设施中的帧率状况,应用友盟+U-APM测试不同机型上的卡顿情况,发现在onSurfaceCreated函数中进行渲染时呈现卡顿, 应证了前文的剖析,能够确定GPU是在算数运算过程中产生了卡顿: 因为不同设施有不同的性能预期,所以须要为每个设施设置本人的性能估算。例如,已知设施中 GPU 的最高频率,并且提供指标帧速率,则能够计算每帧 GPU 老本的相对限度。 $$每帧 GPU 老本 = GPU 最高频率 / 指标帧率$$ CPU 到 GPU 的调度存在肯定的束缚,因为调度上存在限度所以咱们无奈达到目标帧率。另外,因为 CPU-GPU 接口上的工作负载序列化,渲染过程是异步进行的。CPU 将新的渲染工作放入队列,稍后由 GPU 解决。 数据资源问题CPU 管制渲染过程并且实时提供最新的数据,例如每一帧的变换和灯光地位。然而,GPU 解决是异步的。这意味着数据资源会被排队的命令援用,并在命令流中停留一段时间。而程序中的OpenGL ES 须要渲染以反映进行绘制调用时资源的状态,因而在援用它们的 GPU 工作负载实现之前无奈批改资源。 ...

September 1, 2021 · 2 min · jiezi

关于gpu:深度学习训练-如何在云服务器上安装LightGBM

文章起源 | 恒源云社区(专一人工智能/深度学习云GPU服务器训练平台,官网体验网址:https://gpushare.com/ ) 原文地址 | https://gpushare.com/docs/best_practices/lightgbm/ 【LightGBM是什么?】 LightGBM 是一个基于决策树算法的疾速、分布式、高性能的框架,用于排名、分类和许多其余机器学习工作。 【如何在恒源云装置?】 LightGBM 反对通过 CLI、Python、R 应用。 上面提供 Python 包与 CLI 的装置,编译时均退出了反对 GPU 的选项。 Python 包的编译装置如下: # 装置 boost 依赖apt-get updateapt-get install libboost-dev libboost-system-dev libboost-filesystem-dev -y # 装置反对 GPU 的 Python 包pip install lightgbm --install-option=--gpu --install-option="--opencl-include-dir=/usr/local/cuda/include/" --install-option="--opencl-library=/usr/local/cuda/lib64/libOpenCL.so" mkdir -p /etc/OpenCL/vendorsecho "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd命令行的编译装置如下: # 装置 boost 依赖apt-get updateapt-get install libboost-dev libboost-system-dev libboost-filesystem-dev -y # 克隆 LightGBM 代码git clone "https://mirror.ghproxy.com/https://github.com/microsoft/LightGBM.git"cd LightGBM# 切换版本分支git checkout v3.2.1# 替换一些子模块的仓库地址为减速地址,并克隆sed -i "s/ \(https:\/\/github.com\)/ https:\/\/mirror.ghproxy.com\/\1/" .gitmodulesgit submodule update --initcd external_libs/fast_double_parsersed -i "s/ \(https:\/\/github.com\)/ https:\/\/mirror.ghproxy.com\/\1/" .gitmodulesgit submodule update --initcd ../.. # 编译装置反对 GPU 选项的命令行mkdir buildcd buildcmake -DUSE_GPU=1 -DOpenCL_LIBRARY=/usr/local/cuda/lib64/libOpenCL.so -DOpenCL_INCLUDE_DIR=/usr/local/cuda/include/ ..make -j4 mkdir -p /etc/OpenCL/vendorsecho "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd # 执行命令行测试cd .../lightgbm # 应用源码也能够同时装置 Python 包cd python-packagepython setup.py install --gpu --opencl-include-dir=/usr/local/cuda/include/ --opencl-library=/usr/local/cuda/lib64/libOpenCL.so --no-cache

June 25, 2021 · 1 min · jiezi

关于gpu:深度学习训练-如何在云服务器上安装MMDetection

文章起源 | 恒源云社区(专一人工智能/深度学习云GPU服务器训练平台,618宠粉流动ing,官网体验网址:https://gpushare.com/ ) 原文地址 | https://gpushare.com/docs/bes... MMCV 是一个面向计算机视觉的根底库,它反对了很多开源我的项目。 【注意事项】 RTX 3000 系列显卡在 PyTorch 1.8.1 (For CUDA 11.1) 上, MMCV 目前工作不失常,应用此系列显卡时,请抉择 PyTorch 1.7.1 版本镜像。 平台 PyTorch 官网镜像曾经预装了 mmcv-full 的包,大家能够间接装置 OpenMMLab 其余的工具箱进行应用。 【MMDetection装置】 MMDetection 是一个基于 PyTorch 的指标检测开源工具箱。 MMDetection 对 MMCV 的版本要求,请查看 Prerequisites。 # 查看 MMCV 版本pip show mmcv-full | grep Version git clone https://ghproxy.com/https://github.com/open-mmlab/mmdetection.gitcd mmdetection # 依据 MMCV 的版本检出反对的 MMDetection 版本git checkout v2.13.0 # 装置pip install -r requirements/build.txt --no-cachepip install -v -e . --no-cache接下来,下载一个模型文件用于测试。 ...

June 9, 2021 · 1 min · jiezi

关于gpu:深度学习训练-云GPU服务器如何使用Visdom

文章起源 | 恒源云社区(专一人工智能/深度学习云GPU服务器训练平台,618宠粉流动ing,官网体验网址:https://gpushare.com/ ) 原文地址 | https://gpushare.com/docs/bes... 家喻户晓,Visdom 是 Facebook 开发的一款 PyTorch 数据可视化工具~ 那如何在云服务器平台装置应用它呢?本篇教程将简略说说~ 【筹备】 在装置前,揭示大家一下,恒源云平台实例并不提供公网 IP 地址,服务都是通过端口映射到公网接入点提供链接的~ 因而,应用 Visdom 时,须要进行 TensorBoard 服务,并且将 Visdom 端口配置成和 TensorBoard 雷同的 6006 端口上,监听地址须要应用 0.0.0.0。 【装置】 实现以上步骤后,就能够正式装置啦~ 在终端输出以下命令即可: pip install visdom#替换下载动态文件的地址,避免卡 downloadsed -i "s/https:\/\/\(cdnjs.cloudflare.com.*\)/http:\/\/\1/" "$(pip show visdom | grep Location | awk '{print $2}')/visdom/server.py"#进行 TensorBoard 服务supervisorctl stop tensorboard#如果须要禁止 TensorBoard 随实例启动,应用如下命令配置grep -E "autostart" /etc/supervisor/conf.d/tensorboard.conf || echo "autostart = false" >>/etc/supervisor/conf.d/tensorboard.confsupervisorctl update#启动 Visdom 服务visdom --hostname 0.0.0.0 -port 6006装置实现后,点击页面 TensorBoard 的链接,理论进入的就是 Visdom 啦~ ...

May 28, 2021 · 1 min · jiezi

关于gpu:深度学习训练-恒源云创建自定义镜像DockerHub导入镜像

文章起源 | 恒源云社区(专一人工智能/深度学习云GPU服务器训练平台,官网体验网址:https://gpushare.com/) 原文地址 | https://gpushare.com/docs/ins... 零碎镜像零碎镜像是操作系统与计算环境的打包封装。镜像中提供了 CUDA、CUDNN、Python 等环境,在创立实例时能够抉择各个组件的版本。 实例提供的零碎为 Ubuntu 18.04,并且预装了 JupyterLab、TensorBoard 服务,能够在实例列表中的 快捷工具 间接关上链接。 自定义镜像在曾经创立好的实例中装置好运行环境后,能够通过创立自定义镜像来保留这个实例的环境。下一次创立新实例抉择这个自定义镜像进行创立,创立出的新实例保留了之前的环境。 在 我的实例 中找到须要创立自定义镜像的实例,点击 实例治理 - 创立自定义镜像。创立自定义镜像须要肯定工夫,急躁期待创立实现。 创立实现后进入 实例与数据 - 我的镜像 能够看到曾经创立好的镜像。 当创立新的实例时抉择 自定义镜像 来创立。 导入镜像自定义镜像反对导入性能,能够通过 DockerHub 或 集体数据 两种形式进行导入。为了自定义镜像失常创立,须要满足下列要求: 镜像指 Docker 镜像,根底发行版要求为 Ubuntu 18.04 DockerHub 形式增加的仓库要求为公开权限集体数据中上传的镜像应改为 docker save 导出的文件导入期间会在镜像根底上装置 Python、JupyterLab、TensorBoard 等必要工具软件,以便可能失常在平台中应用。DockerHub 导入 进入 实例与数据 - 我的镜像 中,点击右上方 Docker Hub 导入。 输出 DockerHub 地址,输出镜像名如 ubuntu:18.04,点击 导入。 导入须要破费肯定工夫,期待导入实现后能够看到创立胜利后的镜像。 ...

May 10, 2021 · 1 min · jiezi

关于gpu:深度学习训练-print-五月GPU撑腰计划

这个五月,为你撑腰 (跑GPU,腰板也要杠杠的)   【撑 腰 时 间】 4.28-5.28 【撑 腰 计 划】 撑1下-提价啦 RTX 3090 限时4.5元/小时 RTX 3080 限时3元/小时 RTX 2080ti 限时2元/小时 还有RTX 5000、T4、1080ti等多款机型 撑2下-注册啦 现注册新用户,可取得50元代金券 供无门槛体验平台GPU 撑3下-邀请啦 胜利邀请好友注册,邀请方可取得20元代金券 被邀请方可取得50元新人券+10元代金券 撑4下-充值啦 充值100元起,可取得高额返券 充值100返5、充值200返15、充值500返50 充越多返越多,返券最高达300元 撑5下-认证啦 上传学生证,实现学生认证,可取得50元代金券 并享受平台专属9.5折 撑6下-资助啦 资助金额200元代金券起 国内外支流比赛平台皆可申请 戳我理解流动详情   【五 一 撑 腰 · 学 生 邀 请 版】  邀请工夫 4.28~4.30  高级处分 学生邀请福利翻倍 邀请1位可得20元*2=40元  高级处分 学生邀请总人数达5人(小于10人) 额定处分50元学生邀请总人数达10人(小于15人) 额定处分150元学生邀请总人数达15人 额定处分300元  处分条件 邀请单方需实现学生认证,即可取得撑腰处分 3090包周妥了~ 备注 · 处分为平台代金券,有效期半年,可无门槛下单3090等机型 · 对于五一撑腰·学生邀请版的处分发放,戳我理解流动详情 · 平台学生专属群已建设,增加Alice备注“学生群”,拉你进群(请提前完成学生认证哈) 文章起源 | 恒源云社区(专一人工智能/深度学习云GPU服务器训练平台,官网体验网址:https://gpushare.com/)

April 29, 2021 · 1 min · jiezi

关于gpu:tensorflowpythonframeworkerrorsimplUnknownError-Failed-to

错误信息:Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1334, in _do_call return fn(*args) File "/usr/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1319, in _run_fn options, feed_dict, fetch_list, target_list, run_metadata) File "/usr/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1407, in _call_tf_sessionrun run_metadata)tensorflow.python.framework.errors_impl.UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above. [[{{node generator/conv1d/conv1d/Conv2D}}]] [[{{node generator/Add}}]]During handling of the above exception, another exception occurredFile "/usr/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py", line 324, in new_func return func(*args, **kwargs) File "/usr/lib/python3.6/site-packages/tensorflow/python/layers/convolutional.py", line 218, in conv1d return layer.apply(inputs) File "/usr/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 1227, in apply return self.__call__(inputs, *args, **kwargs) File "/usr/lib/python3.6/site-packages/tensorflow/python/layers/base.py", line 530, in __call__ outputs = super(Layer, self).__call__(inputs, *args, **kwargs) File "/usr/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 554, in __call__ outputs = self.call(inputs, *args, **kwargs) File "/usr/lib/python3.6/site-packages/tensorflow/python/keras/layers/convolutional.py", line 384, in call return super(Conv1D, self).call(inputs) File "/usr/lib/python3.6/site-packages/tensorflow/python/keras/layers/convolutional.py", line 194, in call outputs = self._convolution_op(inputs, self.kernel) File "/usr/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 966, in __call__ return self.conv_op(inp, filter) File "/usr/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 591, in __call__ return self.call(inp, filter) File "/usr/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 208, in __call__ name=self.name) File "/usr/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 197, in _conv1d name=name) File "/usr/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py", line 574, in new_func return func(*args, **kwargs) File "/usr/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py", line 574, in new_func return func(*args, **kwargs) File "/usr/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py", line 3482, in conv1d data_format=data_format) File "/usr/lib/python3.6/site-packages/tensorflow/python/ops/gen_nn_ops.py", line 1026, in conv2d data_format=data_format, dilations=dilations, name=name) File "/usr/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 788, in _apply_op_helper op_def=op_def) File "/usr/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py", line 507, in new_func return func(*args, **kwargs) File "/usr/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 3300, in create_op op_def=op_def) File "/usr/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 1801, in __init__ self._traceback = tf_stack.extract_stack()UnknownError (see above for traceback): Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above. [[node generator/conv1d/conv1d/Conv2D (defined at /workspace/audio_new/asr_model.py:396) ]] [[node generator/Add (defined at /workspace/audio_new/asr_model.py:106) ]]解决办法:显存占满,kill掉不应用的过程 ...

January 4, 2021 · 2 min · jiezi

关于gpu:轻量型-GPU-应用首选-京东智联云推出-NVIDIA-vGPU-实例

轻量型 GPU 利用首选 京东智联云推出 NVIDIA vGPU 实例 在应用异构计算服务的场景中,“计算资源过剩”问题非常广泛。以云游戏为例,企业通常仅须要一颗物理GPU几分之一的计算能力即可晦涩实现图形或视觉计算。针对这类对算力需要较少的利用场景,轻量型异构计算产品则更为实用。 为了让用户能够用更细粒度的计算资源开启业务,京东智联云近期推出了基于NVDIA vGPU技术的虚拟化GPU实例,借助软件通过分片虚拟化技术将物理GPU卡从新划分,宰割后的vGPU具备相应划分比例的计算能力和显存,同一块GPU卡经虚拟化宰割后可调配至不同的云主机应用。用户在云上能够依据负载抉择算力匹配的实例规格,满足多种异构计算场景,升高云上GPU应用老本。 京东智联云推出的vGPU云主机实例蕴含C类型(Virtual Compute Server)和Q类型(Quadro vDWS)两款,均搭载NVIDIA® Tesla® P40,反对1/2、1/4、1/6 三种划分粒度,并提供多种CPU、内存配置组合,用户能够按需抉择适量的计算资源,晋升零碎灵活性,并大幅降低成本。 C类型vGPU实例次要面向AI、计算机学习和科学计算等场景,多实用于高校设计院、钻研机构等深度学习的教学和试验场景;Q类型vGPU实例次要面向影视行业的实时渲染、图形图像解决和修建工业设计等业余图像处理场景,可反对Maya、3DMAX、UG、BIM等专业级图形处理软件,满足用户对GPU在图形设计方面的需要。 ▲C类型(Virtual Compute Server)vGPU实例规格▲ ▲Q类型(Quadro vDWS)vGPU实例规格▲ 在vGPU技术面世以前,云上GPU云主机大多采纳直通模式(GPU passthrough),直通模式下GPU绕过操作系统,作为物理设施间接提供给虚拟机应用,因为没有设施的模仿和转换过程因而性能损失极小,可能满足少数大规模并行计算场景。 然而,直通模式下受限于GPU卡的物理应用限度,单台云主机至多搭载一块GPU,物理服务器GPU的数量又决定了云主机CPU和内存的分配比例,如业务在少数运行工夫对GPU算力需要较少,会存在大量的计算资源节约。因而,GPU外围均匀使用率较低的轻量型GPU利用,非常适合选用vGPU规格主机来进行部署。 轻量型模型推理服务深度学习场景下,在线推理所需的GPU资源往往少于离线训练,然而工作负载受线上业务影响会存在肯定稳定,顶峰期间会有大量并发。此类业务部署时能够依据工作负载抉择适合的vGPU规格主机作为集群的最小部署单元,以使得集群计算能力更贴合理论计算力需要曲线,进步GPU资源的使用率,优化老本。 教学、开发场景高校及教学机构在发展AI相干课程时,须要提供搭载GPU的服务器作为根底教学实际环境,参加课程的人员钻研方向和业务水平各异,对GPU资源算力的需要也不尽相同,在云上依据教学工作按需申请不同规格的vGPU云主机和GPU云主机,既能满足各种场景下的资源需要,又能够节俭教学资源。 与物理GPU卡不同的是,NVIDIA vGPU面向不同的场景,提供四种类型产品。每种类型vGPU运行时须要相应的软件受权(License),对操作系统的要求也有所区别。 除此之外,不同类型的vGPU产品在诸多性能个性上也有所差别,具体阐明能够返回NVIDIA官网查阅(请戳链接 http://3.cn/15-k06ay)。 在受权形式上,vGPU云主机运行后会向事后配置的License Server服务器发动受权申请,胜利获取License后会以规范性能运行,如获取License失败将会在性能受限的模式下运行直至取得受权。vGPU云主机只有在运行时才会耗费License,主机进行或开释时,License会被License Server主动回收。 举荐浏览: 送你4句口诀 云存储选型不再犯难京东智联云新一代分布式数据库TIDB架构揭秘比MySQL快839倍!揭开剖析型数据库JCHDB的神秘面纱欢送点击【京东智联云】,理解开发者社区 更多精彩技术实际与独家干货解析 欢送关注【京东智联云开发者】公众号

November 3, 2020 · 1 min · jiezi