如何在基准测试不同回归模型时获取最大内存使用信息?
如何在回归模型基准测试中添加最大内存使用量测量
如果你想在现有基准测试的基础上加上内存使用量的统计,我推荐用bench包来替代原来的benchmark函数——它原生支持同时测量运行时间和内存使用,操作起来更简单,结果也更可靠。
方法一:用bench包(推荐)
bench包是专门为R的基准测试设计的,能自动捕捉每个表达式的峰值内存使用量,而且输出格式清晰。步骤如下:
- 先安装并加载包:
install.packages("bench") library(bench)
- 修改你的基准测试代码,用
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 )
- 查看结果:
运行print(bench_results)后,你会看到包含mem_alloc的列,这就是每个模型运行时的峰值内存使用量。如果只想提取关键信息,可以用:
# 只保留模型名称和内存使用列 bench_results[, c("expression", "mem_alloc")]
方法二:保留原rbenchmark并添加内存测量
如果你坚持要用原来的rbenchmark包,可以结合memuse包手动捕捉内存变化:
- 安装并加载所需包:
install.packages(c("rbenchmark", "memuse")) library(rbenchmark) library(memuse)
- 定义一个辅助函数,用来运行模型并记录最大内存:
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)) }
- 修改基准测试代码:
# 运行基准测试,同时记录内存 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
相关产品推荐
相关产品推荐

