コード例 #1
0
ファイル: test_jobs.py プロジェクト: Svdvoort/slurmpie
def test_gpu_setting(datafiles):
    script_file = str(datafiles)
    job = slurmpie.Job(script_file)
    assert job.gpus == ""

    job = slurmpie.Job(script_file)
    job.gpus = {'Titan': 5}
    assert job.gpus == "Titan:5"

    job = slurmpie.Job(script_file)
    job.gpus = {'Titan': 5, "k40": "3"}
    assert job.gpus == "k40:3,Titan:5"
コード例 #2
0
ファイル: test_jobs.py プロジェクト: Svdvoort/slurmpie
def test_init(datafiles):
    script_file = str(datafiles)
    job = slurmpie.Job(script_file)
    job_2 = slurmpie.Job(script_file)
    assert job._id != job_2._id

    job = slurmpie.Job(script_file, mail_address="*****@*****.**")
    assert job.mail_type == "ALL"

    job = slurmpie.Job(script_file, mail_address="*****@*****.**", mail_type="FAIL")
    assert job.mail_type == "FAIL"

    job = slurmpie.Job(script_file, memory_size="50GB")
    assert job.memory_size == "50G"
コード例 #3
0
ファイル: test_pipeline.py プロジェクト: Svdvoort/slurmpie
def test_job_adding():
    pipeline = slurmpie.Pipeline()

    job = slurmpie.Job("none")
    pipeline.add(job)
    second_job = slurmpie.Job("none")
    pipeline.add(second_job)

    assert isinstance(pipeline.pipeline_jobs, list)
    assert len(pipeline.pipeline_jobs) == 2
    assert pipeline._job_graph == {
        -1: [job],
        second_job: {
            "afterany": [job._id]
        }
    }
コード例 #4
0
ファイル: test_jobs.py プロジェクト: Svdvoort/slurmpie
def test_array_setting(datafiles):
    script_file = str(datafiles)
    job = slurmpie.Job(script_file)
    assert job.array == ""

    job = slurmpie.Job(script_file)
    job.array = [5, 9, 10]
    assert job.array == "5,9,10"

    job = slurmpie.Job(script_file)
    job.array = ["1", "5", "101"]
    assert job.array == "1,5,101"

    job = slurmpie.Job(script_file)
    job.array = "0-15%4"
    assert job.array == "0-15%4"
コード例 #5
0
ファイル: test_pipeline.py プロジェクト: Svdvoort/slurmpie
def test_start_job_adding():
    job = slurmpie.Job("none")
    pipeline = slurmpie.Pipeline()

    pipeline.add(job)

    success_job = slurmpie.Job("none")
    pipeline.add(success_job)

    second_start_job = slurmpie.Job("none")
    pipeline.add_start_job(second_start_job)

    assert pipeline._job_graph == {
        -1: [job, second_start_job],
        success_job: {
            "afterany": [job._id]
        },
    }
コード例 #6
0
ファイル: test_jobs.py プロジェクト: Svdvoort/slurmpie
def test_argument_list_formatting(datafiles):
    script_file = str(datafiles)
    job = slurmpie.Job(script_file)

    assert job._format_argument_list("", "") == ""
    assert job._format_argument_list("", "new_value") == "new_value"
    assert job._format_argument_list("old_value", "") == "old_value"
    assert job._format_argument_list("old_value", "new_value") == "old_value,new_value"
    assert job._format_argument_list("gpu:1", "cpu:3") == "gpu:1,cpu:3"
    assert job._format_argument_list("gpu:1,cpu:3", "ssd:4") == "gpu:1,cpu:3,ssd:4"
コード例 #7
0
ファイル: test_pipeline.py プロジェクト: Svdvoort/slurmpie
def test_job_adding_with_job_arguments():
    job = slurmpie.Job("none")
    pipeline = slurmpie.Pipeline(name="test_pipeline", memory_size="10GB")

    pipeline.add(job)
    pipeline.add(job)

    for job in pipeline.pipeline_jobs:
        assert job.name == "test_pipeline"
        assert job.memory_size == "10G"

    job_with_args = slurmpie.Job("none", name="final_job", memory_size="15MB")
    pipeline.add(job_with_args)

    for job in pipeline.pipeline_jobs[:-1]:
        assert job.name == "test_pipeline"
        assert job.memory_size == "10G"

    assert pipeline.pipeline_jobs[-1].name == "final_job"
    assert pipeline.pipeline_jobs[-1].memory_size == "15M"
