8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

解决长期 NetLogo 模拟中的性能下降问题

Bonny Clarke 2月前

87 0

我正在使用 slurm HPC 基础设施来运行 NetLogo 模型,并且遇到了一个性能问题,该问题在约 4'500'000 个 tick 后持续发生。该模型开始表现出

我正在使用 slurm HPC 基础架构来运行 NetLogo 模型,并且遇到了在约 4'500'000 个滴答之后持续发生的性能问题。

该模型开始表现出明显的、并且如观察到的、经验上可预测的减速。我将每个模型的 RAM 从 30 GB 增加到 60 GB,尽管努力管理 NetLogo 资源,但每 100,000 次清除最短路径缓存并批量处理数据导出,以相同频率清除列表。

以下是我的问题:

  1. 有人在 Netlogo 的长期模拟中遇到过类似的性能问题吗?
    - 如果有,您是如何解决的?
  2. 是否有任何推荐的策略或调整来应对广泛模拟中的这种性能下降?

在下面,您会看到一个图,其中的黑线表示模型在 HPC 分配的 5 天时间范围配额内完成模拟演化范围所需的最小进展。

我有办法将随机性(绿色)引入到静态表现中。但是,正如您所见,最终一切都会变得太慢……

PS:图形线条的透明度由模型中穿越街道网络的代理数量决定(因此,透明度越高,代理越少,性能越好 - 尽管它们都在 4'500'000 个刻度时受到影响)

enter image description here

