libtensorflow.so: 无法打开共享对象文件:没有那个文件或目录。

4

我使用以下命令创建了一个 AWS Lambda Layer:

aws lambda publish-layer-version --layer-name TensorflowLambdaLayer --compatible-runtimes go1.x --zip-file fileb://tensorflowLayer.zip

这里是生成的ARN:`arn:aws:lambda:us-east-1:757767972066:layer:TensorflowLambdaLayer:1`。

当我尝试通过AWS SAM运行使用Tensorflow库的Lambda函数时,它会在“mounting”步骤上卡住:

2019-07-18 15:51:29 Mounting /tmp/tmpgz8cb80s as /var/task:ro,delegated inside runtime container

当我用Ctrl + C终止它时,我会收到以下消息:

^C/var/task/bin/inference: error while loading shared libraries: libtensorflow.so: cannot open shared object file: No such file or directory
Makefile:82: recipe for target 'run-inference' failed

这是我 template.yml 的关键部分:

Parameters:
  LambdaTensorflowLayerArn:
    Type: String
    Default: 'arn:aws:lambda:us-east-1:757767972066:layer:TensorflowLambdaLayer:1'
  LambdaFFMPEGLayerArn:
    Type: String
    Default: 'arn:aws:lambda:us-east-1:757767972066:layer:ffmpeg:1'

Inference:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: bin/inference
      Runtime: go1.x
      Timeout: 300
      CodeUri: ./bin/inference.zip
      Layers: 
         - Ref: LambdaFFMPEGLayerArn
         - Ref: LambdaTensorflowLayerArn

我不确定是什么原因导致了这个问题。


1
也许这可以帮助 https://medium.com/@mike.p.moritz/running-tensorflow-on-aws-lambda-using-serverless-5acf20e00033 - Richard Rublev
不是真的。但是这篇文章很有趣。无论如何,谢谢。 - Stefan Radonjic
1个回答

8
我遇到了与以下信息相同的问题:
错误信息:error while loading shared libraries: libtensorflow.so.1: cannot open shared object file: No such file or directory
在我的情况下,我正在尝试使用go运行TensorFlow。问题是,如果将官方安装的libtensorflow.so(和libtensorflow_framework.so)包放在/usr/local(推荐)或其他路径中,则似乎无法正常工作。使用ldconfig对于/usr/local也没有帮助。此外,即使使用-L选项,gcc的基本示例也无法正常工作(这让我感到惊讶),直到设置LD_LIBRARY_PATH。
 $ gcc -I/usr/local/include -L/usr/local/lib hello_tf.c -ltensorflow -o hello_tf
 $ ./hello_tf 
 ./hello_tf: error while loading shared libraries: libtensorflow.so.1: cannot open shared object file: No such file or directory
 $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
 $ ./hello_tf 
 Hello from TensorFlow C library version 1.14.0
 $ unset LD_LIBRARY_PATH 
 $ ./hello_tf 
 ./hello_tf: error while loading shared libraries: libtensorflow.so.1: cannot open shared object file: No such file or directory

这是我个人情况下的 /usr/local 内容

 $ ll /usr/local/lib
 total 245424
 lrwxrwxrwx. 1 root root        28 dic 31  1999 libtensorflow_framework.so -> libtensorflow_framework.so.1
 lrwxrwxrwx. 1 root root        33 dic 31  1999 libtensorflow_framework.so.1 -> libtensorflow_framework.so.1.14.0
 -r-xr-xr-x. 1 root root  34748520 dic 31  1999 libtensorflow_framework.so.1.14.0
 lrwxrwxrwx. 1 root root        18 dic 31  1999 libtensorflow.so -> libtensorflow.so.1
 lrwxrwxrwx. 1 root root        23 dic 31  1999 libtensorflow.so.1 -> libtensorflow.so.1.14.0
 -r-xr-xr-x. 1 root root 216546752 dic 31  1999 libtensorflow.so.1.14.0

另一种解决方案是手动创建到 /usr/lib 的符号链接。 我不知道如何在无服务器配置中执行此操作。 本来想在评论中写这个,但还没有足够的声望。

我知道了。谢谢您的回答!我会尝试一下,如果成功的话,会接受您的答案。您能否请展示一下您的无服务器配置是怎样的?您使用环境变量来设置ld_library_path吗?顺便说一下,我也在使用Go。如果您有空的话,能否加我Skype:stefan.radonjic995,我们可以聊五分钟关于这个问题?对我来说这真的非常重要。 - Stefan Radonjic
另外,我应该注意到我正在使用AWS SAM进行测试。当我运行它时,没有日志显示。我有一个日志应该在处理程序被调用时立即打印出来。这是否意味着在处理程序被调用之前发生了错误?如果是这样的话,那么我不能通过我的程序设置LD_LIBRARY_PATH,只能通过配置来设置吗? - Stefan Radonjic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接