news 2026/9/12 17:10:03

SurrealML 如何本地构建 Rust 二进制、训练模型并运行 core 库测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SurrealML 如何本地构建 Rust 二进制、训练模型并运行 core 库测试

SurrealML 如何本地构建 Rust 二进制、训练模型并运行 core 库测试

【免费下载链接】surrealdbA scalable, distributed, collaborative, document-graph database, for the realtime web项目地址: https://gitcode.com/GitHub_Trending/su/surrealdb

要在 SurrealDB 仓库中本地跑通 SurrealML 的 Python 测试与 Rustcore库测试,需要依次完成三件事:先编译 Rust 二进制并把动态库放到 Python 包能引用的位置,再按机器学习框架分别训练测试模型,最后用 feature 参数只运行对应框架的core库测试。SurrealML 的模型存储与执行逻辑是用 Rust 实现的,所以 Python 测试实际引用的是编译出来的 Rust 库;测试 README 明确指出:如果 Rust 二进制没有编译,单元测试会因为引用到不存在的二进制而失败。

准备条件

以下要求来自 surrealml/tests/README.md 与 surrealml/README.md:

  • 机器上有python3(编译脚本要用python3 -m venv创建虚拟环境)和 Rust 工具链(pip install会触发 Rust 编译)。
  • 每个机器学习库(Scikit Learn、PyTorch、TensorFlow、ONNX)都要用独立的 Python 环境。README 说明原因:各机器学习库之间存在依赖冲突。
  • 如果你还要把模型上传到 SurrealDB 节点上运行,需要 SurrealDB 已安装并运行;只跑本文章的本地构建与测试时不涉及服务器。
  • 注意 SurrealML 当前仓库结构与测试脚本假设的路径不完全一致:脚本在代码里按modules/core、包目录surrealml/等旧布局解析路径(见 build_assets.py),而当前仓库中模型目录实际是 surrealml/core/model_stash/。本文按仓库文档给出命令,执行时以你机器上的实际目录为准。

编译 Rust 二进制:运行 local_build.py

surrealml包根目录下执行(对应当前仓库的surrealml/目录):

python tests/scripts/local_build.py

运行前提,README 逐条列出:

  • 必须处于 repo 根目录;
  • 运行前不要激活任何虚拟环境,因为脚本会自建一个临时虚拟环境用于构建。

副作用必须清楚:脚本 local_build.py 开始时会清理旧文件,删除tests/venvbuild/surrealml.egg-infotarget/这些目录以及包内已有的rust_surrealml.so,然后新建 venv、执行pip install编译 Rust 库,并把产物移动到包目录、命名为rust_surrealml.so。这些目录如果包含你的本地改动,会直接丢失,执行前自行确认。

脚本完成后,Python 测试就能引用到rust_surrealml.so。这一步存在的意义,README 的表述是:模型在 Python 包内本地能跑,就能保证在生产环境的 Rust 里以同样的方式跑。

训练测试模型:每个框架一个独立环境

surml目标支持能转换为 ONNX 的模型。为了保持反馈闭环,测试集是围绕刚训练出来的模型跑的;由于各机器学习库依赖冲突,训练与生成脚本按框架拆成了独立文件。在对应框架的独立环境里,从surrealml包根目录执行:

# Scikit Learn python tests/model_builder/sklearn_assets.py # PyTorch python tests/model_builder/torch_assets.py # TensorFlow python tests/model_builder/tensorflow_assets.py # ONNX python tests/model_builder/onnx_assets.py

这些脚本会训练模型并把产物存到测试所需的位置,训练产物落在core/model_stash/下,按框架分目录,每个框架下有surml/onnx/两个子目录(以 surrealml/core/model_stash/ 的结构为准)。各脚本自己pip install固定版本依赖,例如 sklearn_assets.py 安装skl2onnx==1.16.0scikit-learn==1.4.0,onnx_assets.py 安装onnx==1.16.0scikit-learn==1.4.0skl2onnx==1.16.0;脚本会先删除该框架的 stash 子目录再重新生成。

