cog icon indicating copy to clipboard operation
cog copied to clipboard

Unhandled InvalidStateException crashes the http server:

Open sepehr opened this issue 1 year ago • 0 comments

Our logs suggest that a potentially unhandled InvalidStateException can crash the container:

Invalid operation: state is WorkerState.PROCESSING (must be WorkerState.READY)

To my understanding, it indicates that the application is trying to run a prediction while the worker is in a PROCESSING state. The raised InvalidStateException does not seem to be handled gracefully by the http server.

[
    {
        "logger": "cog.server.runner",
        "timestamp": "2024-02-14T11:03:03.228760Z",
        "exception": "Traceback (most recent call last):\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/cog/server/runner.py\", line 134, in handle_error\n
            raise error\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/multiprocessing/pool.py\", line 125, in worker\n
            result = (True, func(*args, **kwds))\n
                            ^^^^^^^^^^^^^^^^^^^\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/cog/server/runner.py\", line 359, in predict\n
            return _predict(\n
                   ^^^^^^^^^\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/cog/server/runner.py\", line 395, in _predict\n
            for event in worker.predict(input_dict, poll=0.1):\n
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/cog/server/worker.py\", line 63, in predict\n
            self._assert_state(WorkerState.READY)\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/cog/server/worker.py\", line 97, in _assert_state\n
            raise InvalidStateException(\n
            cog.server.exceptions.InvalidStateException: Invalid operation: state is WorkerState.PROCESSING (must be WorkerState.READY)",
        "severity": "ERROR",
        "message": "caught exception while running prediction"
    },
    {
        "prediction_id": null,
        "logger": "uvicorn.error",
        "timestamp": "2024-02-14T11:03:03.229663Z",
        "exception": "Traceback (most recent call last):\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py\", line 419, in run_asgi\n
            result = await app(  # type: ignore[func-returns-value]\n
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py\", line 84, in __call__\n
            return await self.app(scope, receive, send)\n
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/fastapi/applications.py\", line 284, in __call__\n
            await super().__call__(scope, receive, send)\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/starlette/applications.py\", line 122, in __call__\n
            await self.middleware_stack(scope, receive, send)\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/starlette/middleware/errors.py\", line 184, in __call__\n
            raise exc\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/starlette/middleware/errors.py\", line 162, in __call__\n
            await self.app(scope, receive, _send)\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/starlette/middleware/exceptions.py\", line 79, in __call__\n
            raise exc\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/starlette/middleware/exceptions.py\", line 68, in __call__\n
            await self.app(scope, receive, sender)\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py\", line 20, in __call__\n
            raise e\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py\", line 17, in __call__\n
            await self.app(scope, receive, send)\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/starlette/routing.py\", line 718, in __call__\n
            await route.handle(scope, receive, send)\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/starlette/routing.py\", line 276, in handle\n
            await self.app(scope, receive, send)\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/starlette/routing.py\", line 66, in app\n
            response = await func(request)\n
                       ^^^^^^^^^^^^^^^^^^^\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/fastapi/routing.py\", line 241, in app\n
            raw_response = await run_endpoint_function(\n
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/fastapi/routing.py\", line 167, in run_endpoint_function\n
            return await dependant.call(**values)\n
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/cog/server/http.py\", line 271, in predict\n
            return _predict(request=request, respond_async=respond_async)\n
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/cog/server/http.py\", line 337, in _predict\n
            response = PredictionResponse(**async_result.get().dict())\n
                                            ^^^^^^^^^^^^^^^^^^\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/multiprocessing/pool.py\", line 774, in get\n
            raise self._value\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/cog/server/runner.py\", line 134, in handle_error\n
            raise error\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/multiprocessing/pool.py\", line 125, in worker\n
            result = (True, func(*args, **kwds))\n
                            ^^^^^^^^^^^^^^^^^^^\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/cog/server/runner.py\", line 359, in predict\n
            return _predict(\n
                   ^^^^^^^^^\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/cog/server/runner.py\", line 395, in _predict\n
            for event in worker.predict(input_dict, poll=0.1):\n
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/cog/server/worker.py\", line 63, in predict\n
            self._assert_state(WorkerState.READY)\n
          File \"/root/.pyenv/versions/3.11.8/lib/python3.11/site-packages/cog/server/worker.py\", line 97, in _assert_state\n
            raise InvalidStateException(\n
            cog.server.exceptions.InvalidStateException: Invalid operation: state is WorkerState.PROCESSING (must be WorkerState.READY)",
        "severity": "ERROR",
        "message": "Exception in ASGI application\n
        "
    }
]

GPU inference, 1 uvicorn worker, 1 thread.

sepehr avatar Feb 23 '24 23:02 sepehr