我通过cargo.toml
文件将tensorflow添加到我的rust项目中,看起来像这样:
#...
[dependencies]
tensorflow = { version = "0.20.0", features = ["tensorflow_gpu"] }
当省略"tensorflow_gpu"
特性时,项目的构建和运行都没有问题。但是当使用"tensorflow_gpu"
功能构建时,它会崩溃并出现错误:
--- stderr
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: InvalidArchive("Could not find central directory end")', E:\rust\cargo\registry\src\github.com-1ecc6299db9ec823\tensorflow-sys-0.23.0\build.rs:154:45
我发现错误似乎是在构建脚本中,错误的"libtensorflow-gpu-windows-x86_64-2.11.0.zip"
下载了。
构建脚本输出指出,它试图下载"binary_url = "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-windows-x86_64-2.11.0.zip"
,但经过一番研究,我发现Windows上最后一个稳定的tensorflow GPU版本是2.10.0
,因此无法下载2.11.0
,从而导致unzip调用崩溃,因为该zip不存在。
搜索tensorflow-sys-0.23.0
的build.rs
文件,我发现VERSION
常量的计算结果为"2.11.0"
和格式表达式:
let binary_url = format!(
"https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-{}-{}-{}-{}{}",
proc_type,
os,
target_arch(),
VERSION,
ext
);
生成二进制URL。
我尝试将VERSION常量更改为"2.10.0"
,并将格式表达式更改为
let binary_url = format!(
"https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-{}-{}-{}-2.10.0{}",
proc_type,
os,
target_arch(),
ext
);
如果proc_type是"gpu"
。但是构建脚本仍然记录了错误的binary_url
,版本号为"2.11.0"
,所以我对www.example.com文件所做的更改build.rs似乎没有效果。我想依靠旧版本的tensorflow应该可以解决这个问题,但是我不能使用现代的tensorlfow功能,我也不想尝试它们,所以这应该是我最后的选择。那我能做什么呢
1条答案
按热度按时间1zmg4dgp1#
不要更改代码
let binary_url = format!(...
,而是尝试更改build.rs:如果build.rs你只是运行
cargo build
,www.example.com将不会重新编译,而是运行cargo clean -p tensorflow-sys
然后编译。对我很有效。另外,我在Github中看到了一个问题:https://github.com/tensorflow/rust/issues/400