Lesen Sie unseren Artikel über

.

Nachdem ich in meinem ersten Artikel Zeit in die Code-Optimierung investiert habe, um meine Rechenzeit um 90% zu reduzieren, war ich daran interessiert, das durch meine Änderungen eingesparte CO2-Äquivalent zu erfahren. Inspiriert durch den Microsoft DevBlog beschloss ich, auf der Grundlage des Artikels von Sara Bergman meine eigene Methode zu entwickeln.

In diesem Artikel werden wir jede Phase des Prozesses durchlaufen, der in drei verschiedene Teile unterteilt werden kann:

  • Die Profiling, wo wir data über den Ressourcenverbrauch unseres Codes sammeln werden
  • Die Berechnung, wo wir diese Ressourcen in Energieverbrauch umwandeln werden
  • Die Bewertung, wo wir diesen Energieverbrauch in Auswirkungen auf die Umwelt umrechnen werden

Jeder Teil wird von seiner tatsächlichen Implementierung auf einem Notebook in Azure ML Studio begleitet.

Schritt 1: Profiling des Codes

Das Ziel dieses ersten Schrittes ist recht einfach: die Ermittlung des Speicher- und CPU-Verbrauchs Ihres Codes. Im Falle unseres Rechners werden drei Hauptparameter berücksichtigt:

  • die von der CPU/GPU verbrauchte Energie
  • die durch die Speichernutzung verbrauchte Energie
  • die vom Kühlsystem verbrauchte Energie (Power Usage Effectiveness-Faktor)

Wir können online leicht Informationen finden, um die Power Usage Effectiveness (PUE) abzuschätzen, aber die Messung des CPU-/Speicherverbrauchs unseres Python-Notebooks ist nicht so einfach. Es gibt viele Lösungen (timeit, cProfile, psutil), die sich aber eher auf die Erstellung von Zeitprofilen als auf den CPU- und Speicherverbrauch konzentrieren.

Der Einfachheit halber beschloss ich, mein eigenes Profiling-Skript in der Bash zu programmieren und den Verbrauch meines Rechners in einer Endlosschleife zu messen, da sich der Code, den ich bewerten musste, auf einer JupyterLab-Instanz befand, die auf Linux (18.04.1-Ubuntu SMP) lief.

Das erste Skript, mit dem jede Sekunde der genaue Speicherverbrauch gemessen wird, wurde gespeichert als memory_profiler.sh :

Measuring the CO2eq impact of your Python Notebook (Azure ML)

Das zweite Skript, mit dem jede Sekunde der durchschnittliche CPU-Verbrauch während der letzten Minute gemessen wurde, wurde gespeichert als cpu_profiler.sh :

Aber diese beiden Skripte waren nicht genug, denn ich musste auch genau wissen, wann mein Code ausgeführt wurde. Zu diesem Zweck fügte ich eine Zelle am oberen Rand meines Notizbuchs hinzu:

Und eine weitere Zelle, ganz unten in meinem Notizbuch:

Jetzt, wo alles fertig war, musste ich nur noch :

1. Vergewissern Sie sich, dass meine Umgebung nicht durch andere im Hintergrund laufende Aufgaben verschmutzt wurde, und schließen Sie alle laufenden Instanzen, indem Sie auf die Schaltfläche Alle herunterfahren klicken

2. Öffnen Sie eine Terminalinstanz, um das Skript memory_log.sh im Hintergrund auszuführen

./memory_log.sh

3. Öffnen Sie eine weitere Terminalinstanz, um das Skript cpu_log.sh im Hintergrund auszuführen

./cpu_log.sh

4. Alle meine Notebook-Zellen instanziieren und ausführen

Sobald das gesamte Notebook ausgeführt wurde, kann ich beide Linux-Skripte durch Drücken der Tastenkombination STRG + C in jedem Terminal stoppen, überprüfen, ob meine Dateien memory.log und cpu.log erfolgreich erstellt wurden, und die Start- und Endzeit der Ausführung meines Notebooks notieren, indem ich die beiden hinzugefügten Zellen mit datetime.now() verwende.

Ich hatte jetzt alles, was ich für die nächste Berechnungsphase brauchte.

Schritt 2: In Energie umrechnen

