LSF实践专题(23):在Google Cloud上部署LSF集群

目录

准备云环境

了解LSF Resource Connector

在Google Cloud上创建LSF集群,并配置LSF Resource Connector

结束语


对于现在正在蓬勃发展的云计算技术,LSF集群也是早已给出了在云上进行集群部署的方案,对于主流的AWS、Google Cloud、微软的Azure云服务,以及Openshift,LSF都可以支持,并且还在进行越来越深度的合作。

今天我们先以Google Cloud为例,来介绍一下LSF集群在云上的部署步骤。

准备云环境

在开始之前,首先要准备好云环境的账号,确保可以正常在云环境中创建和申请资源。

也可以先阅读相应云厂商的操作指南,掌握基础的云部署操作流程。

了解LSF Resource Connector

LSF Resource Connector是LSF 10.1版本后专门用于云部署的组件,通过这个组件,LSF可以将云供应商提供的虚拟机加入LSF集群,在workload高的时候扩大集群规模,保证作业吞吐量,在空闲的时候归还云上的节点来降低集群花费,达到集群规模的弹性设置。

LSF的守护进程ebrokerd就是专门用于Resource Connector的,如果发现有异常,我们可以通过查看LSF log目录下的ebrokerd日志来检查有没有相关的错误提示。

在Google Cloud上创建LSF集群,并配置LSF Resource Connector

1、在Google Cloud上创建project

Google Cloud上的资源申请都要基于某个project,所以首先要先创建一个project。

以Google Cloud账户登录Google Cloud,进入Google Cloud Console:

https://console.cloud.google.com/

点击页面上方的project,选择或新建一个project。

图片

创建完成后为这个project选择一个service account。从IAM & Admin选择Service Account。

图片

为这个project创建一个新的service account,在action菜单中选择Manage permissions可以为这个service account设置权限。

图片

为刚才创建的project选择Compute Engine default service account和Google API Service Agent,将权限设为Editor。

图片

选择KEYS,然后从ADD KEY中选择Create new key来创建,并下载一个credential key作为之后的备用。

图片

接下来选择JSON格式, 点击CREATE会下载一个JSON格式的文件到本地,将这个文件保存好,在之后为LSF作业在Google Cloud创建VM时会用到。

图片

2、为LSF管理节点,在Google Cloud上创建VM实例

点击Compute Engine菜单,选择VM instances,然后选择CREATE INSTANCE。

图片

选择New VM instance并且填写所需信息:

  • 指定VM instance的Name。Labels可以帮助说明,是可选项。

  • 在Region和Zone中选择国家和地区创建VM instance。不同国家地区可以使用的CPU、GPU型号不同,价格也有所差异。

  • Boot disk中可以指定VM的操作系统以及系统磁盘空间大小。

图片

  • 选择Management,security,disks,networking,sole tenancy,可以打开扩展选项,用于设置SSH安全,或者增加额外的数据存储磁盘。

图片

在扩展页面的Security下面,可以添加SSH Keys。

可以在想要用来远程访问这个VM的机器上,利用ssh-keygen生成本地机器的ssh key,然后将这个key添加到这里,这样,从本地机器就可以直接通过ssh访问当前这个VM了。

图片

填写完成后,点击Create进行创建,Google Cloud会在创建完成后自动将新创建的VM启动。

3、安装和配置LSF管理节点

当刚才的VM创建完成后,从VM列表中获取其外部IP(external IP address)。

将LSF安装到这个VM上,安装完成后,建议进行以下配置:

  • 在LSF_TOP/conf/lsf.conf中,配置:

图片

其中,LSF_ROOT_USER=Y用于开启root用户对LSF集群的操作权限。

LSB_RC_EXTERNAL_HOST_FLAG=googlehost用于告诉LSF Resource Connector当前的云提供商是Google Cloud。

LSB_RC_EXTERNAL_HOST_IDLE_TIME=2用于设置当运行在云端的VM节点上的作业结束后多久,LSF集群会控制Google Cloud对VM进行回收。设置为2表示某个VM节点上的所有作业结束2分钟之后,就会触发回收。这个值可以根据自己的需要进行设置,没有作业运行仍然保留VM会导致额外的不必要费用,但是如果你的应用环境会很频繁的有新的作业出现,过于快速的回收VM会造成过于频繁的创建新的VM,在VM创建和添加到LSF集群的过程中,不能运行作业,但仍会造成费用,所以过于频繁的不必要的创建过程也会导致额外的费用增加。这个需要根据自己的作业场景进行调节。