如果你刚克隆仓库,或者要为 CI 流程准备模型,README 提醒需要确保在依赖这些模型之前运行 build_assets.py。与上面的单框架脚本不同,它会一次性训练 sklearn、onnx、torch、tensorflow 四套模型,并且会先删除整个model_stash目录再重建、结束前删除.surmlcache。只训练某个框架时不要误用这个全量入口。

运行 core 库测试

core库的测试逻辑是:加载surml文件,并对从surml文件加载的模型执行一次推理(见 surrealml/core/README.md)。因为你可能只针对某个机器学习库训练了模型,README 要求测试也只跑那个库。先cdcore目录(测试 README 写作cd ../core),再按已训练的框架选择 feature:

# Scikit Learn cd ../core && cargo test --features sklearn-tests # PyTorch cd ../core && cargo test --features torch-tests # TensorFlow cd ../core && cargo test --features tensorflow-tests # ONNX cd ../core && cargo test --features onnx-tests

这些 feature 开关在 surrealml/core/Cargo.toml 中定义:sklearn-testsonnx-teststorch-teststensorflow-tests(另有gpu,README 未给出本地用法)。cargo test通过即说明该框架的surml模型加载与推理测试通过;没有测试通过的输出即代表失败。

编译core时还有两个与运行环境相关的设置,来自 surrealml/core/README.md:

  • 默认不配置任何东西时,crate 会把 ONNX runtime 直接编译进二进制,不需要单独安装 ONNX runtime,也不会有与其他 runtime 的版本冲突。
  • 使用这个 crate 时,ONNX 版本必须和客户端一致;core README 声明当前 Surml 版本的 ONNX 是1.16.0
  • 如果想改用系统已安装的 ONNX runtime,在编译 crate 之前设置环境变量ONNXRUNTIME_LIB_PATH指向它;README 说明 Nix 环境目前不直接支持默认编译方式,必须定义该变量。

可选:用 Docker 容器跑一遍 CI 检查

surrealml/README 提供了一条不依赖上面手工环境的替代路径,在仓库中执行:

cargo make --no-workspace preflight

它会在一组 docker 容器里运行动态 C 库加载测试,以及sklearntensorflowpytorchcore测试。需要可用的 docker 环境;它与上面的本地路径是二选一的关系,不需要同时执行。

【免费下载链接】surrealdbA scalable, distributed, collaborative, document-graph database, for the realtime web项目地址: https://gitcode.com/GitHub_Trending/su/surrealdb

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 17:04:12

南昌壁挂炉上门维修 本地靠谱师傅 不点火、故障码、漏水维修

南昌壁挂炉上门维修 本地靠谱师傅 不点火、故障码、漏水维修家里壁挂炉突发故障?不点火、无热水、采暖不热、屏幕跳故障码、漏水异响、水压异常,不用盲目找维修。壁挂炉集成燃气、水路、电控、采暖多套系统,维修需精准检测故障根源&#xff0…

作者头像 李华
网站建设 2026/9/12 17:03:50

Agentic RAG:智能体增强的检索生成技术解析

1. Agentic RAG:当检索增强生成遇上AI智能体 如果你最近关注AI领域的发展,一定对RAG(检索增强生成)技术不陌生。但传统的RAG就像是一个只会照本宣科的考生——给它一本书,它就能在考试中表现得不错;但如果问…

作者头像 李华
网站建设 2026/9/12 17:02:14

GA-VMD参数自适应寻优:旋转机械故障诊断中的振动信号处理实践

简介:遗传算法优化VMD(GA-VMD)技术结合遗传算法与变分模态分解,面向非线性、非平稳信号分析需求,适用于电力系统故障诊断、机械健康监测、声音识别等场景。资源包共27个文件,以15个Matlab脚本为核心&#x…

作者头像 李华