#3900·candle

CUDA 在链接时被绑定,因此未安装 CUDA 的二进制文件无法启动

作者: nabbisen创建于 2026年8月17日更新于 2026年8月25日

下游消费者:arama,是本地首个使用"烛台-核心","烛台-nn","烛台-收发机"的桌面应用,用于CLIP和wav2vec2.

我们想将** 1 ** 二进制给终端用户,在出现时使用GPU,否则会掉回CPU. 我们的设备选择已经这样做了:

[Rust] 设备: new cuda( 0).unwrap or(DEVice: new metal( 0).unwrap or(DEVice::Cpu)).


但是,它从未运行在一台没有CUDA的机器上,因为这个过程在"主"之前在OS加载器中失败了. 我们无法从消费者的“Cargo.toml”中找到一条出路,

**1. “烛芯”硬码Cudarc的“动态链接”。 **

时间轴:
#蜡烛-核心-0.11.0/ Cargo.toml #
[从属. cudarc].
特征 = [. "cuda-version- from-build-system","动态链接"]
默认特征 = 假

" cudarc " 0.19提供 " 动力加载 " ,包括 " 倒回动力加载 " 本身的默认——蜡烛禁用默认并选择链接时间约束。

**2. 蜡烛-内核'建造'rs'链接cudart'无条件。 **

2zz
///蜡烛-内核-0.11.0/建设.rs.
println! ("cargo:rustc-link-lib=dylib=cudart"); //无特性/cfg 守护

这是为什么单靠补丁(1)是不够的——一个装入Cudarc的建筑仍无法找到库-lcudart。 它被附着在静态编译的MoE内核上;正常的PTX/NVRTC路径不需要.

有什麽能幫到我們?

作为建议而不是要求而提供的,你会有我们没有的背景:

  • Candle-core:选择cudarc运行时间加载模式的一种方式,默认行为不变.
  • X-Candle-内核+:在功能背后标注MOE的静态构建(及其"cudart"链接),因此不使用MOE的消费者不会获得内核的负载时间CUDA依赖性.

我们在当地尝试的

两者都在当地发生变化后,用 " Cuda " 建造了一个探测器二进制:

$ redelf - d 探测器 需要 grepEd
[libgcc s.so.1] [libc.so.6] [ld-linux-x86-64.so.2] (英语).

动态依赖列表中没有CUDA——所以它从任何地方开始. CUDA仍然在工作:在一台RTX 5060 Ti / CUDA 13.3上,`Device:new cuda (0)'返回了一个真正的装置,并在GPU上通过装载路径执行的512×512"matmul".

我们没有打开公关 因为形状是你的选择, 特别是(2), 在那里,我们的地方改变 * 移动 * 教育部建设而不是吃它, 这适合我们, 但不会适合每个人。 很高兴发送补丁, 探测器箱, 或完整的建设日志, 并乐于打开 PR 对抗任何你喜欢的设计。

如果这不是你想要改变的,那真的很好——知道哪一种方法都让我们在携带本地补丁和运送两个二进制货之间做出选择。 谢谢你的蜡烛.

内容来源: huggingface/candle