We also have a kind of really nice SQL engine that we bind to, which enables us to do multi-node and multi-GPU stuff when needed. Then there's a whole data science wing, all in Rapids, so you have your CUDF and CUGRAS stuff. And then this is the graphics column here, where we're sort of taking advantage of the fact that WebGL is a subset of OpenGL. So, really what we're doing with these bindings is, you know, you can take your WebGL code and you can then run it in OpenGL and get the benefit of that performance increase from OpenGL. We're also doing things with GLF bindings and, you know, node processes. But again, you can now use your LumaGL, DeckGL, SigmaJS, we're hoping to get two and three Jets and basically run them in OpenGL without much effort.
So, another component to this is since you're already on GPU, you get the benefit of GPU video encoding. So, by taking advantage of that and using WebRTC, you can do server-side rendering, stream that over to the browser and have the browser-side JS interact with it like a video tag and it's lightweight in that sense. It enables a lot more capabilities in that sense. Or you can just do stuff like, you know, interacting with all this stuff in a notebook.
So, what do we mean by kind of architecture? GPU hardware is a little bit different. You know, it's pretty straightforward when you have a single GPU and just doing client-side rendering. So, all the compute happens on the GPU, you send those computer values over, and the client JS renders it, those few values. You know, pretty straightforward and sort of where GPUs excel. It's excelled so well that you can have multiple users accessing the same kind of GPU data and it's fast enough to handle that. Or if you have particularly large data, NVIDIA has an NVIDIA NVLink. And so you can kind of link multiple GPUs together and kind of get expanded memory and compute power that way. Or you can go in a more kind of traditional cloud architecture, where you just sort of have multiple GPUs all separated, you know, you have lots of child processes running on each GPU, Load Balancer running across all of those. And so lots of, you know, instances of people accessing it. And basically whatever GPU is free at that moment is the one that is serving up the information to that user. So a pretty straightforward, you know, again, you still tend to need a lot of GPUs, but, you know, not something terribly unfamiliar.
So now, taking advantage of the server-side rendering and streaming component, if you have some pretty heavy workloads, then you can then separate out those tasks for each GPU. So one can do solely doing the compute stuff, and one can do the rendering and encoding part to the client-side video. And again, it can do this well enough that you can have multiple people accessing the same system and same data. The caveat here being that for consumer-grade GPUs, I think they're limited to three NV encoding streams at once, so keep that in mind. So something that is kind of interesting and new and a little bit more on the wishful thinking but possible side is this basically multi-GPU, server-side running, multi-user, massive system, where in this case it would be like a DGX, which has 8 GPUs and all and all that, and you can divvy up the compute and rendering between them, you have tons of GPU memory, and basically you have this mini supercomputer that you can then access and control with off-the-shelf JavaScript, so it's kind of wild. So, you know, you normally think you need some sort of HPC type software and all that and all the overhead that involves learning that stuff, but really there's nothing stopping you from leveraging a system this powerful with your run-of-the-mill JavaScript, which we think is pretty cool. But anyways, now for the good part. Examples and demos. So for this first one we're going to keep it simple.
Comments