Lux.jl
Lux.jl 是一个专为 Julia 语言打造的深度学习库,旨在将代码的优雅性与极致的运行性能完美结合。它主要解决了传统深度学习框架在灵活性与执行效率之间难以兼顾的痛点,让研究人员和开发者无需在“易读的科研代码”与“高效的生产部署”之间做妥协。
这款工具特别适合熟悉或希望使用 Julia 进行科学计算的研究人员、算法工程师以及高性能计算开发者。如果你正在探索需要快速原型验证且对计算速度有严苛要求的 AI 模型,Lux.jl 是理想的选择。
其核心技术亮点在于独特的架构设计:既保留了 Julia 语言本身简洁、直观的语法风格,便于构建复杂的神经网络结构;又在底层深度集成了 XLA(加速线性代数)编译器技术。这意味着用户编写的代码不仅能像数学公式一样清晰易读,还能自动编译优化,获得媲美底层硬件加速的执行速度。此外,Lux.jl 拥有活跃的社区支持和完善的文档体系,并支持在 Google Colab 等云端环境中直接运行,极大地降低了上手门槛,帮助用户更专注于算法创新而非工程调优。
使用场景
某生物计算实验室的研究团队正试图利用 Julia 语言构建高精度的蛋白质折叠预测模型,以加速新药研发过程中的分子动力学模拟。
没有 Lux.jl 时
- 性能瓶颈严重:直接使用基础 Julia 数组操作或调用外部 Python 库(如 PyTorch)导致数据在内存间频繁拷贝,训练大规模神经网络时速度缓慢,难以利用 XLA 加速。
- 代码风格割裂:为了追求性能被迫混合使用 Python 和 Julia 两种语言,破坏了 Julia 原生代码的优雅性与类型稳定性,调试和维护成本极高。
- 生态集成困难:现有的深度学习框架缺乏对 Julia 科学计算生态(如 DifferentialEquations.jl)的原生支持,导致将物理约束融入神经网络时接口复杂且易出错。
- 硬件适配繁琐:在不同 GPU 后端切换时需要重写大量底层代码,缺乏统一的抽象层来自动处理硬件加速细节。
使用 Lux.jl 后
- 极致运行效率:Lux.jl 原生集成 XLA 编译技术,无需离开 Julia 环境即可实现接近硬件极限的训练速度,大幅缩短了模型迭代周期。
- 纯 Julia 优雅开发:团队完全使用纯 Julia 编写模型,既保留了语言的数学表达力与类型安全,又享受到了高性能深度学习框架的全部功能。
- 无缝科算融合:凭借原生兼容性,研究人员轻松将微分方程求解器与神经网络结合,快速实现了“物理信息神经网络”(PINN)的复杂架构。
- 灵活后端切换:通过简单的参数配置即可在 CPU、GPU 及不同加速器之间无缝切换,底层自动优化算子,让开发者专注于算法逻辑而非硬件适配。
Lux.jl 成功打破了高性能计算与优雅编程之间的壁垒,让科研人员能在单一语言环境中同时获得工业级的训练速度与科学级的开发体验。
运行环境要求
- Linux
- macOS
- Windows
- 非必需
- 支持通过 LuxCUDA.jl 进行 GPU 加速(通常需 NVIDIA GPU 及对应 CUDA 驱动),具体显存和 CUDA 版本取决于底层后端(如 XLA/CUDA)的配置,文中未明确限定最低要求
未说明