帖子版权声明 1、本帖标题:解决长期 NetLogo 模拟中的性能下降问题
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Bonny Clarke在本站《performance》版块原创发布, 转载请注明出处!
最新回复 (0)
  • Q1:您是否尝试与 NetLogo 实施基地的 Uri Wilensky 团队一起解决这个问题?Q2:您的模型在模拟演进过程中是否进行了协作(交流),还是它们只是被动地运行协调的(行为空间驱动)启动参数空间覆盖?Q3:您使用哪些 HPC 基础设施资源 - 有多少个节点(用于基于 NetLogo 的分布式模拟基础设施的哪些部分)、保留的 HPC CPU 核心、RAM、节点本地 FS、节点远程 FS、基于用户代码套接字的 IPC,为什么?

  • Q1:假设您指的是 netlogo-users 组 @Google 组;不,我还没有。Q2:不,这些模型只是使用不同的参数集独立运行。Q3:街道网络有 116,000 个节点。有 1 到 10 个代理遍历它。我让它处理街道网络上的大约 30,000 个呼叫。每个滴答是一秒,我运行一年的数据。我在 SURF snellius HPC 上运行它(谷歌会找到它)。每次模拟运行 1 个 CPU(每个 CPU 可用 60 GB)。不熟悉这个:node-local-FS、node-remote-FS、基于用户代码套接字的 IPC

  • 我读了一下,我认为目前的情况是这样的:首先,我将数据保存在 netlogo 模型的 RAM 中。后来我将其保存在 tmpdir 中并清除 Netlogo 中的缓存。这没有什么区别(该模型生成的数据相对较少,我怀疑在 3000 万次滴答后只有大约 4 MB)。RAM 是为适应 NW 扩展记住最短路径而需要的(我也会在间隔内清除它)。完成后,我将文件发送到我的个人目录。但是,模型彼此之间不交互(因此没有 IPC),也不与已经生成的数据交互。所以这些不应该有影响

  • Ad-A1:不,不是一群不协调的志愿程序员,我指的是 Uri Wilensky 教授,他是 NetLogo 的首席架构师和设计师,他最了解隐藏在基于 Java 的引擎中的 SWOT,因为他领导了核心引擎的几次重大重构。Ad-A2:除非你碰巧从 NW 那里得到了一些 Java 引擎性能技巧,否则分而治之的 ParameterSPACE 覆盖的本质使你能够“等待”更长时间(31M5 个刻度与当前配额限制相差不远),最好地适应调度任务

  • 在我看来,你的模型中的某些东西正在随着时间的推移而发生变化,从而使其速度变慢——海龟数量增加或它们正在执行更多计算,巡逻策略会影响它。执行速度的变化与巡逻策略一致,这一事实表明原因是代理正在做的事情发生了变化。

    您可以使用分析器扩展至少查看每个程序所花费的时间是否随时间而变化,这可以提供有关正在发生什么变化的线索。让它写出报告并每 1,000,000 个滴答左右重置一次,并使用巡逻策略的高值和低值运行它。看看随着时间的推移发生了什么变化:如果所有程序所花费的时间都在增加,那么问题可能出在 NetLogo 上;但我认为您会看到 1-2 个程序所花费的时间正在增加,因为代理所做的事情发生了一些变化。

  • 谢谢你的回复,史蒂夫!真是巧合,我刚刚在查看从阿姆斯特丹到罗兹的火车,看看我是否可以参加你在那里的暑期课程;我刚刚注意到你在用户组中发布了相关信息。无论如何,我确信代理的数量保持不变。我还知道 99% 的计算能力集中在使用 nw:turtles-on-weighted-path-to 的函数中。我会按照你的建议让分析器每第 n 个刻度报告一次!我相当肯定在 4'400'000 之后花费的时间会大幅增加,但仍然不确定这会导致什么。

  • 策略是:如果没有被调度去调用其他任何对象:随机地四处移动,保持在先前调用的位置,或者返回到设定的位置以实现最佳分布。我非常困惑随机性如何能够超越懒惰(在先前等待)或静止(最佳分布)——无法想象代码中任何可能导致这种动态的东西。特别是因为它突然发生在一个恒定的点上......

  • 一如既往:人为错误。无法访问的节点生成了一条错误路径,导致所有调度停止,调用堆积,堵塞整个模型,导致收益递减。归根结底,是输入数据导致了这种延迟发生和持续的性能下降。感谢@Steve Railsback 和@user3666197 的思考

  • 引用 10

    请随意遵循 StackOverflow 的方式来表示感谢 - 通过点击“赞成” - 这就是这个社区区分好与坏的方式,不是吗?

  • 我在使用 React.js 中的 Leaflet 地图库的折线组件时遇到了性能问题。我有一个大型交通拥堵数据集(大约 5,000 到 10,000 条折线)...

    我在使用 React.js 中的 Leaflet 地图库的折线组件时遇到了性能问题。我有一大批交通拥堵数据(大约 5,000 到 10,000 条折线)需要在地图上渲染。当我放大或缩小时,折线应该会相应更新。然而,这会导致地图渲染出现严重滞后和延迟。系统在这些操作期间变得无响应。

    处理大型数据集时,有没有办法优化 React Leaflet 中折线渲染的性能?任何建议或最佳实践都将不胜感激。

    以下是我当前设置的简要概述:

    • React.js 作为前端框架
    • React Leaflet 用于地图组件
    • 需要使用折线进行可视化的大型交通拥堵数据

    预先感谢您的帮助!

    您尝试了什么?您期望什么?我尝试了几种优化技术,例如使用 React.memo 记忆折线组件、实现缩放事件的去抖动以及降低折线数据的复杂性。我期望这些更改能够提高渲染性能并使地图交互更加流畅。

    到底发生了什么?尽管做出了这些努力,但性能问题仍然存在。地图在缩放操作期间仍然会出现严重滞后,并且变得无响应,尤其是在处理大量折线数据集时。渲染性能的预期改进并未实现。

  • 您是否查看过浏览器的性能工具,以了解渲染或缩放此类数据集时实际花费的时间?如果时间花在例如 leaflet 中,则没有太多理由考虑 React.memo。

  • MeXx 2月前 0 只看Ta
    引用 13

    还有一种可能是 Leaflet 并不是处理这种大型数据集的合适工具,你需要一个性能更强大的渲染器,例如

  • 感谢您的回复。但是,Mapbox 在达到一定数量的请求后会提供付费使用。是否可以使用像 Leaflet 这样的免费库来实现这一点?

  • TN. 2月前 0 只看Ta
    引用 15

    这就是为什么我链接了免费使用的 maplibre,而不是付费的 mapbox。无论如何,使用 Leaflet 可能可行,但正如我一开始所说的:先测量和剖析。

  • 如何对 Conv2D 和 MaxPooling2D 进行超调?下面的代码使用的是 ANN 模型,我们可以使用相同格式的代码来优化 CNN 吗?#A. 首先调整 Batch Size 和 Epoch#A.1 构建 CNN 模型...

    如何对 Conv2D 和 MaxPooling2D 进行超调?

    下面的代码使用了ANN模型,我们可以使用相同格式的代码来优化CNN吗?

    #A. Tune First the Batch Size and Epoch
    #A.1 Build the CNN Model for the Optimization Process
    def classifier_optimization():
        classifier_optimization = Sequential()
        classifier_optimization.add(Dense(units = 7, kernel_initializer = "glorot_uniform", activation = "relu", input_dim = 12))
        classifier_optimization.add(Dropout(rate = 0.1))
        classifier_optimization.add(Dense(units = 6, kernel_initializer = "glorot_uniform", activation = "relu"))
        classifier_optimization.add(Dropout(rate = 0.1))
        classifier_optimization.add(Dense(units = 1, kernel_initializer = "glorot_uniform", activation = "sigmoid"))
        classifier_optimization.compile(optimizer = "sgd", loss = "binary_crossentropy", metrics = ["accuracy"])
        return classifier_optimization
    
    ann_model_optimization = KerasClassifier(model=classifier_optimization, verbose = 0)
    
    #A.2 Import the GridSearchCV class 
    from sklearn.model_selection import GridSearchCV
    
    #A.3 To Set the Parameters to be optimized for the ANN Model
    parameters = {"batch_size" : [50, 100, 150, 200, 250],
                  "epochs" : [10, 50, 100, 200, 250]}
    
    grid_search = GridSearchCV(estimator = ann_model_optimization, param_grid = parameters, scoring = "accuracy", cv = k_fold, n_jobs = -1)
    
    grid_search = grid_search.fit(X_standard, Y)
    print(grid_search)
    
    #A.4 To View the result of the GridSearchCV
    results = pd.DataFrame(grid_search.cv_results_) [["mean_test_score" , "std_test_score", "params"]]
    print(results)
    
    #A.5 To identify the best accuracy and the best features
    best_parameters = grid_search.best_params_
    best_accuracy = grid_search.best_score_
    
    print("Best Accuracy Score:", best_accuracy)
    print("Best Parameters:", best_parameters)
    

    我们尝试分别优化 Sequential、Flatten 和 Dense。你能帮忙优化 Conv2D 和 MaxPooling2D 吗

  • 我正在使用诊断工具来收集 CPU 使用情况数据。当遇到断点时,我会启用 CPU 分析。在第二个断点处,它应该向我显示结果,有时会显示但......

    我正在使用诊断工具来收集 CPU 使用率数据。

    当遇到断点时,我会启用 CPU 分析。

    在第二个断点,它应该向我显示结果,有时会显示,但大多数时候我收到以下消息并且没有显示任何结果。

    知道为什么会出现此消息吗?如何纠正它?

    enter image description here

    enter image description here

  • 您可以打开该过滤按钮并检查是否正确选择了您需要的所有线程,或者尝试在更长的间隔内捕获数据,以便配置文件可以为您获取足够的数据。

返回
作者最近主题: