在本地(顺序和精简版)或网格上部署您的 ALICE 分析的便捷方式
项目描述
尼蒂格迪
Nitty griddy 旨在使使用 Aliroot/Aliphysics 框架的分析部署变得简单、透明和可重复。主要目标是完全消除将各地的run.C文件复制粘贴在一起的不良做法。一个 nittygriddy “项目” 要求用户仅提供他们想要运行的特定分析的设置 - 与您希望如何或在何处运行分析无关。提供这些设置的方式类似于配置乐高火车的方式。本地(顺序)、proof lite(本地并行)或网格中的部署然后是完全透明的,不需要编辑任何文件。Nittygriddy 还可以轻松下载所需数据集的一部分以进行本地离线开发 - 无需运行网格测试模式。最重要的是,一旦网格分析完成,nittygriddy 可以轻松触发合并过程。
最后但并非最不重要的一点是,nittygriddy 不会进行“供应商锁定”:nittygriddy 生成直接的run.C文件,将它们存储在一个整洁的文件夹结构中,并且使您能够在未来通过一个简单的根运行.C .
免责声明
我每天都在使用 nittygriddy 有一段时间了,发现它非常有帮助。我认为/希望它也可以成为其他人的好工具。我会努力保持当前 API 的稳定,但如果需要,我可能需要进行一些重大更改,这可能需要用户采取一些小动作。但正如我之前所说,如果发生这种情况并且您不想再使用 nittygriddy,您始终可以独立使用生成的run.C文件。如果您对 nittygriddy 有疑问,希望看到添加的数据集,或者有任何其他意见和建议,最好在 github 上打开问题或立即创建拉取请求。在本文档的底部查看有关如何贡献的更多信息。
安装 nittygriddy
Nittygriddy 在pypi上可用。因此,使用pip可以轻松完成安装,但首先您应该确保使用pip安装的内容稍后可以在命令行上使用。将此添加到您的.bashrc或类似文件中:
# .bashrc or similar export PYTHONUSERBASE=$HOME/.local_pip export PATH=$PYTHONUSERBASE/bin:$PATH
这将使所有安装为pip –user的非特权用户进入PYTHONUSERBASE下。现在你可以运行:
pip install --user nittygriddy
它将 nittygriddy 安装到您的主目录中。命令nitty现在应该可以在命令行上使用,以及它希望有帮助的--help。
为不耐烦的人使用 nittygriddy
不想阅读说明?这是您开始对本地数据进行分析的方式:
$ alien-token-init <your-cern-user-name> $ nitty datasets --download LHC15o_pass1_HIR 1 # Download 1GB of the specified dataset $ nitty new my-analysis # Create an example analysis folder (runs AliMultSelectionTask) $ cd my-analysis $ # Run the analysis of this folder on the LHC15o dataset locally $ nitty run local LHC15o_pass1_HIR $ ls ./latest/ # marvel at the resulting AnalysisResults.root file
设置“火车”文件夹
我在下文中所说的“火车”实际上只不过是一个文件夹,用于存储特定分析的设置。一个分析通常包含几个任务(例如AliMultSelectionTask和您自己的任务)。目前,所有设置都在一个文件(ConfigureTrain.C)中,这使任何文件夹成为“火车文件夹”。另外,请注意,为了使用 nittygriddy,您的任务必须存在于您的本地 aliphysics 安装中(无论如何它确实应该存在)!
配置火车.C
唯一需要的.C文件。它反映了为您的任务设置选项,类似于乐高火车中所做的事情。请注意,此文件将被编译,因此必须是有效的 cpp(因此下面示例中的所有#include)。这样做的原因是使用解释器简直是邪恶的,最终会导致不确定的行为和悲伤的用户。可能的最短版本如下所示:
#include "TROOT.h"
#include "AliVEvent.h"
#include "AliBasedNdetaTask.h"
void ConfigureTrain() {
// Load you AddTask macro
gROOT->LoadMacro(<s>"$ALICE_PHYSICS/PWGLF/FORWARD/analysis2/AddTaskdNdeta.C"</s>);
// Execute your AddTask macro. You can pass options in the function call if necessary
AliBasedNdetaTask* task =
reinterpret_cast< AliBasedNdetaTask* > (gROOT->ProcessLine(<s>"AddTaskdNdeta()"</s>));
/*
Set your task's options here:
task->SelectCollisionCandidates(AliVEvent::kMB);
*/
}
nitty_datasets.yml
此文件包含有关自定义数据集的信息。如果使用标准的,则没有必要。该文件应位于~/nitty_datasets.yml的主目录中。该文件必须采用Yaml格式。一个典型的条目如下所示:
LHC15o_pass1_HIR_FMD:
data_pattern: pass1/AOD/*/AliAOD.root
datadir: /alice/data/2015/LHC15o/
datatype: aod
is_mc: <s>'false'</s>
notes: 5.02 TeV, Good runs with FMD, ITS, and V0. This is not the full run list
since it requires the FMD!
run_list: 246980, 246865, 246809, 246808, 246766, 246765, 246763, 246759, 246676,
246675, 246495, 246493, 246276, 246275, 246225, 246185, 246153, 246089, 246052,
245963, 245954, 245833, 245705, 245683
run_number_prefix: <s>'000'</s>
system: PbPb
LHC15f_AOD171_FMD:
...
请注意,Yaml就像 Python 一样,是基于缩进的。不过不用担心,如果语法有问题,nittygriddy 会抱怨的。这包括每个条目中缺少的字段。在nitty_datasets.yml中定义的数据集将与 nittygriddy 附带的默认数据集合并。
使用 Nittygriddy
我迷路了。请注意,--help也可用于每个子命令:
$ nitty --help
创建一个新的火车文件夹。即使用最小的工作ConfigureTrain.C创建一个新文件夹:
$ nitty new a_new_train
列出所有可用的数据集:
$ nitty datasets -l
在所有数据集中搜索某些东西(例如碰撞系统):
$ nitty datasets -s PbPb
显示有关数据集的详细信息:
$ nitty datasets --show LHC10h_AOD160
从给定的数据集中下载 5GB 的数据用于离线开发。这些文件保存在~/lhc_data/中,其文件夹结构与网格上的相同:
$ nitty datasets --download LHC10h_AOD160 5
在本地以proof lite 运行您的分析:
$ nitty run lite LHC10h_AOD160
或者使用 PARfile 将其提交到网格(见下文):
$ nitty run grid LHC10h_AOD160 --par_files="PWGCFCorrelationsC2.par"
在网格上完成分析后,切换到输出目录(最新是指向 nittygriddy 启动的最新内容的链接)并触发合并:
$ cd latest $ nitty merge online
达到所有最终合并阶段后,您可以在自己的计算机上离线合并各个运行:
$ nitty merge offline
你可以做的事情还有很多。只需检查--help。
技巧和窍门
PAR文件
如果您对任务的最新更改尚未在最新的 aliphysics 标签中,则可以使用 Par 文件。有关更多背景信息,请参见 Dario 的页面。长话短说,如果您的任务在 AliPhysics 中正确设置,您应该能够:
$ cd $ALICE_PHYSICS/../build $ make PWGCFCorrelationsC2.par # you can use TAB completion to find the right par file $ make -j$MJ install
这应该在$ALICE_PHYSICS/PARfiles中为您的分析创建 .par 文件。如果你得到一个错误,你可能没有在 cmake 中正确设置你的分析。达里奥的帖子应该涵盖你。
在 Proof lite 中运行时,我的分析严重崩溃
Proof lite 对在构造函数中初始化任务的成员非常挑剔。这使它成为在网格上运行的一个很好的测试,但错误消息相当神秘。检查您是否在构造函数中初始化了所有成员。
迁移到乐高火车
一旦您的分析工作,您应该能够在 LEGO wagon 设置中几乎无缝地使用您的ConfigureTrain.C内容。请尽可能合理地使用乐高火车以节省资源!
像老板一样调试代码(使用 GDB)
在 ALICE 周的一个讨论中,有一个关于使用 GDB 进行调试的演讲(链接)。不幸的是,演讲没有涉及如何在你的 aliphysics 任务中使用 GDB。Nittygriddy 现在使用--wait_for_gdb选项使这变得非常容易:
$ nitty run local LHC10h_AOD160 --wait_for_gdb
以上设置您的分析,打印出它的进程ID(例如27575),然后等待您附加gdb。原则上它应该很简单:
$ gdb -p 27575
但可能有一些警告。我在这里写了一篇关于如何使用 gdb 的小博文。
分析您的代码
Nittygriddy 可以轻松地将gdb用作随机分析器。这意味着正在运行的分析会被多次中断,并且会在分析花费大部分时间的地方进行统计。这种分析可以在所谓的“火焰图”中非常可视化。Nittygriddy 打包了原始 [FlameGraph 项目]( https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#links ) 中的一些文件,以使此过程尽可能简单,这就是.
首先,您必须开始本地分析。您可能希望使用--wait_for_gdb标志开始它以获取pid,但如果您愿意,也可以通过任何其他方式找到pid :
$ nitty run local LHC10h_AOD160 --wait_for_gdb
现在,您必须打开第二个终端,在其中将分析器附加到正在运行的分析的pid(例如 27575):
$ nitty profile 27575 --nsamples=100
记得在第一个终端恢复分析!现在您可以使用浏览器查看火焰图。对于上面的pid,它将位于/tmp/27575.svg。svg每 5 个样本更新一次,所以给它一些时间!
一个火焰图的例子可能看起来像这样:
幕后发生了什么?
运行您的分析 nitty griddy 时,在您的 train 文件夹中创建一个新文件夹。然后它会根据您的选项生成一个run.C文件并将其复制到该文件夹中。这个run.C可以独立运行并且应该易于阅读。这样做的好处是您可以随时停止使用nittygriddy并返回自己修改宏 - 无需供应商锁定!但是,如果您想继续使用nittygriddy,则不应直接编辑这些宏,因为它们可能会被覆盖,并且首先违背了该程序的目的。
贡献
任何形式的贡献(问题、请求请求、一般性评论……)总是受欢迎的!如果您想破解 nittygriddy(例如,将新数据集添加到默认数据集),您应该查看 nitty griddy 作为可编辑的 python 包:
$ git clone https://github.com/cbourjau/nittygriddy.git $ cd nittygriddy $ pip install -e .
这会以可编辑模式安装 nittygriddy ,这意味着对存储库克隆中文件的任何更改都可以立即用于命令行工具,而无需重新安装。这意味着可以使用简单的git pull origin/master获取更新。
项目详情
nittygriddy -1.0.6.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | c39e701e8284019a18078e15e5e11185423f888d9c740ac09bff30a71f842539 |
|
| MD5 | 618bdab09d333b380c7d305724ce5cd6 |
|
| 布莱克2-256 | df963f6afc177726fd366b5dda4d75930f0008098323fc72356cf8b36aaff31b |