David Im
03/28/2024, 1:48 PMEric Riddoch
03/28/2024, 4:03 PMrunner.async_run and runner.run. TBD on bentoml.<framework>.save_model(...).
c. When provided with specific code examples of errors or general issues with the API design, they've pushed fixes fairly quickly. E.g. there were more issues with Pydantic at the beginning, at least ours were solved quickly.
d. Yatai 2.0 will be under the Apache 2.0 license 🎉. Really generous of them.
I still believe in the tool and the team behind it--enough that me and some folks where I work are contributing this VS Code extension--and hopefully Yatai 2.0--for BentoML in our personal time. I think 1.2 is less ergonomic and was harmful to the community, but I still don't see any other tool that comes close to BentoML's features and workflow.
I'm having to give this exact pitch to our CTO today to explain some of our delays, hence taking the level of detail 😆Adam Liter
03/28/2024, 4:44 PM1.1.x series, and definitely agree that 1.2.x seems like a bit of a step backwards, particularly with respect to the breaking changes and documentation/tutorials being outdated. Also agree that I don’t love the class-based approach in the 1.2.x series. Not sure what the design considerations are there, though.Mike Kuhlen
03/28/2024, 5:54 PM1.1.x will continue to receive critical vulnerability & bug fixes. My plan is to stick with 1.1 as long as it's feasible. I'm sad to miss out on some of the new functionality offered in 1.2, but it's just too disruptive for me to make that migration at this time.
Love BentoML in general, don't love the too frequent backwards incompatible changes, and especially the lack of transparent communication about what's coming.Vivien Robert
03/29/2024, 7:53 AMMike Kuhlen
03/29/2024, 2:36 PMSean
04/09/2024, 1:57 AMSean
04/09/2024, 1:58 AMbentoml build.
2. With multiple services, each service requires individual initialization. A shared global scope would not suffice.
We also explored the possibility of supporting service initialization in a functional manner, such as decorating a function with @svc.on_startup(). The challenge arose in managing states. Since models are common states shared across different APIs, they need to be accessed in an intuitive and developer-friendly way. With a functional approach, states would have to be managed similarly to FastAPI, with fields set in app.state. However, managing models with app.state is not explicit, as the syntax needs to clearly indicate to users that models will be treated specially during building and serving. Additionally, this approach does not support type hints in IDE auto-completion.
As a result, we opted for a class-based API. We believe that the __init__ constructor in classes most intuitively represents service initialization to Python developers. Moreover, classes most meaningfully represent services, so when we have multiple services, we simply define multiple classes. Interactions between different services are then modeled as function calls across different classes.Sean
04/09/2024, 1:58 AMSean
04/09/2024, 2:00 AMAdam Liter
04/09/2024, 4:23 AM1.0.x and 1.1.x was that a given model service could have one or more runners, one for each model that made up that service (or bento). From what I understand, the each runner ran in its own Python process (and all of these were independent of the Python process handling the web requests), or, if you were using the Yatai CRDs, the runners were actually running in separate containers (and could scale independently).
How does that all work now in 1.2.x, and will the reintroduction of framework runners impact this at all?Suhas
04/09/2024, 5:28 AMAdam Liter
04/09/2024, 6:05 PM