gpustack-runtime 0.1.41__tar.gz → 0.1.41.post2__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.
Files changed (142) hide show
  1. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/PKG-INFO +3 -3
  2. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/buf.gen.yaml +1 -1
  3. gpustack_runtime-0.1.41.post2/buf.yaml +5 -0
  4. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/_version.py +2 -2
  5. gpustack_runtime-0.1.41.post2/gpustack_runtime/_version_appendix.py +1 -0
  6. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/cdi/__init__.py +1 -0
  7. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/cdi/__utils__.py +2 -0
  8. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/k8s/deviceplugin/__init__.py +88 -2
  9. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/k8s/deviceplugin/__types__.py +1 -1
  10. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/k8s/deviceplugin/plugin.py +12 -16
  11. gpustack_runtime-0.1.41.post2/gpustack_runtime/deployer/k8s/types/kubelet/deviceplugin/v1beta1/api_pb2.py +1129 -0
  12. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/kuberentes.py +20 -7
  13. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/envs.py +11 -9
  14. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/pyproject.toml +3 -2
  15. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/uv.lock +12 -13
  16. gpustack_runtime-0.1.41/buf.yaml +0 -3
  17. gpustack_runtime-0.1.41/gpustack_runtime/_version_appendix.py +0 -1
  18. gpustack_runtime-0.1.41/gpustack_runtime/deployer/k8s/types/kubelet/deviceplugin/v1beta1/api_pb2.py +0 -86
  19. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/.codespelldict +0 -0
  20. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/.codespellrc +0 -0
  21. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/.dockerignore +0 -0
  22. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/.gitattributes +0 -0
  23. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/.gitignore +0 -0
  24. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/.pre-commit-config.yaml +0 -0
  25. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/.python-version +0 -0
  26. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/LICENSE +0 -0
  27. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/Makefile +0 -0
  28. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/README.md +0 -0
  29. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/buf.lock +0 -0
  30. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/deploy/manifests/docker-compose.yaml +0 -0
  31. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/deploy/manifests/kubernetes.yaml +0 -0
  32. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/docs/index.md +0 -0
  33. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/docs/modules/gpustack_runtime.deployer.md +0 -0
  34. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/docs/modules/gpustack_runtime.detector.md +0 -0
  35. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/docs/modules/gpustack_runtime.md +0 -0
  36. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/__init__.py +0 -0
  37. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/__main__.py +0 -0
  38. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/_version.pyi +0 -0
  39. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/cmds/__init__.py +0 -0
  40. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/cmds/__types__.py +0 -0
  41. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/cmds/deployer.py +0 -0
  42. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/cmds/detector.py +0 -0
  43. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/cmds/images.py +0 -0
  44. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/__init__.py +0 -0
  45. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/__patches__.py +0 -0
  46. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/__types__.py +0 -0
  47. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/__utils__.py +0 -0
  48. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/cdi/__types__.py +0 -0
  49. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/cdi/amd.py +0 -0
  50. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/cdi/ascend.py +0 -0
  51. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/cdi/hygon.py +0 -0
  52. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/cdi/iluvatar.py +0 -0
  53. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/cdi/metax.py +0 -0
  54. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/cdi/thead.py +0 -0
  55. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/docker.py +0 -0
  56. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/k8s/types/kubelet/deviceplugin/v1beta1/__init__.py +0 -0
  57. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/k8s/types/kubelet/deviceplugin/v1beta1/api.proto +0 -0
  58. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/k8s/types/kubelet/deviceplugin/v1beta1/api_pb2.pyi +0 -0
  59. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/k8s/types/kubelet/deviceplugin/v1beta1/api_pb2_grpc.py +0 -0
  60. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/k8s/types/kubelet/deviceplugin/v1beta1/constants.py +0 -0
  61. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/deployer/podman.py +0 -0
  62. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/__init__.py +0 -0
  63. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/__types__.py +0 -0
  64. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/__utils__.py +0 -0
  65. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/amd.py +0 -0
  66. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/ascend.py +0 -0
  67. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/cambricon.py +0 -0
  68. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/hygon.py +0 -0
  69. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/iluvatar.py +0 -0
  70. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/metax.py +0 -0
  71. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/mthreads.py +0 -0
  72. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/nvidia.py +0 -0
  73. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/pyacl/__init__.py +0 -0
  74. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/pyamdgpu/__init__.py +0 -0
  75. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/pyamdsmi/__init__.py +0 -0
  76. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/pycuda/__init__.py +0 -0
  77. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/pydcmi/__init__.py +0 -0
  78. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/pyhgml/__init__.py +0 -0
  79. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/pyhgml/libhgml.so +0 -0
  80. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/pyhgml/libuki.so +0 -0
  81. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/pyhsa/__init__.py +0 -0
  82. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/pyixml/__init__.py +0 -0
  83. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/pymxsml/__init__.py +0 -0
  84. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/pyrocmcore/__init__.py +0 -0
  85. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/pyrocmsmi/__init__.py +0 -0
  86. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/detector/thead.py +0 -0
  87. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/gpustack_runtime/logging.py +0 -0
  88. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/hatch.toml +0 -0
  89. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/mkdocs.yml +0 -0
  90. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/pack/Dockerfile +0 -0
  91. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/pack/Dockerfile.dummy +0 -0
  92. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/pytest.ini +0 -0
  93. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/ruff.toml +0 -0
  94. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/deployer/fixtures/__init__.py +0 -0
  95. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/deployer/fixtures/test_compare_versions.json +0 -0
  96. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/deployer/fixtures/test_correct_runner_image.json +0 -0
  97. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/deployer/fixtures/test_load_yaml_or_json.json +0 -0
  98. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/deployer/fixtures/test_load_yaml_or_json_multiple_jsons.json +0 -0
  99. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/deployer/fixtures/test_load_yaml_or_json_multiple_yamls.yaml +0 -0
  100. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/deployer/fixtures/test_load_yaml_or_json_single_json.json +0 -0
  101. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/deployer/fixtures/test_load_yaml_or_json_single_yaml.yaml +0 -0
  102. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/deployer/fixtures/test_nginx_entrypoint.sh +0 -0
  103. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/deployer/test_utils.py +0 -0
  104. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/fixtures/__init__.py +0 -0
  105. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/README.md +0 -0
  106. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/detect_output_amd_mi300x.json +0 -0
  107. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/detect_output_amd_mi308x.json +0 -0
  108. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/detect_output_amd_rx7800xt.json +0 -0
  109. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/detect_output_ascend_310p3.json +0 -0
  110. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/detect_output_ascend_910b2.json +0 -0
  111. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/detect_output_hygon_k100ai.json +0 -0
  112. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/detect_output_metax_c500.json +0 -0
  113. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/detect_output_nvidia_gb10.json +0 -0
  114. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/detect_output_nvidia_h100.json +0 -0
  115. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/detect_output_nvidia_h200.json +0 -0
  116. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/detect_output_nvidia_rtx4080super.json +0 -0
  117. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/detect_output_nvidia_rtx4090d.json +0 -0
  118. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/detect_output_nvidia_rtx5090d.json +0 -0
  119. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/detect_output_thead_ppu.json +0 -0
  120. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/topology_output_amd_mi300x.json +0 -0
  121. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/topology_output_amd_mi308x.json +0 -0
  122. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/topology_output_amd_rx7800xt.json +0 -0
  123. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/topology_output_ascend_310p3.json +0 -0
  124. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/topology_output_ascend_910b2.json +0 -0
  125. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/topology_output_hygon_k100ai.json +0 -0
  126. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/topology_output_metax_c500.json +0 -0
  127. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/topology_output_mthreads_s5000.json +0 -0
  128. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/topology_output_nvidia_h100.json +0 -0
  129. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/topology_output_nvidia_h200.json +0 -0
  130. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/topology_output_nvidia_rtx4080super.json +0 -0
  131. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/topology_output_nvidia_rtx4090d.json +0 -0
  132. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/topology_output_nvidia_rtx5090d.json +0 -0
  133. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/samples/topology_output_thead_ppu.json +0 -0
  134. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/test_amd.py +0 -0
  135. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/test_ascend.py +0 -0
  136. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/test_cambricon.py +0 -0
  137. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/test_hygon.py +0 -0
  138. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/test_iluvatar.py +0 -0
  139. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/test_metax.py +0 -0
  140. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/test_mthreads.py +0 -0
  141. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/tests/gpustack_runtime/detector/test_nvidia.py +0 -0
  142. {gpustack_runtime-0.1.41 → gpustack_runtime-0.1.41.post2}/uv.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gpustack-runtime
