LKlight 是 LightDock 核心引擎在 安全 Rust 中的实现。在 lightdock-rust 开创性工作的基础上,对若干生产化场景中的使用限制进行了完善,并通过 rayon 并行 + SIMD 友好热路径 + thread-local scratch 进一步释放性能。相比 Python 参考实现实测加速 3.0–25.5×。
LKlight 基于 LightDock 0.9.4(Python)与 lightdock-rust(Rust 基线)构建。完全 Rust 实现,单文件可执行,跨平台预编译二进制作为 Release assets 分发。
cargo test --lib 全绿,开发阶段 160/160 综合数值对比通过0.9.4(Python)+ lightdock-rust(Rust 基线,已深度修复)LKlight(macOS / Linux / Windows),统一入口 + 13 个子命令fastdfire 为 dfire 兼容别名),全部通过 cargo test --lib 与 Python 参考实现数值验证lightdock-rust 基础上完善 DFIRE 参数加载、ANM stride、非标残基处理与 ANM atom_count 断言等若干生产化场景中的细节LightDock 在开源对接领域独树一帜,lightdock-rust 又为社区贡献了第一个 Rust 移植。LKlight 在前两者的基础上,进一步面向大规模虚拟筛选场景做生产化打磨与性能优化。
lightdock-rust 为社区提供了首个 Rust 实现,奠定了重要基础。在此之上,DFIRE 外部参数加载、ANM stride、非标残基处理等细节,可以面向生产化场景做进一步打磨。GSO 算法的独特价值。 与传统 Monte Carlo 或遗传算法不同,GSO 模拟萤火虫种群通过相互感知萤光素浓度决策移动方向,能够并发维持多个局部极值,更适合高维构象空间的多模态搜索。LightDock v2.0 进一步引入信息驱动约束,支持将实验数据作为对接引导。
致谢与延续。 lightdock-rust 项目为社区贡献了首个 Rust 实现的 LightDock 内核,是 LKlight 工作的直接基础。在该项目的工程框架之上,我们针对若干在生产化使用中观察到的细节进行了补完:
① DFIRE 参数加载:原实现以外部文件方式加载参数矩阵,依赖工作目录正确放置;LKlight 改为include_bytes!编译期内嵌,零外部依赖。
② ANM stride 计算:pisa.rs/ddna.rs/cpydock.rs/sd.rs中 stride 硬编码与某些数据布局不一致,LKlight 统一从nmodes.len() / (3 × num_anm)推导。
③ 非标残基处理:dfire.rs在遇到非标准 20 种氨基酸(配体、修饰残基)时缺少降级路径,LKlight 增加警告与 999 惩罚返回。
④ ANM atom_count 断言:simulator.rs中断言与 ANM 仅覆盖 Cα 原子的事实存在差异,LKlight 改为基于 stride 推导实际原子数。
这些补完不改变原项目的算法设计与工程框架,只为生产化场景去除若干使用门槛。我们也欢迎相关改动以 PR 形式回馈给上游。
面向大规模虚拟筛选的性能空间。 现代药物研发越来越依赖大规模化合物库筛选,百万级配体对接已成常态。LKlight 在 lightdock-rust 的基础上引入 rayon 并行、SIMD 友好热路径、thread-local scratch 复用等多层优化,进一步释放硬件性能。
LKlight 不是简单的语言迁移,而是在 LightDock 与 lightdock-rust 的基础上,为社区补齐「生产化打磨 × 数值可复现 × 性能优化」三个维度。
lightdock-rust 基础上,针对 DFIRE 参数加载、ANM stride、非标残基与 atom_count 断言等若干场景进行系统性补完。全部 12 类评分函数均通过 29/29 单元测试与 160/160 综合数值对比。include_bytes! 内嵌)+ 跨平台预编译(macOS/Linux/Windows)。部署从"安装 Python 环境 + 配置参数路径"简化为 复制 exe 即用。
行业意义:LKlight 与 LightDock、lightdock-rust 共同构成开源 GSO 对接的工具谱系——前两者奠定算法与 Rust 基础,LKlight 则面向大规模生产化场景做进一步打磨与性能优化,相互补充。
LightDock 与 lightdock-rust 各自在算法与工程上有奠基性贡献,LKlight 关注的是面向生产化场景的进一步补完。
| 能力维度 | LKlight | Python LightDock | lightdock-rust | AutoDock Vina |
|---|---|---|---|---|
| 12 类评分函数 | ✓ 全量实现 | ✓ 参考实现 | 部分受外部依赖限制 | 1 类(Vina) |
| ANM 柔性 | ✓ stride 推导补完 | ✓ | stride 实现待完善 | — |
| DFIRE / DFIRE2 / DDNA | ✓ 参数 include_bytes! 内嵌 | ✓ 外部文件 | 外部文件路径依赖 | — |
| 非标残基处理 | ✓ 优雅降级(返回 999) | 警告跳过 | 缺少降级路径 | — |
| 并行化 | rayon par_iter + SIMD | NumPy 隐式 | HashMap 网格 | OpenMP |
| pydock 性能 1PPE · 200 glowworms · 100 步 |
290 ms | 858 ms | 7,693 ms | — |
| dfire 性能 | 33 ms | 840 ms | 需先解决参数文件路径 | — |
| dna+ANM 性能 | 46 ms | 760 ms | 14,142 ms | — |
| 部署方式 | 单文件 exe 零依赖 | Python + NumPy 环境 | 外部参数文件 | 单文件 |
| 跨平台 | macOS · Linux · Windows | 三平台 | macOS arm64 | 三平台 |
| 测试覆盖 | 29/29 单元 + 160/160 数值对比 | 参考基准 | 基础测试 | — |
核心差异化:LKlight 在「12 类评分函数全量 × 生产化打磨 × 数量级加速 × 单文件零依赖 × 三平台」五个维度上做了系统性整合,特别适合 大规模虚拟筛选、抗体-抗原对接流水线、ANM 柔性蛋白-DNA 对接 等需要长时间稳定运行的场景。算法与工程基础来自 LightDock 与 lightdock-rust,特此致谢。
测试环境:macOS arm64(Apple Silicon),单 swarm,200 glowworms,100 步,每项 3 次重复取均值。以下为 Python 参考实现与 lightdock-rust 的详细对比数据(与上游项目的差异主要源于并行策略与热路径优化,非算法调整)。
| 测试场景 | Python (ms) | lightdock-rust (ms) | LKlight (ms) | vs Python | vs lightdock-rust |
|---|---|---|---|---|---|
| 1PPE pydock 胰蛋白酶-BPTI · 357K 原子对 |
858 | 7,693 | 290 | 3.0× | 26.5× |
| 1PPE dfire DFIRE 统计势 |
840 | 需外部参数文件 | 33 | 25.5× | — |
| 1AZP dna+ANM 蛋白-DNA · ANM 模式 |
760 | 14,142 | 46 | 16.5× | 307× |
| 1PPE cpydock cpyDOCK · 含去溶剂化 |
844 | 7,158 | 44 | 19.2× | 163× |
性能说明:对 Python 参考实现的 25.5× dfire 加速中,主要贡献来自 rayon 多核并行(8 核 × ~3× SIMD = ~24×)。与 lightdock-rust 的差异来自并行策略选择(受体原子外循环并行 vs HashMap 空间网格)与热路径连续化,非算法本身差异。
LightDock 是一个基于 萤火虫群优化(Glowworm Swarm Optimization, GSO)算法的开源分子对接框架,由巴塞罗那超级计算中心开发,提供 12 种评分函数,支持蛋白-蛋白、蛋白-DNA 及抗体-抗原对接,并原生支持 各向异性网络模型(ANM) 柔性。
lightdock-rust 项目又为社区贡献了首个 Rust 移植,奠定了重要的工作基础。LKlight 在这些工作之上,面向 大规模虚拟筛选与生产化部署 场景进行进一步打磨与性能优化。
具体而言,LKlight 在 lightdock-rust 基础上进行了 四项生产化补完:(i) DFIRE/DFIRE2/DDNA 参数以 include_bytes! 编译期内嵌,免外部文件依赖;(ii) ANM stride 统一从数据推导,适配不同输入布局;(iii) dfire.rs 为非标准残基增加优雅降级路径;(iv) simulator.rs 从数据推导 ANM 原子数,使含 ANM 的任务顺利运行。
在此基础上,LKlight 进一步应用 多层次性能优化策略:rayon 并行化受体原子外循环、SIMD 友好的连续热路径、thread_local! scratch buffer 复用(消除每步堆分配)、SD 评分的 3D 空间哈希网格(9 Å 截断,真正 O(N²)→O(N) 稀疏化)、BufWriter I/O 批写。
基准测试(macOS arm64,200 glowworms,100 steps,n=3)显示:相比 Python 参考实现 提速 3.0–25.5×,与lightdock-rust的差异主要来自并行策略选择与热路径连续化(非算法调整)。公开cargo test --lib全绿,开发阶段 160/160 综合数值对比通过。
以下为 LKlight 在 lightdock-rust 基础上针对生产化场景进行的几项补完。原项目为社区提供了首个 Rust LightDock 实现的重要工作基础,这些完善主要面向部署在多台机器、遇到多样化输入的大规模场景。
include_bytes! 或常量数组形式嵌入二进制,零外部依赖,方便于在批量部署场景使用。pisa.rs / ddna.rs / cpydock.rs / sd.rs 中 ANM 原子 stride 原实现为固定 3 × n_atoms,在部分输入上与实际 nmodes.len()/(3 × n_modes) 存在差异。LKlight 统一从数据推导:nm_n = nmodes.len() / (3 * num_anm),并加入 bounds guard。new() 遇到未知残基时发出警告并 continue 跳过;energy() 对未知残基类型 返回 999(最大惩罚值),仅该配对贡献为惩罚,不影响整体运行。simulator.rs atom_count 一致性assert_eq!(model.atom_count(), anm_atoms) 隐含“ANM 覆盖全原子”的假设,但 ANM 一般仅覆盖 Cα 原子。LKlight 改为基于 stride 推导实际 ANM 原子数,让含 ANM 的对接任务能顺利运行。性能突破是多项优化的联合效果,其中最关键的发现是:大截断距离下 HashMap 空间网格反而降速(因为 30 Å 截断时网格几乎不剪枝,查询开销占比高)。撤回 HashMap 网格后改用 rayon 并行化,效果显著。
(rec_vdw[i] * lig_vdw[j]).sqrt() 每次调用约 20 cycles。预计算 sqrt_vdw_charges 字段,热路径替换为乘法swarm.rs save() 将每行一次 write syscall 合并为批量写出,显著减少 I/O syscallqt::rotate() 返回 [f64;3](栈上),Glowworm.translation 由 Vec<f64> 改为 [f64;3],消除 GSO 运动阶段的频繁小向量分配pos_scratch / rot_scratch 字段在 movement_phase() 中 resize + fill 复用,替代每步 Vec::new() + push()rayon par_iter_mut。预生成 randoms 序列解决线程安全,通过字段级分借(glowworms/pos_s/rot_s 来自不同字段)满足借用检查target-cpu=native 观察硬件上限12 类评分函数均经过独立 Rust 实现,并在开发阶段与 Python 参考值进行数值验证(160/160);公开仓库保留 cargo test --lib 单元测试(29/29)。
| 评分函数 | 类别 | 截断距离 | ANM | 关键特性 |
|---|---|---|---|---|
dfire / fastdfire |
统计势 | 15 Å | ✓ | DFIRE 参数内嵌,残基对距离索引 |
dfire2 |
统计势 | 15 Å | ✓ | DFIRE2 参数内嵌 |
dna |
物理化学 | 30 Å elec / 10 Å vdw | ✓ | DNA-蛋白质专用参数 |
mj3h |
知识势 | 7.5 Å | ✓ | MJ 残基接触矩阵 |
pydock |
物理化学 | 30 Å elec / 10 Å vdw | ✓ | Coulomb 静电 + LJ vdW |
cpydock |
物理化学+溶剂 | 30 Å elec / 6.4 Å solv | ✓ | pydock + 去溶剂化 |
sd |
溶剂化 | 9 Å | ✓ | ASA 加权接触去溶剂化(F2 空间网格 ✓) |
vdw |
物理 | 10 Å | ✓ | 纯 LJ van der Waals |
pisa |
统计势 | 8.5 Å | ✓ | PISA 原子接触统计 |
sipper |
统计势 | 8.5 Å | × | 残基对接触势 |
tobi |
统计势 | 12 Å | ✓ | TOBI 原子对势,消除 sqrt |
ddna |
统计势 | 15 Å | ✓ | dDNA 统计势 |
公开发布的 LKlight 单二进制入口覆盖 LightDock 常用工作流、分析工具与辅助格式转换。
| 子命令 | 功能 |
|---|---|
setup | 从 PDB 生成 setup.json + swarm 初始目录;支持 --anm 与约束文件 |
run | 对指定 swarm 运行 GSO 优化 |
generate | 生成 top 构象 PDB · ANM-aware 坐标重构 |
cluster | DBSCAN 式聚类 |
rank / rank_swarm | 汇总全部 swarm 或逐 swarm 排名 |
top | 从 ranking 生成 Top-N PDB |
filter | 根据 restraints 过滤 ranking |
score | 对 PDB 单点评分,可传平移/四元数 |
pipeline | 一条命令完成 setup + run + rank + top |
LKlight v1.0.0 已在 GitHub 发布。源码完全开源(GPL-3.0),预编译二进制覆盖 macOS / Linux / Windows 三平台。产出单文件 LKlight,无需任何外部依赖。特别感谢 LightDock 与 lightdock-rust 的奠基性工作。