用于在本地和远程主机上运行多个可执行脚本的包,使用yaml文件配置

atomic-hpc的Python项目详细描述


原子HPC

travis工作服pypi

项目: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

最小示例

  1. 编写一个yaml配置文件;每个运行必须有一个名称和一个唯一的id, 然后可以在(全局)默认值部分或每次运行中设置属性(运行属性将覆盖默认值):
  2. < > >

    配置yaml

    defaults:environment:unixprocess:unix:run:-echo "hallo world" > hallo.txtoutput:path:outputruns:-id:1name:test_local-id:2name:test_other
    1. 使用命令行应用程序提交(使用-h查看所有选项):

       >> run_config config.yaml
      
    2. 结果将显示在输出路径中,每次运行一个文件夹:

       >> ls -R output
       output/1_test_local:
       config_1.yaml     hallo.txt
       output/2_test_other:
       config_2.yaml     hallo.txt
      
    3. < > >

      最小示例(远程和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基本组件

      欢迎加入QQ群-->: 979659372 Python中文网_新手群

      推荐PyPI第三方库


热门话题
java无法从组合框中选择值。需要JS替代方案   打印带有规范问题的Java打印程序?   使用Xmodem传输文件内容时的附加ASCII字符的java传输   java JAXB通过socket和流读取器块   java“错误:在类Grad中找不到Main方法,请将Main方法定义为:public static void Main(字符串[]args)”   如何在Java中将图像从彩色转换为黑白(灰度)   java如何使用Google云连接服务器发送上游GCM消息   JAVA中的JSON文件字段交叉点   什么是“搜索:{…}”/Java中正式使用的“中断搜索”语法?   由于明显的类路径冲突导致java ToDiscoverable强制转换错误?   java可以成为一种语言。类文件不能添加到URLClassLoader的urlpath   Android设备上会话管理的java最佳实践   Java8Java上的Google应用程序引擎。开发服务器上的时间不可用?   java Derby数据库导出为单个文件?   java如何让jmeter根据访问日志行中的时间戳进行日志重放   访问EJB分离接口时的java IllegalAccessException   java使用JsonPath在不知道密钥的情况下提取值   java将文件保存到Jersey API中的服务器应用程序目录   jsoup中的java Http异常   java有没有错误?