在本地(顺序和证明精简版)或网格上部署alice分析的简便方法
nittygridd的Python项目详细描述
nittygriddy
nitty griddy旨在使使用aliroot/aliphysics框架的分析部署变得简单、透明和可重复。 主要目标是彻底消除到处复制粘贴 run.c 文件的不道德做法。 NittyGriddy"项目"要求用户只提供他们要运行的特定分析的设置—与您希望如何或在何处运行分析无关。 提供这些设置的方式类似于如何配置乐高列车。 然后,在 本地 (顺序)、 验证精简版 (本地并行)或 网格 中的部署是完全透明的,不需要编辑任何文件。 nittygriddy还可以方便地下载所需数据集的一部分,以便进行本地脱机开发-无需运行网格测试模式。 除此之外,nittygriddy使网格分析完成后很容易触发合并过程。
最后但并非最不重要的一点是,nittygriddy不做"供应商锁定":nittygriddy生成直接的 run.c 文件,将它们存储在一个整洁的文件夹结构中,并使您能够在以后使用一个简单的 根run.c 重新运行分析而不使用nittygriddy。
免责声明
我每天都在使用nittygriddy已经有一段时间了,我发现它非常有用。我认为/希望它也能成为其他人的一个很好的工具。我会努力保持当前api的稳定,但是如果需要的话,我可能需要做一些突破性的更改,这可能需要用户的一些小动作。但正如我前面所说,如果发生这种情况,并且您不想再使用nittygriddy,那么您可以始终独立使用生成的
安装nittygriddy
nittygriddy可在 pypi 上找到。因此,使用 pip 可以很容易地完成安装,但首先,您应该确保使用 pip 安装的内容稍后在命令行上可用。将此添加到您的 .bashrc 或类似的:
# .bashrc or similar export PYTHONUSERBASE=$HOME/.local_pip export PATH=$PYTHONUSERBASE/bin:$PATH
这将使所有安装为无特权用户的内容都具有 pip–user go 在"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
设置"train"文件夹
我在下面称之为"train"的实际上只是一个文件夹,您可以在其中存储特定分析的设置。分析通常包括几个任务(例如 alimultselectiontask 和您自己的任务)。目前,所有设置都在一个单独的文件( configuretrain.c )中,使任何文件夹成为"train folder"。另外,请注意,为了使用nittygriddy 您的任务必须存在于本地aliphysics安装中(无论如何它确实应该存在) !
configuretrain.c
唯一需要的 .c 文件。它反映了为你的任务设置类似于乐高火车的选项。请注意,该文件将被编译,因此必须是有效的cpp(因此,下面示例中的所有 都包含 )。其原因是,使用解释器纯粹是邪恶的,最终会导致未定义的行为和悲伤的用户。可能的最短版本如下:
#include"TROOT.h" #include"AliVEvent.h" #include"AliBasedNdetaTask.h"voidConfigureTrain(){// Load you AddTask macro gROOT->LoadMacro("$ALICE_PHYSICS/PWGLF/FORWARD/analysis2/AddTaskdNdeta.C");// Execute your AddTask macro. You can pass options in the function call if necessary AliBasedNdetaTask*task=reinterpret_cast<AliBasedNdetaTask*>(gROOT->ProcessLine("AddTaskdNdeta()"));/* Set your task's options here: task->SelectCollisionCandidates(AliVEvent::kMB); */}
单元数据集.yml
此文件包含有关自定义数据集的信息。如果使用标准的,这是不必要的。该文件应位于主目录 ~/nitty_datasets.yml 中。文件必须在 yaml 格式中。典型的条目如下:
LHC15o_pass1_HIR_FMD:data_pattern:pass1/AOD/*/AliAOD.rootdatadir:/alice/data/2015/LHC15o/datatype:aodis_mc:'false'notes:5.02 TeV, Good runs with FMD, ITS, and V0. This is not the full run listsince 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, 245683run_number_prefix:'000'system:PbPbLHC15f_AOD171_FMD:...
注意, yaml 和python一样,都是基于缩进的。但别担心,如果语法有问题,nittygriddy会抱怨的。这包括每个条目中缺少的字段。在 nitty_datasets.yml 中定义的数据集将与nittygriddy附带的默认数据集合并。
使用nittygriddy
我迷路了。注意 --help也可用于每个子命令:
$ nitty --help
创建新的列车文件夹。即,用最少的工作时间创建一个新文件夹configuretrain.c :
$ nitty new a_new_train
列出所有可用数据集:
$ nitty datasets -l
搜索所有数据集以查找某些内容(例如collations系统):
$ nitty datasets -s PbPb
显示数据集的详细信息:
# .bashrc or similar export PYTHONUSERBASE=$HOME/.local_pip export PATH=$PYTHONUSERBASE/bin:$PATH0
从给定的数据集中下载5GB数据用于离线开发。 文件保存在 ~/lhc_data/ 中,与网格上的文件夹结构相同:
# .bashrc or similar export PYTHONUSERBASE=$HOME/.local_pip export PATH=$PYTHONUSERBASE/bin:$PATH1
在本地proof lite中运行分析:
# .bashrc or similar export PYTHONUSERBASE=$HOME/.local_pip export PATH=$PYTHONUSERBASE/bin:$PATH2
或者使用parfile将其提交到网格(见下文):
# .bashrc or similar export PYTHONUSERBASE=$HOME/.local_pip export PATH=$PYTHONUSERBASE/bin:$PATH3
在网格上完成分析后,更改到输出目录( latest 是指向nittygriddy启动的最新内容的链接)并触发合并:
# .bashrc or similar export PYTHONUSERBASE=$HOME/.local_pip export PATH=$PYTHONUSERBASE/bin:$PATH4
完成所有最终合并阶段后,您可以在自己的计算机上脱机合并个别运行:
# .bashrc or similar export PYTHONUSERBASE=$HOME/.local_pip export PATH=$PYTHONUSERBASE/bin:$PATH5
你还可以做很多事情。只需检查 --help
提示和技巧
参数文件
如果对任务的最新更改还不在最新的aliphysics标记中,则可以使用par文件。 有关更多背景信息,请参见dario的 页面 。长话短说,如果您的任务是在Aliphysics中正确设置的,您应该能够做到:
# .bashrc or similar export PYTHONUSERBASE=$HOME/.local_pip export PATH=$PYTHONUSERBASE/bin:$PATH6
这将在 $alice_physics/parfiles 中创建用于分析的.par文件。如果出现错误,则可能无法在cmake中正确设置分析。达里奥的职位应该包括你。
我的分析在运行proof lite时崩溃得很惨
proof lite对在构造函数中初始化任务的成员非常挑剔。这使它成为在网格上运行的一个很好的测试,但是错误消息相当隐晦。检查是否初始化了构造函数中的所有成员。
迁移到乐高火车上
一旦您的分析工作正常,您应该能够几乎无缝地使用乐高中的 configuretrain.c 内容货车设置。请尽可能合理地使用乐高火车,以节省资源!
像老板一样调试代码(使用gdb)
在Alice的一周里,有一次关于使用GDB进行调试的讨论 (link) 。 不幸的是,这篇演讲没有涉及到如何在Aliphysics的任务中使用GDB。 NittyGriddy现在通过 --wait_for_gdb选项使这变得非常容易:
# .bashrc or similar export PYTHONUSERBASE=$HOME/.local_pip export PATH=$PYTHONUSERBASE/bin:$PATH7
上面设置了您的分析,打印出它的进程id(例如27575),然后等待您附加gdb。原则上,应该像这样简单:
# .bashrc or similar export PYTHONUSERBASE=$HOME/.local_pip export PATH=$PYTHONUSERBASE/bin:$PATH8
但可能有一些警告。我在这里写了一篇关于如何使用gdb的小博客
分析代码
nittygriddy使得使用gdb作为随机剖面仪变得容易。这意味着运行分析被多次插入,并且在分析花费大部分时间的地方进行统计。这种剖面图在所谓的"火焰图"中可以非常直观地显示出来。nittygriddy从原始的[flamegraph project]中打包了一些文件(https://github.com/adam-p/markdown here/wiki/markdown cheatsheet links" rel="nofollow">https://github.com/adam-p/markdown here/wiki/markdown cheatsheet links)以使这个过程尽可能简单,并且是怎样的?< /P>
首先,你必须开始一个局部分析。您可能想用 --wait-u-for-gdb 标志来获得 pid ,但您也可以通过任何其他方式找到 pid ,如果您愿意的话:
# .bashrc or similar export PYTHONUSERBASE=$HOME/.local_pip export PATH=$PYTHONUSERBASE/bin:$PATH7
现在,您必须打开第二个终端,将分析器连接到运行分析的 pid (例如27575):
pip install --user nittygriddy0
记住在第一个终端继续分析!现在您可以使用浏览器查看flamegraph。对于上面的 pid 它将位于 /tmp/27575.svg 。svg svg 每5个示例更新一次,请给它一些时间!
一个火焰图的例子可能是这样的:
幕后发生了什么?
运行分析nitty griddy时,请在train文件夹中创建一个新文件夹。 然后,它从您的选项中生成一个 run.c 文件并将其复制到该文件夹中。 这个 run.c 可以独立运行,并且应该易于阅读。 这样做的好处是,您可以随时停止使用nittygriddy,然后自己返回到修改宏的位置—无需供应商锁定! 但是,如果您想继续使用nittygriddy,则不应直接编辑这些宏,因为它们可能会被覆盖,并且首先会破坏此程序的目的。
贡献
任何形式的贡献(问题,拉请求,一般性意见…)总是欢迎!如果您想破解nitty griddy(例如向默认数据集添加新数据集),您应该将nittygriddy作为可编辑的python包签出:
pip install --user nittygriddy1
这将在可编辑模式下安装nittygriddy,这意味着对存储库克隆中的文件所做的任何更改都可以立即供命令行工具使用,而无需重新安装。这意味着更新可以通过一个简单的 git pull origin/master