Hacker News 中文摘要

RSS订阅

Show HN: Luminal——开源、基于搜索的GPU编译器 -- Show HN: Luminal – Open-source, search-based GPU compiler

文章摘要

Luminal 是一个旨在加速深度学习项目开发的开源工具,通过优化计算流程和资源管理,显著提升模型训练和推理的速度。其设计理念是让开发者能够以“光速”进行深度学习实验,减少等待时间,提高效率。Luminal 提供了简洁的 API 和强大的性能优化功能,适用于各种规模的深度学习任务。

文章总结

GitHub - luminal-ai/luminal: 光速深度学习

Luminal 是一个深度学习库,通过基于搜索的编译技术实现高性能。其核心目标是成为在任何设备上运行任何模型的最快机器学习框架。

主要特点

  1. 速度:Luminal 能够在 M 系列 MacBook 上以每秒 15-25 个 token 的速度运行 Q8 Llama 3 8B 模型。
  2. 简洁性:Luminal 的核心设计始终追求极简,整个核心库可以在一个下午内理解。
  3. RISC 风格架构:Luminal 的所有操作都归结为 12 种基本操作,如一元操作(Log2、Exp2 等)、二元操作(Add、Mul 等)和其他操作(SumReduce、MaxReduce 等)。这些操作足以支持 Transformer、卷积网络等模型。
  4. 搜索优化:Luminal 通过搜索所有可能的决策,赋予编译器最大的灵活性,以发现复杂的优化。这使得它能够自动推导出 Flash Attention 等复杂重写,并在未来保持极小的代码库,同时超越许多大型框架的性能。
  5. 原生支持:Luminal 直接与 CUDA / Metal API 交互,没有中间层或抽象,仅作为一个静态链接的 Rust crate。
  6. 与 PyTorch 验证:Luminal 通过大量测试确保所有操作的正确性,并与 PyTorch 实现保持一致。

使用示例

Luminal 的使用非常简单。以下是一个基本的矩阵乘法示例:

```rust use luminal::prelude::*;

let mut cx = Graph::new(); let a = cx.tensor((3, 1)).set([[1.0], [2.0], [3.0]]); let b = cx.tensor((1, 4)).set([[1.0, 2.0, 3.0, 4.0]]);

let mut c = a.matmul(b).retrieve(); cx.compile(<(GenericCompiler, CPUCompiler)>::default(), &mut c); cx.execute();

println!("Result: {:?}", c); ```

快速开始

Luminal 还支持在本地运行 Llama 3 8B 模型。用户可以通过以下命令快速上手:

bash cd ./examples/llama bash ./setup/setup.sh cargo run --release --features metal # MacOS (推荐) cargo run --release --features cuda # Nvidia cargo run --release # CPU

未来规划

Luminal 目前正处于 1.0 到 2.0 的过渡阶段,未来计划包括:

  • 扩展搜索空间以更灵活地利用 Tensor Cores
  • 提升 CUDA 支持至与 Metal 相当
  • 添加 Blackwell 架构支持
  • 构建 ROCm 后端
  • 建立基准测试套件
  • 支持分布式数据、管道和张量并行
  • 在 LLM 推理和训练上超越 PyTorch 2.0 的性能

许可证

Luminal 采用 Apache License 2.0 或 MIT 许可证,用户可根据需要选择使用。

通过 Luminal,开发者可以在保持代码简洁的同时,享受到高性能的深度学习体验。

评论总结

评论内容主要围绕Luminal项目的技术特点、性能优化、与其他框架的对比以及未来发展展开。以下是主要观点和论据的总结:

  1. 技术特点与优化

    • Luminal通过搜索空间生成大量候选内核,寻找最佳性能配置,涉及GPU线程、内存访问、指令优化等。
      • "The compiler then programmatically produces a large number of candidate kernels by combining different optimizations and configurations."(编译器通过组合不同的优化和配置,生成大量候选内核。)
      • "Different ways to partition workloads among GPU threads and blocks."(不同的GPU线程和块的工作负载分配方式。)
    • 项目使用Egg/Egglog技术,受到关注。
      • "I see you guys are using Egg/Egglog! I've been mildly interested in egraphs for quite a while."(我看到你们使用了Egg/Egglog!我对egraphs一直很感兴趣。)
  2. 性能与对比

    • Luminal在M系列MacBook上运行Q8 Llama 3 8B模型的速度为15-25 tokens/s,目标是成为最快的ML框架。
      • "Luminal can run Q8 Llama 3 8B on M-series Macbooks at 15-25 tokens per second."(Luminal在M系列MacBook上运行Q8 Llama 3 8B模型的速度为15-25 tokens/s。)
    • 需要与其他框架(如llama.cpp)进行对比,以验证其性能优势。
      • "It would be helpful to also share what tok/s you'd get with llama.cpp or something else on the same hardware."(分享在相同硬件上使用llama.cpp或其他框架的tokens/s会更有帮助。)
  3. 未来发展与应用

    • 项目可能扩展到FPGA加速器和CUDA替代方案(如ROCm)。
      • "What about things FGPA accelerators (maybe taking advantage of TVM's FPGA backend)?"(FPGA加速器如何?也许可以利用TVM的FPGA后端。)
      • "Also, what about CUDA alternatives like ROCm?"(还有像ROCm这样的CUDA替代方案如何?)
    • 项目可能通过发现优化规则,减少对元优化器的依赖。
      • "Is it possible that with all the models you’re testing you’re going to find simple rules to optimize kernels?"(通过测试所有模型,是否可能发现优化内核的简单规则?)
  4. 与其他框架的差异

    • Luminal与tinygrad、TVM等框架在技术实现和优化方法上存在差异。
      • "How do you differ from tinygrad?"(你与tinygrad有何不同?)
      • "How is this different from the tuning process in TVM?"(这与TVM的调优过程有何不同?)
  5. 技术细节与挑战

    • 项目使用12个操作符表示输入程序,搜索空间可能存在重复模式。
      • "Can you give some more insight on why 12 ops suffice for representing your input program?"(能否详细说明为什么12个操作符足以表示输入程序?)
      • "With such a small number of ops, isn’t your search space full of repeat patterns?"(操作符数量如此少,搜索空间是否充满重复模式?)
    • 项目使用成本模型或实际执行内核来优化搜索空间。
      • "Do you use a cost model for the search or are you actually executing kernels?"(你们使用成本模型进行搜索,还是实际执行内核?)

总结:Luminal项目通过搜索空间优化内核性能,目标成为最快的ML框架,但其性能优势需要与其他框架对比验证。项目未来可能扩展到FPGA和CUDA替代方案,并可能通过发现优化规则减少对元优化器的依赖。技术细节上,项目使用少量操作符表示程序,搜索空间可能存在重复模式,使用成本模型或实际执行内核来优化搜索。