Kompute: 通用GPU计算框架助力跨厂商高性能计算

RayRay
KomputeGPU加速机器学习Linux基金会VulkanGithub开源项目

Kompute: 通用GPU计算框架助力跨厂商高性能计算

Kompute是一个基于Vulkan构建的通用GPU计算框架,旨在支持包括AMD、Qualcomm、NVIDIA等多家厂商的数千种显卡。作为一个由Linux基金会支持的开源项目,Kompute具有高速、移动友好、异步和针对高级GPU数据处理场景优化等特点,为开发者提供了一个强大而灵活的GPU计算工具。

核心特性与优势

Kompute的主要特性和优势包括:

  1. 跨厂商支持: 支持AMD、Qualcomm、NVIDIA等多家厂商的显卡,提供广泛的硬件兼容性。
  2. 高性能: 基于Vulkan构建,具有极快的执行速度,适用于要求苛刻的计算任务。
  3. 移动友好: 针对移动环境进行了优化,支持Android NDK跨多种架构的应用开发。
  4. 异步处理: 通过GPU家族队列支持异步和并行处理,提高计算效率。
  5. 灵活性: 采用"自带Vulkan"(BYOV)设计,可以与现有的Vulkan应用程序无缝集成。
  6. 内存管理: 对GPU和主机内存所有权和管理提供清晰的关系定义。
  7. 代码质量: 拥有90%的单元测试覆盖率,确保代码的稳定性和可靠性。
  8. 多语言支持: 提供C++核心SDK和优化的Python绑定,满足不同开发者的需求。
  9. 社区支持: 活跃的社区提供月度会议、Discord聊天等交流渠道。

架构概览

Kompute架构图

Kompute的核心架构包括以下几个主要组件:

  1. Kompute Manager: 基础编排器,负责创建和管理设备及子组件。
  2. Kompute Sequence: 操作容器,可将操作批量发送到GPU执行。
  3. Kompute Operation: 所有操作的基类。
  4. Kompute Tensor: 用于GPU操作的张量结构化数据。
  5. Kompute Algorithm: GPU中执行的(着色器)逻辑抽象。

这种设计使得Kompute能够高效地管理GPU资源和计算任务,为开发者提供了一个强大而灵活的GPU计算框架。

异步和并行操作

Kompute通过vk::Fences提供了异步运行操作的灵活性。此外,Kompute还支持显式分配队列,允许跨队列族并行执行操作。这种设计使得开发者可以充分利用GPU的并行计算能力,显著提高计算效率。

Kompute队列分配

上图展示了Kompute序列如何分配到不同队列以实现基于硬件的并行执行。以NVIDIA 1650为例,它支持跨家族队列的并行化,但不支持同一家族内的并行化。了解硬件的这些特性对于充分发挥Kompute的性能至关重要。

移动端支持

Kompute已针对移动环境进行了优化。其构建系统支持在Android环境中动态加载Vulkan共享库,并为C++头文件提供了可用的Android NDK包装器。这使得开发者可以轻松地将Kompute集成到移动应用中,充分利用移动设备的GPU计算能力。

使用示例

以下是一个简单的GPU乘法示例,展示了如何使用Kompute的C++接口:

void kompute(const std::string& shader) { // 1. 创建Kompute Manager (默认设置:设备0,第一个队列,无扩展) kp::Manager mgr; // 2. 通过manager创建并初始化Kompute Tensors auto tensorInA = mgr.tensor({ 2., 2., 2. }); auto tensorInB = mgr.tensor({ 1., 2., 3. }); auto tensorOutA = mgr.tensorT<uint32_t>({ 0, 0, 0 }); auto tensorOutB = mgr.tensorT<uint32_t>({ 0, 0, 0 }); std::vector<std::shared_ptr<kp::Tensor>> params = {tensorInA, tensorInB, tensorOutA, tensorOutB}; // 3. 基于着色器创建算法(支持缓冲区和推送/规范常量) kp::Workgroup workgroup({3, 1, 1}); std::vector<float> specConsts({ 2 }); std::vector<float> pushConstsA({ 2.0 }); std::vector<float> pushConstsB({ 3.0 }); auto algorithm = mgr.algorithm(params, compileSource(shader), workgroup, specConsts, pushConstsA); // 4. 使用序列同步运行操作 mgr.sequence() ->record<kp::OpTensorSyncDevice>(params) ->record<kp::OpAlgoDispatch>(algorithm) ->eval() ->record<kp::OpAlgoDispatch>(algorithm, pushConstsB) ->eval(); // 5. 异步从GPU同步结果 auto sq = mgr.sequence(); sq->evalAsync<kp::OpTensorSyncLocal>(params); // ... 在GPU完成时异步执行其他工作 sq->evalAwait(); // 打印输出 for (const float& elem : tensorOutA->vector()) std::cout << elem << " "; for (const float& elem : tensorOutB->vector()) std::cout << elem << " "; }

这个例子展示了Kompute的基本使用流程,包括创建管理器、张量、算法,以及执行同步和异步操作。

Python支持

除了C++ SDK,Kompute还提供了Python包,暴露了相同的核心功能,并支持与Python对象(如列表、Numpy数组等)的互操作性。以下是一个简单的Python示例:

def kompute(shader): mgr = kp.Manager() tensor_in_a = mgr.tensor([2, 2, 2]) tensor_in_b = mgr.tensor([1, 2, 3]) tensor_out_a = mgr.tensor_t(np.array([0, 0, 0], dtype=np.uint32)) tensor_out_b = mgr.tensor_t(np.array([0, 0, 0], dtype=np.uint32)) params = [tensor_in_a, tensor_in_b, tensor_out_a, tensor_out_b] workgroup = (3, 1, 1) spec_consts = [2] push_consts_a = [2] push_consts_b = [3] spirv = compile_source(shader) algo = mgr.algorithm(params, spirv, workgroup, spec_consts, push_consts_a) (mgr.sequence() .record(kp.OpTensorSyncDevice(params)) .record(kp.OpAlgoDispatch(algo)) .eval() .record(kp.OpAlgoDispatch(algo, push_consts_b)) .eval()) sq = mgr.sequence() sq.eval_async(kp.OpTensorSyncLocal(params)) sq.eval_await() print(tensor_out_a) print(tensor_out_b)

这个Python示例展示了与C++版本相似的功能,但使用了更加Python化的语法和接口。

项目动机

Kompute项目的诞生源于对现有机器学习和深度学习项目(如PyTorch、TensorFlow、Alibaba DNN、Tencent NCNN等)的观察。这些项目要么已经集成了Vulkan SDK,要么正在考虑集成,以添加移动(和跨厂商)GPU支持。

Vulkan SDK提供了出色的低级接口,可以实现高度专门化的优化。然而,这也带来了代码冗长的代价,通常需要500-2000行代码才能开始编写应用程序代码。这导致每个项目都必须实现相同的基线来抽象Vulkan SDK的非计算相关功能。这种大量非标准化的样板代码可能会导致知识转移受限,增加引入独特框架实现错误的机会等问题。

Kompute的开发并不是为了隐藏Vulkan SDK接口(因为它设计得非常出色),而是为了增强它,直接关注Vulkan SDK的GPU计算能力。Kompute旨在提供一个更高级别的抽象,简化GPU计算的开发过程,同时保留Vulkan的强大功能和灵活性。

总结

Kompute作为一个通用的GPU计算框架,为开发者提供了一个强大而灵活的工具,用于在各种硬件平台上进行高性能计算。它的跨厂商支持、高性能、移动友好性以及异步处理能力,使其成为GPU计算领域的一个重要选择。无论是在机器学习、移动开发还是游戏开发等领域,Kompute都展现出了巨大的潜力。

随着GPU计算在各个领域的应用日益广泛,Kompute这样的框架将在推动技术创新和提高计算效率方面发挥越来越重要的作用。对于希望充分利用GPU计算能力的开发者来说,Kompute无疑是一个值得关注和尝试的项目。

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多