文章摘要
Luminal 是一个旨在加速深度学习项目开发的开源工具,通过优化计算流程和资源管理,显著提升模型训练和推理的速度。其设计理念是让开发者能够以“光速”进行深度学习实验,减少等待时间,提高效率。Luminal 提供了简洁的 API 和强大的性能优化功能,适用于各种规模的深度学习任务。
文章总结
GitHub - luminal-ai/luminal: 光速深度学习
Luminal 是一个深度学习库,通过基于搜索的编译技术实现高性能。其核心目标是成为在任何设备上运行任何模型的最快机器学习框架。
主要特点
- 速度:Luminal 能够在 M 系列 MacBook 上以每秒 15-25 个 token 的速度运行 Q8 Llama 3 8B 模型。
- 简洁性:Luminal 的核心设计始终追求极简,整个核心库可以在一个下午内理解。
- RISC 风格架构:Luminal 的所有操作都归结为 12 种基本操作,如一元操作(Log2、Exp2 等)、二元操作(Add、Mul 等)和其他操作(SumReduce、MaxReduce 等)。这些操作足以支持 Transformer、卷积网络等模型。
- 搜索优化:Luminal 通过搜索所有可能的决策,赋予编译器最大的灵活性,以发现复杂的优化。这使得它能够自动推导出 Flash Attention 等复杂重写,并在未来保持极小的代码库,同时超越许多大型框架的性能。
- 原生支持:Luminal 直接与 CUDA / Metal API 交互,没有中间层或抽象,仅作为一个静态链接的 Rust crate。
- 与 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项目的技术特点、性能优化、与其他框架的对比以及未来发展展开。以下是主要观点和论据的总结:
技术特点与优化:
- 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一直很感兴趣。)
- Luminal通过搜索空间生成大量候选内核,寻找最佳性能配置,涉及GPU线程、内存访问、指令优化等。
性能与对比:
- 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会更有帮助。)
- Luminal在M系列MacBook上运行Q8 Llama 3 8B模型的速度为15-25 tokens/s,目标是成为最快的ML框架。
未来发展与应用:
- 项目可能扩展到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?"(通过测试所有模型,是否可能发现优化内核的简单规则?)
- 项目可能扩展到FPGA加速器和CUDA替代方案(如ROCm)。
与其他框架的差异:
- Luminal与tinygrad、TVM等框架在技术实现和优化方法上存在差异。
- "How do you differ from tinygrad?"(你与tinygrad有何不同?)
- "How is this different from the tuning process in TVM?"(这与TVM的调优过程有何不同?)
- Luminal与tinygrad、TVM等框架在技术实现和优化方法上存在差异。
技术细节与挑战:
- 项目使用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?"(你们使用成本模型进行搜索,还是实际执行内核?)
- 项目使用12个操作符表示输入程序,搜索空间可能存在重复模式。
总结:Luminal项目通过搜索空间优化内核性能,目标成为最快的ML框架,但其性能优势需要与其他框架对比验证。项目未来可能扩展到FPGA和CUDA替代方案,并可能通过发现优化规则减少对元优化器的依赖。技术细节上,项目使用少量操作符表示程序,搜索空间可能存在重复模式,使用成本模型或实际执行内核来优化搜索。