Forum: PC Hard- und Software Ungenutzte Serverrechenleistung nutzen ohne den Rest zu beeinflussen


von Smart U. (Firma: Kein smartes Heim) (smartunplugged)


Lesenswert?

Ich habe einen Linuxserver, der zu ca. 10% ausgelastet ist.
Mein Gedanke war, die 90% zu nutzen, um ein Maschinenlernmodell ohne 
CUDA zu trainieren.
Das Ziel ist, daß sich der ML-Thread immer an den Rest anpaßt, gibt es 
etwa nichts zu tun, bekommt er alle Ressourcen. Gibt es viel zu tun, 
entsprechend wenig.
Dh, der ML-Thread steht dem anderen unter und muß sich immer anpassen, 
sodaß alle anderen Threads ohne Performanceeinbußen funktionieren.
Das Problem ist auch, daß ich eine Batch-size einstellen muß. Stelle ich 
diese optimal für geringen Speicherverbrauch der anderen Dienste ein und 
entzieht der Server Ressourcen, sollte ich einen OOM bekommen, den ich 
vermeiden will.
Wie könnte ich das unter Linux erreichen?

: Bearbeitet durch User
von IT-Abteilung (Gast)


Lesenswert?


von Mario M. (thelonging)


Lesenswert?

Und gegen den OOM-Killer gibt es "oom_score_adj".

von Εrnst B. (ernst)


Lesenswert?

Zum limitieren könntest du (zusätzlich zu nice&ionice) noch cgroups 
verwenden, entweder von Hand per "cgcreate ..." oder z.B. per 
systemd-run
1
 systemd-run -p MemoryMax=5G  ....

dabei kannst du auch die verfügbare CPU-Leistung weiter reduzieren oder 
IO-Limits festlegen, und auch das OOM-Verhalten feintunen...
>> man systemd.resource-control

von Rene K. (xdraconix)


Lesenswert?

Ist der Server Virtualisiert? Sprich läuft darauf ein lxc oder proxmox 
etc?! Da ist sowas super easy und immer voneinander getrennt. Ich habe 
zum Beispiel einen Renderserver mit Grid GPUs über Proxmox in einer VM 
laufen, dieser muss sich hinter den restlichen lxc Containern anstellen 
und deren Resourcen bei Bedarf frei halten. Damit lassen sich auch 
wunderbar ganze Prioritätskaskaden einstellen.

Ansonsten, wie bereits erwähnt: nice

von Smart U. (Firma: Kein smartes Heim) (smartunplugged)


Lesenswert?

Εrnst B. schrieb:
> Zum limitieren könntest du (zusätzlich zu nice&ionice) noch
> cgroups
> verwenden, entweder von Hand per "cgcreate ..." oder z.B. per
> systemd-run systemd-run -p MemoryMax=5G  ....
>
> dabei kannst du auch die verfügbare CPU-Leistung weiter reduzieren oder
> IO-Limits festlegen, und auch das OOM-Verhalten feintunen...
>>> man systemd.resource-control

Ich suche ein System, das selbst automatisch regelt. Ich will daher 
nicht MemoryMax=5G verwenden.

Was ich suche ist vom Prinzip her vergleichbar mit einer 
Auslagerungsdatei, die von Windows verwaltet wird, wird mehr Ram 
benötigt, wird eben mehr ausgelagert, etc.. Oder einer garbage 
collection in java. Nur daß es hier eben nicht um RAM geht - wobei das 
einem OOM vorgreifen könnte - sondern um CPU-Leistung, RAM(im anderen 
Sinne), Cache etc.

Mit anderen Worten, ich will dem Programm lediglich mitteilen, daß der 
ML-Thread die anderen nicht beeinflussen darf, und dann soll es 
eigenständig agieren. Ich will weder maximale CPU-Zeit angeben noch 
maximalen RAM.

Daher scheiden VM etc. aus, da ich diesen normalerweise immer Specs im 
Voraus zuweisen muß und diese es sich nicht dynamisch holen oder gar 
geben. Außerdem sind mir VMs schlecht in Erinnerung, weil sie immer 
ausgesprochen langsam waren, die Virtualisierung massig Performance 
gekostet hat.

: Bearbeitet durch User
von Εrnst B. (ernst)


Lesenswert?

Smart U. schrieb:
> Ich suche ein System, das selbst automatisch regelt.

Das macht Linux mit nice&ionice schon.
Aber:

Smart U. schrieb:
> wird mehr Ram
> benötigt, wird eben mehr ausgelagert

das willst du vermutlich nicht.
Wenn dein Background-Idle-Task viel RAM will, wird Speicher der 
wichtigen "10% Tasks" ausgelagert. Wenn die dann wieder was zu tun 
haben, z.B. weil ein Request reinkommt, müssen die wieder aus dem Swap 
geladen werden, was langsam ist und deren Reaktionszeit stark negativ 
beeinflusst.

Wenn du wirklich verhindern willst, dass dein KI-Training den Rest 
beeinflusst, musst du dafür sorgen, dass es dem Rest des Systems nie 
wichtigen Arbeitsspeicher wegnimmt. Entweder durch sinnvolle Batch-Sizes 
oder durch harte Limits oder Beides.

von (prx) A. K. (prx)


Lesenswert?

Smart U. schrieb:
> Außerdem sind mir VMs schlecht in Erinnerung, weil sie immer
> ausgesprochen langsam waren, die Virtualisierung massig Performance
> gekostet hat.

Ich mache das schon eine Weile und in unseren Serverräumen stehen 
mittlerweile neben anderer Infrastruktur nur noch Virtualisierungshosts. 
Und das begann vor 2 Jahrzehnten.

von (prx) A. K. (prx)


Lesenswert?

Auslastung von Hardware durch Hintergrundarbeit verlangsamt den 
Vordergrund, trotz aller Priorisierung.Beispielsweise weil die Taktrate 
sinkt.

von Smart U. (Firma: Kein smartes Heim) (smartunplugged)


Lesenswert?

(prx) A. K. schrieb:
> Auslastung von Hardware durch Hintergrundarbeit verlangsamt den
> Vordergrund, trotz aller Priorisierung.Beispielsweise weil die Taktrate
> sinkt.

Vorschläge?

von DPA (Gast)


Lesenswert?

Das sollte mit CPU CGroups gehen. Braucht dann aber trotzdem mehr strom.

von Εrnst B. (ernst)


Lesenswert?

Smart U. schrieb:
> Vorschläge?

Verabschiede dich von der Idee, dass das ganz ohne Beeinflussung der 
anderen Serverdienste geht.

Linux verwendet möglichst immer den gesamten Arbeitsspeicher, ggfs als 
Disk-Cache. Wenn du für irgendwas im Hintergrund, egal wie niedrig 
priorisiert, Arbeitsspeicher verwendest, reduzierst du den Cache, was 
den Rest des Systems beeinflusst.

Also: Überleg dir, wieviel Speicher deine Serverdienste brauchen, und 
auf wieviel Cache du verzichten kannst, ohne dass es allzu negativ 
auffällt.
(Hängt von den Diensten ab, bei einer Datenbank ist's evtl 0, bei einem 
File-Server für große Video-Dateien hingegen ist der Cache nicht so 
wichtig)

Dann stell deinen Idle-Task so ein, dass er weniger Speicher verwendet.
Beachte, dass das Laden der Trainingsdaten auch durch den Cache läuft.

Und wenn du zum Schluss kommst, dass von 128 GB installiertem RAM eben 
nur 32 verzichtbar sind, dann ist das eben so.

Und da mit SWAP-Space nachzuhelfen ist immer kontraproduktiv. Selbst 
wenn nur dein Ki-Training dahin ausgelagert werden darf, blockiert das 
trotzdem Speicheranforderungen der wichtigen Dienste.

von Smart U. (Firma: Kein smartes Heim) (smartunplugged)


Lesenswert?

DPA schrieb:
> Das sollte mit CPU CGroups gehen. Braucht dann aber trotzdem mehr
> strom.

Nicht mein Problem, ich zahle eine Flatrate.

von c-hater (Gast)


Lesenswert?

Smart U. schrieb:

> Daher scheiden VM etc. aus, da ich diesen normalerweise immer Specs im
> Voraus zuweisen muß und diese es sich nicht dynamisch holen oder gar
> geben.

Unsinn. Prozessorzeit wird schon immer dynamisch zugewiesen, RAM kann 
man ebenfalls dynamisch zuweisen lassen. Was du heutzutage typisch einer 
VM zuweist, sind nur die Limits. Das funktioniert in zwei Richtungen. 
Einerseits garantierst du der VM gewisse Mindestwerte (die sie sicher 
benutzen kann, aber nicht benutzen MUSS!), andererseits definierst du 
Maxima, die die VM nicht überschreiten kann. Im Prinzip funktioniert das 
eigentlich ganz genau so wie die Resourcenverwaltung innerhalb eines 
neuzeitlichen OS.

Für RAM und Rechenzeit funktioniert das sehr gut. Etwas kitzlig ist nach 
wie vor IO. Und zwar sowohl innerhalb eines OS als auch bei einer Horde 
VMs, die auf einem Host laufen.

> Außerdem sind mir VMs schlecht in Erinnerung, weil sie immer
> ausgesprochen langsam waren, die Virtualisierung massig Performance
> gekostet hat.

Unsinn. Der Witz ist, dass VMs u.U. sogar schneller laufen als 
derselbe Code auf Blech. Das hängt aber natürlich von der konkreten 
Anwendung ab. Die Zusammenhänge sind sehr komplex.

von Totomitharry (Gast)


