Ungenutzte Serverrechenleistung nutzen ohne den Rest zu beeinflussen

OP (Firma: Kein smartes Heim) #7308296
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?

#7308348
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

#7308349
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

OP (Firma: Kein smartes Heim) #7308392
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.

#7308407
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.

#7308473
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.

Gast #7308550
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.

Gast #7308670
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 ;)

OP (Firma: Kein smartes Heim) #7309119
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.

Beitrag #7309459 wurde von einem Moderator gelöscht.
Beitrag #7309546 wurde von einem Moderator gelöscht.
Beitrag #7309591 wurde von einem Moderator gelöscht.
Beitrag #7309632 wurde von einem Moderator gelöscht.
Gast #7309724
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.

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