跳到主要内容

用dpdispatcher提交自定义任务到Bohrium

简介

DP-Dispatcher可以声明高性能计算作业、计算环境和计算资源,并自动完成作业生成、提交、轮询和回收的全流程。

项目文档

中文简介

dpdispatcher提供了以下抽象:

  1. Task类:定义了一条计算命令,和所依赖文件。
  2. Resources类,定义了计算时所需要的计算资源。
  3. Machine类,定义了计算所用到的批处理系统,远端机器ip,工作路径等内容。目前支持Slurm, PBS, LSF, DpCloudserver等系统。

准备输入文件

mkdir -p dp_dispatcher/test && cd dp_dispatcher

echo "hello world" > example.txt

for i in {1..4}
do
mkdir test/dir${i}
cp example.txt test/dir${i}/
done

在dp_dpdispather文件夹下,分别建立run.py,machine.json,resource.json文件,示例如下:

run.py

  • task_work_path:定义工作目录
  • forward_files:定义上传的文件,这里会上传dir1-4/下的example.txt
  • backward_files:定义下载的文件out.txt
from dpdispatcher import Machine, Resources, Task, Submission

machine = Machine.load_from_json('machine.json')
resources = Resources.load_from_json('resource.json')


task1 = Task(command='cat example.txt', task_work_path='dir1/', forward_files=['example.txt'], backward_files=['out.txt'], outlog='out.txt')
task2 = Task(command='cat example.txt', task_work_path='dir2/', forward_files=['example.txt'], backward_files=['out.txt'], outlog='out.txt')
task3 = Task(command='cat example.txt', task_work_path='dir3/', forward_files=['example.txt'], backward_files=['out.txt'], outlog='out.txt')
task4 = Task(command='cat example.txt', task_work_path='dir4/', forward_files=['example.txt'], backward_files=['out.txt'], outlog='out.txt')

task_list = [task1, task2, task3, task4]

submission = Submission(work_base='test/',
machine=machine,
resources=resources,
task_list=task_list,
forward_common_files=[],
backward_common_files=[]
)

submission.run_submission()

machine.json

{
"batch_type": "Lebesgue",
"context_type": "LebesgueContext",
"local_root" : "./",
"remote_profile":{
"email": "Bohrium注册邮箱",
"password": "密码",
"project_id": 0000,
"input_data":{
"job_type": "indicate",
"log_file": "log",
"job_name": "dpdispather_test",
"disk_size": 100,
"scass_type":"c16_m32_cpu",
"platform": "ali",
"image_name":"运行任务所用的镜像名称,可在“镜像中心”页查看",
"on_demand":0
}
}
}

注1"project_id": 后的 0000 需要替换为您自己的项目ID,可在“项目管理”页查看。

注2:在某些支持ticket的场景下,按照下面的方式增加环境变量

import os
os.environ["BOHR_TICKET"] = ""
os.environ.get("BOHR_TICKET", None)

resource.json

{
"number_node": 1,
"cpu_per_node": 32,
"gpu_per_node": 0,
"queue_name": "LBG_CPU",
"group_size": 4
}

提交任务

python3 run.py

结果查看

可以在Bohrium的任务栏中找到相应任务。

下载结果

bohr job download -j <Job ID\> 或直接点击网页任务栏的下载选项

下载结果