Grafikkarte für KI reservieren?

OP (Firma: Q3) #7692002
Lesenswert?

Wir sind gerade dabei, einen weiteren PC für Versuche mit lokaler KI (GPT4All) zu konfigurieren. Dazu haben wir eine quasi "noname"-Grafikkarte für den Bildschirm eingebaut und eine RTX3060 als Hirn-Booster für die KI. Das System kommt damit immerhin auf ca. 15 Token/s (gegen 3...5 Token/s mit i7-CPU only).

Wie kann ich nun sicherstellen, dass die 12GB der RTX ausschließlich für die KI genutzt werden und nicht (zumindest teilweise) für irgendwelche Desktops des OS, die dort niemand braucht, weil gar kein Monitor angeschlossen?

Oder regelt sich das von selbst, eben weil kein Monitor angeschhlossen ist?

OS ist Ubuntu 22.x ...

#7692027
Lesenswert?

Frank E. schrieb:

Oder regelt sich das von selbst, eben weil kein Monitor angeschhlossen ist?

Nein, ..vielleicht doch, kommt drauf an, könntest du das Setup mit dem Monitor noch einmal genauer beschreiben?

Wenn Konflikte auftauchen, dann kann man die mit Konsolebefehlen angehen. Außerdem könnte kann man auch die Interne CPU-Grafik nutzen, oder soll die mitrechnen? Du hättest dann praktisch 3 "Motoren".

OP (Firma: Q3) #7692129
Lesenswert?

Rbx schrieb:

Frank E. schrieb:

Oder regelt sich das von selbst, eben weil kein Monitor angeschhlossen ist?

Nein, ..vielleicht doch, kommt drauf an, könntest du das Setup mit dem Monitor noch einmal genauer beschreiben?

Das schien mir eigentlich recht einfach und deutlich beschrieben: Der Monitor hängt an der 0815-Graka (wo auch brav der Ubuntu-Desktop erscheint, der Rechner bedient wird) und an den Anschlüssen der RTX steckt nix, die soll nur rechnen.

#7692163
Lesenswert?

Frank E. schrieb:

Das schien mir eigentlich recht einfach und deutlich beschrieben: Der Monitor hängt an der 0815-Graka (wo auch brav der Ubuntu-Desktop erscheint, der Rechner bedient wird) und an den Anschlüssen der RTX steckt nix, die soll nur rechnen.

Ja ok, wenn es danach geht, brauchst du eigentlich gar keinen Desktop. Der wird ja bei mehr Konsole-orientierten Linuxen erst aus der Konsole gestartet. So ähnlich wie früher seine Mails in DOS angesehen hat, und dann Windows per Konsolebefehl gestartet hatte.

Dann noch: Wenn du schon 2 Grafikkarten hast, kannst du die doch zusammenrechnen lassen und für den Konsolebildschirm die CPU-interne Grafik nutzen. Bei weiteren Hintergründen (z.B. CUDA/MPI) kann es natürlich komplexer werden, je nachdem - und man muss sich genauer (auch länger) einarbeiten. Prinzipiell müsste auch in deinen Unterlagen stehen, wie was einzurichten ist. (https://github.com/KomputeProject/kompute)

#7692197
Lesenswert?

Ich hab nur die interne Grafikkarte, daher kann ich das alles nicht testen.

Bei nicht-proprietären Treibern, also Mesa Treibern, gibt es die DRI_PRIME Environment Variablen: https://docs.mesa3d.org/envvars.html#envvar-DRI_PRIME_DEBUG

Anwendungen können manchmal aber auch selbst entscheiden, welches Device sie nutzen wollen, statt das Mesa zu überlassen. Vermutlich wird das bei Vulkan öfter gemacht werden, weil da alles sehr low level ist.

In der regel gibt es /dev/dri/render* und /dev/dri/card* Device Files für die Karten. Die Render Nodes können auf der GPU rendern. Das beinhaltet auch das anlegen von Buffer Objects per GBM, (sowas ähnliches wie Texturen), die auch in anderen Nodes importiert / verwendet werden können (das ist DRM Prime).
Die card Nodes enthalten KMS (kernel mode setting) Funktionalität. Auflösungen setzen, Sachen anzeigen, das ist da drin. Aus historischen gründen beinhalten die oft zusätzlich auch das render node Zeugs, haben aber wegen dem Modeswitching ein paar Limitationen. Die meisten GPUs haben eine Card und eine Render Node. (Auf mobilen Geräten (z.B: Smartphones) gibt es es aber oft, das card Nodes nur KMS können, weil sie direkt z.B. Display Pannel repräsentieren, und die GPU davon nichts weiss, und nur eine render Node hat. Mesa importiert dann einen DRM dumb buffer (auch nur ein bo) von der Card node in eine Render node und rendert dort. Das ist auch einfach DRM Prime).

Bei XOrg kann man in der Config angeben, welche Card Node(s) verwendet werden sollen. Bei wayland weiss ich nicht, wie man das macht.

Was man eventuell versuchen könnte, ist einfach zu verhindern, das ein Programm eine card/render node sieht / darauf zugreifen kann. In der theorie sollte das gehen, musst du aber schauen, ob die Programme da mit machen.
Du kannst solche Nodes mit Containern sharen. Render nodes sollten unproblematisch sein. Programme die KMS nutzen und card nodes brauchen, brauchen möglicherweise noch /sys/class/drm/.

Eventuell könnte man auch schauen, was passiert, wenn man den Nodes unterschiedliche Gruppen oder ACLs gibt, und die Berechtigungen mit ACLs einschränkt, vielleicht reicht das ja auch schon.

Wobei da aber logind (genauso wie früher auch console kit, und ich nehme an auch seatd), bei den Card Nodes auch ACLs vergeben, fürs Seat Managemant, was aus sicherheitstechnischer Sicht kompletter Blödsinn ist (sobald man eine Datei geöffnet hat, hat man einen Filedescriptor, danach spielen die Berechtigungen der Datei keine rolle mehr, auch wenn das ACL wieder entfernt wird).

#7692254
Lesenswert?

A. S. schrieb:

1
nvidia-smi

zeigt dir an, welche prozesse wie viel

GPU-Speicher reserviert haben. Unter Linux ist die Ausgabe auch einigermaßen vernünftig.

Dahinter noch den Parameter dmon Und er zeigt dir laufend den Stromverbrauch etc. Bei ruhendem Desktop sinds bei mir 16-20W. Starte deine KI Anwendung und die Leistungsaufnahme steigt entsprechend. Läuft wirklich so einfach…

OP (Firma: Q3) #7692431
Lesenswert?

Manchmal nehmen die Dinge Wendungen, die man nicht vermutet: Weil wir ständig mit Treiber-Konflikten zu kämpfen hatten, eine Verzweiflungstat: Ausschließlich die RTX3060, AUCH für den Bildschirm ...

Und siehe da: GPT4All antwortet nun mit sensationellen 50 Token pro Sekunde.

Nun gut, was solls, hauptsache verwendbar. :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren