Server#

class impacthpc.src.Server(embodied_impacts: ~impacthpc.src.core.impacts.Impacts | None = None, components: ~typing.List[~typing.Tuple[Component, int]] = [], case: ~impacthpc.src.other_components.Case = <impacthpc.src.other_components.Case object>, allocation_method: AllocationMethod | None = None, usage_rate: ~impacthpc.src.core.ReplicableValue.ReplicableValue | None = None)#

Bases: HasConsumptionAndEmbodiedImpacts

Represents a Server / Node and is used to compute its impacts.

embodied_impacts#

The embodied impacts of the server. If the value is known, estimate_embodied_impacts() returns it, otherwise an estimation is done based on other attributes. Defaults to None.

Type:

Impacts | str | None, optional

components#

A list of the Component instances that represent the electronic components of the server, along with the number of each component in the server. Defaults to [].

Type:

List[Tuple[Component, int]], optional

allocation_method#

An allocation method for the server. Defaults to naive_allocation() for the default lifetime of a server, defined in the config file under default_values_server > lifetime.

Type:

AllocationMethod | None, optional

usage_rate#

The usage rate of the server, between 0 and 1. Defaults to the value defined in the config file under default_values_server > usage_rate.

Type:

ReplicableValue | None, optional

Example:#

Server(
    components=[
        (CPU(name=ExactName("Intel Xeon Gold 6132")), 2),
        (RAM(size=SourcedValue(name="ram_size", value="3 TB", source="User Input")), 1),
        (GPU(name=find_close_gpu_model_name("Nvidia Tesla V100")), 4), # In the spec, we don't know the exact variant of Nvidia V100 used, so we can use find_close_gpu_model_name result and it will average the matching GPUs
        (MotherBoard(), 1),
    ]
)

This represents a server with two Intel Xeon Gold 6132 CPUs, three terabytes of RAM, four Nvidia Tesla V100 GPUs, and a motherboard.

Methods Summary

Methods Documentation

estimate_electric_power() ReplicableValue#

Estimate the electric power of the server.

The server’s instant consumption is the sum of its components’ power consumptions.

For Uncertainties, the sum of the components of the same type is done in dependent mode, i.e., CPUs’ consumptions are considered positively correlated (correlation = 1) with other CPUs’ consumptions, RAM sticks are correlated with other RAM sticks, etc.

The final sum of each group of the correlated consumptions is done in independent mode, i.e., they are considered uncorrelated (correlation = 0).

Returns:

The electric power of the server.

Return type:

ReplicableValue

estimate_embedded_impacts(job_duration: ReplicableValue) Impacts#

Estimate the Embedded impacts of the server for the job.

Internally uses estimate_embodied_impacts() and passes it the allocation_method with the job_duration.

Parameters:

job_duration (ReplicableValue) – The duration of the job we want to allocate the embodied impacts to.

Returns:

The Embedded impacts of the server for the job.

Return type:

Impact

estimate_embodied_impacts() Impacts#

Estimate the embodied impacts of the server.

The server’s embodied impacts are the sum of its components’ embodied impacts.

For Uncertainties, the sum of the components of the same type is done in dependent mode, i.e., CPUs’ impacts are considered positively correlated (correlation = 1) with other CPUs’ impacts, RAM sticks are correlated with other RAM sticks, etc.

The final sum of each group of the correlated impacts is done in independent mode, i.e., they are considered uncorrelated (correlation = 0).

Returns:

The embodied impacts of the server.

Return type:

Impact

estimate_idle_power() ReplicableValue#

Estimate the idle power of the server.

The server’s static consumption is the sum of its components’ power consumptions at idle.

For Uncertainties, the sum of the components of the same type is done in dependent mode, i.e., CPUs’ consumptions are considered positively correlated (correlation = 1) with other CPUs’ consumptions, RAM sticks are correlated with other RAM sticks, etc.

The final sum of each group of the correlated consumptions is done in independent mode, i.e., they are considered uncorrelated (correlation = 0).

Returns:

The idle power of the server.

Return type:

ReplicableValue

estimate_peak_power() ReplicableValue#

Estimate the peak power of the server.

The server’s peak consumption is the sum of its components’ peak power consumptions.

For Uncertainties, the sum of the components of the same type is done in dependent mode, i.e., CPUs’ consumptions are considered positively correlated (correlation = 1) with other CPUs’ consumptions, RAM sticks are correlated with other RAM sticks, etc.

The final sum of each group of the correlated consumptions is done in independent mode, i.e., they are considered uncorrelated (correlation = 0).

Returns:

The peak power of the server.

Return type:

ReplicableValue