IceCube:探测宇宙射线
目录
IceCube:探测宇宙射线¶
我是谁?¶
我是 James Bourbeau,威斯康星大学麦迪逊分校物理系的博士研究生。我在 IceCube 南极中微子观测站工作,研究宇宙射线能谱。
我正在解决什么问题?¶
宇宙射线是源自外太空的高能粒子。虽然自20世纪初以来一直对其进行研究,但高能宇宙射线的来源仍然不为人知。我分析 IceCube 收集的数据,研究宇宙射线能谱随能量和粒子质量如何变化;这有助于为我们理解宇宙射线的起源提供宝贵的见解。
这包括开发算法,对 IceCube 探测到的事件进行能量重建以及粒子质量分组分类。此外,我们还使用探测器模拟和迭代展开算法来校正固有的探测器偏差和我们重建的有限分辨率。
Dask 如何帮助我们¶
我最初选择使用 Dask 是因为它提供了 Dask Array 和 Dask Dataframe 数据结构。我使用 Dask Dataframe 加载数千个 HDF 文件,然后进行进一步的特征工程和数据预处理过滤步骤。最终的数据集大小可达 100GB,这对于我们可用的 RAM 来说太大了。因此,能够轻松地分布式加载这些数据,同时仍然使用熟悉的 pandas API,这在我的研究中变得非常有价值。
后来我发现了 Dask delayed 接口,现在用它来并行化那些不易符合 Dask Array 或 Dask Dataframe 使用场景的代码。例如,我经常需要对 HEALPix 天空图中的像素执行数千个独立计算。我发现 Dask delayed 对于并行化这类易并行计算非常有用,而且麻烦最少。
我还使用了 Dask 提供的一些诊断工具,例如进度条和资源分析器。在一个大型合作项目中使用共享计算资源时,能够监控我正在使用多少资源并相应地缩减或扩大规模是非常有益的。
使用 Dask 的痛点¶
我初次使用 Dask 时遇到了两个主要的痛点:
习惯延迟计算的概念。虽然这不是 Dask 特有的问题,但确实花了一些时间来适应。
Dask 是一个相当大的项目,包含许多组件,需要一些时间来弄清楚所有各个部分如何协同工作。幸运的是,Dask 的用户文档非常好,我能够克服最初的学习曲线。
我们围绕 Dask 使用的技术¶
我们将数据存储在 HDF 文件中,Dask 对其提供了很好的读写支持。我们还使用其他一些 Python 数据栈工具,如 Jupyter、scikit-learn、matplotlib、seaborn 等。最近,我们开始尝试使用 HTCondor 和 Dask 分布式调度器,将工作规模扩展到在集群上使用数百个 worker。