def default_resources()

in src/hpc/autoscale/example/readme.py [0:0]


def default_resources() -> None:
    """
    An example of how to programmatically create default resources.
    """
    # now we will disable the default resources, ncpus/pcpus/gpus etc
    # and define them ourselves.
    CONFIG["disable_default_resources"] = True
    node_mgr = new_node_manager(CONFIG)

    # let's define gpus for every node
    # then, for nodes that actually have a gpu, let's set the pcpus
    # to equal the number of gpus * 2

    # define ngpus
    node_mgr.add_default_resource({}, "ngpus", "node.gpu_count")
    # also could have just passed in a lambda/function
    # node_mgr.add_default_resource({}, "gpus", lambda node: node.gpu_count)

    # now that ngpus is defined, we can use ngpus: 1 here to filter out nodes that
    # have at least one ngpu. Let's set pcpus to 2 * ngpus
    node_mgr.add_default_resource(
        selection={"ngpus": 1},
        resource_name="pcpus",
        default_value=lambda node: node.resources["ngpus"] * 2,
    )
    # and for nodes without GPUs, let's just use the actual pcpu_count
    node_mgr.add_default_resource(
        selection={"ngpus": 0},
        resource_name="pcpus",
        default_value=lambda node: node.pcpu_count,
    )
    # note that a blank selection would have accomplished the same thing, as default resources
    # are processed in order.
    # node_mgr.add_default_resource({}, "pcpus", lambda node: node.pcpu_count)

    has_gpu = node_mgr.example_node("southcentralus", "Standard_NV24")
    no_gpu = node_mgr.example_node("southcentralus", "Standard_F16s")

    print(
        has_gpu.vm_size,
        "(pcpu_count=%s)" % has_gpu.pcpu_count,
        "-> %(ngpus)s ngpus %(pcpus)s pcpus" % has_gpu.resources,
    )
    print(
        no_gpu.vm_size,
        "(pcpu_count=%s)" % has_gpu.pcpu_count,
        "-> %(ngpus)s ngpus %(pcpus)s pcpus" % no_gpu.resources,
    )