| Posted | Nick | Remark | |
|---|---|---|---|
| #openstack-cyborg - 2018-04-24 | |||
| 04:39:50 | openstackgerrit | Li Liu proposed openstack/cyborg master: Added cyborg fpga programming spec https://review.openstack.org/559395 | |
| #openstack-cyborg - 2018-04-25 | |||
| 02:25:15 | openstackgerrit | Li Liu proposed openstack/cyborg master: Added bitstream metadata standardization spec https://review.openstack.org/558265 | |
| 13:59:19 | Li_Liu | #info Li Liu | |
| 13:59:21 | zhipeng | #startmeeting openstack-cyborg | |
| 13:59:22 | openstack | Meeting started Wed Apr 25 13:59:21 2018 UTC and is due to finish in 60 minutes. The chair is zhipeng. Information about MeetBot at http://wiki.debian.org/MeetBot. | |
| 13:59:23 | openstack | Useful Commands: #action #agreed #help #info #idea #link #topic #startvote. | |
| 13:59:25 | openstack | The meeting name has been set to 'openstack_cyborg' | |
| 13:59:34 | zhipeng | #topic Roll Call | |
| 13:59:41 | zhipeng | #info Howard | |
| 13:59:45 | NokMikeR | #info Mike | |
| 13:59:48 | Sundar | #info Sundar | |
| 14:00:16 | Sundar | Hi Howard and Mike | |
| 14:00:27 | NokMikeR | Hello Sundar, Howard et all. | |
| 14:00:37 | circ-user-c3hdH | #info Helloway | |
| 14:00:40 | zhipeng | Hello everyone :) | |
| 14:00:49 | Li_Liu | #info Li Liu | |
| 14:01:10 | Li_Liu | Hi guys | |
| 14:03:15 | shaohe_feng_ | #info shaohe | |
| 14:03:27 | shaohe_feng_ | hi all | |
| 14:03:48 | zhipeng | hi | |
| 14:04:45 | zhipeng | let's start then | |
| 14:05:01 | zhipeng | #topic KubeCon EU ResMgmt WG preparation | |
| 14:05:09 | zhipeng | #link https://docs.google.com/document/d/1j3vrG6BgE0hUDs2e-1ZUegKN4W4Adb1B6oJ6j-4kyPU/edit?usp=sharing | |
| 14:05:29 | xinran_ | Hi all | |
| 14:05:36 | zhipeng | so i think I mentioned that for this year's planning I want to be able to align what we have done here | |
| 14:05:41 | zhipeng | with the k8s community | |
| 14:06:09 | zhipeng | KubeCon EU is around the corner next week, and it would be a great place to start participating | |
| 14:06:27 | edleafe | #info edleafe | |
| 14:06:28 | zhipeng | Sundar could you help share some status about the resource mgmt wg in k8s ? | |
| 14:06:36 | Sundar | Sure | |
| 14:06:49 | Li_Liu | that's great | |
| 14:07:05 | Sundar | We started participating last year, with a document describing the FPGA structure and use cases | |
| 14:07:42 | Sundar | The main thing to note is that the FPGA structural model -- with regions, accelerators, local memory etc. -- is the same independent of orch framework -- openStack, K8s etc | |
| 14:08:21 | Sundar | Also, the use cases defined in the Cyborg/Nova spec stay the same -- FPGA as a Service, Accelerated Function as a Service, etc. | |
| 14:08:25 | Sundar | The main difference is in the set of mechanisms available | |
| 14:09:05 | Sundar | In OpenSTack, we have the notion of nested Resource Providers (nRPs), which provides a natural tree structure that matches many device topologies | |
| 14:09:44 | Sundar | The data models and resource handling in K8s is still evolving | |
| 14:10:46 | Sundar | What we have now is the device plugin mechanism: there is standard API by which kubelet can invoke a plugin for a category of devices | |
| 14:11:41 | Sundar | The plugin advertises a resource name, e.g. intel.com/fpga-a10, and lists the devices corresponding to that. There is also a provision to update that list over time, and to report the health of each device | |
| 14:12:09 | Sundar | Based on this information, when a pod spec asks fora resource, the standard K8s scheduler picks a node and informs the kubelet on that node | |
| 14:12:35 | Sundar | The kubelet then invokes another API on the device plugin to allocate a device of the requested type and prepare it | |
| 14:13:22 | Sundar | After that, the kubelet invokes a container runtime (e.g. Docker) through the CRI with an OCI runtime spec | |
| 14:14:05 | Sundar | This basic mechanism does not include the nested structure of FPGAs, and we have been discussing how to fit that in | |
| 14:14:35 | Sundar | However, there are many options: we can use Custom Resource Definitions (CRDs) https://kubernetes.io/docs/concepts/api-extension/custom-resources/#customresourcedefinitions | |
| 14:14:36 | zhipeng | and vGPU as well I suppose ? | |
| 14:15:11 | Sundar | Howard, yes, I think vGPUs, esp.of different types, will also require further consideration | |
| 14:15:52 | Sundar | CRDs are eseentially custom resource classes: we can instantiate resources for a CRD. | |
| 14:16:33 | Sundar | There are also two ongoing proposals for including resource classes: | |
| 14:16:51 | Sundar | The first one is: https://docs.google.com/document/d/1qKiIVs9AMh2Ua5thhtvWqOqW0MSle_RV3lfriO1Aj6U/edit# | |
| 14:17:28 | Sundar | An alternative proposal for resource classes is at: https://docs.google.com/document/d/1666PPUs4Lz56TqKygcy6mXkNazde-vwA7q4e5H92sUc/edit# | |
| 14:18:04 | Sundar | Thei stated goals and non-goals are not exactly the same. | |
| 14:18:05 | Li_Liu | We don't have access two those 2 google docs.. | |
| 14:18:38 | Sundar | Li_Liu, these are supposed to be public dos -- please ask for access | |
| 14:18:41 | Sundar | *docs | |
| 14:18:50 | Li_Liu | ok, just did | |
| 14:19:26 | zhipeng | Sundar there is a PR on Resource API | |
| 14:19:45 | Sundar | IMHO, lot of the discussion comes from GPU background. For FPGAs, we are trying to get alignment within Intel first | |
| 14:19:45 | zhipeng | this is correlates to jiaying's or vish's ? | |
| 14:20:37 | Sundar | Zhipeng, Jiaying's proposal came first -- but I need to look at the PR before confirming | |
| 14:21:34 | zhipeng | okey :) | |
| 14:21:54 | Sundar | So, in short, our task is to find a way of handling FPGAs, without having the benefit of a tree-structured data model, but handling the same FPGA structures and usage models | |
| 14:21:57 | NokMikeR | is the vGPU is vendor specific? ie tied to a particular driver implementation? | |
| 14:23:03 | Li_Liu | Sundar, does the k8s community have any plans to add the tree-structure data model in the near future? | |
| 14:23:05 | Sundar | NokMikeR, the discussions I have seen have been centered on Nvidia's vGPU types, though not necessarily phrased in vendor-specific terms | |
| 14:23:15 | NokMikeR | in other words how do you differentie the features on one vGPU vs another if the underlying features in the real gpu are different - or are they abstracted somehow? | |
| 14:23:20 | Sundar | Li_Liu, None that I am aware of. | |
| 14:24:14 | NokMikeR | Sundar: ok thought so re: nvid gpus. | |
| 14:24:35 | Sundar | NokMikeR, in OpenStack, the answer is clearer: the device itself exposes different vGPU types as traits, and their capacities as units of a generic accelerator RC | |
| 14:25:44 | Sundar | Cyborg needs to handle GPUs and FPGAs of course. But, IMHO, there is enough attention on GPUs :) It is FPGAs that need further thought :) | |
| 14:25:57 | zhipeng | Sundar Jiaying's proposal, as far as I understand, still tries to modify the k8s core functionality ? | |
| 14:26:37 | shaohe_feng_ | Sundar: do we decide to only support one vendor GPU or FPGA in this release without nest Provider? | |
| 14:26:42 | Sundar | Zhipeng, yes, it requires changes on controller side and kubelet changes | |
| 14:28:15 | Sundar | Shaohe: for Rocky, I was proposing to include only device of a particualr type: one GPU or one FPGA. But, based on feedback, w ehave to relax it to multiple devices of the same type, i.e., | |
| 14:28:29 | Sundar | you could have 2 GPUs of the same type, 2 FPGAs of the same type etc. | |
| 14:28:51 | zhipeng | Sundar if we say, propose a CRD type of kube-cyborg thing, will it make sense to the res mgmt wg people ? | |
| 14:29:00 | zhipeng | meaning that similar to OpenStack | |
| 14:29:10 | zhipeng | we view accelerator not part of the general compute infra | |
| 14:29:46 | zhipeng | and have its own model and scheduling process if needed | |
| 14:30:25 | Sundar | ZHipeng, we can propose CRDs, but the exact workflows will matter. | |
| 14:30:49 | Li_Liu | zhipeng, you are saying, similar to what we did to Cyborg, we cut a piece out from K8S? | |
| 14:30:51 | zhipeng | I think the main pain point is still at scheduler extention | |
| 14:31:07 | zhipeng | which Derek also mentioned KubeCon last Dec | |
| 14:31:31 | zhipeng | Li_Liu essentially a out-of-band controller for accelerators | |
| 14:31:43 | shaohe_feng_ | Sundar: will cyborg support nest provider in Rocky release? | |
| 14:32:10 | zhipeng | shaohe_feng_ I think Placement won't support it | |
| 14:32:29 | shaohe_feng_ | zhipeng: Got it. | |
| 14:32:40 | zhipeng | but the way we are modeling it is very close to nrp, correct me if i'm wrong Li_Liu | |
| 14:32:43 | Sundar | Zhipeng, I was also advocating a scheduler extension. But apparently it is not popular within the community. There is a proposal to revamp the scheduler itself: https://docs.google.com/document/d/1NskpTHpOBWtIa5XsgB4bwPHz4IdRxL1RNvdjI7RVGio/edit# | |
| 14:32:58 | Sundar | So, the scheduler, as well as its extension APIs, may change | |
| 14:34:22 | zhipeng | well CRDs are generally great for API aggregation, but complex for resource related functionalities | |
| 14:34:32 | Sundar | Here is a possible way to get to a few basic cases without anything fancy (this is not fully agreed upon, please take this as an option, not a plan): | |
| 14:34:37 | zhipeng | like binding the resource to the pod | |
| 14:34:46 | Sundar | •Publish each region type as a resource. E.g. intel.com/fpga-dcp, intel.com/fpga-vg. •The pod spec asks for a region type as a resource, and also specifies a bitstream ID. That could be a label. •An admission controller inserts an init container on seeing a FPGA resource. •The scheduler picks a node based on the requested region type (and ignores the bitstream ID). •The init container pulls the bitstream wi | |
| 14:34:46 | zhipeng | since the process is external via CRD | |
| 14:35:07 | Sundar | Ah, that didn't come out well in IRC -- let me re-type | |
| 14:35:24 | Sundar | •Publish each region type as a resource. E.g. intel.com/fpga-dcp, intel.com/fpga-vg | |
| 14:35:34 | Sundar | •The pod spec asks for a region type as a resource, and also specifies a bitstream ID. That could be a label | |
| 14:35:45 | Sundar | •An admission controller inserts an init container on seeing a FPGA resource. | |
| 14:35:59 | Sundar | •The scheduler picks a node based on the requested region type (and ignores the bitstream ID). | |
| 14:36:10 | Sundar | •The init container pulls the bitstream with that ID from a bitstream repository (mechanism TBD) and programs the selected device. | |