Dans un projet sans serveur, je souhaite importer XGBoost dans un lambda écrit sur Python. Mais lorsque j'essaye d'appeler le lambda, je vois cette erreur sur CloudWatch:
[ERREUR] XGBoostError: la bibliothèque XGBoost (libxgboost.so) n'a pas pu être chargée.
Causes probables:
* Le moteur d'exécution OpenMP n'est pas installé (vcomp140.dll ou libgomp-1.dll pour Windows, libgomp.so pour les systèmes d'exploitation de type UNIX)
* Vous exécutez 32 bits Python sur un système d'exploitation 64 bits
Message (s) d'erreur: ['libgomp.so.1: impossible d'ouvrir le fichier objet partagé: aucun fichier ou répertoire de ce type']
Je suis entrain de courir sls deploy
sur macOS, j'ai donc ajouté dockerizePip: true
sur mon serverless.yml
J'ai essayé de corriger la dépendance manquante en utilisant un Dockerfile personnalisé:
FROM lambci/lambda:build-python3.6
RUN apt-get update && apt-get install libaio1
Je dois également spécifier le chemin de la bibliothèque dans dockerExtraFiles
mais je n'ai aucune idée de l'emplacement de libgomp.so sous Linux. Donc, je suis resté sur ce point.
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
Sous Linux, les bibliothèques dont vous avez besoin sont installées
/usr/lib/x86_64-linux-gnu/libgomp.so.1
/usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
par
apt-get install libgomp1
Sur les nouveaux Ubuntu et CentOS, libgomp1 n'est plus installé par défaut (je viens de vérifier - je l'ai sur xenial, ne l'ai pas sur un frais bionique).
Ceci est sur une machine AWS, malheureusement pas très récente (je n'en ai pas d'autre facilement disponible):
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