一、应用场景
科学计算
在现代科学和工程中,数值计算工程师会遇到大量复杂的数学计算问题。这些问题突出的共性表现在高维数、计算规模大、多时空尺度、强非线性等方面。批量处理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第⑨步所示,用户可登陆到任意计算节点,完成程序调试和性能诊断。
五、计算环境样例
{
"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应用作业样例
{
"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/