3
- Version: 0.1.41
3
+ Version: 0.1.41.post2
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
@@ -23,10 +23,10 @@ Requires-Dist: kubernetes>=33.1.0
23
23
  Requires-Dist: mthreads-ml-py>=2.2.10
24
24
  Requires-Dist: nvidia-ml-py>=13.580.65
25
25
  Requires-Dist: podman==5.6.0
26
- Requires-Dist: protobuf>=5.28.3
26
+ Requires-Dist: protobuf<=3.19.6
27
27
  Requires-Dist: pyyaml
28
28
  Requires-Dist: tqdm
29
- Requires-Dist: types-protobuf>=6.32.1.20251210
29
+ Requires-Dist: types-protobuf<=5.28.3.20241203
30
30
  Description-Content-Type: text/markdown
31
31
 
32
32
  # GPUStack Runtime
@@ -1,6 +1,6 @@
1
1
  version: v2
2
2
  plugins:
3
- - remote: buf.build/protocolbuffers/python:v28.3
3
+ - remote: buf.build/protocolbuffers/python:v3.14.0
4
4
  out: .
5
5
  - remote: buf.build/protocolbuffers/pyi:v28.3
6
6
  out: .
@@ -0,0 +1,5 @@
1
+ version: v2
2
+ modules:
3
+ - path: .
4
+ includes:
5
+ - "gpustack_runtime"
@@ -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.1.41'
31
- __version_tuple__ = version_tuple = (0, 1, 41)
30
+ __version__ = version = '0.1.41.post2'
31
+ __version_tuple__ = version_tuple = (0, 1, 41, 'post2')
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 = "ed331dc"
@@ -151,6 +151,7 @@ def available_backends() -> list[str]:
151
151
 
152
152
 
153
153
  __all__ = [
154
+ "Config",
154
155
  "available_backends",
155
156
  "available_manufacturers",
156
157
  "dump_config",
@@ -68,6 +68,8 @@ def linux_device_from_path(path: Path | str | None) -> LinuxDevice | None:
68
68
  return None
69
69
 
70
70
  path_stat = path.lstat()
71
+ if not path_stat:
72
+ return None
71
73
 
72
74
  dev_mode = stat.S_IFMT(path_stat.st_mode)
73
75
  match dev_mode:
@@ -4,12 +4,16 @@ import asyncio
4
4
  import contextlib
5
5
  import logging
6
6
  import signal
7
+ import stat
7
8
  import threading
8
- from typing import TYPE_CHECKING
9
+ from functools import lru_cache
10
+ from typing import TYPE_CHECKING, Literal
9
11
 
10
12
  from .... import envs
11
13
  from ....deployer.cdi import dump_config as cdi_dump_config
12
14
  from ....detector import ManufacturerEnum, detect_devices, supported_manufacturers
15
+ from ...cdi import Config, manufacturer_to_cdi_kind
16
+ from ..types.kubelet.deviceplugin.v1beta1 import KubeletSocket
13
17
  from .__types__ import GroupedError, PluginServer
14
18
  from .plugin import SharableDevicePlugin, cdi_kind_to_kdp_resource
15
19
 
@@ -61,9 +65,19 @@ async def serve_async(
61
65
  if not devices:
62
66
  continue
63
67
 
68
+ allocation_policy = _get_device_allocation_policy(manu)
69
+ logger.info(
70
+ "Using device allocation policy '%s' for manufacturer '%s'",
71
+ allocation_policy,
72
+ manu,
73
+ )
74
+
64
75
  # Also works if the manufacturer does not have a CDI generator,
65
76
  # which means we are relying on other tools to generate CDI specs.
66
- if envs.GPUSTACK_RUNTIME_KUBERNETES_KDP_CDI_SPECS_GENERATE:
77
+ if (
78
+ allocation_policy == "cdi"
79
+ and envs.GPUSTACK_RUNTIME_KUBERNETES_KDP_CDI_SPECS_GENERATE
80
+ ):
67
81
  generated_content, generated_path = cdi_dump_config(
68
82
  manufacturer=manu,
69
83
  output=cdi_generation_output,
@@ -95,6 +109,8 @@ async def serve_async(
95
109
  SharableDevicePlugin(
96
110
  device=dev,
97
111
  id_by="index" if manu == ManufacturerEnum.ASCEND else "uuid",
112
+ allocation_policy=allocation_policy,
113
+ max_allocations=envs.GPUSTACK_RUNTIME_KUBERNETES_KDP_PER_DEVICE_MAX_ALLOCATIONS,
98
114
  ),
99
115
  )
100
116
 
@@ -104,6 +120,9 @@ async def serve_async(
104
120
  logger.info("Stop event triggered, shutting down...")
105
121
  return
106
122
 
123
+ if not kubelet_endpoint:
124
+ kubelet_endpoint = KubeletSocket
125
+
107
126
  # Create tasks to start all servers.
108
127
  serve_tasks = [
109
128
  asyncio.create_task(
@@ -233,8 +252,75 @@ def serve(
233
252
  pass
234
253
 
235
254
 
255
+ def is_kubelet_socket_accessible(
256
+ kubelet_endpoint: Path | None = None,
257
+ ) -> bool:
258
+ """
259
+ Check if the kubelet socket is accessible.
260
+
261
+ Args:
262
+ kubelet_endpoint:
263
+ The path to the kubelet endpoint.
264
+
265
+ Returns:
266
+ True if the socket is accessible, False otherwise.
267
+
268
+ """
269
+ if not kubelet_endpoint:
270
+ kubelet_endpoint = KubeletSocket
271
+
272
+ if kubelet_endpoint.exists():
273
+ path_stat = kubelet_endpoint.lstat()
274
+ if path_stat and stat.S_ISSOCK(path_stat.st_mode):
275
+ return True
276
+ return False
277
+
278
+
279
+ @lru_cache
280
+ def _get_device_allocation_policy(
281
+ manufacturer: ManufacturerEnum,
282
+ ) -> Literal["env", "cdi", "opaque"]:
283
+ """
284
+ Get the device allocation policy (in lowercase) for the device plugin.
285
+
286
+ Args:
287
+ manufacturer:
288
+ The manufacturer of the device.
289
+
290
+ Returns:
291
+ The device allocation policy.
292
+
293
+ """
294
+ policy = envs.GPUSTACK_RUNTIME_KUBERNETES_KDP_DEVICE_ALLOCATION_POLICY.lower()
295
+ if policy != "auto":
296
+ return policy
297
+
298
+ cdi_kind = manufacturer_to_cdi_kind(manufacturer)
299
+
300
+ cdi_dir = envs.GPUSTACK_RUNTIME_DEPLOY_CDI_SPECS_DIRECTORY
301
+ for suffix in ["*.yaml", "*.yml", "*.json"]:
302
+ for file in cdi_dir.glob(suffix):
303
+ with contextlib.suppress(Exception):
304
+ config = Config.from_file(file)
305
+ if config and config.kind == cdi_kind:
306
+ return "cdi"
307
+
308
+ if manufacturer in [
309
+ ManufacturerEnum.AMD,
310
+ # ManufacturerEnum.ASCEND, # Prioritize using Env policy for Ascend.
311
+ ManufacturerEnum.HYGON,
312
+ ManufacturerEnum.ILUVATAR,
313
+ ManufacturerEnum.METAX,
314
+ ManufacturerEnum.THEAD,
315
+ ]:
316
+ return "opaque"
317
+
318
+ return "env"
319
+
320
+
236
321
  __all__ = [
237
322
  "cdi_kind_to_kdp_resource",
323
+ "is_kubelet_socket_accessible",
238
324
  "serve",
239
325
  "serve_async",
240
326
  ]
@@ -107,7 +107,7 @@ class PluginServer(ABC):
107
107
  async def serve(
108
108
  self,
109
109
  stop_event: asyncio.Event,
110
- kubelet_endpoint: Path | None = None,
110
+ kubelet_endpoint: Path,
111
111
  start_timeout: int = 5,
112
112
  register_timeout: int = 5,
113
113
  ):
@@ -11,7 +11,6 @@ import grpc
11
11
  from grpc_interceptor import AsyncServerInterceptor
12
12
  from grpc_interceptor.exceptions import GrpcException
13
13
 
14
- from .... import envs
15
14
  from ....detector import Device, str_range_to_list
16
15
  from ...cdi import (
17
16
  generate_config,
@@ -31,7 +30,6 @@ from ..types.kubelet.deviceplugin.v1beta1 import (
31
30
  DeviceSpec,
32
31
  Empty,
33
32
  Healthy,
34
- KubeletSocket,
35
33
  ListAndWatchResponse,
36
34
  Mount,
37
35
  NUMANode,
@@ -110,6 +108,10 @@ class SharableDevicePlugin(PluginServer, DevicePluginServicer):
110
108
  """
111
109
  Controls how the device IDs of the Kubernetes Device Plugin are generated.
112
110
  """
111
+ _allocation_policy: Literal["env", "cdi", "opaque"]
112
+ """
113
+ Controls the device allocation policy.
114
+ """
113
115
  _max_allocations: int
114
116
  """
115
117
  Controls the maximum shards per underlying device.
@@ -131,7 +133,8 @@ class SharableDevicePlugin(PluginServer, DevicePluginServicer):
131
133
  self,
132
134
  device: Device,
133
135
  id_by: Literal["uuid", "index"] = "uuid",
134
- max_allocations: int | None = None,
136
+ allocation_policy: Literal["env", "cdi", "opaque"] = "cdi",
137
+ max_allocations: int | None = 10,
135
138
  ):
136
139
  """
137
140
  Initializes the SharableDevicePlugin.
@@ -142,19 +145,16 @@ class SharableDevicePlugin(PluginServer, DevicePluginServicer):
142
145
  id_by:
143
146
  Controls how the device IDs of the Kubernetes Device Plugin are generated.
144
147
  Either "uuid" or "index". Default is "uuid".
148
+ allocation_policy:
149
+ Controls the device allocation policy.
145
150
  max_allocations:
146
151
  Controls the maximum allocations per underlying device.
147
- If None, uses the environment variable `GPUSTACK_RUNTIME_KUBERNETES_KDP_PER_DEVICE_MAX_ALLOCATIONS`.
148
152
 
149
153
  """
150
154
  self._device = device
151
155
  self._id_by = id_by
152
- self._max_allocations = max_allocations
153
- if not self._max_allocations:
154
- self._max_allocations = (
155
- envs.GPUSTACK_RUNTIME_KUBERNETES_KDP_PER_DEVICE_MAX_ALLOCATIONS
156
- )
157
- self._max_allocations = max(self._max_allocations, 1)
156
+ self._allocation_policy = allocation_policy
157
+ self._max_allocations = max(max_allocations, 1)
158
158
  self._cdi_kind = manufacturer_to_cdi_kind(device.manufacturer)
159
159
  self._runtime_env = manufacturer_to_runtime_env(device.manufacturer)
160
160
  self._kdp_resource = cdi_kind_to_kdp_resource(
@@ -229,7 +229,7 @@ class SharableDevicePlugin(PluginServer, DevicePluginServicer):
229
229
  async def serve(
230
230
  self,
231
231
  stop_event: asyncio.Event,
232
- kubelet_endpoint: Path | None = None,
232
+ kubelet_endpoint: Path,
233
233
  start_timeout: int = 5,
234
234
  register_timeout: int = 5,
235
235
  ):
@@ -247,9 +247,6 @@ class SharableDevicePlugin(PluginServer, DevicePluginServicer):
247
247
  The timeout in seconds for registering the device plugin.
248
248
 
249
249
  """
250
- if not kubelet_endpoint:
251
- kubelet_endpoint = KubeletSocket
252
-
253
250
  resource_name = self._kdp_resource
254
251
  endpoint = kubelet_endpoint.parent / f"{resource_name.replace('/', '.')}.sock"
255
252
 
@@ -421,8 +418,7 @@ class SharableDevicePlugin(PluginServer, DevicePluginServicer):
421
418
  self,
422
419
  req: ContainerAllocateRequest,
423
420
  ) -> ContainerAllocateResponse:
424
- policy = envs.GPUSTACK_RUNTIME_KUBERNETES_KDP_DEVICE_ALLOCATION_POLICY.lower()
425
-
421
+ policy = self._allocation_policy
426
422
  request_dp_device_ids = req.devices_ids
427
423
 
428
424
  # CDI device allocation.