Hugo Guilbot
04/12/2024, 8:51 AMbentoml serve bentoml_app_pandas.py:service --reload, I encounter the following error: "`[ERROR] [api_server:11] The "bentoml.sklearn.load_runner" method is deprecated. "load_runner" arguments will be ignored. Use "bentoml.sklearn.get("pca:latest").to_runner()`" instead."
So, I've updated my code:
import bentoml
import pandas as pd
from <http://bentoml.io|bentoml.io> import NumpyNdarray, PandasDataFrame
import numpy as np
# Load transformers and model
# scaler = bentoml.sklearn.load_runner("scaler:latest", function_name="transform")
scaler = bentoml.sklearn.get("scaler:latest").to_runner()
# pca = bentoml.sklearn.load_runner("pca:latest", function_name="transform")
pca = bentoml.sklearn.get("pca:latest").to_runner()
# model = bentoml.sklearn.load_runner("customer_segmentation_kmeans:latest")
model = bentoml.sklearn.get("customer_segmentation_kmeans:latest").to_runner()
service = bentoml.Service("customer_segmentation_kmeans", runners=[scaler, pca, model])
@service.api(input=PandasDataFrame(), output=NumpyNdarray())
def predict(df: pd.DataFrame) -> np.array:
# Process data
scaled_df = pd.DataFrame([scaler.run(df)], columns=df.columns)
processed_df = pd.DataFrame([pca.run(scaled_df)], columns=['col1', 'col2', 'col3'])
# Predict data
result = model.run(processed_df)
return np.array(result)
But I'm getting the error:
(I don't use 'predict' in my code)
AttributeError: 'StandardScaler' object has no attribute 'predict'
2024-04-11T14:38:02+0200 [ERROR] [api_server:customer_segmentation_kmeans:2] Exception on /predict [POST] (trace=b038efd3e586ab0e884ec2f092b2bab3,span=1e547feb6f675e0b,sampled=0,service.name=customer_segmentation_kmeans)
Traceback (most recent call last):
File "C:\Users\hguilbot\Documents\BentoML_Project\bentomlenv\lib\site-packages\bentoml\_internal\server\http_app.py", line 344, in api_func
output = await run_in_threadpool(api.func, *args)
File "C:\Users\hguilbot\Documents\BentoML_Project\bentomlenv\lib\site-packages\starlette\concurrency.py", line 42, in run_in_threadpool
return await <http://anyio.to|anyio.to>_thread.run_sync(func, *args)
File "C:\Users\hguilbot\Documents\BentoML_Project\bentomlenv\lib\site-packages\anyio\to_thread.py", line 49, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
File "C:\Users\hguilbot\Documents\BentoML_Project\bentomlenv\lib\site-packages\anyio\_backends\_asyncio.py", line 2103, in run_sync_in_worker_thread
return await future
File "C:\Users\hguilbot\Documents\BentoML_Project\bentomlenv\lib\site-packages\anyio\_backends\_asyncio.py", line 823, in run
result = context.run(func, *args)
File "C:\Users\hguilbot\Documents\BentoML_Project\src\bentoml_app_pandas.py", line 18, in predict
scaled_df = pd.DataFrame([scaler.run(df)], columns=df.columns)
File "C:\Users\hguilbot\Documents\BentoML_Project\bentomlenv\lib\site-packages\bentoml\_internal\runner\runner.py", line 53, in run
return self.runner._runner_handle.run_method(self, *args, **kwargs)
File "C:\Users\hguilbot\Documents\BentoML_Project\bentomlenv\lib\site-packages\bentoml\_internal\runner\runner_handle\remote.py", line 346, in run_method
anyio.from_thread.run(
File "C:\Users\hguilbot\Documents\BentoML_Project\bentomlenv\lib\site-packages\anyio\from_thread.py", line 48, in run
return async_backend.run_async_from_thread(func, args, token=token)
File "C:\Users\hguilbot\Documents\BentoML_Project\bentomlenv\lib\site-packages\anyio\_backends\_asyncio.py", line 2143, in run_async_from_thread
return f.result()
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\concurrent\futures\_base.py", line 446, in result
return self.__get_result()
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\concurrent\futures\_base.py", line 391, in __get_result
raise self._exception
File "C:\Users\hguilbot\Documents\BentoML_Project\bentomlenv\lib\site-packages\anyio\_backends\_asyncio.py", line 2130, in task_wrapper
return await func(*args)
File "C:\Users\hguilbot\Documents\BentoML_Project\bentomlenv\lib\site-packages\bentoml\_internal\runner\runner_handle\remote.py", line 242, in async_run_method
raise RemoteException(
bentoml.exceptions.RemoteException: An unexpected exception occurred in remote runner scaler: [500] Internal Server Error
2024-04-11T14:38:02+0200 [INFO] [api_server:customer_segmentation_kmeans:2] 127.0.0.1:63611 (scheme=http,method=POST,path=/predict,type=application/json,length=185) (status=500,type=application/json,length=2) 132.446ms (trace=b038efd3e586ab0e884ec2f092b2bab3,span=1e547feb6f675e0b,sampled=0,service.name=customer_segmentation_kmeans)
I'm not sure what to do next. Do you have any ideas? (
I use "bentoml, version 1.2.10",so I think the reason is that I'm using a syntax that works in version 1.1 but I'm using 1.2, so if that's the case, do you have any idea how to help me?
Thanks you