You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基准测试不同回归模型时获取最大内存使用信息?

如何在回归模型基准测试中添加最大内存使用量测量

如果你想在现有基准测试的基础上加上内存使用量的统计,我推荐用bench包来替代原来的benchmark函数——它原生支持同时测量运行时间和内存使用,操作起来更简单,结果也更可靠。

方法一:用bench包(推荐)

bench包是专门为R的基准测试设计的,能自动捕捉每个表达式的峰值内存使用量,而且输出格式清晰。步骤如下:

  1. 先安装并加载包:
install.packages("bench")
library(bench)
  1. 修改你的基准测试代码,用mark()函数替代benchmark():
# 运行基准测试,iterations对应你原来的replications参数
bench_results <- mark(
  mod1 = {mod1 <- glm(varOUT~var1+var2+var3+varfact+City, data=myDF, family = "binomial")},
  mod2 = {mod2 <- glmer(varOUT~var1+var2+var3+varfact+(1|City/ID),data=myDF,family = "binomial")},
  mod3 = {mod3 <- glmmTMB(varOUT~var1+var2+var3+varfact+(1|ID),data=myDF,family = "binomial")},
  iterations = 1
)
  1. 查看结果:
    运行print(bench_results)后,你会看到包含mem_alloc的列,这就是每个模型运行时的峰值内存使用量。如果只想提取关键信息,可以用:
# 只保留模型名称和内存使用列
bench_results[, c("expression", "mem_alloc")]

方法二:保留原rbenchmark并添加内存测量

如果你坚持要用原来的rbenchmark包,可以结合memuse包手动捕捉内存变化:

  1. 安装并加载所需包:
install.packages(c("rbenchmark", "memuse"))
library(rbenchmark)
library(memuse)
  1. 定义一个辅助函数,用来运行模型并记录最大内存:
run_with_memory <- function(model_expr) {
  # 先清理内存,避免之前的操作干扰结果
  gc()
  # 记录初始内存峰值
  start_mem <- mu.max()
  # 运行模型
  eval(model_expr)
  # 记录结束时的内存峰值
  end_mem <- mu.max()
  # 计算使用的内存差(即本次运行的最大内存消耗)
  mem_used <- end_mem - start_mem
  return(list(mem_used = mem_used))
}
  1. 修改基准测试代码:
# 运行基准测试,同时记录内存
benchmark_out <- benchmark(
  mod1 = {mem1 <- run_with_memory(quote(mod1 <- glm(varOUT~var1+var2+var3+varfact+City, data=myDF, family = "binomial")))},
  mod2 = {mem2 <- run_with_memory(quote(mod2 <- glmer(varOUT~var1+var2+var3+varfact+(1|City/ID),data=myDF,family = "binomial")))},
  mod3 = {mem3 <- run_with_memory(quote(mod3 <- glmmTMB(varOUT~var1+var2+var3+varfact+(1|ID),data=myDF,family = "binomial")))},
  replications = 1
)

# 整理内存结果并合并到基准测试输出
memory_results <- data.frame(
  test = c("mod1", "mod2", "mod3"),
  max_memory = c(mem1$mem_used, mem2$mem_used, mem3$mem_used)
)

final_results <- merge(benchmark_out, memory_results, by = "test")
print(final_results)

需要注意的是,手动测量内存时,gc()的调用很重要,它能清理之前的内存占用,让测量结果更准确。不过相比之下,bench包的内存测量是基于R的内置Profiler,会更精准地捕捉到模型运行过程中的内存峰值。

内容的提问来源于stack exchange,提问作者skan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:08:37