用dpdispatcher提交自定义任务到Bohrium
简介
DP-Dispatcher可以声明高性能计算作业、计算环境和计算资源,并自动完成作业生成、提交、轮询和回收的全流程。
dpdispatcher提供了以下抽象:
- Task类:定义了一条计算命令,和所依赖文件。
- Resources类,定义了计算时所需要的计算资源。
- 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\>
或直接点击网页任务栏的下载选项