contrib/python/ofi_nccl/tuner/cli/main.py (38 lines of code) (raw):
import typer
import pathlib
import pandas as pd
import numpy as np
import os
from enum import Enum
from .wrapper import NCCLProto, NCCLAlgo, Tuner, TunerPlatform
app = typer.Typer(name="show-tuner-decisions")
@app.command()
def show_all(library: pathlib.Path,
min_ranks_per_node: int = 1,
max_ranks_per_node: int = 64,
inc_ranks_per_node: int = 1,
min_nnodes: int = 2,
max_nnodes: int = np.log2(2048),
inc_nnodes: int = 2,
):
df = (
pd.concat(
[
Tuner(library, nranks=(rpn * nodecnt), nnodes=nodecnt, platform=platform).analyze_all()
for nodecnt in range(min_nnodes, max_nnodes+1, inc_nnodes)
for rpn in range(min_ranks_per_node, max_ranks_per_node+1, inc_ranks_per_node)
for platform in TunerPlatform
]
)
.set_index(["nodes", "ranks", "message_size"])
.sort_index()
.dropna()
)
df["algo"] = df["algo"].apply(lambda x: str(NCCLAlgo(x).name).title())
df["proto"] = df["proto"].apply(lambda x: str(NCCLProto(x).name).title())
df["platform"] = df["platform"].apply(lambda x: str(TunerPlatform(x).name))
pd.set_option("display.max_rows", None)
pd.set_option('display.multi_sparse', False)
for collective in df["collective"].unique():
sf = df[df["collective"] == collective]
print(sf)