Merge pull request #12775 from gulsumgudukbay/dev

Adding GPU support to Galaxy
This commit is contained in:
Marius van den Beek
2022-12-20 16:24:22 +01:00
committed by GitHub
4 changed files with 75 additions and 1 deletions
+10
View File
@@ -233,6 +233,11 @@ ResourceType = Literal[
"ram_max",
"tmpdir_min",
"tmpdir_max",
"cuda_version_min",
"cuda_compute_capability",
"gpu_memory_min",
"cuda_device_count_min",
"cuda_device_count_max",
]
VALID_RESOURCE_TYPES = get_args(ResourceType)
@@ -272,6 +277,11 @@ def resource_requirements_from_list(requirements) -> List[ResourceRequirement]:
"ramMax": "ram_max",
"tmpdirMin": "tmpdir_min",
"tmpdirMax": "tmpdir_max",
"cudaVersionMin": "cuda_version_min",
"cudaComputeCapability": "cuda_compute_capability",
"gpuMemoryMin": "gpu_memory_min",
"cudaDeviceCountMin": "cuda_device_count_min",
"cudaDeviceCountMax": "cuda_device_count_max",
}
rr = []
for r in requirements:
+25
View File
@@ -6793,6 +6793,31 @@ and ``bibtex`` are the only supported options.</xs:documentation>
<xs:documentation xml:lang="en">Maximum reserved filesystem based storage for the designated temporary directory, in mebibytes (2**20 bytes), if runtime allows it (not yet implemented in Galaxy).</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="cuda_version_min">
<xs:annotation>
<xs:documentation xml:lang="en">Minimum CUDA (runtime link library) runtime version, if runtime allows it (not yet implemented in Galaxy).</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="cuda_compute_capability">
<xs:annotation>
<xs:documentation xml:lang="en">Minimum NVIDIA (hardware+driver) Compute capabilities (major, minor (can be a range or a list), if runtime allows it (not yet implemented in Galaxy).</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="gpu_memory_min">
<xs:annotation>
<xs:documentation xml:lang="en">Minimum Memory of the GPU in mebibytes, if runtime allows it (not yet implemented in Galaxy).</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="cuda_device_count_min">
<xs:annotation>
<xs:documentation xml:lang="en">Minimum CUDA device count, if runtime allows it (not yet implemented in Galaxy).</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="cuda_device_count_max">
<xs:annotation>
<xs:documentation xml:lang="en">Maximum CUDA device count, if runtime allows it (not yet implemented in Galaxy).</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ContainerType">
@@ -6,6 +6,11 @@
<resource type="ram_max">2></resource>
<resource type="tmpdir_min"><![CDATA[$(inputs.input1.size)]]></resource>
<resource type="tmpdir_max"><![CDATA[$(inputs.input1.size * 2)]]></resource>
<resource type="cuda_version_min">10.2</resource>
<resource type="cuda_compute_capability">6.1</resource>
<resource type="gpu_memory_min">4042</resource>
<resource type="cuda_device_count_min">1</resource>
<resource type="cuda_device_count_max">2</resource>
</requirements>
<command><![CDATA[
echo "\$GALAXY_SLOTS" > $output
+35 -1
View File
@@ -31,6 +31,11 @@ TOOL_XML_1 = """
<container type="docker">mycool/bwa</container>
<requirement type="package" version="1.0">bwa</requirement>
<resource type="cores_min">1</resource>
<resource type="cuda_version_min">10.2</resource>
<resource type="cuda_compute_capability">6.1</resource>
<resource type="gpu_memory_min">4042</resource>
<resource type="cuda_device_count_min">1</resource>
<resource type="cuda_device_count_max">2</resource>
</requirements>
<outputs>
<data name="out1" format="bam" from_work_dir="out1.bam" />
@@ -125,6 +130,16 @@ requirements:
version: 1.0.1
- type: resource
cores_min: 1
- type: resource
cuda_version_min: 10.2
- type: resource
cuda_compute_capability: 6.1
- type: resource
gpu_memory_min: 4042
- type: resource
cuda_device_count_min: 1
- type: resource
cuda_device_count_max: 2
containers:
- type: docker
identifier: "awesome/bowtie"
@@ -311,6 +326,11 @@ class TestXmlLoader(BaseLoaderTestCase):
assert requirements[0].type == "package"
assert list(containers)[0].identifier == "mycool/bwa"
assert resource_requirements[0].resource_type == "cores_min"
assert resource_requirements[1].resource_type == "cuda_version_min"
assert resource_requirements[2].resource_type == "cuda_compute_capability"
assert resource_requirements[3].resource_type == "gpu_memory_min"
assert resource_requirements[4].resource_type == "cuda_device_count_min"
assert resource_requirements[5].resource_type == "cuda_device_count_max"
assert not resource_requirements[0].runtime_required
def test_outputs(self):
@@ -486,8 +506,22 @@ class TestYamlLoader(BaseLoaderTestCase):
"resolve_dependencies": False,
"shell": "/bin/sh",
}
assert len(resource_requirements) == 1
assert len(resource_requirements) == 6
assert resource_requirements[0].to_dict() == {"resource_type": "cores_min", "value_or_expression": 1}
assert resource_requirements[1].to_dict() == {"resource_type": "cuda_version_min", "value_or_expression": 10.2}
assert resource_requirements[2].to_dict() == {
"resource_type": "cuda_compute_capability",
"value_or_expression": 6.1,
}
assert resource_requirements[3].to_dict() == {"resource_type": "gpu_memory_min", "value_or_expression": 4042}
assert resource_requirements[4].to_dict() == {
"resource_type": "cuda_device_count_min",
"value_or_expression": 1,
}
assert resource_requirements[5].to_dict() == {
"resource_type": "cuda_device_count_max",
"value_or_expression": 2,
}
def test_outputs(self):
outputs, output_collections = self._tool_source.parse_outputs(object())