Tengo una aplicación de API rápida que implementé en GCP Cloud Run. Ha estado funcionando bien hasta ayer y realmente no sé qué salió mal. El problema parece comenzar en esta línea cuando leo en un archivo .pkl
model = pickle.load(open(os.path.join('models', 'appartementen.pkl'), 'rb'))
El rastreo:
File "pandas/_libs/internals.pyx", line 572, in pandas._libs.internals.BlockManager.__cinit__: TypeError: __cinit__() takes at least 2 positional arguments (0 given) at <module> (/app/src/api/util.py:25) at <module> (/app/src/api/main.py:8) at _call_with_frames_removed (<frozen importlib._bootstrap>:219) at exec_module (<frozen importlib._bootstrap_external>:728) at _load_unlocked (<frozen importlib._bootstrap>:677) at _find_and_load_unlocked (<frozen importlib._bootstrap>:967) at _find_and_load (<frozen importlib._bootstrap>:983) at _gcd_import (<frozen importlib._bootstrap>:1006) at import_module (/usr/local/lib/python3.7/importlib/__init__.py:127) at import_app (/usr/local/lib/python3.7/site-packages/gunicorn/util.py:358) at load_wsgiapp (/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py:39) at load (/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py:49) at wsgi (/usr/local/lib/python3.7/site-packages/gunicorn/app/base.py:67) at load_wsgi (/usr/local/lib/python3.7/site-packages/gunicorn/workers/base.py:144) at init_process (/usr/local/lib/python3.7/site-packages/gunicorn/workers/base.py:119) at spawn_worker (/usr/local/lib/python3.7/site-packages/gunicorn/arbiter.py:583)Tenga en cuenta que cuando implementé esta aplicación localmente, todo salió bien.
Mi Dockerfile:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7 WORKDIR /app COPY . ./ COPY src ./src/ COPY models ./models/ RUN pip install -r requirements.txt COPY setup.py ./ CMD exec gunicorn src.api.main:appCómo implemento en Cloud Run:
gcloud builds submit --tag gcr.io/project-id/api --timeout=3600 gcloud run deploy api --image gcr.io/project-id/api --platform managed --project=project-id --region=europe-west4 requirements.txt :
fastapi==0.63.0 google-cloud-bigquery[bqstorage,pandas]==1.24.0 sentry_sdk==1.0.0 xgboost==1.3.3 scikit-learn==0.23.1 shap==0.39.0 matplotlib==3.4.1 Intenté usar la misma versión de scikit-learn acuerdo con esta sugerencia , pero el problema persiste.
Acabo de encontrarme con este mismo problema al construir un nuevo contenedor hoy. No estoy seguro de la causa exacta en este momento (probablemente una incompatibilidad entre la versión de pandas del objeto en escabeche y la versión de pandas del contenedor), pero me funcionó revertir la versión de pandas . El pickle se construyó con 1.2.5 y el contenedor se instaló 1.3.0 . Entonces:
pip uninstall pandas pip install pandas==1.2.5Este fue un error con pandas 1.3.0 y se solucionó con pandas 1.3.1 .
Como solución temporal, reemplace pickle.load con pandas.read_pickle .