用于在本地和远程主机上运行多个可执行脚本的包,使用yaml文件配置
atomic-hpc的Python项目详细描述
原子HPC
项目:https://github.com/chrisjsewell/atomic-hpc" rel="nofollow">https://github.com/chrisjsewell/atomic hpc
用于在本地和远程主机上运行多个可执行脚本的包, 使用现代标准配置。 这个包是专门为提交给高性能计算(HPC)集群的作业而设计的,例如 帝国HPC设施。 工作示例可以在这里找到
安装
建议设置一个环境。 对于Imperial HPC,运行以下命令(如wiki上所述):
>> module load anaconda3/personal
>> anaconda-setup
然后通过以下方法安装Atomic HPC:
>> pip install atomic-hpc
最小示例
- 编写一个yaml配置文件;每个运行必须有一个名称和一个唯一的id,
然后可以在(全局)
默认值
部分或每次运行中设置属性(运行属性将覆盖默认值): < > > 使用命令行应用程序提交(使用-h查看所有选项):
>> run_config config.yaml
结果将显示在输出路径中,每次运行一个文件夹:
>> ls -R output output/1_test_local: config_1.yaml hallo.txt output/2_test_other: config_2.yaml hallo.txt
< > >
配置yaml:
defaults:environment:unixprocess:unix:run:-echo "hallo world" > hallo.txtoutput:path:outputruns:-id:1name:test_local-id:2name:test_other
最小示例(远程和PBS)
作业可以提交到远程主机,并且可以选择, PBS键入系统。
配置远程.yaml
runs:-id:1name:test_qsubenvironment:qsuboutput:remote:hostname:login.cx1.hpc.imperial.ac.ukusername:cjs14path:/work/cjs14/yaml_testprocess:qsub:cores_per_node:16nnodes:1walltime:1:00:00queue:queue_namemodules:-quantum-espresso-intel-suite-mpirun:-mpiexec pw.x -i script2.in > main.qe.scf.out
要从远程主机检索输出,请在所有进程运行后:
>> retrieve_config config_remote.yaml -o path/to/local/outputs
输入
输入文件和脚本可以是本地的,也可以是远程的,在运行之前会被复制到输出文件夹中。
也可以设置变量,如果相应的@v{var\u id}
找到regex。类似地,整个文件内容可以通过@f{file_id}
regex:
>> cat path/to/script1.in
@v{var1}
@f{file1}
>> cat path/to/file1
This is file 1
配置yaml:
defaults:description:quantum-espresso runenvironment:unixinput:remote:hostname:login.cx1.hpc.imperial.ac.ukusername:cjs14variables:var1:nprocs:2files:file1:path/to/input.txtscripts:-path/to/script1.inprocess:unix:run:-mpirun -np @v{nprocs} pw.x -i script1.in > main.qe.scf.outruns:-id:1name:run1input:variables:var1:value1-id:2name:run2input:variables:var1:value2
运行:
>> module load anaconda3/personal
>> anaconda-setup
0
注1:所有相对路径都是相对于执行目录解析的,除非使用run-config-b base/path/
设置。
注2:对于上述示例,如果脚本或cmndline中包含@v{file1}
(而不是@f{file1}
),
然后用文件名(而不是其内容)替换,即input.txt
注意3:在qsub:run:
中,关键字@{wrkpath}
将替换为工作文件夹路径。
例如,当程序运行在一个临时文件夹(例如,
>> module load anaconda3/personal
>> anaconda-setup
1
< H2>输出除了指定输出路径外,还可以配置后处理文件删除和重命名:
>> module load anaconda3/personal
>> anaconda-setup
2
完整配置选项
>> module load anaconda3/personal
>> anaconda-setup
3
设置ssh公钥和私钥
建议使用公钥身份验证,而不是直接使用密码访问远程主机 作为一种更安全的身份验证方法。网上有很多解释 (包括这里)和下面是一个简短的安装指南 (摘自http://wiki.ch.ic.ac.uk/wiki/index.php?title=mod:hunt\u research\u group/sshkeyfile" rel="nofollow">这里):
首先打开要连接的计算机上的外壳。输入cd~/.ssh。
如果ls
显示给名为"id_rsa"和"id_rsa.pub"的文件,则说明您已经有一个密钥对。
如果没有,请输入ssh keygen
>> module load anaconda3/personal
>> anaconda-setup
4
您应该保留标准目录并选择一个适当困难的密码短语。
刚才创建的两个文件是key和keyhole。第一个文件'id_rsa'是密钥。 你不应该把它给别人,也不应该允许别人复制它。 第二个文件'id_rsa.pub'钥匙孔。它是公开的,你可以把它给任何人。 在这种情况下,将其交给HPC。
如果您打开'id_rsa.pub',它应该包含一行,类似于:
>> module load anaconda3/personal
>> anaconda-setup
5
现在登录到hpc并打开(或创建)文件'~/.ssh/authorized_keys'。 在文件末尾的新行中,您应该添加一个注释(以开头),说明该密钥对来自何处 然后在第二行中,您应该复制并粘贴"id rsa.pub"文件的完整内容。
>> module load anaconda3/personal
>> anaconda-setup
6
关闭"授权密钥"文件和与HPC的连接。现在再次连接。 将要求您输入密钥文件的密码短语。输入它。 您现在应该登录到hpc。如果您不需要密码,而是需要您帐户的密码, 服务器不接受您的密钥对。
到目前为止,我们已将为您的帐户输入密码替换为为为您的密钥对输入密码短语。 这就是所谓的ssh代理的用武之地。代理将为您存储密码,因此您没有 再进入他们。幸运的是MacOS有一个内置的,它应该会弹出并问你,是否需要 代理来处理你的密码。如果你说"是",那是你最后一次听到或看到 或者你的密码。差不多每个操作系统都有类似的代理。从现在开始你只需要 输入主机名和用户名即可登录。
注释
如果在字符串中使用特殊字符(如*),请确保将它们包装为""或使用>;或yaml组件 (请参见https://en.wikipedia.org/wiki/yaml基本组件)