朱莉娅工作进程加载ZLIB共享库时出错,而本地进程运行正常。我如何也可以使工作程序正常工作?

时间:2019-07-15 17:33:33

标签: julia

我正在使用Metalhead(https://github.com/FluxML/Metalhead.jl)做一些图像识别工作。我可以运行Metalhead.preprocess("filename.jpg"),它在交互式解释器中可以正常工作。据我所知,Metalhead在后台调用了ImageMagick,它使用ZLIB和其他专门为ImageMagick下载并链接的库。它不应该使用系统ZLIB。在启动Julia之前,我可以取消LD_LIBRARY_PATH的设置,它可以正常运行。

当我有一个远程工作者尝试执行Metalhead.preprocess(...)时,即使在同一条路径上,也会出现错误:

From worker 2:     in zipin zipError encountered while loading "/tmp/5b7e9947-ddc0-4b3f-9b55-0d8042f74170.jpeg".
From worker 2:    Fatal error:in zip
From worker 2:    InitError: error compiling __init__: could not load library "/mnt/N0221768/.julia/packages/ImageMagick/vMfoS/deps/usr/lib/libMagickWand-6.Q16.so"
From worker 2:    /lib64/libz.so.1: version `ZLIB_1.2.9' not found (required by /mnt/N0221768/.julia/packages/ImageMagick/vMfoS/deps/usr/lib/libpng16.so.16)

远程工作者进程是否在重置环境下启动,并且仍然使用LD_LIBRARY_PATH,它可能在ImageMagick下载的LD_LIBRARY_PATH之前指向我的系统ZLIB?有没有办法强制不要在这些生成的进程上设置它?

2 个答案:

答案 0 :(得分:0)

和往常一样,我决定在这里询问后不久就弄清楚了:

我将LD_LIBRARY_PATH专门设置为lib文件夹ImageMagick downloda,而不仅仅是在取消设置LD_LIBRARY_PATH之后才启动。完成之后,一切似乎都正常运行。

答案 1 :(得分:0)

在多进程环境中使用Julia库时,通常最好像这样加载它们:

using Metalhead
@everywhere using Metalhead

这样,您可以避免偶尔出现几个工作人员尝试同时编译同一库的情况。

虽然我知道您遇到了一个不同的问题-这是对我们这样的问题的最常见答案:“它在单个过程中有效,但在使用并行工作器时却无效”。