LSB_GPU_NEW_SYNTAX=extend和LSF_GPU_AUTOCONFIG=Y都是针对GPU资源的最新优化参数,如果想要在集群中使用GPU资源,建议按照这个进行配置。

  • LSF_TOP/conf/lsbatch/configdir/lsb.modules中,配置:

图片

schmod_demand是用于开启LSF Resource Connector的模块。

  • LSF_TOP/conf/lsf.shared中配置:

图片

  • LSF_TOP/conf/lsbatch/configdir/lsb.queues中设置一个或多个队列用于容纳将要在云端VM上运行的作业。在这些队列上,加入参数:RC_HOSTS=googlehost,例如:

图片

  • 按照如下操作启用user_data.sh:

图片

编辑user_data.sh,按照实际情况修改以下内容:

图片

确保user_data.sh的结尾会调用lsadmin、badmin等命令启动LSF相关服务。

  • 按以下方式在LSF_TOP/conf/resource_connector/hostProviders.json中启用Google:

{
  "providers":[
     {
        "name": "google",
        "type": "googleProv",
        "path": "resource_connector/google/provider.json"
     }
  ]
}
  • 按照以下参数配置LSF_TOP/conf/resource_connector/google/provider.json文件:

{
   "host_type": "google_host",
   "interfaces":
   [{
       "name": "getAvailableTemplates",
       "action": "resource_connector/google/scripts/getAvailableTemplates.sh"
    },
    {
       "name": "getReturnRequests",
       "action": "resource_connector/google/scripts/getReturnRequests.sh"
    },
    {
       "name": "requestMachines",
       "action": "resource_connector/google/scripts/requestMachines.sh"
    },
    {
       "name": "requestReturnMachines",
       "action": "resource_connector/google/scripts/requestReturnMachines.sh"
    },
    {
       "name": "getRequestStatus",
       "action": "resource_connector/google/scripts/getRequestStatus.sh"
    }]
}
  • 将10.1/resource_connector/google/下的conf目录复制到管理节点VM的LSF_TOP/conf/resource_connector/google/下:

图片

  • 配置project和credential文件:将之前下载的JSON格式的credential文件上传到 LSF管理节点的VM上,并在googleprov_config.json 文件中定义好project名称和传上去的credential文件的路径。

{
   "LogLevel": "INFO",
   "GCLOUD_PROJECT_ID": "lsf-rc-test",
   "GCLOUD_CREDENTIAL_FILE": "/home/admin/lsf-rc-test-af9e765bb22f.json"
}
  • 在LSF管理节点上通过lsfstartup命令启动lim、res和sbatchd等服务进程。

4、创建一个新的Google Cloud VM作为LSF计算节点并且安装LSF

a.创建一个新的VM用于安装LSF计算节点,这个VM的系统磁盘将作为之后用于为LSF作业动态创建VM的来源磁盘。

b.创建VM并且使用与刚才作为管理节点的VM相同的子网(subnet)。

c.登录创建好的VM。

d.将LSF安装包和entitlement文件传输到VM上,例如以下文件:

  • lsf10.1_linux2.6-glibc2.3-x86_64.tar.Z

  • lsf10.1_lsfinstall.tar.Z

  • lsf_std_entitlement.dat

e.如果当前VM没有安装ed,先用yum安装ed:

  • yum install ed

f.解压lsfinstall压缩包,编辑其中的server.config文件并设置以下参数:

  • LSF_TOP:指定与管理节点上LSF相同的安装位置。

  • LSF_ADMINS:指定与管理节点上相同的用户作为admin。

  • LSF_TARDIR:指定当前VM中LSF安装包文件所在目录位置。

  • LSF_ENTITLEMENT_FILE:指定当前VM中entitlement文件所在的位置。

  • LSF_SERVER_HOSTS:指定LSF管理节点的名称,并且确认从当前VM可以解析这个名称。

  • LSF_LOCAL_RESOURCES:将参数的值设置为"[resource googlehost]"。

  • LSF_LIM_PORT:设置与LSF 管理节点上的LIM port相同的值。示例:

图片

5、执行lsfinstall脚本进行安装

图片

