Kernels are responsible for managing the physical devices attached to the system. When the system boots up and the kernel starts, it loads device drivers that allow it to manage those devices. Management of these devices includes making them available to the rest of the system to use.
Devices like GPUs, generally for rendering graphics, are made available to a graphics engine by the kernel. The graphics engine will "talk" to the GPU because the kernel manages it and makes it available. The graphics engine can then send instructions to do various things, like render 3D graphics.
Each device has its own architecture and that's why the kernel has to be given a device driver - so it can be taught how to communicate with that device.
Remember when we looked at CPUs and we talked about architectures like
ARM? Well the hardware you attach to your system has an architecture too and a kernel can't just automatically learn or understand it, so a device driver, which is installed and loaded into the kernel, teaches the kernel everything it needs to know to talk to the hardware.
Here's a screen shot showing information from my own system about the device driver for my nVidia RTX 2080 Super:
You can see I'm running version
457.09 of the driver. If we take a look at the "components" tab, we'll see the driver is made up of a lot of files and its own "sub-drivers" (I just made that term up for lack of a better one):
In modern Cloud like environments you're not likely to have to worry about device drivers, as you won't be dealing with hardware in such an environment.