Lesenswert?

Ist ja an sich eine gescheite Idee, gibt es aber nicht so etwas wie 
fair-use..

Bei meinem Provider hat der virtuell verteilte dedizierte Root-Server 
zwar nur Fair-Use, aber für kurzzeitige Spitzenlasten gibt es eine 
verteilte Reserve auf dem Host die dann automatisch genutzt wird, meine 
sogar gelesen zu haben das die wirte auch noch mehr zugeteilt bekommen 
können.

Dadurch haben alle ja nur Vorteile. Einfach mal die AGBs lesen ;)

von Smart U. (Firma: Kein smartes Heim) (smartunplugged)


Lesenswert?

c-hater schrieb:
> Prozessorzeit wird schon immer dynamisch zugewiesen, RAM kann
> man ebenfalls dynamisch zuweisen lassen. Was du heutzutage typisch einer
> VM zuweist, sind nur die Limits. Das funktioniert in zwei Richtungen.
> Einerseits garantierst du der VM gewisse Mindestwerte (die sie sicher
> benutzen kann, aber nicht benutzen MUSS!), andererseits definierst du
> Maxima, die die VM nicht überschreiten kann. Im Prinzip funktioniert das
> eigentlich ganz genau so wie die Resourcenverwaltung innerhalb *eines*
> neuzeitlichen OS.

Unsinn.


> Der Witz ist, dass VMs u.U. sogar schneller laufen als
> derselbe Code auf Blech. Das hängt aber natürlich von der konkreten
> Anwendung ab. Die Zusammenhänge sind sehr komplex.

Unsinn.

von Smart U. (Firma: Kein smartes Heim) (smartunplugged)


Lesenswert?

Totomitharry schrieb:
> Ist ja an sich eine gescheite Idee, gibt es aber nicht so etwas wie
> fair-use..
>
> Dadurch haben alle ja nur Vorteile. Einfach mal die AGBs lesen ;)

Unsinn. Einfach mal nachdenken, warum ;)

von Michael D. (nospam2000)


Lesenswert?

Smart U. schrieb:
>> Das sollte mit CPU CGroups gehen. Braucht dann aber trotzdem mehr
>> strom.
>
> Nicht mein Problem, ich zahle eine Flatrate.

Flatrates verderben den Charakter

von Nano (Gast)


Lesenswert?

Wie wäre es mit Kerne zuweisen?

Beitrag #7309459 wurde von einem Moderator gelöscht.
von <<<<<>>>>> (Gast)


Lesenswert?

c-hater schrieb:
>> Außerdem sind mir VMs schlecht in Erinnerung, weil sie immer
>> ausgesprochen langsam waren, die Virtualisierung massig Performance
>> gekostet hat.

Dann haben sie zu wenig Speicher zugewiesen bekommen.

Beitrag #7309546 wurde von einem Moderator gelöscht.
von Dieter (Gast)


Lesenswert?

<<<<<>>>>> schrieb:
> Dann haben sie zu wenig Speicher zugewiesen bekommen.

Die Virtualisierungsunterstützung des Prozessors zur Beschleunigung war 
vermutlich nich aktiviert.

Beitrag #7309591 wurde von einem Moderator gelöscht.
Beitrag #7309632 wurde von einem Moderator gelöscht.
von Obonto (Gast)


Lesenswert?

Smart U. schrieb:
> Ich habe einen Linuxserver, der zu ca. 10% ausgelastet ist.
Warum kaufst du sowas überhaupt? MAch nen langsameren Proz rein oder 
takte es runter.

von (prx) A. K. (prx)


Lesenswert?

Obonto schrieb:
> oder takte es runter.

Heutige Prozessoren sind für Faulpelze gebaut. Während man vor 3-4 
Jahrzehnten noch Jumper stecken musste, oder im Luxusfall einen Schalter 
am Gehäuse, machen das heutige Rechner ganz von selbst. ;-)

von Nano (Gast)


Lesenswert?

Obonto schrieb:
> Smart U. schrieb:
>> Ich habe einen Linuxserver, der zu ca. 10% ausgelastet ist.
> Warum kaufst du sowas überhaupt? MAch nen langsameren Proz rein oder
> takte es runter.

Kannst ja ne Softwarebremse einsetzen um auf die > 80 % zu kommen. :p 
SCNR

von Totomitharry (Gast)


Lesenswert?

Smart U. schrieb:
> Unsinn. Einfach mal nachdenken, warum ;)

Kommt halt darauf an.. meine bis jetzt nicht gelesen zu haben ob es hier 
um einen bereits um eine Virtualisierung handelt oder eine eigene 
Hardware. Dazu kommt es ja auch an welche Virtualisierung bereits 
eingesetzt wird.. ds-root, VPS Root.. bzw. 14 Kerne vom gold epyc für 
45€ oder 8 Kerne für 130€ im Monat.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.