quantization2 / lm-quant-toolkit /data-vis /check-lowbits-allot.R
chen459664's picture
Add files using upload-large-folder tool
21ad80b verified
Raw
History Blame Contribute Delete
4.55 kB
#!/usr/bin/env Rscript
library(tidyverse)
library(plyr)
library(dplyr)
library(readr)
library(optparse)
library(openxlsx)
budget_to_cfg <- function(budget) {
if (budget == 3.13) {
return("b3g128")
} else if (budget == 3.25) {
return("b3g64")
} else if (budget == 3.51) {
return("b3g32")
} else if (budget == 4.13) {
return("b4g128")
} else if (budget == 4.25) {
return("b4g64")
} else if (budget == 4.51) {
return("b4g32")
} else if (budget == 8.13) {
return("b8g128")
} else if (budget == 8.25) {
return("b8g64")
} else if (budget == 8.51) {
return("b8g32")
} else if (budget == 2.13) {
return("b2g128")
} else if (budget == 2.25) {
return("b2g64")
} else if (budget == 2.51) {
return("b2g32")
} else {
return("b4g64")
}
}
strip_name <- function(name) {
start <- nchar("fnorm-") + 1
stop <- nchar(name) - 4
return(substr(name, start, stop))
}
parser <- OptionParser()
parser <- add_option(
parser, c("-f", "--factor"),
type = "double",
help = "Factor to apply",
metavar = "double"
)
parser <- add_option(
parser, c("-c", "--milp_cost_csv"),
type = "character",
help = "Dump of MiLP cost csv from the HQQ",
metavar = "character"
)
parser <- add_option(
parser, c("-a", "--allot_csv_file"),
type = "character",
help = "Allocation CSV file",
metavar = "character"
)
parser <- add_option(
parser, c("--attempt"),
type = "character",
help = "attempt",
metavar = "character"
)
args <- parse_args(parser)
if (is.null(args$milp_cost_csv)) {
milp_cost_csv <- "debug.csv"
} else {
milp_cost_csv <- args$milp_cost_csv
}
if (is.null(args$attempt)) {
the_attempt <- "mxq1"
} else {
the_attempt <- args$attempt
}
if (is.null(args$allot_csv_file)) {
allot_csv_file <- paste0(
"data/allot/mxq/", the_attempt, "/quant-allot-", the_attempt, ".csv"
)
} else {
allot_csv_file <- args$allot_csv_file
}
df_fnorm <- read_csv(milp_cost_csv)
k_cols <- c(
"module",
"layer",
"cfg",
"nbit1",
"gsize1",
"nbit2",
"gsize2",
"fnorm",
"memmb",
"params",
"sensitivity"
)
df_fnorm <- df_fnorm |>
mutate(
cfg = paste0("b", nbit1, "g", gsize1)
) |>
select(all_of(k_cols)) |>
mutate(
cfg = factor(
cfg,
levels = c(
"b2g128", "b2g64", "b2g32",
"b3g128", "b3g64", "b3g32",
"b4g128", "b4g64", "b4g32",
"b8g128", "b8g64", "b8g32"
)
)
)
by <- join_by(module == module, layer == layer, cfg == cfg)
df_cfgs <- read_csv(allot_csv_file)
if ("attempt" %in% names(df_cfgs)) {
df_cfgs <- df_cfgs |>
filter(attempt == the_attempt)
}
df_check <- df_cfgs |>
mutate(
cfg = paste0("b", b1, "g", g1),
cfg_base = sapply(bit_budget, budget_to_cfg)
) |>
select(-c("b1", "g1", "b2", "g2", "memmb")) |>
mutate(
cfg = factor(
cfg,
levels = c(
"b2g128", "b2g64", "b2g32",
"b3g128", "b3g64", "b3g32",
"b4g128", "b4g64", "b4g32",
"b8g128", "b8g64", "b8g32"
)
)
) |>
left_join(df_fnorm, by)
df_check_sum <- df_check |>
left_join(
df_fnorm,
suffix = c("", "_hqq"),
join_by(
module == module,
layer == layer,
cfg_base == cfg
)
)
df_check_det <- df_check_sum |>
select(
!c(
"param_cnt",
"params_quant_tot",
"params_hqq",
"sensitivity_hqq",
"nbit1",
"nbit2",
"gsize1",
"gsize2",
"nbit1_hqq",
"nbit2_hqq",
"gsize1_hqq",
"gsize2_hqq",
)
)
write.xlsx(
df_check_det,
"allot-check-det.xlsx",
overwrite = TRUE,
asTable = TRUE
)
df_final <- df_check_sum |>
group_by(cfg_base, bit_budget) |>
dplyr::summarise(
memmb = sum(memmb),
memmb_hqq = sum(memmb_hqq),
fnorm = sum(fnorm),
fnorm_hqq = sum(fnorm_hqq),
params_tot = sum(params)
) |>
mutate(
memmb = round(memmb, digits = 4),
memmb_hqq = round(memmb_hqq, digits = 4),
fnorm = round(fnorm, digits = 4),
fnorm_hqq = round(fnorm_hqq, digits = 4),
fnorm_imporved = fnorm < fnorm_hqq,
theory_memmb = params_tot * bit_budget / 8 / 1024^2,
mem_pct_of_hqq = round(100 * memmb / memmb_hqq, digits = 4),
mem_pct_of_theory = round(100 * memmb / theory_memmb, digits = 4)
) |>
select(
c(
"cfg_base",
"bit_budget",
"fnorm_hqq",
"fnorm",
"fnorm_imporved",
"memmb_hqq",
"memmb",
"mem_pct_of_hqq",
"mem_pct_of_theory"
)
)
write.xlsx(
df_final,
"df_final.xlsx",
overwrite = TRUE,
asTable = TRUE
)