安装结束后,确认LSF_TOP/conf/lsf.conf文件中是否成功设置了googlehost作为resource:

图片

6、根据实际情况选择是否需要配置DNS和NIS服务

Google Cloud上默认的DNS服务可以用于LSF。

7、确认当前VM是否成功加入LSF集群

通过lsadmin limstartup,lsadmin resstartup和badmin hstartup命令启动LSF服务,并且通过lsload和bhosts命令确保当前VM作为动态节点(dynamic host)成功加入到LSF管理节点上的集群中。

这个过程可能需要2-3分钟的时间,如果长时间等待后,仍然没能加入集群,检查以下配置,然后重新启动LSF服务。

  • 在VM instance属性的VPC网络里检查防火墙和防火墙规则。

  • 管理节点和当前VM之间可以使用私有IP (private IP)互相ping通。

当前VM成功加入LSF集群之后,就可以将该计算节点VM关掉了(后面继续做VM镜像)。

8、为计算节点VM创建Google Cloud存储镜像(storage image)

我们可以在Google Cloud里面,根据刚才创建并且关掉的LSF计算节点VM来创建镜像,之后LSF需要更多节点来运算作业时,就可以从这个镜像创建VM,并作为动态节点加入到集群中进行工作了。

根据不同的需要,我们可以创建多个镜像,并设定不同的触发规则,让LSF根据不同的作业需求,从相应的镜像创建VM,也可以在创建VM时加入不同的CPU内存需求等条件。

首先我们从Google Cloud Console里创建镜像。

a.从菜单里选择Compute Engine,然后选择STORAGE>Images。

b.点击Create an image。

图片

c.为镜像输入名称,然后点击Source>Disk,从Source disk list中选择刚才安装的LSF计算节点的VM。

图片

d.点击Create并等待创建完成。

e. 登录LSF管理节点VM。

f.修改LSF_TOP/conf/resource_connector/google/conf/googleprov_templates.json文件,为刚才创建的镜像编写一个模板。参考如下:

{
    "templateId": "gcloud-VM-1",
    "maxNumber": 100,
    "attributes": {
       "type": ["String", "X86_64"],
       "ncores": ["Numeric", "1"],
       "ncpus": ["Numeric", "1"],
       "nthreads": ["Numeric", "2"],
       "ngpus": ["Numeric", "1"],
       "ngpus_physical": ["Numeric", "1"],
       "gpuextend":["String", "ngpus=1;nnumas=1;gbrand=Tesla;gmodel=K80;gmem=10240;nvlink=yes"],
       "define_ncpus_threads": ["Boolean", "1"],
       "mem": ["Numeric", "3840"],
       "zone": ["String", "us_east1-d"],
       "googlehost": ["Boolean", "1"]
    },
    "imageId": "lsf-gcloud-dynamic-vm",
    "region": "us-east1",
    "zone": "us-east1-d",
    "vmType": "n1-standard-1",
    "gpuType": "nvidia-tesla-k80",
    "gpuNumber":"1",
    "instanceTags" : "lsf-vpn-instance=gcloud-VM-1",
    "userData": "zone=us-east1-d"
}
  • templateId表示在LSF中使用的该template的名称。

  • attributes里面定义的各种属性都是用于LSF在调度作业时选取哪一个template来创建VM的依据。

  • attributes之外的各种属性是在调用Google Cloud API来创建VM时所需的其它参数,这些参数的设置需要遵循Google Cloud API的要求和规则。

在定义好了template之后,你可以在LSF中提交以下作业进行测试:

图片

LSF会检查集群中是否有空闲的带有“googlehost” 资源的VM,如果没有,LSF就会检查googleprov_templates.json中定义的templates,从中选择一个符合作业需求的template,然后调用Google API来根据所选择的template中的属性创建一个VM instance,当这个VM成功加入到集群后,作业就会调度到该VM运行。

9、根据Google Cloud的instance template创建VM

除了镜像,Google Cloud还提供了另一种方式来创建VM,就是instance template,LSF也可以根据这个方式来创建作业所需的VM。这种方式也需要我们事先根据之前创建好的LSF 计算节点来创建一个新的instance template。

a.从菜单中选择Compute Engine,然后选择VIRTUAL MACHINES>Instance templates。

点击CREATE INSTANCE TEMPLATE。

图片

