Nebari Distribution Proposal #2858
Replies: 5 comments 6 replies
-
Thanks for proposing this, @Adam-D-Lewis! This is an exciting idea, and I have some questions and feedback: Users and Use Cases:
Definition:
Installation:To make the installation process user friendly, we should:
Down the line I can also offer more specific design input for including distributions in the CLI and making the selection process more user-friendly and accessible, so feel free to ping me! |
Beta Was this translation helpful? Give feedback.
-
@Adam-D-Lewis I like the idea of distributions. I think you have a few concepts here. First you have the setup templates that @smeragoel mentioned. I think this would be a great first step. Starting with a low-cost, standard, and HA starting template for GPU and nonGpu setups would be a great start. I recognize lowcost, gpu may be ridiculous, so we may need to tank that option. I think this could easily be added to the Nebari CLI where we provide a number of out of the box templates, but orgs can put in a url to fetch another config as a template if they want. Obviously we would need to document how to make a config template, but that seems like a relatively quick way to deliver value. Second, plugins. This is what I had in mind when I talk about Nebari Spins. Preinstalled components focussed on a specific domain. ML Spin is the most obvious, but you could even break that down further. ML development, or ML hosting for example. We could also move dask into a plugin and make a distributed compute spin. I think it would make sense to build these as separate packages and publish them. If you download and install Third you have things running on existing Nebari services such as jhub apps. If you want to prepopulate a application in jhub apps, I think we might want to look at a "nebari cookbook" or something where we recipes for running particular apps. This may be where conda-project comes in. In my head, it makes sense to approach things in the above order. First launch templates, then spins, finally app recipes (I am avoiding saying distribution to help keep these separate). |
Beta Was this translation helpful? Give feedback.
-
I brought this discussion up in the Quansight internal nebari meeting today. There was broad support for plugins to define distributions for non-trivial distributions (e.g. ragna), but there was also support for being able to define config sets in plain yaml. To handle the case where different providers may have differences (like gpus for example), we could expect the folder structure to be similar to the following in order to not have to use a complex yaml structure. See image below. An added benefit and point in favor of using plugins to define distributions is it would allow a distribution to define tests which could be run in CICD for tests that wouldn't apply to a base Nebari deployment. e.g. Check that mlflow is running |
Beta Was this translation helpful? Give feedback.
-
It seems that some distributions are simple enough that having a (templated) yaml file would be enough, like for example a low-cost distribution where the only implications are selecting some predefined cheaper instances for the node groups. On the other hand, more complex distributions might need extra logic where a plugin would be necessary, like for example an ai-inference, which might need additional software and infrastructure resources. Taking this into account, how would the process of selecting/installing a distribution look like from the user's perspective? If it's the yaml case, maybe pulling a config file from a GitHub repo during the |
Beta Was this translation helpful? Give feedback.
-
See more details about config sets here |
Beta Was this translation helpful? Give feedback.
-
In Quansight, we've been talking about the idea of a Nebari distribution. I think the first thing we should do is to define what a distribution is. Here's my proposed definition below.
What is a distribution?
A nebari distribution is a tested set of configuration that is known to work and is usually geared towards a specific use case (see examples below).
Users deploying nebari can feel confident that if they deploy a distribution, it will be a good starting point for them.
Distribution Examples
For the sake of discussion, these are examples of distributions that should be possible.
Supported Features of a Distribution
As motivated by the distribution examples, a distribution should be able to define the following:
* Custom docker images could be specified as part of this.
**I could see us replacing Workflows (or supplementing it) with a "Downloads" feature which downloads files and puts them where specified in the NFS drive on initial deployment. It could use some type of workflow under the hood, but that would be an implementation detail.
How to define a distribution:
Assuming there is agreement with the above features I'll now discuss how one might define a distribution. Various options exist to create a distribution:
Nebari Plugin defined Distribution
I see a Nebari plugin as very robust and capable choice, but it is more difficult to create a distribution since you have to create a python package. I don't see that difficulty as an issue since I think anyone considering creating a Nebari plugin is capable of creating a python package or learning how to do so. This also allows us to specify dependencies on nebari and other plugins in the usual manner (pyproject.yaml).
Yaml File defined Distribution
I see a yaml file as not robust enough and likely to result in us trying to create a DSL in yaml to handle many different distribution needs. Nevertheless, I've tried to define below for the sake of argument.
The 3 major cons I've noted in the yaml file are:
I think we should define nebari distributions in plugins b/c of those limitations of the yaml file approach.
Beta Was this translation helpful? Give feedback.
All reactions