求助:使用furrr估算不同主题数STM的适配方案及崩溃问题解决
解决furrr更新后STM多模型拟合崩溃的问题
核心问题原因
furrr的multisession默认会占用全部CPU核心,而STM模型本身对内存和计算资源要求很高,同时运行数十个模型极易导致内存溢出,直接触发系统崩溃。以下是几个可行的解决方法:
限制并行进程数量
手动指定workers数量,比如只用一半CPU核心,避免资源耗尽:plan(multisession, workers = floor(parallel::detectCores()/2))分批次运行模型
不要一次性跑5到100所有K值,拆成小批次执行,每跑完一批强制释放内存:# 拆分批次 batches <- list(5:30, 31:60, 61:100) all_models <- list() for(batch in batches){ temp_models <- tibble(K = batch) %>% mutate(topic_model = future_map(K, ~stm(forum_sparse, K=.x), seed=TRUE)) all_models <- c(all_models, temp_models$topic_model) # 强制回收内存 gc() } many_models <- tibble(K=5:100, topic_model=all_models)精简数据减少模型负载
先过滤掉低频词,缩小稀疏矩阵的维度,降低每个模型的内存占用:# 只保留出现次数≥10的词(阈值可根据数据集调整) tidy_forum_filtered <- tidy_forum %>% filter(n >=10) %>% select(-n) forum_sparse <- tidy_forum_filtered %>% count(id, word) %>% cast_sparse(id, word, n)还可以在STM模型中设置控制参数减少计算量,比如先限制迭代次数做测试:
future_map(K, ~stm(forum_sparse, K=.x, control = list(max.em.its = 50), # 默认100,先减少迭代次数验证 seed=TRUE))先串行测试排除基础问题
暂时关闭并行,先跑几个小K值模型,确认模型本身能正常运行,排除数据或参数问题:# 测试K=5,10,15三个模型 test_models <- tibble(K=c(5,10,15)) %>% mutate(topic_model = map(K, ~stm(forum_sparse, K=.x), seed=TRUE))监控系统内存状态
Windows用memory.limit()查看可用内存上限,Linux/mac用top命令实时监控内存占用。如果是物理内存不足,可以考虑增加虚拟内存,或者迁移到更高配置的服务器上运行。
内容的提问来源于stack exchange,提问作者dot_codes
相关产品推荐
相关产品推荐