Nun, da wir alle data zum Ressourcenverbrauch gesammelt haben, können wir damit beginnen, alles in kWh umzurechnen, eine Maßeinheit, die den Energieverbrauch darstellt.
Um dies zu erreichen, verwenden wir die folgende Gleichung:

Beginnen wir zunächst mit den CPU-bezogenen Metriken.
In einem ersten Schritt kopiere ich den Inhalt der Datei cpu.log in ein Google Spreadsheet, das ich später verwenden werde, um meinen durchschnittlichen CPU-Verbrauch zu ermitteln:

Ich führe ein paar Manipulationen an meinem Sheet durch (Text in Spalten aufteilen, nicht verwendete Spalten löschen, Spaltennamen hinzufügen), um etwas Handlicheres zu erhalten, das ich nutzen kann:

Mein Notebook lief von 12:33:20 bis 13:14:09, also kann ich einfach eine Formel hinzufügen, die den Durchschnitt von cpu_1 zwischen diesen Zeiten zurückgibt, und diesen Durchschnitt durch die Anzahl der CPUs meines Rechners dividieren:

Ich verstehe jetzt, dass mein Notebook im Durchschnitt 8.038 CPUs während seiner 40-minütigen Ausführung, die einer 100,47% durchschnittliche CPU-Auslastung.
Aber wie hoch ist der Verbrauch meiner CPU?
Das hängt vom Modell der verwendeten CPU ab. Weitere Informationen über die von meinem Rechner verwendete CPU finden Sie in der Azure Microsoft Dokumentation. Zum Zeitpunkt meiner Experimente (Oktober 2021) verwendete mein Rechner eine der 4 verschiedenen Arten von Intel Xeon CPUs:
- Intel Xeon Platinum 8270
- Intel Xeon Platinum 8171M
- Intel Xeon Prozessor E5-2697 v4
- Intel Xeon E5-2673 v3 @ 2.40GHz

Nachdem ich online auf der Intel-Website nachgeschaut habe, konnte ich die CPU-Modelle mit ihrem Stromverbrauch abgleichen. Dabei habe ich die Thermal Design Power (TDP) verwendet, die die durchschnittliche Leistung in Watt angibt, die der Prozessor abgibt, wenn er mit der Basisfrequenz und allen aktiven Kernen arbeitet.

Da sich die verwendete CPU bei jeder Ausführung meines Codes ändern kann, habe ich mich entschieden, die durchschnittliche TDP dieser vier CPUs zu nehmen, d.h. 158.75 in diesem Fall.
Ich habe jetzt beides gefunden Pc (=1.0047) und Cc (=158.75)

Werfen wir nun einen Blick auf die Datei memory.log

Nach demselben Verfahren wie zuvor kopiere ich den Inhalt meiner Datei in ein Google Sheet, teile den Text in Spalten auf und ordne sie so an, dass das folgende Format entsteht:

Ich wende dann eine Durchschnittsformel auf die Spalte C an, um die durchschnittliche Nutzung des Arbeitsspeichers zwischen 12:33:20 und 13:14:09 in MB. Ich teile diese Zahl durch 1024, um sie in GB umzurechnen.

Um den Stromverbrauch eines GB data abzuschätzen, werde ich einer Faustregel folgen, die ich gefunden habe Hier : 3W pro 8GB also 0.375W/GB und 1.88W insgesamt für meine 5,015 GB Speicherverbrauch.

Ich habe jetzt gefunden Pm (=1.88). Beachten Sie, dass der Stromverbrauch meines Arbeitsspeichers 85 Mal weniger wichtig zu sein scheint als der meiner CPU und daher übersprungen werden könnte, um eine etwas weniger genaue, aber schnellere Bewertung zu erhalten.

Da ich keine GPUs verwende, kann ich direkt zum letzten fehlenden Begriff übergehen: der Power Usage Effectiveness. PUE ist eine Kennzahl, die den Energieverbrauch des data-Zentrums für alles andere als das Hosting von cloud-Diensten wie Kühlung, Blindleistungskompensation, Beleuchtung ... bestimmt.

Der Blick auf die Microsoft Datacenter Datenblatt von 2015, waren die durchschnittlichen PUE-Werte in seinem neuen data-Center 1.125. Dies ist die Zahl, die wir für dieses Beispiel verwenden werden. Ein disziplinierterer Ansatz wäre jedoch, die tatsächliche PUE des für unsere Berechnungen verwendeten data-Centers zu ermitteln.

Wir haben jetzt alle Terme unserer Gleichung, lassen Sie uns die Rechnung machen!

Da unser Code zwischen 12:33:20 und 13:14:09 lief, benötigte er 40 Minuten und 49 Sekunden für die Ausführung (was 0,68 Stunden entspricht). Das bedeutet, dass er insgesamt verbraucht hat: 0,182 * 0,68 = 0,1238 kW

Schritt 3: Bewertung der Auswirkungen

Im letzten Schritt unserer Reise zur Messung des Kohlenstoffausstoßes müssen wir nun die Auswirkungen dieses Stromverbrauchs bewerten, die in hohem Maße von dem Ort abhängen, an dem die Energie verbraucht wurde. Um dies zu berechnen, verwenden wir den Kohlenstoffintensitätsfaktor, den wir leicht in Website von Electricity Map, ein Projekt zur Erfassung, Vorverarbeitung und Vereinheitlichung des öffentlichen Stroms data aus 150 Regionen.

Als ich die CO2eq-Belastung meines Codes in den Niederlanden berechnete, lag der Wert für die Kohlenstoffbelastung bei 487 Gramm pro kW. Damit beträgt die Auswirkung meines Codes 487 * 0,1238 = 60,3 gCO2eq.

Dieser Wert mag niedrig erscheinen, aber wenn man bedenkt, dass mein Stück Code jeden Tag und das ganze Jahr über lief, ergibt sich eine Auswirkung von 60,3 * 365,25 = 22,0 kgCO2eq pro Jahr.
Aber was bedeutet das im Vergleich zu anderen Aktivitäten? Wenn wir es zum Beispiel mit der Nutzung eines Autos vergleichen und die 2019 durchschnittliche C02-Emissionen für alle Neuwagen, Das entspricht dem Fußabdruck einer 180 km langen Reise.

Verwendung von monconvertisseurco2.fr Ich bin in der Lage, mehr gleichwertige Aktivitäten zu erhalten, indem ich “Base Carbon” open data verwende, das von einer Organisation des französischen Staates gesammelt wird: der “Nationalen Agentur für Umwelt und Energiemanagement” oder ADEME.

Fazit

Wir haben es geschafft!

Nach einem Profiling unseres Codes, um sowohl die Speicher- als auch die CPU-Nutzung zu ermitteln, diese Zahlen in den Stromverbrauch umzurechnen und die Auswirkungen in CO2eq zu bewerten, ist es uns gelungen, den CO2-Fußabdruck unseres Codes besser zu verstehen. Dies ist ein wichtiger Meilenstein, um einen Schritt zurück auf die Umweltauswirkungen unseres Codes zu machen und die Bedeutung von Code-Optimierungen hervorzuheben.

In diesem speziellen Fall, wie erwähnt im ersten Teil darüber, wie Sie Leistungsengpässe in Jupiter Lab aufspüren und vermeiden können, Durch die Optimierung einer einzigen Codezeile konnte ich 90% an Rechenzeit und 92% an CO2eq einsparen, wodurch ich von 22kgCO2eq auf weniger als 2kgCO2eq pro Jahr kam.

Heutzutage versprechen die meisten cloud-Anbieterplattformen, einschließlich Azure eine neutrale Auswirkung auf die Umwelt zu haben dank der Kompensationsprojekte. Umweltexperten sind sich jedoch einig, dass sie zwar effektiv und wichtig sind, Kompensationsprojekte allein reichen nicht aus, um die Auswirkungen unserer Aktivitäten auf den Planeten zu kontrollieren, und dass die die beste Lösung ist immer noch, die Emissionen an der Quelle zu reduzieren, wie in diesem Optimierungsprojekt.
Das ist es, was wir bei Artefact durch unsere verschiedenen Umweltinitiativen zu fördern versuchen!

Mittel Blog von Artefact.

Dieser Artikel wurde ursprünglich veröffentlicht auf Medium.com.
Folgen Sie uns auf unserem Medium Blog !