大规模运行MPI应用

一、应用场景

科学计算

在现代科学和工程中,数值计算工程师会遇到大量复杂的数学计算问题。这些问题突出的共性表现在高维数、计算规模大、多时空尺度、强非线性等方面。批量处理Batch拥有一套完整的并行计算框架,适配常见的并行模型(MPI应用)。利用海量弹性的云资源,有力地支撑高性能科学计算应用软件和算法。

影视和效果图渲染

在影视、广告、建筑规划等视觉创作行业中,内容制作者和后期制作公司需要使用到海量机器来完成影视特效、三维动画、特效图等相关渲染工作,批量处理 Batch 为用户提供了自动化内容渲染工作流水线的能力,用户可以构建自己的渲染依赖流程,同时利用 Batch 的海量资源和作业调度能力来高效的完成视觉创作工作。

基因测序

生物信息公司或实验室利用测序仪获取基因组序列的原始文件,在完成基因组序列的初步分析后将信息上传到云上存储系统,比如对象存储或文件存储,然后通过腾讯云批量计算 Batch 对信息进行更进一步分析。

二、准备

  • 注册腾讯云账号,登录腾讯云官方网站。
  • 进入内测申请页,申请开通批量计算服务。
  • 登录API秘钥控制台,创建密钥对。
  • 安装CLI命令行工具,使用密钥对调用批量计算接口。
  • 三分钟了解批量计算名词解释。

三、Batch介绍

图1

如图1所示,Batch的核心概念包括计算环境和作业。计算环境是由一个或多个计算节点组成。每一个计算节点可能是一个CVM云服务器,一台黑石物理机,或者一个Docker容器。作业运行于计算环境中,由一个或多个具有前后依赖关系的任务组成。一个作业就是一个基本的工作流。需要进一步了解Batch,请移步《腾讯云批量计算介绍》。

四、运行MPI应用基本流程

  • 创建CVM自定义镜像
    • 要求自定义镜像可运行于支持Linux操作系统的硬件平台。
    • 安装Linux MPI开发和运行相关的安装包、库和工具。
    • 禁止SSH远程主机的公钥检查。
  • 准备数据,并使用迁移工具上传至对象存储文件存储(如图1第①步所示)
    • 使用空密码短语生成SSH秘钥对。
    • 上传密钥对“.ssh”目录,目录包含公钥文件、秘钥文件和带公钥的authorized_keys文件。
    • 上传Linux MPI主任务和子任务应用程序包(“main exec”和“sub exec”)。
    • 上传Linux MPI应用输入数据。
  • 调用Batch计算环境接口创建资源池(如图1第②步所示)
    • 创建安全组,配置网络访问控制,允许SSH端口访问。
    • 推荐使用私有网络,不同计算环境之间网络空间逻辑隔离。
    • 如图1第③步,利用计算环境存储映射挂载安全的“.ssh”目录、MPI子任务应用程序包“sub exec”目录和输入数据“data”目录。
    • 如图1第④步所示,利用计算环境存储映射重定向MPI子任务标准输出和标准错误到“data”目录。
  • 创建多个MPI应用作业(如图1“Job A”、“Job B”和“Job C”所示)
    • 利用任务存储映射,如图1第⑥步所示,下载MPI主任务应用程序压缩包“main exec”。
    • 随机选择一台计算节点运行Linux MPI主任务。以MPICH实现为例: “mpiexec -f $ BATCH_ENV_PRIVATE_IPS ~/main.sh” 其中$ BATCH_ENV_PRIVATE_IPS是Batch提供的系统环境变量,表示计算节点IP集合。
    • 主任务完成后,如图1第⑦步所示,利用任务存储映射重定向MPI主任务标准输出和标准错误到第三方存储stdout和stderr目录。
    • 如图1第⑨步所示,用户可登陆到任意计算节点,完成程序调试和性能诊断。

五、计算环境样例

代码语言:javascript
复制
{
  "ComputeEnv": {
    "EnvName": "test compute env",
    "EnvDescription": "test compute env",
    "EnvType": "MANAGED",
    "EnvData": {
      "InstanceType": "S1.SMALL2",
      "ImageId": "{cvm image id}"
    },
    "InputMappings": [
      {
        "SourcePath": "cos://{bucket}-{app id}.cos.{region}.myqcloud.com/.ssh",
        "DestinationPath": "~/.ssh"
      },
      {
        "SourcePath": "cos://{bucket}-{app id}.cos.{region}.myqcloud.com/subtask/",
        "DestinationPath": "/usr/local/subtask/"
      }
    ],
    "DesiredComputeNodeCount": 100
  }
}

六、MPI应用作业样例

代码语言:javascript
复制
{
  "Job": {
    "JobName": "test job",
    "Priority": 1,
    "Tasks": [
      {
        "TaskName": "hello",
        "TaskInstanceNum": 1,
        "ComputeEnvId": "{env id}",
        "InputMappings": [
          {
            "SourcePath": "cos://{bucket}-{app id}.cos.{region}.myqcloud.com/input/data",
            "DestinationPath": "{local path}"
          }
        ],
        "OutputMappings": [
          {
            "SourcePath": "{local path}",
            "DestinationPath": "cos://{bucket}-{app id}.cos.{region}.myqcloud.com/output/data"
          }
        ],
        "Application": {
          "DeliveryForm": "PACKAGE",
          "Command": "mpiexec -f $ BATCH_ENV_PRIVATE_IPS ~/main.sh",
          "PackagePath": "cos://{bucket}-{app id}.cos.{region}.myqcloud.com/main.tar.gz"
        }
      }
    ],
    "Dependence": []
  }
}

参考文献

[1] Azure.Use multi-instance tasks to run Message Passing Interface (MPI) applications in Batch, https://docs.microsoft.com/en-us/azure/batch/batch-mpi

[2] StarCluster User Manual, http://star.mit.edu/cluster/docs/latest/manual/index.html

[3] MPICH Guide, http://www.mpich.org/documentation/guides/