Skip to content

Commit 1188739

Browse files
benoit-ctybenoit-cty
authored andcommitted
Cleaning
1 parent c7f6d62 commit 1188739

4 files changed

Lines changed: 86 additions & 230 deletions

File tree

codecarbon/emissions_tracker.py

Lines changed: 12 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ def start_task(self, task_name=None) -> None:
475475
self._scheduler_monitor_power.start()
476476

477477
if self._active_task:
478-
logger.info("A task is already under measure")
478+
logger.warning("A task is already under measure")
479479
return
480480
if not task_name:
481481
task_name = uuid.uuid4().__str__()
@@ -512,47 +512,16 @@ def stop_task(self, task_name: str = None) -> EmissionsData:
512512
self._scheduler_monitor_power.stop()
513513

514514
task_name = task_name if task_name else self._active_task
515-
516-
# # logger.info(
517-
# # f"STOP_TASK_DEBUG: Before _measure_power_and_energy: "
518-
# # f"CPU Energy: {self._total_cpu_energy.kWh} kWh, "
519-
# # f"GPU Energy: {self._total_gpu_energy.kWh} kWh, "
520-
# # f"RAM Energy: {self._total_ram_energy.kWh} kWh, "
521-
# # f"Total Energy: {self._total_energy.kWh} kWh"
522-
# # )
515+
if self._tasks.get(task_name) is None:
516+
logger.warning("stop_task : No active task to stop.")
517+
return None
523518
self._measure_power_and_energy()
524-
# # logger.info(
525-
# # f"STOP_TASK_DEBUG: After _measure_power_and_energy: "
526-
# # f"CPU Energy: {self._total_cpu_energy.kWh} kWh, "
527-
# # f"GPU Energy: {self._total_gpu_energy.kWh} kWh, "
528-
# # f"RAM Energy: {self._total_ram_energy.kWh} kWh, "
529-
# # f"Total Energy: {self._total_energy.kWh} kWh"
530-
# # )
531-
532519
emissions_data = (
533520
self._prepare_emissions_data()
534521
) # This is emissions_data_at_stop
535522

536-
# # logger.info(
537-
# # f"STOP_TASK_DEBUG: emissions_data (totals at task stop): "
538-
# # f"CPU Energy: {emissions_data.cpu_energy} kWh, "
539-
# # f"GPU Energy: {emissions_data.gpu_energy} kWh, "
540-
# # f"RAM Energy: {emissions_data.ram_energy} kWh, "
541-
# # f"Total Energy: {emissions_data.energy_consumed} kWh"
542-
# # )
543-
# if self._previous_emissions is not None: # This was a debug log for _previous_emissions
544-
# # logger.info(
545-
# # f"STOP_TASK_DEBUG: self._previous_emissions (value before task-specific delta calc): "
546-
# # f"CPU Energy: {self._previous_emissions.cpu_energy} kWh, "
547-
# # # ... other fields ...
548-
# # f"Total Energy: {self._previous_emissions.energy_consumed} kWh"
549-
# # )
550-
551-
emissions_data_delta: EmissionsData # Type hint for clarity
552-
553523
if self._active_task_emissions_at_start is None:
554-
# This logger.warning should remain, as it's not a DEBUG log but a genuine warning for an unexpected state.
555-
logger.warning(
524+
logger.error(
556525
f"Task {task_name}: _active_task_emissions_at_start was None. "
557526
"This indicates an issue, possibly start_task was not called or was corrupted. "
558527
"Reporting zero delta for this task to avoid errors."
@@ -570,10 +539,6 @@ def stop_task(self, task_name: str = None) -> EmissionsData:
570539
emissions_data_delta.compute_delta_emission(
571540
self._active_task_emissions_at_start
572541
)
573-
# # logger.info(
574-
# # f"STOP_TASK_DEBUG: emissions_data_delta (task-specific): "
575-
# # # ... fields ...
576-
# # )
577542

578543
# Update global _previous_emissions state using the current totals at task stop.
579544
self._compute_emissions_delta(emissions_data)
@@ -697,13 +662,9 @@ def _persist_data(
697662

698663
def _prepare_emissions_data(self) -> EmissionsData:
699664
"""
700-
:delta: If 'True', return only the delta comsumption since the last call.
665+
Prepare the emissions data to be sent to the API or written to a file.
666+
:return: EmissionsData object with the total emissions data.
701667
"""
702-
# logger.info(
703-
# f"PREPARE_EMISSIONS_DATA_DEBUG: Current total energy values being used: "
704-
# f"CPU={self._total_cpu_energy.kWh}, GPU={self._total_gpu_energy.kWh}, "
705-
# f"RAM={self._total_ram_energy.kWh}, Total={self._total_energy.kWh}"
706-
# )
707668
cloud: CloudMetadata = self._get_cloud_metadata()
708669
duration: Time = Time.from_seconds(time.perf_counter() - self._start_time)
709670

@@ -765,34 +726,22 @@ def _prepare_emissions_data(self) -> EmissionsData:
765726
return total_emissions
766727

767728
def _compute_emissions_delta(self, total_emissions: EmissionsData) -> EmissionsData:
768-
# logger.info(
769-
# f"COMPUTE_EMISSIONS_DELTA_DEBUG: Input total_emissions: "
770-
# f"CPU={total_emissions.cpu_energy}, GPU={total_emissions.gpu_energy}, "
771-
# f"RAM={total_emissions.ram_energy}, Total={total_emissions.energy_consumed}"
772-
# )
729+
"""
730+
Compute the delta emissions since the last call to this method.
731+
:param total_emissions: The total emissions data to compute the delta from.
732+
:return: EmissionsData with the delta emissions.
733+
"""
773734
if self._previous_emissions is None:
774-
# logger.info("COMPUTE_EMISSIONS_DELTA_DEBUG: self._previous_emissions is None.")
775735
self._previous_emissions = total_emissions
776736
delta_emissions: EmissionsData = total_emissions
777737
else:
778-
# logger.info(
779-
# f"COMPUTE_EMISSIONS_DELTA_DEBUG: Existing self._previous_emissions: "
780-
# f"CPU={self._previous_emissions.cpu_energy}, GPU={self._previous_emissions.gpu_energy}, "
781-
# f"RAM={self._previous_emissions.ram_energy}, Total={self._previous_emissions.energy_consumed}"
782-
# )
783738
# Create a copy
784739
delta_emissions = dataclasses.replace(total_emissions)
785740
# Compute emissions rate from delta
786741
delta_emissions.compute_delta_emission(self._previous_emissions)
787742
# TODO : find a way to store _previous_emissions only when
788743
# TODO : the API call succeeded
789744
self._previous_emissions = total_emissions
790-
791-
# logger.info(
792-
# f"COMPUTE_EMISSIONS_DELTA_DEBUG: Returning delta_emissions: "
793-
# f"CPU={delta_emissions.cpu_energy}, GPU={delta_emissions.gpu_energy}, "
794-
# f"RAM={delta_emissions.ram_energy}, Total={delta_emissions.energy_consumed}"
795-
# )
796745
return delta_emissions
797746

798747
@abstractmethod

codecarbon/output_methods/emissions_data.py

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -51,35 +51,10 @@ def compute_delta_emission(self, previous_emission):
5151
self.duration = delta_duration
5252
delta_emissions = self.emissions - previous_emission.emissions
5353
self.emissions = delta_emissions
54-
55-
# logger.info(
56-
# f"EMISSION_DATA_DEBUG: Before CPU delta: "
57-
# f"self.cpu_energy={self.cpu_energy}, previous_emission.cpu_energy={previous_emission.cpu_energy}"
58-
# )
5954
self.cpu_energy -= previous_emission.cpu_energy
60-
# logger.info(f"EMISSION_DATA_DEBUG: After CPU delta: self.cpu_energy={self.cpu_energy}")
61-
62-
# logger.info(
63-
# f"EMISSION_DATA_DEBUG: Before GPU delta: "
64-
# f"self.gpu_energy={self.gpu_energy}, previous_emission.gpu_energy={previous_emission.gpu_energy}"
65-
# )
6655
self.gpu_energy -= previous_emission.gpu_energy
67-
# logger.info(f"EMISSION_DATA_DEBUG: After GPU delta: self.gpu_energy={self.gpu_energy}")
68-
69-
# logger.info(
70-
# f"EMISSION_DATA_DEBUG: Before RAM delta: "
71-
# f"self.ram_energy={self.ram_energy}, previous_emission.ram_energy={previous_emission.ram_energy}"
72-
# )
7356
self.ram_energy -= previous_emission.ram_energy
74-
# logger.info(f"EMISSION_DATA_DEBUG: After RAM delta: self.ram_energy={self.ram_energy}")
75-
76-
# logger.info(
77-
# f"EMISSION_DATA_DEBUG: Before energy_consumed delta: "
78-
# f"self.energy_consumed={self.energy_consumed}, previous_emission.energy_consumed={previous_emission.energy_consumed}"
79-
# )
8057
self.energy_consumed -= previous_emission.energy_consumed
81-
# logger.info(f"EMISSION_DATA_DEBUG: After energy_consumed delta: self.energy_consumed={self.energy_consumed}")
82-
8358
if delta_duration > 0:
8459
# emissions_rate in g/s : delta_emissions in kg.CO2 / delta_duration in s
8560
self.emissions_rate = delta_emissions / delta_duration

examples/task_loop_same_task.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import time
2+
3+
from codecarbon import EmissionsTracker
4+
5+
tracker = EmissionsTracker(
6+
project_name="ZeroEnergyTestLoop",
7+
measure_power_secs=1, # Or your desired interval
8+
log_level="debug", # Set to debug to get all codecarbon logs + our new ones
9+
)
10+
11+
12+
def busy_task(duration_secs=4):
13+
print(f" Task: Starting busy work for ~{duration_secs} seconds...")
14+
start_time = time.perf_counter()
15+
while time.perf_counter() - start_time < duration_secs:
16+
# Simulate some CPU work
17+
# for _ in range(100000): # Adjust complexity as needed
18+
# pass
19+
time.sleep(2)
20+
end_time = time.perf_counter()
21+
print(f" Task: Finished busy work in {end_time - start_time:.2f} seconds.")
22+
23+
24+
max_rounds = 20 # Safety break for the loop
25+
26+
print("Starting tracking loop. Will stop if energy_consumed is 0.0 for a task.")
27+
28+
try:
29+
for current_round in range(max_rounds):
30+
print(f"Round {current_round + 1}:")
31+
task_name = f"round_{current_round + 1}_task"
32+
33+
tracker.start_task(task_name)
34+
print(f" Tracker: Started task '{task_name}'")
35+
36+
busy_task(duration_secs=1) # Simulate work for about 1 second
37+
38+
emissions_data = tracker.stop_task()
39+
print(f" Tracker: Stopped task '{task_name}'")
40+
41+
if emissions_data:
42+
print(f" EmissionsData for {task_name}:")
43+
print(f" Duration: {emissions_data.duration:.4f}s")
44+
print(f" CPU Energy: {emissions_data.cpu_energy:.6f} kWh")
45+
print(f" GPU Energy: {emissions_data.gpu_energy:.6f} kWh")
46+
print(f" RAM Energy: {emissions_data.ram_energy:.6f} kWh")
47+
print(
48+
f" Total Energy Consumed: {emissions_data.energy_consumed:.6f} kWh"
49+
)
50+
print(f" Emissions: {emissions_data.emissions:.6f} kg CO2eq")
51+
52+
if emissions_data.energy_consumed == 0.0:
53+
print("###########################################################")
54+
print(
55+
f"INFO: energy_consumed is 0.0 in round {current_round + 1}. Stopping loop."
56+
)
57+
print("###########################################################")
58+
break
59+
else:
60+
print(f" WARNING: tracker.stop_task() returned None for {task_name}")
61+
62+
# Small pause between rounds, can be adjusted or removed
63+
time.sleep(1)
64+
65+
else: # Executed if the loop completes without break
66+
print(
67+
f"Loop completed {max_rounds} rounds without encountering zero energy consumption."
68+
)
69+
70+
except Exception as e:
71+
print(f"An error occurred: {e}")
72+
finally:
73+
tracker.stop_task()
74+
print("Script finished.")

test_fix.py

Lines changed: 0 additions & 142 deletions
This file was deleted.

0 commit comments

Comments
 (0)