快速开始
优雅且高性能的 Julia 语言深度学习框架
以 Julia 的优雅语法构建模型,同时享受 XLA 带来的卓越性能。
💻 安装
import Pkg
Pkg.add("Lux")
[!TIP] 如果想在线使用 Lux,可以使用 Google Colab。Colab 已预装了 Julia 运行时环境以及 Lux 和 Reactant!
| 软件包 | 稳定版本 | 月下载量 | 总下载量 | 构建状态 |
|---|---|---|---|---|
| 📦 Lux.jl | ![][lux-version] | [![][downloads-lux]][downloads-lux-url] | [![][total-downloads-lux]][downloads-lux-url] | |
| └ 📦 LuxLib.jl | ![][luxlib-version] | [![][downloads-luxlib]][downloads-luxlib-url] | [![][total-downloads-luxlib]][downloads-luxlib-url] | |
| └ 📦 LuxCore.jl | ![][luxcore-version] | [![][downloads-luxcore]][downloads-luxcore-url] | [![][total-downloads-luxcore]][downloads-luxcore-url] | |
| └ 📦 MLDataDevices.jl | ![][mldatadevices-version] | [![][downloads-mldatadevices]][downloads-mldatadevices-url] | [![][total-downloads-mldatadevices]][downloads-mldatadevices-url] | |
| └ 📦 WeightInitializers.jl | ![][weightinitializers-version] | [![][downloads-weightinitializers]][downloads-weightinitializers-url] | [![][total-downloads-weightinitializers]][downloads-weightinitializers-url] | |
| └ 📦 LuxTestUtils.jl | ![][luxtestutils-version] | [![][downloads-luxtestutils]][downloads-luxtestutils-url] | [![][total-downloads-luxtestutils]][downloads-luxtestutils-url] | |
| └ 📦 LuxCUDA.jl | ![][luxcuda-version] | [![][downloads-luxcuda]][downloads-luxcuda-url] | [![][total-downloads-luxcuda]][downloads-luxcuda-url] |
🚀 基准测试
目前基准测试分散在几个地方:
- 若要与其他 Julia 包(如 CUDA.jl)进行比较,请查看 Lux.jl/perf。
- https://enzymead.github.io/Enzyme-JAX/benchmarks/ 展示了 EnzymeJAX(Reactant.jl 的后端)与 JAX 的性能对比。
- https://enzymead.github.io/Reactant.jl/benchmarks/ 展示了 Reactant.jl 与默认 XLA 和基础 Julia 编译之间的性能对比。
🤸 快速入门
反应物与酶
using Lux, Random, Optimisers, Reactant, Enzyme
rng = Random.default_rng()
Random.seed!(rng, 0)
model = Chain(Dense(128, 256, tanh), Chain(Dense(256, 1, tanh), Dense(1, 10)))
dev = reactant_device()
ps, st = Lux.setup(rng, model) |> dev
x = rand(rng, Float32, 128, 2) |> dev
# 我们需要编译模型才能使用它。
model_forward = @compile model(x, ps, Lux.testmode(st))
model_forward(x, ps, Lux.testmode(st))
# 梯度可以使用Enzyme计算
@jit Enzyme.gradient(Reverse, sum ∘ first ∘ Lux.apply, Const(model), x, ps, Const(st))
# 所有这些都可以通过TrainState API自动化
train_state = Training.TrainState(model, ps, st, Adam(0.001f0))
gs, loss, stats, train_state = Training.single_train_step!(
AutoEnzyme(), MSELoss(),
(x, dev(rand(rng, Float32, 10, 2))), train_state
)
原生 Julia 与 Zygote
using Lux, Random, Optimisers, Zygote
# using LuxCUDA, AMDGPU, Metal, oneAPI # GPU支持的可选包
# 种子设置
rng = Random.default_rng()
Random.seed!(rng, 0)
# 构建层
model = Chain(Dense(128, 256, tanh), Chain(Dense(256, 1, tanh), Dense(1, 10)))
# 获取由Lux决定的设备
dev = gpu_device()
# 参数和状态变量
ps, st = Lux.setup(rng, model) |> dev
# 虚拟输入
x = rand(rng, Float32, 128, 2) |> dev
# 运行模型
y, st = Lux.apply(model, x, ps, st)
# 梯度
## 首先构建一个TrainState
train_state = Lux.Training.TrainState(model, ps, st, Adam(0.0001f0))
## 我们可以使用Training.compute_gradients计算梯度
gs, loss, stats, train_state = Lux.Training.compute_gradients(AutoZygote(), MSELoss(),
(x, dev(rand(rng, Float32, 10, 2))), train_state)
## 优化
train_state = Training.apply_gradients!(train_state, gs) # 或者Training.apply_gradients(没有`!`结尾)
# 这两个步骤可以合并为一次调用
gs, loss, stats, train_state = Training.single_train_step!(AutoZygote(), MSELoss(),
(x, dev(rand(rng, Float32, 10, 2))), train_state)
📚 示例
请查看examples目录中的独立使用示例。文档中也有按类别整理的示例。
🆘 寻求帮助
如有关于使用的问题,请使用Github Discussions,这样问题和答案都能被索引。如需报告bug,请使用Github Issues,或者更好的是提交一个Pull Request。
🧑🔬 引用
如果您在学术工作中发现本库很有用,请引用以下内容:
@software{pal2023lux,
author = {Pal, Avik},
title = {{Lux: Explicit Parameterization of Deep Neural Networks in Julia}},
month = apr,
year = 2023,
note = {If you use this software, please cite it as below.},
publisher = {Zenodo},
version = {v1.4.2},
doi = {10.5281/zenodo.7808903},
url = {https://doi.org/10.5281/zenodo.7808903},
swhid = {swh:1:dir:1a304ec3243961314a1cc7c1481a31c4386c4a34;origin=https://doi.org/10.5281/zenodo.7808903;visit=swh:1:snp:e2bbe43b14bde47c4ddf7e637eb7fc7bd10db8c7;anchor=swh:1:rel:2c0c0ff927e7bfe8fc8bc43fd553ab392a6eb403;path=/}
}
@thesis{pal2023efficient,
title = {{On Efficient Training & Inference of Neural Differential Equations}},
author = {Pal, Avik},
year = {2023},
school = {Massachusetts Institute of Technology}
}
同时,也请给我们的Github仓库点个赞。
🧑💻 贡献
本节内容尚不完整。您可以通过完善本节来做出贡献 😜。
💎 格式化(JuliaFormatter)
[!NOTE] 在v2的上游问题解决之前,请将JuliaFormatter固定在v1版本。
using JuliaFormatter
format(".")
🧪 测试
Lux.jl的完整测试耗时较长,以下是测试部分代码的方法。
测试按目录组织,每个目录包含带有@testset块的测试文件。例如,SkipConnection的测试位于test/core_layers/containers_tests.jl中。
运行特定测试文件
运行特定测试最简单的方式是直接激活测试目录并包含该测试文件:
# 从Lux.jl根目录
using Pkg
Pkg.activate("test")
# 运行特定测试文件
include("test/core_layers/containers_tests.jl")
这种方法允许您快速迭代特定测试,而无需运行整个测试套件。
有关执行特定测试组的详细信息,请参阅ParallelTestRunners.jl。
通过CI运行测试组
要通过测试运行程序运行特定测试组,可以将目录名称作为位置参数传递:
julia --project -e 'using Pkg; Pkg.test(test_args=["core_layers"])'
运行所有测试
要运行完整的测试套件:
julia --project -e 'using Pkg; Pkg.test()'
📖 文档
Lux在其文档中创建了许多教程。这可能非常耗时且需要大量计算资源。为了加快构建速度,您可以设置LUX_DOCS_DRAFT_BUILD=true。
LUX_DOCS_DRAFT_BUILD=true julia --threads=auto --startup=no --project=docs docs/make.jl
在编写教程(任何位于examples/下的内容)时,请将其包含在docs/tutorials.jl中。如果教程耗时较长,可以将should_run设置为false。
此外,若要将新页面纳入导航和侧边栏,需要将其添加到docs/src/.vitepress/config.mts中。具体来说,需要根据页面类型将其添加到sidebar和/或nav中。
要使用LiveServer在本地预览文档,请参阅DocumenterVitepress.jl的文档。
版本历史
LuxLib-v1.15.62026/03/28LuxLib-v1.15.52026/03/26LuxTestUtils-v2.3.02026/03/25MLDataDevices-v1.17.52026/03/19v1.31.32026/02/03LuxLib-v1.15.42026/02/03LuxLib-v1.15.32026/02/03v1.31.22026/02/03MLDataDevices-v1.17.42026/02/02MLDataDevices-v1.17.32026/01/30v1.31.12026/01/29v1.31.02026/01/29LuxTestUtils-v2.2.02026/01/25v1.30.02026/01/24v1.29.62026/01/23v1.29.52026/01/23MLDataDevices-v1.17.22026/01/20v1.29.42026/01/20LuxCore-v1.5.32026/01/20LuxLib-v1.15.22026/01/17常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备