1.ptmalloc2 源码剖析3 -- 源码剖析
2.新鲜资讯|AMD FidelityFX™ SDK 1.0现已上线GPUOpen
3.在AMD GPU上实现高性能LLM推理
4.AMD被黑客叫卖Navi显卡源码,测测试1亿美元出售是试源真吗?
5.硬核观察 #1112 1/7 的 Linux 内核代码是 AMD GPU 驱动代码
6.AMD 编译概述 & Fatbin 文件生成 & HIP Runtime API(启动 CUDA 核函数)
ptmalloc2 源码剖析3 -- 源码剖析
文章内容包含平台配置、malloc_state、工具arena实例、测测试new_arena、试源arena_get、工具源码项目怎么玩arena_get2、测测试heap、试源new_heap、工具grow_heap、测测试heap_trim、试源init、工具malloc_hook、测测试malloc_hook_ini、试源ptmalloc_init、工具malloc_consolidate、public_mALLOc、sYSMALLOc、freepublic_fREe、systrim等关键模块。
平台配置为 Debian AMD,使用ptmalloc2作为内存分配机制。
malloc_state 表征一个arena,全局只有一个main_arena实例,arena实例通过malloc_init_state()函数初始化。
当线程尝试获取arena失败时,通过new_heap获取内存区域,构建非main_arena实例。
arena_get和arena_get2分别尝试线程的私有实例和全局arena链表获取arena,若获取失败,则创建new_arena。
heap表示mmap映射连续内存区域,每个arena至少包含一个heap,且起始地址为HEAP_MAX_SIZE整数倍。暴涨 指标源码
new_heap尝试mmap映射内存,实现内存对齐,确保起始地址满足要求。
grow_heap用于内存扩展与收缩,依据当前heap状态调用mprotect或mmap进行操作。
heap_trim释放heap,条件为当前heap无已分配chunk或可用空间不足。
init阶段,通过malloc_hook、realloc_hook和__memalign_hook函数进行内存分配。
malloc_consolidate合并fastbins和unsortedbin,优化内存分配。
public_mALLOc作为内存分配入口。
sYSMALLOc尝试系统申请内存,实现内存分配。
freepublic_fREe用于释放内存,针对map映射内存调用munmap,其他情况归还给对应arena。
systrim使用sbrk归还内存。
新鲜资讯|AMD FidelityFX™ SDK 1.0现已上线GPUOpen
欢迎使用AMD FidelityFX软件开发工具包(SDK)! AMD FidelityFX SDK是一个易于集成的解决方案,可将AMD FidelityFX技术应用于游戏中,无需复杂移植过程。它是我们提供给开发者的新图形中间件。 自从发布AMD FidelityFX技术以来,我们已成为业界领先的技术合作伙伴之一,覆盖了多款知名游戏。随着技术发展和广泛应用,我们致力于简化开发者集成体验。AMD FidelityFX SDK为此成果。 这个SDK特点如下: 标准、风格一致,友好易用。源码营养课堂 简便生成应用,专注于核心算法。 稳定框架适用于各种API,支持多平台。 丰富文档可参考: gpuopen.com/manuals/fid... 预构建解决方案简化集成,集成仅需二十行代码。 新增三种效果: AMD FidelityFX 模糊 1.0:基于计算的高斯模糊技术。 AMD FidelityFX 景深1.0:重现相机镜头效果。 AMD FidelityFX 镜头特效1.0:支持多种镜头和胶片效果。 现有技术更新并纳入SDK: AMD FidelityFX CACAO 1.3:高度优化环境光遮蔽效果,引入对比纯AO和最终渲染结果功能。 AMD FidelityFX CAS 1.1:低开销自适应锐化算法,新增选择上采样功能。 FSR 1.1和FSR 2.2.1:图像放大解决方案,合并为一个示例。 AMD FidelityFX LPM 1.3:HDR映射解决方案,Vulkan支持,修复操作系统和交换链问题。 AMD FidelityFX 并行排序1.2:优化的基数排序实现。 AMD FidelityFX SPD 2.1:优化的单pass下采样器。 AMD FidelityFX SSSR 1.4和AMD FidelityFX 降噪器 1.2:反射和阴影质量优化。 AMD FidelityFX 可变着色1.1:可变速率着色集成。 示例集成代码已更新,包含混合光线追踪、反射、阴影等。 使用SDK步骤: 创建或链接SDK库到解决方案。 查询内存需求。 分配内存并初始化。 创建功能上下文。 运行时使用上下文。 释放内存。 完整源代码和二进制文件在GitHub上发布,拉钩mybatis源码查看丰富文档,访问GPUOpen上的新主页获取更多信息。如需反馈或建议,请联系我们,所有请求都非常重要且会回复。请注意AMD FSR技术的使用限制和归属声明。在AMD GPU上实现高性能LLM推理
在AMD GPU上实现高性能LLM推理,采用ROCm编译LLM(大语言模型)并在其上部署,可以达到显著的性能。具体而言,在Llama2-7B/B上,AMD Radeon™ RX XTX的推理性能可达到NVIDIA® GeForce RTX™ 速度的%,NVIDIA® GeForce RTX™ Ti速度的%。Vulkan支持同样使得LLM部署可以推广到其他AMD设备,如搭载了AMD APU的SteamDeck。
自从开源LLM的快速发展,性能优秀的推理解决方案大多基于CUDA,并针对NVIDIA GPU进行了优化。然而,随着计算需求的日益增长,扩展到更广泛的硬件加速器类别变得尤为重要。AMD GPU被视为潜在的选项之一。
硬件指标和软件栈对比显示,AMD的RX XTX与NVIDIA的RTX Ti在规格上相当。过去AMD在硬件性能上落后于NVIDIA的主要原因并不是硬件本身,而是软件支持和优化。然而,目前的生态系统中,这一差距正在逐步缩小。本文将深入探讨在AMD GPU上实现大模型推理的解决方案与NVIDIA GPU+CUDA的高效解决方案相比性能如何。
机器学习编译(MLC)是一种新兴技术,旨在编译和自动优化机器学习模型。MLC解决方案利用MLC-LLM,轻松阅读源码它建立在Apache TVM Unity之上,后者是一个基于Python的高效开发和通用部署的机器学习编译软件栈。MLC-LLM支持CUDA、Metal、ROCm、Vulkan和OpenCL等后端,涵盖了从服务器级别GPU到移动设备的广泛范围。通过MLC-LLM,用户可以使用基于Python的工作流程获取开源的大语言模型,并在包括转换计算图、优化GPU算子的张量布局和调度以及在感兴趣的平台上本地部署时进行编译。
针对AMD GPU和APU的MLC,有几种可能的技术路线,包括ROCm、OpenCL、Vulkan和WebGPU。ROCm技术栈与CUDA有许多相似之处,而Vulkan是最新图形渲染标准,为各种GPU设备提供了广泛支持。WebGPU是最新Web标准,允许在Web浏览器上运行计算。然而,很少有解决方案支持除了CUDA之外的方法,主要是因为复制新硬件或GPU编程模型的技术栈的工程成本过高。MLC-LLM支持自动代码生成,无需为每个GPU算子重新定制,从而为以上所有方法提供支持。性能优化最终取决于GPU运行时的质量以及在每个平台上的可用性。
在AMD GPU上实现高性能LLM推理的解决方案提供了与NVIDIA GPU相当的性能。ROCm5.6下,AMD XTX可以达到NVIDIA 速度的%,考虑到CUDA性能,MLC-LLM是CUDA上大语言模型推理的最优解决方案,但仍有改进空间,如通过更好的attention算子优化。在查看性能测试结果时,建议放置%的误差。
为了复现性能数据,用户可以利用预构建的安装包和使用说明,确保Linux系统上安装了ROCm 5.6或更高版本的AMD GPU。通过遵循说明安装启用了ROCm的预构建MLC pacakge,运行Python脚本以复现性能数据。此外,MLC-LLM还提供了一个命令行界面CLI,允许用户与模型进行交互式聊天。对于ROCm,需要从源代码构建CLI。
在SteamDeck上运行Vulkan时,使用统一内存最多可达GB,足以运行4位量化的Llama-7B。这些结果为支持更多不同类型的消费者提供了启示。
讨论和未来的方向指出,硬件可用性是生成式AI时代的关键问题。ML编译通过在硬件后端之间提供高性能的通用部署,提高硬件的可用性。基于AMD GPU的解决方案在适当的价格和可用性条件下具有潜力。研究目前重点关注消费级GPU,优化通常可以推广到云GPU。我们有信心该解决方案在云和消费级AMD和NVIDIA GPU之间具有普适性,并将在更多GPU访问权限后更新研究。我们鼓励社区在MLC通用部署流程的基础上构建解决方案。
本文是通过MLC支持高效通用机器学习部署研究的一个阶段性努力,我们正积极地在几个方向上努力推广研究。我们最终的结论是,机器学习系统工程是一个持续的问题。关键问题不仅是构建正确的解决方案,还包括不断更新并解决硬件可用性问题。基于Python的ML编译开发流程使得我们可以在几小时内获得ROCm优化的支持,这在我们探索更多关于通用部署的想法时变得尤为重要。
相关资源包括GitHub上的项目发布、详细指南、MLC LLM的源代码、Discord频道以及运行在浏览器里的LLM解决方案Web-LLM。我们特别感谢CMU、UW、SJTU、OctoML团队成员以及开源社区的支持,特别感谢Apache TVM社区、TVM Unity开发人员、LLaMA、Alpaca、Vicuna团队和huggingface、pytorch等开源社区的帮助。
AMD被黑客叫卖Navi显卡源码,1亿美元出售是真吗?
AMD遭遇严重信息安全事件:1亿美元Navi显卡源码被曝光
近期,AMD在公告中揭示了一起惊人的事件:年底,有人试图联系他们,声称持有AMD图形产品及相关子集的测试文件。这些文件一度在网上传出,但已被删除。AMD强调,虽然这些测试文件非核心机密,但黑客可能还有其他未公开的AMD知识产权(IP)存在。 AMD已果断采取行动,报警并将此事交由刑事调查处理,与执法机构紧密合作,以应对这一威胁。然而,公众对于此事的知晓程度并不高,直到有人在Github上发布了疑似被窃取的Navi显卡源码,最初甚至标价1亿美元,若未达成交易,将公之于众。 AMD已通过法律途径要求Github删除相关源码,公告中明确表示,泄密内容并未涉及其核心产品,似乎在排除7nm Navi显卡源码泄露的可能。此次事件无疑给AMD及其用户带来了不小的忧虑,但AMD的快速反应和法律措施显示了他们对信息安全的重视。硬核观察 # 1/7 的 Linux 内核代码是 AMD GPU 驱动代码
Linux 内核代码的硬核观察揭示了一个显著的事实:AMD GPU 驱动代码占据了内核源代码的1/7以上,具体超过了万行。这其中包括AMD为每代新GPU提供的大量自动生成的头文件,它们就像详尽的文档,反映出AMD对驱动开发的投入。相比之下,英伟达开源的Nouveau驱动代码只有约万行,显示出AMD在内核贡献上的巨大影响力。
尽管AMD在代码贡献上积极主动,但老王对此提出疑问:在内核中不断增加代码是否真的有益?尤其考虑到ReiserFS的命运。曾经流行的ReiserFS日志文件系统因开发者的个人问题而停滞,最终在Linux 5.及后续版本中被标记为废弃。其后,随着主要开发者入狱,ReiserFS项目逐渐消亡,反映出开发者社区对项目污点的敏感和项目延续性的依赖。
另一个例子是Visual Studio for Mac,微软的Mac版开发工具,从开源到闭源,最终被计划在年废弃。VS Mac曾作为.NET IDE,但与Windows版本的差距明显。微软在发现VS Code更受欢迎后,逐渐淘汰边缘项目,而MonoDevelop的开源替代品DotDevelop仍在持续发展中。
AMD 编译概述 & Fatbin 文件生成 & HIP Runtime API(启动 CUDA 核函数)
AMD 平台的术语概览
AMD GPU 计算生态基于 ROCm(Radeon Open Computing platform),ROCm 包括ROC 和 Radeon 等简称,ROC:Radeon 开放计算平台,Radeon 是 AMD GPU 产品的品牌名。ROCm 类似于 CUDA 于 NVIDIA GPU。ROCx 包含 ROCr - ROC Runtime,ROCk - ROC kernel driver, ROCt - ROC Thunk。
HIP(Heterogeneous-Computing Interface for Portability)是一个旨在简化 CUDA 应用程序到便携式 C++ 代码转换的接口,支持 C 风格的 API 和 C++ 内核语言。
HIP-Clang 是 AMDGPU 异构编译器,用于在 AMD 平台上编译 HIP 程序。
HCC(Heterogeneous Compute Compiler)是面向异构设备的开源 C++ 编译器,基于 LLVM + CLANG,实现将并行编程程序转换为 AMD GCN ISA。
在 ROCM v3.5 版本前,HCC 编译器被使用,之后引入了 HIP-Clang 编译器,HCC 编译器不再发展新特性,AMD 公司不再维护。
“HIP化”工具,即 HIPify,能将 CUDA 代码转换为便携式 C++ 代码,自动执行大部分转换工作。
ROCm 计算平台的编译流程包括使用 HIPify 工具转换 CUDA 源码到 HIP 源码,HIP 源码能够在 AMD 或 NVIDIA GPU 上运行。
在 AMD ROCm 平台上,HIP 提供 HIP 运行时 API,实现与应用程序链接的对象库,包括流、事件和内存管理。在 NVIDIA CUDA 平台上,提供头文件,从 HIP 运行时 API 转换为 CUDA 运行时 API,提供内联函数以实现低开销。
在 AMD ROCm 平台生成 Fat Binary 文件,使用 clang-offload-bundler 工具,将针对不同架构的多个 ELF 二进制文件合并成单个捆绑文件。
clang-offload-bundler 工具在编译过程中对翻译单元进行多次编译,生成主机和设备代码对象,然后合并这些代码对象到单个捆绑文件中。
HIP Runtime API 支持 CUDA <<<>>> 核函数语法,通过 hip-clang 编译选项选择 -fhip-new-launch-api,遇到 <<<>>> 时,调用一系列 API 来存储和处理核运行参数,最终通过 hipLaunchKernel API 运行核函数。
在编译过程中,使用 hip-clang 时,会调用 API 来存储核运行参数,然后通过桩函数调用,再通过 hipLaunchKernel API 实现核函数的运行。
API 包括用于初始化和注册函数的 API,如 __hipRegisterFatBinary 和 __hipRegisterFunction,保证 fatbin 文件只加载一次。