4

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

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 运行使用Tesnroflow库的 Lambda 函数时,它卡在“安装”步骤:

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

我不确定是什么原因造成的

4

1 回答 1

8

我对消息有同样的问题

加载共享库时出错:libtensorflow.so.1:无法打开共享对象文件:没有这样的文件或目录

就我而言,它试图将 TensorFlow 与 go 一起使用。问题是如果软件包留在 /usr/local(推荐)或其他路径中,libtensorflow.so(和 libtensorflow_framework.so)的官方安装似乎无法正常工作。按照 /usr/local 的建议使用 ldconfig 也无济于事。此外,在设置 LD_LIBRARY_PATH 之前,gcc 的基本示例不起作用(即使使用 -L。这让我感到惊讶):

 $ 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 的符号链接。我不知道如何在无服务器配置中做到这一点。打算在评论中写这个,但仍然没有足够的代表。

于 2019-07-23T03:59:09.027 回答