コード例 #8
0
ファイル: test_jobs.py プロジェクト: Svdvoort/slurmpie
def test_sbatch_formatting(datafiles):
    script_file = str(datafiles)
    job = slurmpie.Job(script_file)

    sbatch_command = job._format_sbatch_command()
    assert sbatch_command == ["sbatch", "--parsable", script_file]

    job.memory_size = 50

    sbatch_command = job._format_sbatch_command()
    assert sbatch_command == ["sbatch", "--parsable", "--mem=50", script_file]

    job.gres = {"gpu": {"Titan": 1, "k40": 2}}

    assert job._format_sbatch_command() == ["sbatch", "--parsable", "--gres=gpu:k40:2,gpu:Titan:1", "--mem=50", script_file]

    job = slurmpie.Job(script_file, memory_size="100GB", name="test_job")
    assert job._format_sbatch_command() == ["sbatch", "--parsable", "--mem=100G", "--job-name=test_job", script_file]

    job = slurmpie.Job(script_file, array=[1, 2, 3], cpus_per_task=5, error_file="/tmp/error.log", gpus={'Titan':8},
    gres={'cpus': {'haskell':2, 'lake': "3"}}, mail_address="*****@*****.**", mail_type="FAIL", memory_size="10KB",
    name="test_job", nodes=4, output_file="/tmp/output.log", partition="test_partition", tasks=7, time="01:33",
    workdir="/tmp/workdir")
    assert job._format_sbatch_command() == ["sbatch",
                                            "--parsable",
                                            "--array=1,2,3",
                                            "--cpus-per-task=5",
                                            "--error=/tmp/error.log",
                                            "--gpus=Titan:8",
                                            "--gres=cpus:haskell:2,cpus:lake:3",
                                            "[email protected]",
                                            "--mail-type=FAIL",
                                            "--mem=10K",
                                            "--job-name=test_job",
                                            "--nodes=4",
                                            "--output=/tmp/output.log",
                                            "--partition=test_partition",
                                            "--ntasks=7",
                                            "--time=01:33",
                                            "--chdir=/tmp/workdir",
                                            script_file]
コード例 #9
0
ファイル: test_jobs.py プロジェクト: Svdvoort/slurmpie
def test_gres_settting(datafiles):
    script_file = str(datafiles)
    job = slurmpie.Job(script_file)

    job.gres = {}
    assert job.gres == ""

    job = slurmpie.Job(script_file)
    job.gres = {"gpu": 1}
    assert job.gres == "gpu:1"

    job = slurmpie.Job(script_file)
    job.gres = {"gpu": 1, "ssd": 3}
    assert job.gres == "gpu:1,ssd:3"

    job = slurmpie.Job(script_file)
    job.gres = {"gpu": {"Titan": 3, "k40": 2}}
    assert job.gres == "gpu:k40:2,gpu:Titan:3"

    job = slurmpie.Job(script_file)
    job.gres = {"gpu": {"Titan": 3, "k40": 2}, "ssd": 3}
    assert job.gres == "gpu:k40:2,gpu:Titan:3,ssd:3"

    job = slurmpie.Job(script_file)
    job.gres = {"gpu": {"Titan": 3, "k40": 2}, "ssd": {"fast": 2, "slow": 1}, "cpu": 15}
    assert job.gres == "cpu:15,gpu:k40:2,gpu:Titan:3,ssd:fast:2,ssd:slow:1"
コード例 #10
0
ファイル: test_jobs.py プロジェクト: Svdvoort/slurmpie
def test_job_dependencies(datafiles):
    script_file = str(datafiles)
    job = slurmpie.Job(script_file)

    assert job.dependencies == ""

    job = slurmpie.Job(script_file)
    job.depends_on("40904")
    assert job.dependencies == "afterany:40904"

    job = slurmpie.Job(script_file)
    job.depends_on("9040294", "afterok")
    assert job.dependencies == "afterok:9040294"

    job = slurmpie.Job(script_file)
    job.depends_on(["1001", "9040294"], "afterok")
    assert job.dependencies == "afterok:1001:9040294"

    job = slurmpie.Job(script_file)
    job.depends_on(["1001", "9040294"], "afterok")
    job.depends_on("123", "afternotok")

    assert job.dependencies == "afterok:1001:9040294,afternotok:123"

    job = slurmpie.Job(script_file)
    job.depends_on(["1001", "9040294"], "afterok")
    job.depends_on("123", "afternotok")
    job.depends_on("987", "afterok")

    assert job.dependencies == "afterok:1001:9040294,afternotok:123,afterok:987"
コード例 #11
0
ファイル: test_jobs.py プロジェクト: Svdvoort/slurmpie
def test_empty_attributes(datafiles):
    script_file = str(datafiles)
    job = slurmpie.Job(script_file)

    assert job.attribute_is_empty("")
    assert job.attribute_is_empty(-1)
    assert job.attribute_is_empty(-1.0)
    assert job.attribute_is_empty({})
    assert job.attribute_is_empty([])
    assert not job.attribute_is_empty("-1")
    assert not job.attribute_is_empty([""])
    assert not job.attribute_is_empty({"a": "b"})
    assert not job.attribute_is_empty([-1])
