File size: 3,907 Bytes
21ad80b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
library(ggplot2)
library(ggthemes)
library(openxlsx)
library(patchwork)
library(readr)
library(tidyverse)


calc_bpp <- function(b1, g1, b2, g2) {
  return(round(b1 + 2 * b2 / g1 + 32 / g1 / g2, digits = 2))
}

# df_cfg1 <- read_csv("data/mxq-quant-cfgs-mxq1.csv")
# df_cfg2 <- read_csv("data/kurt/global/llama-mxq-cfgs.csv")
# df_cfg3 <- read_csv("data/kurt/scaled/llama-mxq-cfgs.csv")
# df_cfg4 <- read_csv("data/mxq-quant-cfgs-mxq1-5pct-tol.csv")
# df_cfg5 <- read_csv("data/mxq-quant-cfgs-kurt-scaled-6pct-tol.csv")
# df_cfg1$attempt <- "MXQ1"
# df_cfg2$attempt <- "kurt-global"
# df_cfg3$attempt <- "kurt-scaled"
# df_cfg4$attempt <- "PCT5"
# df_cfg5$attempt <- "kscaled-pct6"
# df_cfg <- bind_rows(df_cfg1, df_cfg2, df_cfg3, df_cfg4, df_cfg5)

df_cfg <- read_csv("mxq-mem-bound-check.csv")

df_mem_sum <- df_cfg |>
  group_by(
    model, bit_budget, attempt
  ) |>
  summarise(
    mem_tot = sum(memmb)
  ) |>
  pivot_wider(
    names_from = "attempt",
    values_from = "mem_tot"
  ) |>
  ungroup()

df_7b <- read_csv("data/fnorm/fnorm-Llama-2-7b-hf.csv")
df_13b <- read_csv("data/fnorm/fnorm-Llama-2-13b-hf.csv")
df_8b <- read_csv("data/fnorm/fnorm-Meta-Llama-3-8B.csv")
df_7b$model <- "Llama-2-7b-hf"
df_13b$model <- "Llama-2-13b-hf"
df_8b$model <- "Meta-Llama-3-8B"
df_llama <- bind_rows(df_7b, df_13b, df_8b) |>
  mutate(
    bit_budget = calc_bpp(nbit1, gsize1, nbit2, gsize2)
  ) |>
  group_by(model, bit_budget) |>
  summarise(
    mem_tot = sum(memmb),
    param_tot = sum(params)
  )

df_mem <- df_mem_sum |>
  left_join(
    df_llama,
    by = c("model", "bit_budget")
  ) |>
  rename(
    hqq = mem_tot
  ) |>
  mutate(
    theory = param_tot * bit_budget / 8 / 1024^2,
  ) |>
  select(!c("param_tot"))

write.xlsx(df_mem, "df_mem.xlsx", overwrite = TRUE, asTable = TRUE)

mem_gap_grid <- function(df_mem, mod, show_legend = FALSE, show_x_label = FALSE) {
  df_disp <- df_mem |>
    filter(model == mod) |>
    pivot_longer(
      cols = c("mxq1", "pct5", "pct6", "kurt-global", "kurt-scaled", "hqq", "theory"),
      names_to = "attempt",
      values_to = "memory"
    )
  df_gap <- df_mem |>
    filter(model == mod) |>
    mutate(
      gap_in_pct = 100 * (theory - mxq1) / mxq1
    ) |>
    select(c("bit_budget", "gap_in_pct"))
  # Gap percentage line plot (on top)
  gap_line_plot <- ggplot(df_gap, aes(x = bit_budget, y = gap_in_pct)) +
    geom_line(color = "blue") +
    theme_gray(base_size = 12) +
    labs(y = "% Min Mem Gap") +
    theme_minimal() +
    theme(
      axis.title.x = element_blank(),
      axis.text.x = element_blank()
    )

  # line plot (on bottom)
  line_plot <- ggplot(
    df_disp,
    aes(x = bit_budget, y = memory)
  ) +
    geom_line(aes(color = attempt)) +
    geom_point(aes(shape = attempt, color = attempt)) +
    labs(x = "Bit Budget", y = "Memory") +
    theme_gray(base_size = 12) +
    guides(color = guide_legend(ncol = 1)) +
    facet_wrap(~model, scales = "free", ncol = 1)
  if (!show_x_label) {
    line_plot <- line_plot +
      theme(
        axis.title.x = element_blank(),
        axis.text.x = element_blank()
      )
  }

  if (show_legend) {
    line_plot <- line_plot +
      theme(
        legend.position = "right",
        legend.text = element_text(size = 12),
        legend.title = element_text(size = 12)
      ) +
      scale_color_solarized()
  } else {
    line_plot <- line_plot +
      theme(legend.position = "none") +
      scale_color_solarized()
  }
  # Combine the line and bar plot vertically
  combined_plot <- gap_line_plot / line_plot + plot_layout(heights = c(1, 3))
  return(combined_plot)
}

p1 <- mem_gap_grid(df_mem, "Llama-2-7b-hf")
p2 <- mem_gap_grid(df_mem, "Llama-2-13b-hf", show_x_label = TRUE)
p3 <- mem_gap_grid(df_mem, "Meta-Llama-3-8B", show_legend = TRUE)

final_plot1 <- (p1 | p2 | p3)
final_plot1
ggsave(
  paste0("pdfs/", "mxq-mem-gap.pdf"),
  plot = final_plot1, width = 16, height = 9
)