跳到主要内容

运行容器任务

什么是容器

容器(Container)是一种轻量的虚拟化技术,用于封装和隔离应用或服务的运行环境。相比于传统的虚拟化技术,容器省去了操作系统的虚拟化,直接在宿主机(Host)的操作系统上封装了应用或服务所需要的环境和依赖。因此,容器非常轻量,可以在数秒内启动一个新的容器实例,而传统的虚拟化技术需要数分钟。同时,容器对资源的利用率更高,因为它避免了操作系统虚拟化带来的额外资源消耗。

通过容器技术来运行计算任务,一方面可以解决环境依赖的问题,在开发环境能运行的容器镜像,可以放心地提交到任何资源上进行生产;另一方面隔离性和标准化在很大程度上保证了计算的可重复性。

什么时候该使用容器

当前业界最主流的容器技术是 Docker,Docker 不仅拥有丰富的公共镜像仓库(Docker Hub),也提供了功能完善的接口,因此我们不仅可以搭建自己的镜像仓库来保证用户镜像的安全性和隔离性,也可以方便的把 Docker 镜像转变为 Singularity、Podman 等其他格式的容器镜像,容器的优势体现在许多方面:

  • 需要频繁更新代码,使用 Docker 镜像可以帮您免去反复创建 Bohrium 虚拟机镜像的苦恼,增量式拉取,速度极快;
  • 需要管理多个版本的代码,使用 Docker 镜像可以轻松达成,再也不用担心镜像数目不够了;
  • 需要把 Bohrium 上的环境复制到其他地方测试,强烈推荐 Docker 镜像,其突破了传统云厂商和超算对环境的强依赖性,使得用户可以一次编译、到处运行;
  • 需要把镜像分享给其他小伙伴,又不想他破坏原有的环境,不妨试试 Docker;
  • ...

可以看到,容器技术帮助我们解决了环境搬运、共享、部署的问题,它非常轻量化,和系统层面的资源隔离也做的非常好,可以多方面全场景的满足我们的使用场景。

如何在 Bohrium 上运行容器任务

Bohrium 目前支持 Docker 容器,并提供 Docker 镜像,您可至 Bohrium 的镜像中心-容器镜像内查看我们提供的公共容器镜像。

下面以 DeePMD-kit 为例,介绍如何在 Bohrium 上提交容器任务:

步骤一,准备输入数据

DeePMD-kit 的输入文件均已存储至 Bohrium_DeePMD-kit_example 文件夹内,使用 cd /personal 命令进入数据盘后,依次执行以下命令来进行输入文件的下载和解压:

wget https://bohrium-example.oss-cn-zhangjiakou.aliyuncs.com/Bohrium_DeePMD-kit_example.zip
unzip Bohrium_DeePMD-kit_example.zip
cd Bohrium_DeePMD-kit_example

步骤二,准备 job.json

使用容器镜像并提交容器任务,只需要在原来的任务配置文件 job.json 中修改两处:

job_type 字段:必须设置为 "container"

image_address 字段:填入您需要使用的 Bohrium 公共容器镜像地址,即下图中标号 3 处的“镜像地址”,您也可在本文末尾的“容器镜像与虚拟机镜像映射关系表”内快捷查询镜像地址。

注意

  1. 该字段也支持填写 Docker Hub 内的公共镜像地址,无需填写域名,例如:"tensorflow/tensorflow-gpu:latest"
  2. 如果您需要向并行提交容器任务,当前暂不支持使用除公共容器镜像外的其他镜像,如有需求,您可发送邮件至 bohrium@dp.tech

镜像中心容器镜像 镜像中心容器镜像 修改后的 job.json 如以下示例:

注:project_id 后的 0000 请替换成您自己的项目 ID

{
"job_name": "DeePMD-kit test",
"command": " cd se_e2_a && dp train input.json > tmp_log 2>&1 && dp freeze -o graph.pb",
"log_file": "se_e2_a/tmp_log",
"backward_files": ["se_e2_a/lcurve.out","se_e2_a/graph.pb"],
"project_id": 0000,
"platform": "ali",
"machine_type": "c4_m15_1 * NVIDIA T4",
"job_type": "container",
"image_address": "registry.dp.tech/dptech/deepmd-kit:2.1.5-cuda11.6"
}

步骤三,使用 Lebesgue Utility 提交容器任务

准备好 job.json 后,您就可以使用 Lebesgue Utility 来提交 DeePMD-kit 任务了:

lbg job submit -i job.json -p ./

容器镜像与虚拟机镜像映射关系表

如您当前正在使用 Bohrium 提供的虚拟机镜像提交任务,您可在下表内查询其所对应的容器镜像地址并对 job.json 内的 image_name 字段进行替换:

预装软件虚拟机镜像容器镜像地址
DeePMD-kitLBG_DeePMD-kit_2.1.4_v1及之前的各种DeePMD-kit版本registry.dp.tech/dptech/deepmd-kit:2.1.5-cuda11.6
DPGENLBG_DP-GEN_0.10.6_v3及之前的各种DP-GEN版本registry.dp.tech/dptech/dpgen:0.10.6
LAMMPSLBG_LAMMPS_stable_23Jun2022_v1registry.dp.tech/dptech/lammps:29Sep2021
GROMACSgromacs-dp:2020.2registry.dp.tech/dptech/gromacs:2022.2
Quantum-EspressoLBG_Quantum-Espresso_7.1registry.dp.tech/dptech/quantum-espresso:7.1
VASP--需获得VASP授权,请邮件发送您的VASP授权凭证到 borirum@dp.tech 邮箱
常用基础软件LBG_Common_v1
LBG_Common_v2
LBG_base_image_ubun20.04
LBG_base_image_ubun22.04
registry.dp.tech/dptech/ubuntu:20.04-py3.10-cuda11.6
intel oneapiLBG_oneapi_2021_v1registry.dp.tech/dptech/ubuntu:20.04-py3.10-intel2022-cuda11.6