def test_specification_with_quotes(self): run_config = CompiledOperationSpecification.read( [ os.path.abspath("tests/fixtures/plain/polyaxonfile_with_quotes.yaml"), {"kind": "compiled_operation"}, ] ) run_config = CompiledOperationSpecification.apply_operation_contexts(run_config) expected_run = { "kind": V1RunKind.JOB, "container": { "image": "continuumio/miniconda3", "command": ["python"], "args": ["-c \"print('Tweet tweet')\""], "name": "polyaxon-main", }, } assert run_config.run.to_dict() == expected_run run_config = V1CompiledOperation.read(run_config.to_dict()) run_config = CompiledOperationSpecification.apply_operation_contexts(run_config) assert run_config.run.to_dict() == expected_run
def test_tf_passes(self): run_config = CompiledOperationSpecification.read([ os.path.abspath( "tests/fixtures/plain/distributed_tensorflow_file.yml"), { "kind": "compiled_operation" }, ]) run_config = CompiledOperationSpecification.apply_context(run_config) assert run_config.version == 1.05 assert run_config.termination is not None assert run_config.termination.ttl == 12 assert run_config.is_tf_job_run assert run_config.run.worker.replicas == 5 assert run_config.run.worker.environment.affinity is not None assert run_config.run.worker.environment.restart_policy == "OnFailure" assert run_config.run.worker.container.resources == { "requests": { "memory": "300Mi" }, "limits": { "memory": "300Mi" }, } assert run_config.run.ps.replicas == 10 assert run_config.run.ps.environment.affinity is None assert isinstance(run_config.run.ps.environment.tolerations, list) assert run_config.run.ps.environment.restart_policy == "OnFailure" assert run_config.run.ps.container.resources == { "requests": { "cpu": 3, "memory": "256Mi" }, "limits": { "cpu": 3, "memory": "256Mi" }, }
def test_mpi_passes(self): run_config = CompiledOperationSpecification.read([ os.path.abspath("tests/fixtures/plain/distributed_mpi_file.yml"), { "kind": "compiled_operation" }, ]) run_config = CompiledOperationSpecification.apply_operation_contexts( run_config) assert run_config.version == 1.1 assert run_config.is_mpi_job_run assert run_config.termination is None assert run_config.run.launcher.replicas == 1 assert run_config.run.launcher.to_dict() == { "replicas": 1, "container": { "name": "polyaxon-main", "image": "mpioperator/tensorflow-benchmarks:latest", "command": ["mpirun", "python", "run.py"], }, } assert run_config.run.launcher.environment is None assert run_config.run.worker.replicas == 2 assert run_config.run.worker.environment.affinity is None assert run_config.run.worker.environment.node_selector is not None assert isinstance(run_config.run.worker.environment.tolerations, list) assert run_config.run.worker.to_dict()["container"] == { "name": "polyaxon-main", "image": "mpioperator/tensorflow-benchmarks:latest", "command": ["mpirun", "python", "run.py"], "resources": { "limits": { "nvidia.com/gpu": 1 } }, }
def test_specification_with_context_requirement(self): context_root = container_contexts.CONTEXT_ROOT contexts = { "globals": { "owner_name": "user", "project_name": "project", "project_unique_name": "user.project", "project_uuid": "uuid", "run_info": "user.project.runs.uuid", "name": "run", "uuid": "uuid", "context_path": "/plx-context", "artifacts_path": "{}/artifacts".format(context_root), "run_artifacts_path": "{}/artifacts/test".format(context_root), "run_outputs_path": "{}/artifacts/test/outputs".format(context_root), "namespace": "test", "iteration": 12, "ports": [1212, 1234], "base_url": "/services/v1/test/user/project/runs/uuid", "created_at": None, "compiled_at": None, "cloning_kind": None, "original_uuid": None, }, "init": {}, "connections": {"foo": {"key": "connection-value"}}, } run_config = CompiledOperationSpecification.read( [ os.path.abspath( "tests/fixtures/plain/polyaxonfile_with_contexts_requirements.yaml" ), {"kind": "compiled_operation"}, ] ) run_config = CompiledOperationSpecification.apply_operation_contexts(run_config) expected_run = { "kind": V1RunKind.JOB, "init": [ { "artifacts": {"files": ["{{globals.run_outputs_path}}/foo"]}, "connection": "{{connections['foo']['key']}}", } ], "container": { "image": "continuumio/miniconda3", "command": ["python"], "workingDir": "{{ globals.artifacts_path }}/repo", "args": ["-c \"print('Tweet tweet')\""], "name": "polyaxon-main", }, } assert run_config.run.to_dict() == expected_run run_config = V1CompiledOperation.read(run_config.to_dict()) run_config = CompiledOperationSpecification.apply_operation_contexts(run_config) assert run_config.run.to_dict() == expected_run expected_run = { "kind": V1RunKind.JOB, "init": [ { "artifacts": { "files": [ "{}/artifacts/test/outputs/foo".format( container_contexts.CONTEXT_ROOT ) ], }, "connection": "connection-value", } ], "container": { "image": "continuumio/miniconda3", "command": ["python"], "workingDir": "{}/artifacts/repo".format( container_contexts.CONTEXT_ROOT ), "args": ["-c \"print('Tweet tweet')\""], "name": "polyaxon-main", }, } run_config = CompiledOperationSpecification.apply_runtime_contexts( run_config, contexts=contexts ) assert run_config.run.to_dict() == expected_run