サーバーレスプロジェクトで、Pythonで書かれたラムダにXGBoostをインポートしたいと思います。しかし、ラムダを呼び出そうとすると、CloudWatchに次のエラーが表示されます。
[エラー] XGBoostError:XGBoostライブラリ(libxgboost.so)をロードできませんでした。
考えられる原因:
* OpenMPランタイムがインストールされていません(Windowsの場合はvcomp140.dllまたはlibgomp-1.dll、UNIXのようなOSの場合はlibgomp.so)
* 64ビットOSで32ビットPython=を実行しています。
エラーメッセージ:['libgomp.so.1:cannot open shared object file:No such file or directory']
私は実行していますsls deploy
macOSで追加したのでdockerizePip: true
to my serverless.yml
カスタムDockerfileを使用して、欠落している依存関係を修正しようとしました:
FROM lambci/lambda:build-python3.6
RUN apt-get update && apt-get install libaio1
私も指定する必要がありますdockerExtraFiles
のライブラリパスですが、libgomp.soをLinuxのどこに配置するかわかりません。だから、私はこの点にこだわりました。
serverless.yml:
app: improve
org: kvadrug
service: testservice
provider:
name: aws
runtime: python3.8
versionFunctions: false
stage: dev
region: us-west-2
timeout: 30
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerFile: Dockerfile
Zip: true
dockerizePip: true
functions:
hello:
handler: hello.hello
events:
- http:
path: hello
method: post
private: true
package.json:
{
"name": "testservice",
"version": "1.0.0",
"description": "Test service",
"dependencies": {},
"devDependencies": {
"serverless-python-requirements": "^5.1.0"
}
}
requirements.txt:
xgboost==1.0.2
Linuxでは、 必要なライブラリがインストールされている
/usr/lib/x86_64-linux-gnu/libgomp.so.1
/usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
沿って
apt-get install libgomp1
新しいUbuntuとCentOSでは、デフォルトでlibgomp1がインストールされなくなりました(チェックしたばかりです-xenialにありますが、新鮮なバイオニック)。
これはAWSマシン上にあり、残念ながら最近ではありません(他にすぐに利用できるものはありません)。
lrwxrwxrwx 1 root root 16 Oct 4 2019 /usr/lib/x86_64-linux-gnu/libgomp.so.1 -> libgomp.so.1.0.0
-rw-r--r-- 1 root root 138448 Oct 4 2019 /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0