gpustack-runtime 0.2.2__tar.gz → 0.2.2.post1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/PKG-INFO +1 -1
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/_version.py +2 -2
- gpustack_runtime-0.2.2.post1/gpustack_runtime/_version_appendix.py +1 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/__types__.py +9 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/kuberentes.py +25 -35
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/deployer/test_workload_status.py +38 -0
- gpustack_runtime-0.2.2/gpustack_runtime/_version_appendix.py +0 -1
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/.codespelldict +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/.codespellrc +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/.dockerignore +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/.gitattributes +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/.gitignore +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/.pre-commit-config.yaml +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/.python-version +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/LICENSE +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/Makefile +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/README.md +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/deploy/manifests/docker-compose.yaml +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/deploy/manifests/kubernetes.yaml +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/docs/index.md +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/docs/modules/gpustack_runtime.deployer.md +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/docs/modules/gpustack_runtime.detector.md +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/docs/modules/gpustack_runtime.md +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/__main__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/_version.pyi +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/cmds/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/cmds/__types__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/cmds/deployer.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/cmds/detector.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/cmds/images.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/__patches__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/__utils__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/__types__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/__utils__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/amd.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/ascend.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/hygon.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/iluvatar.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/metax.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/thead.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/docker.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/k8s/devicemanager/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/podman.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/__types__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/__utils__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/amd.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/ascend.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/cambricon.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/hygon.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/iluvatar.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/metax.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/mthreads.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/nvidia.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pyamdgpu/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pyamdsmi/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pydcmi/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pyhgml/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pyhgml/libhgml.so +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pyhgml/libuki.so +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pyhsa/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pyixml/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pymtml/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pymxsml/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pynvml/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pyrocmsmi/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/thead.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/envs.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/logging.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/hatch.toml +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/mkdocs.yml +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/pack/Dockerfile +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/pack/Dockerfile.dummy +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/pyproject.toml +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/pytest.ini +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/ruff.toml +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/deployer/fixtures/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/deployer/fixtures/test_compare_versions.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/deployer/fixtures/test_correct_runner_image.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/deployer/fixtures/test_load_yaml_or_json.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/deployer/fixtures/test_load_yaml_or_json_multiple_jsons.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/deployer/fixtures/test_load_yaml_or_json_multiple_yamls.yaml +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/deployer/fixtures/test_load_yaml_or_json_single_json.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/deployer/fixtures/test_load_yaml_or_json_single_yaml.yaml +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/deployer/fixtures/test_nginx_entrypoint.sh +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/deployer/test_utils.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/fixtures/__init__.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/README.md +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_amd_mi300x.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_amd_mi308x.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_amd_rx7800xt.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_ascend_310p3.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_ascend_910b2.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_hygon_k100ai.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_metax_c500.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_nvidia_gb10.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_nvidia_h100.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_nvidia_h100_mig.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_nvidia_h200.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_nvidia_rtx4080super.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_nvidia_rtx4090d.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_nvidia_rtx5090d.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/detect_output_thead_ppu.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_amd_mi300x.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_amd_mi308x.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_amd_rx7800xt.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_ascend_310p3.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_ascend_910b2.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_hygon_k100ai.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_metax_c500.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_mthreads_s5000.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_nvidia_h100.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_nvidia_h100_mig.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_nvidia_h200.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_nvidia_rtx4080super.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_nvidia_rtx4090d.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_nvidia_rtx5090d.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/samples/topology_output_thead_ppu.json +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/test_amd.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/test_ascend.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/test_cambricon.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/test_detector_utils.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/test_hygon.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/test_iluvatar.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/test_metax.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/test_mthreads.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/test_nvidia.py +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/uv.lock +0 -0
- {gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/uv.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gpustack-runtime
|
|
3
|
-
Version: 0.2.2
|
|
3
|
+
Version: 0.2.2.post1
|
|
4
4
|
Summary: GPUStack Runtime is library for detecting GPU resources and launching GPU workloads.
|
|
5
5
|
Project-URL: Homepage, https://github.com/gpustack/runtime
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/gpustack/gpustack/issues
|
|
@@ -27,8 +27,8 @@ version_tuple: VERSION_TUPLE
|
|
|
27
27
|
__commit_id__: COMMIT_ID
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
|
|
30
|
-
__version__ = version = '0.2.2'
|
|
31
|
-
__version_tuple__ = version_tuple = (0, 2, 2)
|
|
30
|
+
__version__ = version = '0.2.2.post1'
|
|
31
|
+
__version_tuple__ = version_tuple = (0, 2, 2, 'post1')
|
|
32
32
|
try:
|
|
33
33
|
from ._version_appendix import git_commit
|
|
34
34
|
__commit_id__ = commit_id = git_commit
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
git_commit = "4d942f0"
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/__types__.py
RENAMED
|
@@ -843,6 +843,8 @@ class WorkloadPlan(WorkloadSecurity):
|
|
|
843
843
|
Name for the workload, it should be unique in the deployer.
|
|
844
844
|
labels (dict[str, str] | None):
|
|
845
845
|
Labels for the workload.
|
|
846
|
+
instance_type (str | None):
|
|
847
|
+
Name of the operator InstanceType the workload deploys onto.
|
|
846
848
|
host_network (bool):
|
|
847
849
|
Indicates if the containers of the workload use the host network.
|
|
848
850
|
host_ipc (bool):
|
|
@@ -878,6 +880,13 @@ class WorkloadPlan(WorkloadSecurity):
|
|
|
878
880
|
"""
|
|
879
881
|
Labels for the workload.
|
|
880
882
|
"""
|
|
883
|
+
instance_type: str | None = None
|
|
884
|
+
"""
|
|
885
|
+
Name of the operator InstanceType the workload deploys onto.
|
|
886
|
+
When set (and Kueue admission is not disabled), the Kubernetes deployer
|
|
887
|
+
stamps the queue-name label of the InstanceType's entrance LocalQueue
|
|
888
|
+
onto the Pod so it is admitted by Kueue.
|
|
889
|
+
"""
|
|
881
890
|
host_network: bool = False
|
|
882
891
|
"""
|
|
883
892
|
Indicates if the containers of the workload use the host network.
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/kuberentes.py
RENAMED
|
@@ -278,6 +278,30 @@ Name of the Kubernetes deployer.
|
|
|
278
278
|
"""
|
|
279
279
|
|
|
280
280
|
|
|
281
|
+
def _apply_instance_type_admission(
|
|
282
|
+
pod: kubernetes.client.V1Pod,
|
|
283
|
+
instance_type: str | None,
|
|
284
|
+
) -> None:
|
|
285
|
+
"""
|
|
286
|
+
Stamp the Kueue queue-name label of the InstanceType's entrance
|
|
287
|
+
LocalQueue onto the Pod, so the workload is admitted through the
|
|
288
|
+
operator's queue for that InstanceType. The LocalQueue name is the
|
|
289
|
+
FNV-1a 64 hash of the InstanceType name, mirroring the operator's
|
|
290
|
+
FormatLocalQueueName ("gpustack-fnv64-<fnv64a-hex>").
|
|
291
|
+
|
|
292
|
+
Skipped when no InstanceType is set, or when Kueue admission is
|
|
293
|
+
disabled via GPUSTACK_RUNTIME_KUBERNETES_KDP_NO_KUEUE_ADMISSION —
|
|
294
|
+
then the Pod is scheduled by the plain Kubernetes scheduler.
|
|
295
|
+
"""
|
|
296
|
+
if not instance_type:
|
|
297
|
+
return
|
|
298
|
+
if envs.GPUSTACK_RUNTIME_KUBERNETES_KDP_NO_KUEUE_ADMISSION:
|
|
299
|
+
return
|
|
300
|
+
pod.metadata.labels["kueue.x-k8s.io/queue-name"] = (
|
|
301
|
+
f"gpustack-fnv64-{fnv1a_64_hex(instance_type)}"
|
|
302
|
+
)
|
|
303
|
+
|
|
304
|
+
|
|
281
305
|
def _pin_pod_for_kueue(
|
|
282
306
|
pod: kubernetes.client.V1Pod,
|
|
283
307
|
node_name: str | None,
|
|
@@ -1091,11 +1115,6 @@ class KubernetesDeployer(EndoscopicDeployer):
|
|
|
1091
1115
|
if kdp:
|
|
1092
1116
|
# Request quantity of devices as resources for KDP to schedule on the correct nodes.
|
|
1093
1117
|
resources.update(r_vs)
|
|
1094
|
-
# Request quantity of devices with Kueue admission.
|
|
1095
|
-
if not envs.GPUSTACK_RUNTIME_KUBERNETES_KDP_NO_KUEUE_ADMISSION:
|
|
1096
|
-
pod.metadata.labels["kueue.x-k8s.io/queue-name"] = (
|
|
1097
|
-
self._find_kueue_queue_name(ren)
|
|
1098
|
-
)
|
|
1099
1118
|
continue
|
|
1100
1119
|
# Request device via visible devices env.
|
|
1101
1120
|
container.env.append(
|
|
@@ -1119,11 +1138,6 @@ class KubernetesDeployer(EndoscopicDeployer):
|
|
|
1119
1138
|
] = ",".join(resource_values)
|
|
1120
1139
|
# Request quantity of devices as resources for KDP to schedule on the correct nodes.
|
|
1121
1140
|
resources.update(r_vs)
|
|
1122
|
-
# Request quantity of devices with Kueue admission.
|
|
1123
|
-
if not envs.GPUSTACK_RUNTIME_KUBERNETES_KDP_NO_KUEUE_ADMISSION:
|
|
1124
|
-
pod.metadata.labels["kueue.x-k8s.io/queue-name"] = (
|
|
1125
|
-
self._find_kueue_queue_name(ren)
|
|
1126
|
-
)
|
|
1127
1141
|
continue
|
|
1128
1142
|
|
|
1129
1143
|
# Request all devices if privileged,
|
|
@@ -1225,6 +1239,7 @@ class KubernetesDeployer(EndoscopicDeployer):
|
|
|
1225
1239
|
|
|
1226
1240
|
core_api = kubernetes.client.CoreV1Api(self._client)
|
|
1227
1241
|
try:
|
|
1242
|
+
_apply_instance_type_admission(pod, workload.instance_type)
|
|
1228
1243
|
_pin_pod_for_kueue(pod, self._node_name)
|
|
1229
1244
|
|
|
1230
1245
|
pod = self._mutate_create_pod(pod)
|
|
@@ -1583,31 +1598,6 @@ class KubernetesDeployer(EndoscopicDeployer):
|
|
|
1583
1598
|
namespace=self_pod_namespace,
|
|
1584
1599
|
)
|
|
1585
1600
|
|
|
1586
|
-
def _find_kueue_queue_name(self, runtime_env: str) -> str:
|
|
1587
|
-
manu = self.get_manufacturer(runtime_env)
|
|
1588
|
-
core_api = kubernetes.client.CoreV1Api(self._client)
|
|
1589
|
-
try:
|
|
1590
|
-
# Iterate the labels of node to find the key as below:
|
|
1591
|
-
# "feature.gpustack.ai/${manu}-${device-group-id}.profile-queue: <profile>",
|
|
1592
|
-
# then combine the manufacturer, device group id and profile to get the queue name for Kueue admission.
|
|
1593
|
-
#
|
|
1594
|
-
# For example, for `feature.gpustack.ai/nvidia-tesla-t4.profile-queue: 12c-46g-1d`,
|
|
1595
|
-
# the node key is `nvidia-tesla-t4`,
|
|
1596
|
-
# the queue name is `gpustack-nvidia-tesla-t4-12c-46g-1d`.
|
|
1597
|
-
node = core_api.read_node(name=self._node_name)
|
|
1598
|
-
prefix = "feature.gpustack.ai/"
|
|
1599
|
-
suffix = ".profile-queue"
|
|
1600
|
-
for k, v in node.metadata.labels.items():
|
|
1601
|
-
if k.startswith(f"{prefix}{manu}-") and k.endswith(suffix):
|
|
1602
|
-
node_key = k[len(prefix) : -len(suffix)]
|
|
1603
|
-
return f"gpustack-{node_key}-{v}"
|
|
1604
|
-
except kubernetes.client.exceptions.ApiException as e:
|
|
1605
|
-
msg = f"Failed to get Kueue queue name on node {self._node_name} for runtime environment {runtime_env}{_detail_api_call_error(e)}"
|
|
1606
|
-
raise OperationError(msg) from e
|
|
1607
|
-
|
|
1608
|
-
msg = f"Failed to find Kueue queue name on node {self._node_name} for runtime environment {runtime_env}"
|
|
1609
|
-
raise OperationError(msg)
|
|
1610
|
-
|
|
1611
1601
|
@_supported
|
|
1612
1602
|
def _create(self, workload: WorkloadPlan):
|
|
1613
1603
|
"""
|
|
@@ -2,6 +2,7 @@ from datetime import datetime, timezone
|
|
|
2
2
|
|
|
3
3
|
import kubernetes.client
|
|
4
4
|
|
|
5
|
+
from gpustack_runtime import envs
|
|
5
6
|
from gpustack_runtime.deployer.__types__ import WorkloadStatus
|
|
6
7
|
from gpustack_runtime.deployer.kuberentes import (
|
|
7
8
|
KubernetesWorkloadStatus,
|
|
@@ -115,3 +116,40 @@ def test_kubernetes_workload_status_state_message():
|
|
|
115
116
|
def test_kubernetes_workload_status_state_message_default():
|
|
116
117
|
status = KubernetesWorkloadStatus(name="test", k_pod=_pod())
|
|
117
118
|
assert status.state_message == ""
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
from gpustack_runtime.deployer.kuberentes import ( # noqa: E402
|
|
122
|
+
_apply_instance_type_admission,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def test_apply_instance_type_admission_stamps_entrance_queue():
|
|
127
|
+
pod = _pinning_pod()
|
|
128
|
+
_apply_instance_type_admission(
|
|
129
|
+
pod,
|
|
130
|
+
"gpustack--nvidia-geforce-rtx-4090-linux-amd64",
|
|
131
|
+
)
|
|
132
|
+
# Vector observed on a live operator cluster.
|
|
133
|
+
assert (
|
|
134
|
+
pod.metadata.labels["kueue.x-k8s.io/queue-name"]
|
|
135
|
+
== "gpustack-fnv64-1a7145d0a5248d55"
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def test_apply_instance_type_admission_skipped_without_instance_type():
|
|
140
|
+
pod = _pinning_pod()
|
|
141
|
+
_apply_instance_type_admission(pod, None)
|
|
142
|
+
assert "kueue.x-k8s.io/queue-name" not in pod.metadata.labels
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def test_apply_instance_type_admission_disabled_by_env(monkeypatch):
|
|
146
|
+
monkeypatch.setenv("GPUSTACK_RUNTIME_KUBERNETES_KDP_NO_KUEUE_ADMISSION", "true")
|
|
147
|
+
|
|
148
|
+
monkeypatch.setattr(
|
|
149
|
+
envs,
|
|
150
|
+
"GPUSTACK_RUNTIME_KUBERNETES_KDP_NO_KUEUE_ADMISSION",
|
|
151
|
+
True,
|
|
152
|
+
)
|
|
153
|
+
pod = _pinning_pod()
|
|
154
|
+
_apply_instance_type_admission(pod, "some-type")
|
|
155
|
+
assert "kueue.x-k8s.io/queue-name" not in pod.metadata.labels
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
git_commit = "3ea35d7"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/deploy/manifests/docker-compose.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/docs/modules/gpustack_runtime.deployer.md
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/docs/modules/gpustack_runtime.detector.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/__init__.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/__patches__.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/__utils__.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/__init__.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/__types__.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/__utils__.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/amd.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/ascend.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/hygon.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/iluvatar.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/metax.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/deployer/cdi/thead.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/__init__.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/__types__.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/__utils__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/cambricon.py
RENAMED
|
File without changes
|
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/iluvatar.py
RENAMED
|
File without changes
|
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/mthreads.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pydcmi/__init__.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pyhgml/__init__.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pyhgml/libhgml.so
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pyhgml/libuki.so
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pyhsa/__init__.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pyixml/__init__.py
RENAMED
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pymtml/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/gpustack_runtime/detector/pynvml/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gpustack_runtime-0.2.2 → gpustack_runtime-0.2.2.post1}/tests/gpustack_runtime/detector/test_amd.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|