b.填写instance template的名称,并且在模板中选择CPU,内存,点击GPU可以选择GPU的类型/数量/内存等。

图片

提示:选择不同的国家和地区,可以选择的CPU、GPU种类和数量也不同,可以参考Google Cloud官方文档来查找你需要的CPU、GPU 型号(某些规格的VM在一些国家和地区可能比其它地区更容易获取,如果某地区的相应资源都已经被其他用户占用了,创建VM的操作就会失败)。

c.点击Boot disk>Change来选择镜像和OS。

d.在Boot disk页面,点选Custom images,可以选择之前创建LSF计算节点。

图片

e.点击Select进行选取,然后回到之前的页面,点击Mangement,security,disks,networking,sole tenancy展开Disks选取页面。

图片

f.在Disk页面,你可以选择添加除系统磁盘之外的数据存储磁盘,点击Add new disk来添加额外存储磁盘。

图片

g.在添加额外磁盘时,可以选择磁盘的种类,LSF对于Google Cloud中的SSD磁盘也提供了支持,可以在类型列表里选择Local SSD scratch disk来添加。

图片

h.选择Local SSD scratch disk之后,有两个子类型:SCSI 和 NVMe,LSF都可以进行支持,同时LSF在LSF_TOP/10.1/resource_connector/google/scripts/user_data.sh文件中提供了自动挂载这两种磁盘到/tmp的示例。

图片

i.选择完成后,点击Create创建instance template。

打开LSF_TOP/conf/resource_connector/google/conf/googleprov_templates.json文件,可以配置LSF调用Google Cloud API从instance template创建VM。

通过参数launchTemplateId来指定从那个instance template创建VM。

{
     "templateId": "Template-VM-5",
     "launchTemplateId":"lsfnode-gpu-temp1",  
     "maxNumber": 2,
     "attributes": {
          "type": ["String", "X86_64"],
          "ncores": ["Numeric", "2"],
          "ncpus": ["Numeric", "2"],
          "nthreads": ["Numeric", "1"],
          "mem": ["Numeric", "8000"],
          "ngpus":["Numeric","2"],
          "ngpus_physical":["Numeric","2"],
          "gpuextend":["String","ngpus=2;nnumas=1;gbrand=Tesla;gmodel=K80;gmem=10240;nvlink=yes"],
          "googlehost": ["Boolean", "1"]
     },
     "zone": "us-east1-b",
     "instanceTags": "gputemp1"
}

在googleprov_templates.json中使用instance template创建VM时,launchTemplateId和zone两个属性是必须的,其他属性都是可选项,默认会使用Google Cloud中对应的instance template中的相应属性进行创建,但是如果在googleprov_templates.json中设置了某个属性,则会覆盖instance template中的相同属性。

在覆盖的时候有些需要注意的地方,就是instance template中将各种属性分为了不同类型,如果你指定了某一个属性,那么instance template中该属性所属类型的其他属性也会被覆盖,即使你在googleprov_template.json中没有定义其他同类型属性,那么Google Cloud将会用其他同类属性的默认值覆盖instance template中的对应设定。

例如,gpuType和gpuNumber属于同一个类别,如果你在googleprov_templates.json中指定了gpuType,但没有指定gpuNumber,那么,instance template中的gpuType就会被你指定的值取代,同时gpuNumber将被Google Cloud中的默认值取代。

Google Cloud中这种设定有些不太清楚,为了避免一些不必要的麻烦,建议要在googleprov_templates.json中为某个模板专门指定除launchTemplateId和zone之外的属性时,最好将同类别的属性一起指定。所有属性的分类如下:

Disk类别:

  • imageId

Network类别:

  • vpc

  • subnetId

  • privateNetworkOnlyFlag

GPU类别:

其他类别:

  • vmType

  • minCpuPlatform

  • instanceTags

(Labels必须在googleprov_templates.json中定义,instance template中的labels都会被替换为默认值)

结束语

以上就是在Google Cloud上部署LSF集群的方法,也可以将管理节点设置在本地机器,来搭建混合云。

各个服务商的云部署还在不断的优化和发展,LSF也在不断提供对应的支持和新的功能。

欢迎关注下方微信公众号【HPC常青园】,共同交流HPC集群管理经验和最佳实践。如果您有关于HPC集群的具体需求,欢迎邮件沟通交流:hpc@ivyent.cn。

HPC常青园

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ivyent

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值