Dies wird ein mehrteiliger Artikel rund um das Produkt VMware Bitfusion. Ich werde eine Einführung in die Technik geben, wie man einen Bitfusion Server einrichtet und wie man dessen Dienste aus Kubernetes Pods nutzen kann.
- Teil 1 : Eine Einführung in Bitfusion (dieser Artikel)
- Teil 2 : Bitfusion Server Setup
- Teil 3 : Bitfusion aus Kubernetes Pods und TKGS ansprechen.
Was ist Bitfusion?
Im August 2019 übernahm VMware BitFusion, einen führenden Anbieter im Bereich der GPU-Virtualisierung. Bitfusion bietet eine Softwareplattform, die bestimmte physische Ressourcen von den Compute-Servern entkoppelt. Es ist nicht für Grafikdarstellung oder Rendering konzipiert, sondern sondern vielmehr für Machine-Learning (ML) und Künstliche Intelligenz (AI). Bitfusion Systeme (Client und Server) laufen Stand heute nur auf ausgewählten Linux Systemen und unterstützen ML-Anwendungen wie beispielsweise TensorFlow.
Warum sind GPU für ML/AI Anwendungen so wichtig?
Prozessoren (Central Processing Unit / CPU) in aktuellen Systemen sind darauf optimiert, serielle Tasks in möglichst kurzer Zeit abzuarbeiten und dabei schnell zwischen Tasks zu wechseln. GPU (Graphics Processor Unit) dagegen können sehr viele Rechenoperation parallel bearbeiten. Im Namen der GPU steckt die ursprüngliche Anwendung. Die CPU sollte durch GPU bei der Grafikdarstellung entlastet werden, indem sämtliche Render- und Polygonberechnungen auf die GPU ausgelagert wurden. Mitte der 90er Jahre konnten einige 3D-Spiele noch wahlweise mit CPU oder GPU die Darstellung rendern. Schon damals ein Unterschied wie Tag und Nacht. GPU konnten die notwendigen Polygonberechnungen viel schneller und flüssiger berechnen.
Eine schöne Gegenüberstellung von GPU- und CPU-Architektur bescheibt Niels Hagoort in seinem Blogpost “Exploring the GPU Architecture“.
Aufgrund ihrer Architektur sind GPU jedoch nicht nur für Grafikanwendung ideal, sondern für alle Anwendungen, bei denen sehr viele arithmetische Operationen parallel ausgeführt werden müssen. Dazu gehören Blockchain, ML, AI und jede Art von Datenanalyse (Numbercrunching).
Was ist der neue Idee hinter Bitfusion?
Das Konzept, physische GPU-Ressourcen aus Virtuellen Maschinen zu nutzen ist nicht neu. Bei bisherigen Ansätzen musste sich die konsumierende VM auf einem Hostsystem befinden, welches selbst über eine physische GPU Ressource verfügt. Die GPU konnte dann entweder exklusiv über DirectPath I/O, oder über Nvidia Grid genutzt werden.
DirectPath I/O stellt eine PCI-Ressource wie zum Beispiel eine Grafikkarte (GPU) exklusiv einer VM bereit. Die GPU kann nicht mit anderen VMs geteilt werden. Eine Migration dieser VM auf andere Hosts (vMotion) ist nicht möglich.
Nvidia Grid teilt die physische GPU in mehrere virtuelle vGPU, die dann von mehreren VMs auf dem selben Host genutzt werden können.
Beide Lösungen haben eines gemeinsam: Alle VMs, welche GPU Ressourcen in Anspruch nehmen, müssen sich auf dem Host befinden, welcher über die physischen GPU Ressource verfügt. Das hat Auswirkungen auf das Clusterdesign. Entweder ich kann VMs, welche GPU konsumieren nur auf ausgesuchten ESXi Hosts betreiben, oder ich muss alle Compute-Hosts mit entsprechender Grafikhardware ausstatten. GPU und Compute sind immer gekoppelt.
Die Idee hinter Bitfusion
VMware Bitfusion entkoppelt physische GPU Ressourcen von den Konsumenten, indem es physischen GPU Ressourcen als Pool im Netzwerk bereitstellt. Konsumenten (VMs, Container oder Bare-Metal Server) müssen also nicht mehr auf der selben Hardware laufen, in der auch die GPU verbaut ist.
Anwendungen können physische GPU-Ressourcen gemeinsam nutzen, die nun nicht mehr nur einzelnen VMs exklusiv zugeordnet sind. Die Anwndungen können auf speziell vorbereiteten VMs, Containern oder physischen Systemen ausgeführt werden. Sie nutzen die GPU-Rechenleistung aus einem Pool von Bitfusion-Servern über das LAN und beanspruchen die Ressourcen nur für die Dauer der Ausführung einer Anwendung oder Sitzung. Die GPU Ressourcen werden in den Pool zurückgegeben, sobald die jeweilige Anwendung oder Sitzungen beendet ist.
Kernstück eines Bitfusion Clusters ist die Bitfusion Server Appliance. Diese erhält vom ESXi Host GPU Ressourcen, die ihr über DirectPath I/O bereitgestellt werden. Es wird eine oder mehrere Appliances pro ESXi Host bereitgestellt und es können mehrere Appliances zu einem Bitfusion Cluster verbunden werden. Die Anzahl der physischen GPU pro Appliance bestimmt, wieviele Ressourcen ein Client gleichzeitig buchen kann, Derzeit kann ein Prozess nur einen Bitfusion Server gleichzeitig ansprechen. Die Zuteilung der Ressourcen regelt der Bitfusion Cluster.
- Bitfusion Server: Stellt über das Netzwerk GPU Rechenleistung bereit
- Bitfusion Clients: Konsumieren GPU Rechenleistung vom Bitfusion Server. Die Arbeitspakete werden über das LAN an den Bitfusion Server übermittelt und die Resultate wiederum über das LAN an die Clients zurückgesendet. Die Clients schreiben direkt in das GPU-RAM. Bei der Buchung von GPU Ressourcen werden also nicht GPU Rechenzeit angefordert, sondern Anteile des GPU Memorys.
Client Anwendungen übertragen Programmcode über die CUDA-API auf die physische GPU. CUDA ist eine von Nvidia entwickelte Programmiertechnik, bei der Teile des Programmcodes auf der GPU ausgefürt werden. Die GPU fungiert somit als Koprozessor der CPU.
CUDA unterstützt Nvidia Grafikkarten ab Version GeForce 8 und Quadro Karten ab Serie FX 5600.
Weitere Artikel aus dieser Serie
- Teil 1 : Eine Einführung in Bitfusion (dieser Artikel)
- Teil 2 : Bitfusion Server Setup
- Teil 3 : Bitfusion aus Kubernetes Pods und TKG ansprechen.