コード例 #12
0
ファイル: test_jobs.py プロジェクト: Svdvoort/slurmpie
def test_memory_setting(datafiles):
    script_file = str(datafiles)
    job = slurmpie.Job(script_file)

    assert job.memory_size == ""
    assert job.memory_units is None

    job.memory_size = "500MB"

    assert job.memory_size == "500M"
    assert job.memory_units == "M"

    job.memory_size = 213.5

    assert job.memory_size == "214"
    assert job.memory_units is None
コード例 #13
0
ファイル: test_jobs.py プロジェクト: Svdvoort/slurmpie
def test_gres_formatting(datafiles):
    script_file = str(datafiles)
    job = slurmpie.Job(script_file)

    assert job._format_gres({}) == ""
    assert job._format_gres({"gpu": 1}) == "gpu:1"
    assert job._format_gres({"gpu": 1, "ssd": 3}) == "gpu:1,ssd:3"
    assert job._format_gres({"gpu": {"Titan": 3, "k40": 2}}) == "gpu:k40:2,gpu:Titan:3"
    assert (
        job._format_gres({"gpu": {"Titan": 3, "k40": 2}, "ssd": 3})
        == "gpu:k40:2,gpu:Titan:3,ssd:3"
    )
    assert (
        job._format_gres(
            {"gpu": {"Titan": 3, "k40": 2}, "ssd": {"fast": 2, "slow": 1}, "cpu": 15}
        )
        == "cpu:15,gpu:k40:2,gpu:Titan:3,ssd:fast:2,ssd:slow:1"
    )
コード例 #14
0
ファイル: test_jobs.py プロジェクト: Svdvoort/slurmpie
def test_memory_formatting(datafiles):
    script_file = str(datafiles)
    job = slurmpie.Job(script_file)

    memory_size, memory_units = job._format_memory_size("50M")
    assert memory_size == "50"
    assert memory_units == "M"

    memory_size, memory_units = job._format_memory_size("100.5GB")
    assert memory_size == "101"
    assert memory_units == "G"

    memory_size, memory_units = job._format_memory_size(103)
    assert memory_size == "103"
    assert memory_units is None

    memory_size, memory_units = job._format_memory_size("25000")
    assert memory_size == "25000"
    assert memory_units is None
コード例 #15
0
from slurmpie import slurmpie

pipeline = slurmpie.Pipeline()
start_job = slurmpie.Job("slurm_script.sh")
dependent_job = slurmpie.Job("slurm_script_2.sh")

pipeline.add(start_job)
# This job will wait for start_job to finish
pipeline.add(dependent_job)

pipeline.submit()
コード例 #16
0
ファイル: test_pipeline.py プロジェクト: Svdvoort/slurmpie
def test_complex_job_adding():
    job = slurmpie.Job("none")
    pipeline = slurmpie.Pipeline()

    pipeline.add(job)
    assert pipeline._job_graph == {-1: [job]}

    second_job = slurmpie.Job("none")
    pipeline.add({"afterok": [second_job]})

    assert isinstance(pipeline.pipeline_jobs, list)
    assert len(pipeline.pipeline_jobs) == 2

    assert pipeline._job_graph == {
        -1: [job],
        second_job: {
            "afterok": [job._id]
        }
    }

    fail_job = slurmpie.Job("none")
    pipeline.add({"afternotok": [fail_job]}, job)

    assert pipeline._job_graph == {
        -1: [job],
        second_job: {
            "afterok": [job._id]
        },
        fail_job: {
            "afternotok": [job._id]
        }
    }

    second_succes_job = slurmpie.Job("none")
    pipeline.add({"afterok": [second_succes_job]}, job)
    assert pipeline._job_graph == {
        -1: [job],
        second_job: {
            "afterok": [job._id]
        },
        fail_job: {
            "afternotok": [job._id]
        },
        second_succes_job: {
            "afterok": [job._id]
        }
    }

    final_job = slurmpie.Job("none")
    pipeline.add(final_job)

    assert pipeline._job_graph == {
        -1: [job],
        second_job: {
            "afterok": [job._id]
        },
        fail_job: {
            "afternotok": [job._id]
        },
        second_succes_job: {
            "afterok": [job._id]
        },
        final_job: {
            "afterany": [second_succes_job._id]
        }
    }

    pipeline.add(fail_job, second_job)

    assert pipeline._job_graph == {
        -1: [job],
        second_job: {
            "afterok": [job._id]
        },
        fail_job: {
            "afternotok": [job._id],
            "afterany": [second_job._id]
        },
        second_succes_job: {
            "afterok": [job._id]
        },
        final_job: {
            "afterany": [second_succes_job._id]
        }
    }

    pipeline.add(fail_job, second_succes_job)
    assert pipeline._job_graph == {
        -1: [job],
        second_job: {
            "afterok": [job._id]
        },
        fail_job: {
            "afternotok": [job._id],
            "afterany": [second_job._id, second_succes_job._id]
        },
        second_succes_job: {
            "afterok": [job._id]
        },
        final_job: {
            "afterany": [second_succes_job._id]
        }
    }