移动网络建模
目录
移动网络建模¶
我是谁?¶
我是 Sameer Lalwani,我专注于无线网络建模。
我们使用这些模型来帮助运营商进行技术决策,通过构建其无线网络的数字孪生。这些模型用于量化技术对用户体验、网络 KPI 和经济性的影响。
我正在尝试解决的问题¶
移动网络运营商在任何新技术出现时都会面临不确定性。他们现有的网络非常复杂,包含多个频段和预设站点。他们需要了解将新技术引入这种混合环境的意义。通过对他们的网络进行建模,我们可以帮助减少管理层面临的不确定性,同时为他们提供有关其网络的可行性洞察。
例如,当前我们正处于 4G 向 5G 过渡时期,运营商面临以下决策
他们应该竞标哪个频谱频段?
他们可以期待什么样的用户体验和网络性能?
需要多少资本和运营费用?
他们应该瞄准哪些站点位置来满足覆盖和容量要求?
他们应该考虑频谱重耕还是获取新频段?
这些模型用于创建城市或国家尺度的数字孪生。根据已知的用户行为以及人口普查、交通等数据来源创建“合成用户”。这些用户数量可能轻松达到几百万,每个个体都在地图上拥有自己的物理位置。我们还引入建筑布局、道路等其他 GIS 图层,用于模拟室内外用户。
网络还可以拥有从几百个到几万个不等的小区站点。
我们的模型通过计算所有附近站点的射频路径损耗和 SINR,来计算单个用户的速率。这使得我们的数据集达到数千万行,需要在其上进行数值计算。
我们还在此网络上运行大量场景,以了解其能力和局限性。
Dask 如何提供帮助¶
分布式计算和 Dask delayed¶
Dask Distributed 帮助我们在多台机器上运行场景,同时保持在每台机器的内存限制内。我们在 VMware 基础设施上创建大约 10-20 台机器,其中一台 Linux 机器运行 Dask scheduler,所有其他机器运行 Dask worker,并具有相同的 Conda 环境。
我们的团队在他们的桌面机器上运行 Jupyter notebook,这些 notebook 连接到 Dask scheduler。他们的 notebook 处理自己的数据集,但对于专门的函数和场景,其任务会被透明地发送到 Dask scheduler。每个站点计数场景运行需要 10-15 分钟,因此能够并行运行 40 个这样的场景非常方便。
Dask Dataframe¶
我们使用 LiDAR 数据集来计算毫米波从灯柱传播的视距。整个城市的 LiDAR 数据集通常太大,无法在单台机器上打开。Dask Dataframe 允许我们汇集多台机器的资源,同时保持我们的逻辑类似于 Pandas Dataframe。
我们使用 Dask delayed 并行处理多个 LiDAR 文件,然后将它们合并成一个表示整个城市的 Dask Dataframe。视距计算是 CPU 密集型的,因此将其分布到多个核心上非常方便。
我们非常欣赏 Dask 的一点是,它让我们能够专注于模型逻辑,而无需担心可扩展性。一旦代码准备就绪,使用 delayed 调用函数并让它们在多个 CPU 核心上运行非常顺畅。
使用 Dask 时的痛点¶
我发现 Dask Dataframe 对于多列 groupby 操作太慢。对于此类任务,我通过列对 Dataframe 进行排序,并按第一列进行分区。然后我使用 delayed 操作在每个分区上使用 pandas,这样最终会快得多。
我在 Dask 周围使用的技术¶
GIS:Geopandas,希望能够获得原生支持。
交通流:networkx
分析:scikit-learn, scipy, pandas
可视化:用于 LiDAR 数据的 Datashader 和 Dask distributed。
图表:Holoviews, Seaborn
数据存储:HDF5
我们所有的部署都是手动完成的。我们为分析启动这些具有相同 Conda 环境的机器,并在完成后将其拆除。
之前我们使用 IPython parallel,但发现 Dask 更容易设置,也允许我们编写更复杂的逻辑,并且可以在多个用户之间共享我们的计算资源池。