Skip to content

Commit d3fd089

Browse files
benoit-ctybenoit-cty
authored andcommitted
Fix warning KeyError: 'gpu_index' (#1122)
Co-authored-by: benoit-cty <anne@onyme.fr>
1 parent a1c588d commit d3fd089

2 files changed

Lines changed: 30 additions & 2 deletions

File tree

codecarbon/emissions_tracker.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -978,9 +978,10 @@ def _monitor_power(self) -> None:
978978
if isinstance(hardware, GPU):
979979
gpu_ids_to_monitor = hardware.gpu_ids
980980
gpu_details = hardware.devices.get_gpu_details()
981-
for gpu_detail in gpu_details:
981+
for gpu_index, gpu_detail in enumerate(gpu_details):
982+
resolved_gpu_index = gpu_detail.get("gpu_index", gpu_index)
982983
if (
983-
gpu_detail["gpu_index"] in gpu_ids_to_monitor
984+
resolved_gpu_index in gpu_ids_to_monitor
984985
and "gpu_utilization" in gpu_detail
985986
):
986987
self._gpu_utilization_history.append(

tests/test_emissions_tracker.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,33 @@ def test_carbon_tracker_TWO_GPU_PRIVATE_INFRA_CANADA(
117117
self.assertIsInstance(emissions, float)
118118
self.assertAlmostEqual(emissions, 6.262572537957655e-05, places=2)
119119

120+
def test_monitor_power_uses_gpu_detail_position_when_gpu_index_is_missing(
121+
self,
122+
mock_cli_setup,
123+
mock_log_values,
124+
mocked_get_gpu_details,
125+
mocked_env_cloud_details,
126+
mocked_is_gpu_details_available,
127+
mocked_is_nvidia_system,
128+
):
129+
tracker = EmissionsTracker(measure_power_secs=1, save_to_file=False)
130+
131+
mock_gpu = mock.MagicMock()
132+
from codecarbon.external.hardware import GPU
133+
134+
mock_gpu.__class__ = GPU
135+
mock_gpu.gpu_ids = [0, 1]
136+
mock_gpu.devices = mock.MagicMock()
137+
mock_gpu.devices.get_gpu_details.return_value = [
138+
{"gpu_utilization": 10},
139+
{"gpu_index": 1, "gpu_utilization": 25},
140+
]
141+
tracker._hardware = [mock_gpu]
142+
143+
tracker._monitor_power()
144+
145+
self.assertEqual([10, 25], tracker._gpu_utilization_history)
146+
120147
@mock.patch("codecarbon.external.geography.requests.get")
121148
def test_carbon_tracker_timeout(
122149
self,

0 commit comments

Comments
 (0)