gpustack-runtime 0.1.42__py3-none-any.whl → 0.1.42.post1__py3-none-any.whl
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/_version.py +2 -2
- gpustack_runtime/_version_appendix.py +1 -1
- gpustack_runtime/cmds/detector.py +1 -1
- gpustack_runtime/deployer/cdi/__init__.py +1 -1
- gpustack_runtime/deployer/cdi/__types__.py +2 -2
- gpustack_runtime/deployer/cdi/amd.py +6 -8
- gpustack_runtime/deployer/cdi/ascend.py +7 -9
- gpustack_runtime/deployer/cdi/hygon.py +6 -8
- gpustack_runtime/deployer/cdi/iluvatar.py +6 -8
- gpustack_runtime/deployer/cdi/metax.py +6 -8
- gpustack_runtime/deployer/cdi/thead.py +6 -8
- gpustack_runtime/deployer/docker.py +29 -3
- gpustack_runtime/deployer/k8s/deviceplugin/__init__.py +12 -7
- gpustack_runtime/deployer/k8s/deviceplugin/plugin.py +6 -2
- gpustack_runtime/deployer/podman.py +29 -3
- gpustack_runtime/detector/__utils__.py +3 -0
- gpustack_runtime/detector/amd.py +4 -2
- gpustack_runtime/detector/ascend.py +18 -9
- gpustack_runtime/detector/hygon.py +6 -2
- gpustack_runtime/detector/iluvatar.py +9 -7
- gpustack_runtime/detector/metax.py +8 -6
- gpustack_runtime/detector/mthreads.py +11 -8
- gpustack_runtime/detector/nvidia.py +11 -8
- gpustack_runtime/detector/pyacl/__init__.py +34 -14
- gpustack_runtime/detector/pydcmi/__init__.py +4 -2
- gpustack_runtime/detector/thead.py +12 -9
- {gpustack_runtime-0.1.42.dist-info → gpustack_runtime-0.1.42.post1.dist-info}/METADATA +1 -1
- {gpustack_runtime-0.1.42.dist-info → gpustack_runtime-0.1.42.post1.dist-info}/RECORD +31 -31
- {gpustack_runtime-0.1.42.dist-info → gpustack_runtime-0.1.42.post1.dist-info}/WHEEL +0 -0
- {gpustack_runtime-0.1.42.dist-info → gpustack_runtime-0.1.42.post1.dist-info}/entry_points.txt +0 -0
- {gpustack_runtime-0.1.42.dist-info → gpustack_runtime-0.1.42.post1.dist-info}/licenses/LICENSE +0 -0
gpustack_runtime/_version.py
CHANGED
|
@@ -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.42'
|
|
31
|
-
__version_tuple__ = version_tuple = (0, 1, 42)
|
|
30
|
+
__version__ = version = '0.1.42.post1'
|
|
31
|
+
__version_tuple__ = version_tuple = (0, 1, 42, 'post1')
|
|
32
32
|
try:
|
|
33
33
|
from ._version_appendix import git_commit
|
|
34
34
|
__commit_id__ = commit_id = git_commit
|
|
@@ -1 +1 @@
|
|
|
1
|
-
git_commit = "
|
|
1
|
+
git_commit = "ff610ac"
|
|
@@ -123,7 +123,7 @@ class GetDevicesTopologySubCommand(SubCommand):
|
|
|
123
123
|
"",
|
|
124
124
|
"Legend (from nearest to farthest):",
|
|
125
125
|
" X = Self",
|
|
126
|
-
" LINK = Connection traversing with High-Speed Link (e.g., AMD XGMI, Ascend HCCS, NVIDIA NVLink)",
|
|
126
|
+
" LINK = Connection traversing with High-Speed Link (e.g., AMD XGMI, Ascend HCCS, MThreads MTLink, NVIDIA NVLink, T-Head ICNLink)",
|
|
127
127
|
" PIX = Connection traversing at most a single PCIe bridge",
|
|
128
128
|
" PXB = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)",
|
|
129
129
|
" PHB = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)",
|
|
@@ -82,7 +82,7 @@ def dump_config(
|
|
|
82
82
|
if cdi_path.exists():
|
|
83
83
|
actual = cdi_path.read_text(encoding="utf-8")
|
|
84
84
|
if actual == expected:
|
|
85
|
-
return expected,
|
|
85
|
+
return expected, None
|
|
86
86
|
|
|
87
87
|
cdi_path.write_text(expected, encoding="utf-8")
|
|
88
88
|
return expected, str(cdi_path)
|
|
@@ -527,7 +527,7 @@ class Config(dict):
|
|
|
527
527
|
self,
|
|
528
528
|
kind: str,
|
|
529
529
|
devices: list[ConfigDevice],
|
|
530
|
-
container_edits:
|
|
530
|
+
container_edits: ConfigContainerEdits | None = None,
|
|
531
531
|
cdi_version: str = _DEFAULT_CDI_VERSION,
|
|
532
532
|
annotations: dict[str, str] | None = None,
|
|
533
533
|
):
|
|
@@ -581,7 +581,7 @@ class Config(dict):
|
|
|
581
581
|
return self["kind"]
|
|
582
582
|
|
|
583
583
|
@property
|
|
584
|
-
def container_edits(self) ->
|
|
584
|
+
def container_edits(self) -> ConfigContainerEdits | None:
|
|
585
585
|
"""
|
|
586
586
|
Return the list of container edits in the CDI configuration.
|
|
587
587
|
|
|
@@ -135,12 +135,10 @@ class AMDGenerator(Generator):
|
|
|
135
135
|
return Config(
|
|
136
136
|
kind=kind,
|
|
137
137
|
devices=cdi_devices,
|
|
138
|
-
container_edits=
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
),
|
|
145
|
-
],
|
|
138
|
+
container_edits=ConfigContainerEdits(
|
|
139
|
+
env=[
|
|
140
|
+
f"{runtime_env}=void",
|
|
141
|
+
],
|
|
142
|
+
device_nodes=common_device_nodes,
|
|
143
|
+
),
|
|
146
144
|
)
|
|
@@ -152,13 +152,11 @@ class AscendGenerator(Generator):
|
|
|
152
152
|
return Config(
|
|
153
153
|
kind=kind,
|
|
154
154
|
devices=cdi_devices,
|
|
155
|
-
container_edits=
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
),
|
|
163
|
-
],
|
|
155
|
+
container_edits=ConfigContainerEdits(
|
|
156
|
+
env=[
|
|
157
|
+
f"{runtime_env}=void",
|
|
158
|
+
],
|
|
159
|
+
device_nodes=common_device_nodes,
|
|
160
|
+
mounts=common_mounts,
|
|
161
|
+
),
|
|
164
162
|
)
|
|
@@ -136,12 +136,10 @@ class HygonGenerator(Generator):
|
|
|
136
136
|
return Config(
|
|
137
137
|
kind=kind,
|
|
138
138
|
devices=cdi_devices,
|
|
139
|
-
container_edits=
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
),
|
|
146
|
-
],
|
|
139
|
+
container_edits=ConfigContainerEdits(
|
|
140
|
+
env=[
|
|
141
|
+
f"{runtime_env}=void",
|
|
142
|
+
],
|
|
143
|
+
device_nodes=common_device_nodes,
|
|
144
|
+
),
|
|
147
145
|
)
|
|
@@ -125,12 +125,10 @@ class IluvatarGenerator(Generator):
|
|
|
125
125
|
return Config(
|
|
126
126
|
kind=kind,
|
|
127
127
|
devices=cdi_devices,
|
|
128
|
-
container_edits=
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
),
|
|
135
|
-
],
|
|
128
|
+
container_edits=ConfigContainerEdits(
|
|
129
|
+
env=[
|
|
130
|
+
f"{runtime_env}=void",
|
|
131
|
+
],
|
|
132
|
+
device_nodes=common_device_nodes,
|
|
133
|
+
),
|
|
136
134
|
)
|
|
@@ -137,12 +137,10 @@ class MetaXGenerator(Generator):
|
|
|
137
137
|
return Config(
|
|
138
138
|
kind=kind,
|
|
139
139
|
devices=cdi_devices,
|
|
140
|
-
container_edits=
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
),
|
|
147
|
-
],
|
|
140
|
+
container_edits=ConfigContainerEdits(
|
|
141
|
+
env=[
|
|
142
|
+
f"{runtime_env}=void",
|
|
143
|
+
],
|
|
144
|
+
device_nodes=common_device_nodes,
|
|
145
|
+
),
|
|
148
146
|
)
|
|
@@ -126,12 +126,10 @@ class THeadGenerator(Generator):
|
|
|
126
126
|
return Config(
|
|
127
127
|
kind=kind,
|
|
128
128
|
devices=cdi_devices,
|
|
129
|
-
container_edits=
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
),
|
|
136
|
-
],
|
|
129
|
+
container_edits=ConfigContainerEdits(
|
|
130
|
+
env=[
|
|
131
|
+
f"{runtime_env}=void",
|
|
132
|
+
],
|
|
133
|
+
device_nodes=common_device_nodes,
|
|
134
|
+
),
|
|
137
135
|
)
|
|
@@ -985,11 +985,37 @@ class DockerDeployer(EndoscopicDeployer):
|
|
|
985
985
|
# Generate CDI config if not yet.
|
|
986
986
|
if cdi and envs.GPUSTACK_RUNTIME_DOCKER_CDI_SPECS_GENERATE:
|
|
987
987
|
for ren in runtime_envs:
|
|
988
|
-
|
|
989
|
-
cdi_dump_config(
|
|
990
|
-
manufacturer=
|
|
988
|
+
manu = self.get_manufacturer(ren)
|
|
989
|
+
cdi_config, cdi_config_path = cdi_dump_config(
|
|
990
|
+
manufacturer=manu,
|
|
991
991
|
output=envs.GPUSTACK_RUNTIME_DEPLOY_CDI_SPECS_DIRECTORY,
|
|
992
992
|
)
|
|
993
|
+
if cdi_config and cdi_config_path:
|
|
994
|
+
if logger.isEnabledFor(logging.DEBUG):
|
|
995
|
+
logger.debug(
|
|
996
|
+
"Generated CDI configuration for '%s' at '%s':\n%s",
|
|
997
|
+
manu,
|
|
998
|
+
cdi_config_path,
|
|
999
|
+
cdi_config,
|
|
1000
|
+
)
|
|
1001
|
+
else:
|
|
1002
|
+
logger.info(
|
|
1003
|
+
"Generated CDI configuration for '%s' at '%s'",
|
|
1004
|
+
manu,
|
|
1005
|
+
cdi_config_path,
|
|
1006
|
+
)
|
|
1007
|
+
elif cdi_config:
|
|
1008
|
+
logger.info(
|
|
1009
|
+
"Reuse generated CDI configuration for '%s'",
|
|
1010
|
+
manu,
|
|
1011
|
+
)
|
|
1012
|
+
else:
|
|
1013
|
+
logger.warning(
|
|
1014
|
+
"Delegated CDI configuration by other tools for '%s', "
|
|
1015
|
+
"e.g. for NVIDIA devices, please follow NVIDIA Container Toolkit Manual CDI Specification Generation to generate the CDI configuration, "
|
|
1016
|
+
"see https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/cdi-support.html#manual-cdi-specification-generation",
|
|
1017
|
+
manu,
|
|
1018
|
+
)
|
|
993
1019
|
|
|
994
1020
|
# Request devices.
|
|
995
1021
|
if r_v == "all":
|
|
@@ -78,28 +78,33 @@ async def serve_async(
|
|
|
78
78
|
allocation_policy == "cdi"
|
|
79
79
|
and envs.GPUSTACK_RUNTIME_KUBERNETES_KDP_CDI_SPECS_GENERATE
|
|
80
80
|
):
|
|
81
|
-
|
|
81
|
+
cdi_config, cdi_config_path = cdi_dump_config(
|
|
82
82
|
manufacturer=manu,
|
|
83
83
|
output=cdi_generation_output,
|
|
84
84
|
)
|
|
85
|
-
if
|
|
85
|
+
if cdi_config and cdi_config_path:
|
|
86
86
|
if logger.isEnabledFor(logging.DEBUG):
|
|
87
87
|
logger.debug(
|
|
88
88
|
"Generated CDI configuration for '%s' at '%s':\n%s",
|
|
89
89
|
manu,
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
cdi_config_path,
|
|
91
|
+
cdi_config,
|
|
92
92
|
)
|
|
93
93
|
else:
|
|
94
94
|
logger.info(
|
|
95
95
|
"Generated CDI configuration for '%s' at '%s'",
|
|
96
96
|
manu,
|
|
97
|
-
|
|
97
|
+
cdi_config_path,
|
|
98
98
|
)
|
|
99
|
+
elif cdi_config:
|
|
100
|
+
logger.info(
|
|
101
|
+
"Reuse generated CDI configuration for '%s'",
|
|
102
|
+
manu,
|
|
103
|
+
)
|
|
99
104
|
else:
|
|
100
105
|
logger.warning(
|
|
101
|
-
"Delegated CDI configuration by other tools for
|
|
102
|
-
"e.g. NVIDIA Container Toolkit Manual CDI Specification Generation, "
|
|
106
|
+
"Delegated CDI configuration by other tools for '%s', "
|
|
107
|
+
"e.g. for NVIDIA devices, please follow NVIDIA Container Toolkit Manual CDI Specification Generation to generate the CDI configuration, "
|
|
103
108
|
"see https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/cdi-support.html#manual-cdi-specification-generation",
|
|
104
109
|
manu,
|
|
105
110
|
)
|
|
@@ -12,6 +12,7 @@ from grpc_interceptor import AsyncServerInterceptor
|
|
|
12
12
|
from grpc_interceptor.exceptions import GrpcException
|
|
13
13
|
|
|
14
14
|
from ....detector import Device, DeviceMemoryStatusEnum, str_range_to_list
|
|
15
|
+
from ....detector.__utils__ import get_numa_node_size
|
|
15
16
|
from ...cdi import (
|
|
16
17
|
generate_config,
|
|
17
18
|
manufacturer_to_cdi_kind,
|
|
@@ -346,8 +347,11 @@ class SharableDevicePlugin(PluginServer, DevicePluginServicer):
|
|
|
346
347
|
NUMANode(
|
|
347
348
|
ID=node_id,
|
|
348
349
|
)
|
|
349
|
-
for node_id in
|
|
350
|
-
|
|
350
|
+
for node_id in (
|
|
351
|
+
str_range_to_list(
|
|
352
|
+
self._device.appendix.get("numa", ""),
|
|
353
|
+
)
|
|
354
|
+
or list(range(get_numa_node_size()))
|
|
351
355
|
)
|
|
352
356
|
],
|
|
353
357
|
)
|
|
@@ -982,11 +982,37 @@ class PodmanDeployer(EndoscopicDeployer):
|
|
|
982
982
|
# Generate CDI config if not yet.
|
|
983
983
|
if envs.GPUSTACK_RUNTIME_PODMAN_CDI_SPECS_GENERATE:
|
|
984
984
|
for ren in runtime_envs:
|
|
985
|
-
|
|
986
|
-
cdi_dump_config(
|
|
987
|
-
manufacturer=
|
|
985
|
+
manu = self.get_manufacturer(ren)
|
|
986
|
+
cdi_config, cdi_config_path = cdi_dump_config(
|
|
987
|
+
manufacturer=manu,
|
|
988
988
|
output=envs.GPUSTACK_RUNTIME_DEPLOY_CDI_SPECS_DIRECTORY,
|
|
989
989
|
)
|
|
990
|
+
if cdi_config and cdi_config_path:
|
|
991
|
+
if logger.isEnabledFor(logging.DEBUG):
|
|
992
|
+
logger.debug(
|
|
993
|
+
"Generated CDI configuration for '%s' at '%s':\n%s",
|
|
994
|
+
manu,
|
|
995
|
+
cdi_config_path,
|
|
996
|
+
cdi_config,
|
|
997
|
+
)
|
|
998
|
+
else:
|
|
999
|
+
logger.info(
|
|
1000
|
+
"Generated CDI configuration for '%s' at '%s'",
|
|
1001
|
+
manu,
|
|
1002
|
+
cdi_config_path,
|
|
1003
|
+
)
|
|
1004
|
+
elif cdi_config:
|
|
1005
|
+
logger.info(
|
|
1006
|
+
"Reuse generated CDI configuration for '%s'",
|
|
1007
|
+
manu,
|
|
1008
|
+
)
|
|
1009
|
+
else:
|
|
1010
|
+
logger.warning(
|
|
1011
|
+
"Delegated CDI configuration by other tools for '%s', "
|
|
1012
|
+
"e.g. for NVIDIA devices, please follow NVIDIA Container Toolkit Manual CDI Specification Generation to generate the CDI configuration, "
|
|
1013
|
+
"see https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/cdi-support.html#manual-cdi-specification-generation",
|
|
1014
|
+
manu,
|
|
1015
|
+
)
|
|
990
1016
|
|
|
991
1017
|
# Configure device access environment variable.
|
|
992
1018
|
if r_v == "all":
|
gpustack_runtime/detector/amd.py
CHANGED
|
@@ -220,14 +220,16 @@ class AMDDetector(Detector):
|
|
|
220
220
|
|
|
221
221
|
dev_numa = get_numa_node_by_bdf(dev_bdf)
|
|
222
222
|
if not dev_numa:
|
|
223
|
-
|
|
223
|
+
with contextlib.suppress(pyamdsmi.AmdSmiException):
|
|
224
|
+
dev_numa = str(pyamdsmi.amdsmi_topo_get_numa_node_number(dev))
|
|
224
225
|
|
|
225
226
|
dev_appendix = {
|
|
226
227
|
"arch_family": _get_arch_family(dev_asic_family_id),
|
|
227
228
|
"vgpu": dev_is_vgpu,
|
|
228
229
|
"bdf": dev_bdf,
|
|
229
|
-
"numa": dev_numa,
|
|
230
230
|
}
|
|
231
|
+
if dev_numa:
|
|
232
|
+
dev_appendix["numa"] = dev_numa
|
|
231
233
|
if dev_card_id is not None:
|
|
232
234
|
dev_appendix["card_id"] = dev_card_id
|
|
233
235
|
if dev_renderd_id is not None:
|
|
@@ -32,10 +32,12 @@ slogger = logger.getChild("internal")
|
|
|
32
32
|
_TOPOLOGY_DISTANCE_MAPPING: dict[int, int] = {
|
|
33
33
|
pydcmi.DCMI_TOPO_TYPE_SELF: TopologyDistanceEnum.SELF,
|
|
34
34
|
pydcmi.DCMI_TOPO_TYPE_HCCS: TopologyDistanceEnum.LINK, # Traversing via high-speed interconnect, RoCE, etc.
|
|
35
|
+
pydcmi.DCMI_TOPO_TYPE_HCCS_SW: TopologyDistanceEnum.LINK, # Traversing via high-speed interconnect switch.
|
|
35
36
|
pydcmi.DCMI_TOPO_TYPE_PIX: TopologyDistanceEnum.PIX, # Traversing via a single PCIe bridge.
|
|
36
37
|
pydcmi.DCMI_TOPO_TYPE_PXB: TopologyDistanceEnum.PXB, # Traversing via multiple PCIe bridges without PCIe Host Bridge.
|
|
37
38
|
pydcmi.DCMI_TOPO_TYPE_PHB: TopologyDistanceEnum.PHB, # Traversing via a PCIe Host Bridge.
|
|
38
39
|
pydcmi.DCMI_TOPO_TYPE_SYS: TopologyDistanceEnum.SYS, # Traversing via SMP interconnect across other NUMA nodes.
|
|
40
|
+
pydcmi.DCMI_TOPO_TYPE_SIO: TopologyDistanceEnum.SYS, # Traversing via Super I/O or other slower interconnects.
|
|
39
41
|
}
|
|
40
42
|
"""
|
|
41
43
|
Mapping of Ascend topology types to distance values.
|
|
@@ -109,7 +111,7 @@ class AscendDetector(Detector):
|
|
|
109
111
|
|
|
110
112
|
sys_driver_ver = pydcmi.dcmi_get_driver_version()
|
|
111
113
|
|
|
112
|
-
sys_runtime_ver_original = pyacl.
|
|
114
|
+
sys_runtime_ver_original = pyacl.aclsysGetVersion()
|
|
113
115
|
sys_runtime_ver = get_brief_version(sys_runtime_ver_original)
|
|
114
116
|
|
|
115
117
|
_, card_list = pydcmi.dcmi_get_card_list()
|
|
@@ -198,13 +200,14 @@ class AscendDetector(Detector):
|
|
|
198
200
|
|
|
199
201
|
dev_numa = get_numa_node_by_bdf(dev_bdf)
|
|
200
202
|
if not dev_numa:
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
203
|
+
with contextlib.suppress(pydcmi.DCMIError):
|
|
204
|
+
dev_cpu_affinity = (
|
|
205
|
+
pydcmi.dcmi_get_affinity_cpu_info_by_device_id(
|
|
206
|
+
dev_card_id,
|
|
207
|
+
dev_device_id,
|
|
208
|
+
)
|
|
205
209
|
)
|
|
206
|
-
|
|
207
|
-
dev_numa = map_cpu_affinity_to_numa_node(dev_cpu_affinity)
|
|
210
|
+
dev_numa = map_cpu_affinity_to_numa_node(dev_cpu_affinity)
|
|
208
211
|
|
|
209
212
|
dev_appendix = {
|
|
210
213
|
"arch_family": (
|
|
@@ -213,11 +216,12 @@ class AscendDetector(Detector):
|
|
|
213
216
|
),
|
|
214
217
|
"vgpu": dev_is_vgpu,
|
|
215
218
|
"bdf": dev_bdf,
|
|
216
|
-
"numa": dev_numa,
|
|
217
219
|
"card_id": dev_card_id,
|
|
218
220
|
"device_id": dev_device_id,
|
|
219
221
|
"device_id_max": device_num_in_card - 1,
|
|
220
222
|
}
|
|
223
|
+
if dev_numa:
|
|
224
|
+
dev_appendix["numa"] = dev_numa
|
|
221
225
|
|
|
222
226
|
dev_roce_ip, dev_roce_mask, dev_roce_gateway = (
|
|
223
227
|
_get_device_roce_network_info(
|
|
@@ -440,7 +444,7 @@ def _get_device_roce_network_info(
|
|
|
440
444
|
pydcmi.DCMI_PORT_TYPE_ROCE_PORT,
|
|
441
445
|
)
|
|
442
446
|
except pydcmi.DCMIError:
|
|
443
|
-
debug_log_exception(logger, "Failed to get device
|
|
447
|
+
debug_log_exception(logger, "Failed to get device RoCE network info")
|
|
444
448
|
|
|
445
449
|
return ip, mask, gateway
|
|
446
450
|
|
|
@@ -501,12 +505,15 @@ _soc_name_version_mapping: dict[str, int] = {
|
|
|
501
505
|
"Ascend310B3": 242,
|
|
502
506
|
"Ascend310B4": 243,
|
|
503
507
|
"Ascend910_9391": 250,
|
|
508
|
+
"Ascend910": 250,
|
|
504
509
|
"Ascend910_9392": 251,
|
|
505
510
|
"Ascend910_9381": 252,
|
|
506
511
|
"Ascend910_9382": 253,
|
|
507
512
|
"Ascend910_9372": 254,
|
|
508
513
|
"Ascend910_9362": 255,
|
|
509
514
|
"Ascend910_9579": 260,
|
|
515
|
+
"Ascend910_95": 260,
|
|
516
|
+
"Ascend950": 260,
|
|
510
517
|
}
|
|
511
518
|
|
|
512
519
|
|
|
@@ -522,6 +529,8 @@ def _guess_soc_name_from_dev_name(dev_name: str) -> str | None:
|
|
|
522
529
|
The guessed SoC name, or None if not found.
|
|
523
530
|
|
|
524
531
|
"""
|
|
532
|
+
if dev_name.startswith("Ascend"):
|
|
533
|
+
dev_name = dev_name[6:].strip()
|
|
525
534
|
soc_name = f"Ascend{dev_name}"
|
|
526
535
|
if soc_name in _soc_name_version_mapping:
|
|
527
536
|
return soc_name
|
|
@@ -171,13 +171,17 @@ class HygonDetector(Detector):
|
|
|
171
171
|
|
|
172
172
|
dev_numa = get_numa_node_by_bdf(dev_bdf)
|
|
173
173
|
if not dev_numa:
|
|
174
|
-
|
|
174
|
+
with contextlib.suppress(pyrocmsmi.ROCMSMIError):
|
|
175
|
+
dev_numa = str(
|
|
176
|
+
pyrocmsmi.rsmi_topo_get_numa_node_number(dev_idx),
|
|
177
|
+
)
|
|
175
178
|
|
|
176
179
|
dev_appendix = {
|
|
177
180
|
"vgpu": dev_is_vgpu,
|
|
178
181
|
"bdf": dev_bdf,
|
|
179
|
-
"numa": dev_numa,
|
|
180
182
|
}
|
|
183
|
+
if dev_numa:
|
|
184
|
+
dev_appendix["numa"] = dev_numa
|
|
181
185
|
if dev_card_id is not None:
|
|
182
186
|
dev_appendix["card_id"] = dev_card_id
|
|
183
187
|
if dev_renderd_id is not None:
|
|
@@ -190,18 +190,20 @@ class IluvatarDetector(Detector):
|
|
|
190
190
|
|
|
191
191
|
dev_numa = get_numa_node_by_bdf(dev_bdf)
|
|
192
192
|
if not dev_numa:
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
193
|
+
with contextlib.suppress(pyixml.NVMLError):
|
|
194
|
+
dev_node_affinity = pyixml.nvmlDeviceGetMemoryAffinity(
|
|
195
|
+
dev,
|
|
196
|
+
get_numa_nodeset_size(),
|
|
197
|
+
pyixml.NVML_AFFINITY_SCOPE_NODE,
|
|
198
|
+
)
|
|
199
|
+
dev_numa = bitmask_to_str(list(dev_node_affinity))
|
|
199
200
|
|
|
200
201
|
dev_appendix = {
|
|
201
202
|
"vgpu": dev_is_vgpu,
|
|
202
203
|
"bdf": dev_bdf,
|
|
203
|
-
"numa": dev_numa,
|
|
204
204
|
}
|
|
205
|
+
if dev_numa:
|
|
206
|
+
dev_appendix["numa"] = dev_numa
|
|
205
207
|
|
|
206
208
|
ret.append(
|
|
207
209
|
Device(
|
|
@@ -179,17 +179,19 @@ class MetaXDetector(Detector):
|
|
|
179
179
|
|
|
180
180
|
dev_numa = get_numa_node_by_bdf(dev_bdf)
|
|
181
181
|
if not dev_numa:
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
182
|
+
with contextlib.suppress(pymxsml.MXSMLError):
|
|
183
|
+
dev_node_affinity = pymxsml.mxSmlGetNodeAffinity(
|
|
184
|
+
dev_idx,
|
|
185
|
+
get_numa_nodeset_size(),
|
|
186
|
+
)
|
|
187
|
+
dev_numa = bitmask_to_str(list(dev_node_affinity))
|
|
187
188
|
|
|
188
189
|
dev_appendix = {
|
|
189
190
|
"vgpu": dev_is_vgpu,
|
|
190
191
|
"bdf": dev_bdf,
|
|
191
|
-
"numa": dev_numa,
|
|
192
192
|
}
|
|
193
|
+
if dev_numa:
|
|
194
|
+
dev_appendix["numa"] = dev_numa
|
|
193
195
|
if dev_card_id is not None:
|
|
194
196
|
dev_appendix["card_id"] = dev_card_id
|
|
195
197
|
if dev_renderd_id is not None:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations as __future_annotations__
|
|
2
2
|
|
|
3
|
+
import contextlib
|
|
3
4
|
import logging
|
|
4
5
|
from functools import lru_cache
|
|
5
6
|
|
|
@@ -176,19 +177,21 @@ class MThreadsDetector(Detector):
|
|
|
176
177
|
|
|
177
178
|
dev_numa = get_numa_node_by_bdf(dev_bdf)
|
|
178
179
|
if not dev_numa:
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
180
|
+
with contextlib.suppress(pymtml.MTMLError):
|
|
181
|
+
dev_node_affinity = (
|
|
182
|
+
pymtml.mtmlDeviceGetMemoryAffinityWithinNode(
|
|
183
|
+
dev,
|
|
184
|
+
get_numa_nodeset_size(),
|
|
185
|
+
)
|
|
186
|
+
)
|
|
187
|
+
dev_numa = bitmask_to_str(list(dev_node_affinity))
|
|
186
188
|
|
|
187
189
|
dev_appendix = {
|
|
188
190
|
"vgpu": dev_is_vgpu,
|
|
189
191
|
"bdf": dev_bdf,
|
|
190
|
-
"numa": dev_numa,
|
|
191
192
|
}
|
|
193
|
+
if dev_numa:
|
|
194
|
+
dev_appendix["numa"] = dev_numa
|
|
192
195
|
|
|
193
196
|
ret.append(
|
|
194
197
|
Device(
|
|
@@ -134,12 +134,13 @@ class NVIDIADetector(Detector):
|
|
|
134
134
|
|
|
135
135
|
dev_numa = get_numa_node_by_bdf(dev_bdf)
|
|
136
136
|
if not dev_numa:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
137
|
+
with contextlib.suppress(pynvml.NVMLError):
|
|
138
|
+
dev_node_affinity = pynvml.nvmlDeviceGetMemoryAffinity(
|
|
139
|
+
dev,
|
|
140
|
+
get_numa_nodeset_size(),
|
|
141
|
+
pynvml.NVML_AFFINITY_SCOPE_NODE,
|
|
142
|
+
)
|
|
143
|
+
dev_numa = bitmask_to_str(list(dev_node_affinity))
|
|
143
144
|
|
|
144
145
|
dev_temp = None
|
|
145
146
|
with contextlib.suppress(pynvml.NVMLError):
|
|
@@ -224,8 +225,9 @@ class NVIDIADetector(Detector):
|
|
|
224
225
|
"arch_family": _get_arch_family(dev_cc_t),
|
|
225
226
|
"vgpu": dev_is_vgpu,
|
|
226
227
|
"bdf": dev_bdf,
|
|
227
|
-
"numa": dev_numa,
|
|
228
228
|
}
|
|
229
|
+
if dev_numa:
|
|
230
|
+
dev_appendix["numa"] = dev_numa
|
|
229
231
|
|
|
230
232
|
if dev_fabric_info := _get_fabric_info(dev):
|
|
231
233
|
dev_appendix.update(dev_fabric_info)
|
|
@@ -297,8 +299,9 @@ class NVIDIADetector(Detector):
|
|
|
297
299
|
"arch_family": _get_arch_family(dev_cc_t),
|
|
298
300
|
"vgpu": True,
|
|
299
301
|
"bdf": dev_bdf,
|
|
300
|
-
"numa": dev_numa,
|
|
301
302
|
}
|
|
303
|
+
if dev_numa:
|
|
304
|
+
mdev_appendix["numa"] = dev_numa
|
|
302
305
|
|
|
303
306
|
mdev_gi_id = pynvml.nvmlDeviceGetGpuInstanceId(mdev)
|
|
304
307
|
mdev_appendix["gpu_instance_id"] = mdev_gi_id
|
|
@@ -403,20 +403,21 @@ def _LoadAclLibrary():
|
|
|
403
403
|
locs = [
|
|
404
404
|
"libascendcl.so",
|
|
405
405
|
]
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
if ascend_path.exists():
|
|
413
|
-
locs.extend(
|
|
414
|
-
[
|
|
415
|
-
str(ascend_path / "runtime/lib64/libascendcl.so"),
|
|
416
|
-
str(ascend_path / "aarch64-linux/lib64/libascendcl.so"),
|
|
417
|
-
str(ascend_path / "x86_64-linux/lib64/libascendcl.so"),
|
|
418
|
-
]
|
|
406
|
+
for default_path in [
|
|
407
|
+
"/usr/local/Ascend/ascend-toolkit/latest",
|
|
408
|
+
"/usr/local/Ascend/cann",
|
|
409
|
+
]:
|
|
410
|
+
ascend_path = Path(
|
|
411
|
+
os.getenv("ASCEND_HOME_PATH", default_path),
|
|
419
412
|
)
|
|
413
|
+
if ascend_path.exists():
|
|
414
|
+
locs.extend(
|
|
415
|
+
[
|
|
416
|
+
str(ascend_path / "runtime/lib64/libascendcl.so"),
|
|
417
|
+
str(ascend_path / "aarch64-linux/lib64/libascendcl.so"),
|
|
418
|
+
str(ascend_path / "x86_64-linux/lib64/libascendcl.so"),
|
|
419
|
+
]
|
|
420
|
+
)
|
|
420
421
|
for loc in locs:
|
|
421
422
|
try:
|
|
422
423
|
aclLib = CDLL(loc)
|
|
@@ -439,7 +440,8 @@ def aclrtGetSocName():
|
|
|
439
440
|
fn = _aclGetFunctionPointer("aclrtGetSocName")
|
|
440
441
|
fn.restype = c_char_p
|
|
441
442
|
c_version = fn()
|
|
442
|
-
|
|
443
|
+
if c_version is not None:
|
|
444
|
+
return c_version.decode()
|
|
443
445
|
|
|
444
446
|
return None
|
|
445
447
|
|
|
@@ -456,3 +458,21 @@ def aclsysGetCANNVersion(package_name=ACL_PKG_NAME_CANN):
|
|
|
456
458
|
return f"{c_version.version}".lower()
|
|
457
459
|
|
|
458
460
|
return None
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
def aclsysGetVersion():
|
|
464
|
+
cann_version = aclsysGetCANNVersion()
|
|
465
|
+
if cann_version is not None:
|
|
466
|
+
return cann_version
|
|
467
|
+
|
|
468
|
+
with contextlib.suppress(ACLError):
|
|
469
|
+
_LoadAclLibrary()
|
|
470
|
+
|
|
471
|
+
c_version = create_string_buffer(ACL_PKG_VERSION_MAX_SIZE)
|
|
472
|
+
package_name = b"runtime"
|
|
473
|
+
fn = _aclGetFunctionPointer("aclsysGetVersionStr")
|
|
474
|
+
ret = fn(package_name, c_version)
|
|
475
|
+
_aclCheckReturn(ret)
|
|
476
|
+
return c_version.value.decode().lower()
|
|
477
|
+
|
|
478
|
+
return None
|
|
@@ -135,8 +135,10 @@ DCMI_TOPO_TYPE_PHB = 2
|
|
|
135
135
|
DCMI_TOPO_TYPE_HCCS = 3
|
|
136
136
|
DCMI_TOPO_TYPE_PXB = 4
|
|
137
137
|
DCMI_TOPO_TYPE_PIX = 5
|
|
138
|
-
|
|
139
|
-
|
|
138
|
+
DCMI_TOPO_TYPE_SIO = 6
|
|
139
|
+
DCMI_TOPO_TYPE_HCCS_SW = 7
|
|
140
|
+
DCMI_TOPO_TYPE_BUTT = 8 # Unknown
|
|
141
|
+
DCMI_TOPO_TYOE_MAX = 9
|
|
140
142
|
|
|
141
143
|
|
|
142
144
|
## Error Codes ##
|
|
@@ -50,7 +50,7 @@ class THeadDetector(Detector):
|
|
|
50
50
|
|
|
51
51
|
"""
|
|
52
52
|
supported = False
|
|
53
|
-
if envs.GPUSTACK_RUNTIME_DETECT.lower() not in ("auto", "
|
|
53
|
+
if envs.GPUSTACK_RUNTIME_DETECT.lower() not in ("auto", "thead"):
|
|
54
54
|
logger.debug("T-Head detection is disabled by environment variable")
|
|
55
55
|
return supported
|
|
56
56
|
|
|
@@ -132,12 +132,13 @@ class THeadDetector(Detector):
|
|
|
132
132
|
|
|
133
133
|
dev_numa = get_numa_node_by_bdf(dev_bdf)
|
|
134
134
|
if not dev_numa:
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
135
|
+
with contextlib.suppress(pyhgml.HGMLError):
|
|
136
|
+
dev_node_affinity = pyhgml.hgmlDeviceGetMemoryAffinity(
|
|
137
|
+
dev,
|
|
138
|
+
get_numa_nodeset_size(),
|
|
139
|
+
pyhgml.HGML_AFFINITY_SCOPE_NODE,
|
|
140
|
+
)
|
|
141
|
+
dev_numa = bitmask_to_str(list(dev_node_affinity))
|
|
141
142
|
|
|
142
143
|
dev_temp = None
|
|
143
144
|
with contextlib.suppress(pyhgml.HGMLError):
|
|
@@ -213,8 +214,9 @@ class THeadDetector(Detector):
|
|
|
213
214
|
dev_appendix = {
|
|
214
215
|
"vgpu": dev_is_vgpu,
|
|
215
216
|
"bdf": dev_bdf,
|
|
216
|
-
"numa": dev_numa,
|
|
217
217
|
}
|
|
218
|
+
if dev_numa:
|
|
219
|
+
dev_appendix["numa"] = dev_numa
|
|
218
220
|
|
|
219
221
|
ret.append(
|
|
220
222
|
Device(
|
|
@@ -279,8 +281,9 @@ class THeadDetector(Detector):
|
|
|
279
281
|
mdev_appendix = {
|
|
280
282
|
"vgpu": True,
|
|
281
283
|
"bdf": dev_bdf,
|
|
282
|
-
"numa": dev_numa,
|
|
283
284
|
}
|
|
285
|
+
if dev_numa:
|
|
286
|
+
mdev_appendix["numa"] = dev_numa
|
|
284
287
|
|
|
285
288
|
mdev_gi_id = pyhgml.hgmlDeviceGetGpuInstanceId(mdev)
|
|
286
289
|
mdev_appendix["gpu_instance_id"] = mdev_gi_id
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gpustack-runtime
|
|
3
|
-
Version: 0.1.42
|
|
3
|
+
Version: 0.1.42.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
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
gpustack_runtime/__init__.py,sha256=Xw_PVWneitx-8QmW6sJQeymj6zVbEgEndGhIB_km6TI,186
|
|
2
2
|
gpustack_runtime/__main__.py,sha256=O9yJKcN7vg0Ppgc13qesxHwST2wkH3ccOkTQXPWHnNA,3939
|
|
3
|
-
gpustack_runtime/_version.py,sha256
|
|
3
|
+
gpustack_runtime/_version.py,sha256=-eNQZIno4AwtazIKHw4i1RxKHZxM9dKoQseocEVcMq0,792
|
|
4
4
|
gpustack_runtime/_version.pyi,sha256=A42NoSgcqEXVy2OeNm4LXC9CbyonbooYrSUBlPm2lGY,156
|
|
5
5
|
gpustack_runtime/envs.py,sha256=gkr30NnIq3USzSYvbW6ipf8tKdbXx-BrDcY3-4Oc-Hg,38894
|
|
6
6
|
gpustack_runtime/logging.py,sha256=wMPriPpOuVsuClsjMh0qwEPQKyJiJa89ggdDjqkk7i0,6934
|
|
7
7
|
gpustack_runtime/cmds/__init__.py,sha256=-_X2O2lBn6KcdLGUzhL3lEjQC4_cwA36fvWDnFAgtVM,1382
|
|
8
8
|
gpustack_runtime/cmds/__types__.py,sha256=TBnUWUqzTkDtJnsMv363kdw-H8fOf-XQYbOvrmQif-M,815
|
|
9
9
|
gpustack_runtime/cmds/deployer.py,sha256=KvhPhU6ZW-UV6vLykI5adKI1ThgVFFJqWaII3n4OhL8,32846
|
|
10
|
-
gpustack_runtime/cmds/detector.py,sha256=
|
|
10
|
+
gpustack_runtime/cmds/detector.py,sha256=dFIo1d8dBh8v7JhisXAx-EqqOSLobcuwsJcO-obUh9c,8905
|
|
11
11
|
gpustack_runtime/cmds/images.py,sha256=7tb-D3G4yqLPkbS9aSuWI1bD3DYK8BLbPbgqac56blI,594
|
|
12
12
|
gpustack_runtime/deployer/__init__.py,sha256=impMrmvkMjuCBthsn3QUz3LuwpmmNAymHJKJ2o6SZoc,16249
|
|
13
13
|
gpustack_runtime/deployer/__patches__.py,sha256=cTBge8BT6IsY5MzETKY3kN28k3igYfNj7pcpgDzfDzw,17849
|
|
14
14
|
gpustack_runtime/deployer/__types__.py,sha256=J2YX8X7EYY_56_L9WL5YMmdsyJ572uOIhMoHCVjPaog,72469
|
|
15
15
|
gpustack_runtime/deployer/__utils__.py,sha256=paQu2M1UeoSfQPsiskmAqJSiln-8qwibTssEoWFMLec,21109
|
|
16
|
-
gpustack_runtime/deployer/docker.py,sha256=
|
|
16
|
+
gpustack_runtime/deployer/docker.py,sha256=o8Fyc25kLYBOOqN2rDctmxrkQ67oaA8J3lXSRuDAN08,83107
|
|
17
17
|
gpustack_runtime/deployer/kuberentes.py,sha256=-G7eYuqTDDi3T9u2Jqr6j0Ut-8vkP5u2lxzSyDx0EWM,86776
|
|
18
|
-
gpustack_runtime/deployer/podman.py,sha256=
|
|
19
|
-
gpustack_runtime/deployer/cdi/__init__.py,sha256=
|
|
20
|
-
gpustack_runtime/deployer/cdi/__types__.py,sha256=
|
|
18
|
+
gpustack_runtime/deployer/podman.py,sha256=Tvv6RbQ8aWY6Axz9iLvNwSiYxaxtd6q6g1TVl0e1VzY,80749
|
|
19
|
+
gpustack_runtime/deployer/cdi/__init__.py,sha256=V8ycQ9PrUiaozZcoxYOiEEQkGOSvYCaCV8kkVlbEQ_w,3991
|
|
20
|
+
gpustack_runtime/deployer/cdi/__types__.py,sha256=K5uDOmwYsLCz8j8diymN3loqYqPkbxN3F0SVP_iqahI,18387
|
|
21
21
|
gpustack_runtime/deployer/cdi/__utils__.py,sha256=CAYUv76akZiHJYZO_VY0NXKhEI2jrP7G3OgvQa8Pg4U,4050
|
|
22
|
-
gpustack_runtime/deployer/cdi/amd.py,sha256
|
|
23
|
-
gpustack_runtime/deployer/cdi/ascend.py,sha256=
|
|
24
|
-
gpustack_runtime/deployer/cdi/hygon.py,sha256=
|
|
25
|
-
gpustack_runtime/deployer/cdi/iluvatar.py,sha256
|
|
26
|
-
gpustack_runtime/deployer/cdi/metax.py,sha256=
|
|
27
|
-
gpustack_runtime/deployer/cdi/thead.py,sha256=
|
|
28
|
-
gpustack_runtime/deployer/k8s/deviceplugin/__init__.py,sha256=
|
|
22
|
+
gpustack_runtime/deployer/cdi/amd.py,sha256=6VgVlj-nA_124l1M8HHeXU3I6QU4BMhidLEuTrQ96o8,4029
|
|
23
|
+
gpustack_runtime/deployer/cdi/ascend.py,sha256=wyL9KOCIxTqs9NjMTLJ8db8btYqtGC4WD1qUy_T_BEE,4481
|
|
24
|
+
gpustack_runtime/deployer/cdi/hygon.py,sha256=E-jE3N_OMKWAWJxOIyqXCt-utGzVATytbCKPqCYtLiA,4064
|
|
25
|
+
gpustack_runtime/deployer/cdi/iluvatar.py,sha256=-LZ7LiKs0AjCaOX_9FNFIYi2lUO_xVhxR7C4e5XYvow,3597
|
|
26
|
+
gpustack_runtime/deployer/cdi/metax.py,sha256=tawLt1cWtsHLM5LXXtQEVBBWEyqBrnRvkPe54Usf1I0,4090
|
|
27
|
+
gpustack_runtime/deployer/cdi/thead.py,sha256=bEIpMVwhwcL_AX6CRwyrsLnpKJT46v-gjocR8gKukh8,3618
|
|
28
|
+
gpustack_runtime/deployer/k8s/deviceplugin/__init__.py,sha256=cZ8jbeaGZPmyNCzDlQauIRndvKuodDl3-oHEcn4IfWU,11156
|
|
29
29
|
gpustack_runtime/deployer/k8s/deviceplugin/__types__.py,sha256=LCkgPDZ64Mra7bo5jmtsAO2Ypbc4qK99lMl6R_nQhnY,3043
|
|
30
|
-
gpustack_runtime/deployer/k8s/deviceplugin/plugin.py,sha256=
|
|
30
|
+
gpustack_runtime/deployer/k8s/deviceplugin/plugin.py,sha256=E4gNvsi2aPAeVM5vWlXpvO4ecmQu951pPzzxPaIaAv8,17829
|
|
31
31
|
gpustack_runtime/deployer/k8s/types/kubelet/deviceplugin/v1beta1/__init__.py,sha256=3rOYmgDIIJ4idEtwgnumGStH7PaK-J7EYrOnLa9A-8o,118
|
|
32
32
|
gpustack_runtime/deployer/k8s/types/kubelet/deviceplugin/v1beta1/api.proto,sha256=rmB8RDe4LN5FCVkQ608uS-pl32mk5tt6iGe-g2lKtPs,7919
|
|
33
33
|
gpustack_runtime/deployer/k8s/types/kubelet/deviceplugin/v1beta1/api_pb2.py,sha256=dNkzjTE-2y25q8NF0QRznNJ5r1-5ZxxJS598MHbjx98,45998
|
|
@@ -36,21 +36,21 @@ gpustack_runtime/deployer/k8s/types/kubelet/deviceplugin/v1beta1/api_pb2_grpc.py
|
|
|
36
36
|
gpustack_runtime/deployer/k8s/types/kubelet/deviceplugin/v1beta1/constants.py,sha256=tpNk3e_cvY67C9RwVsdTNl75YuNXBgsn53fSJIzeTR4,828
|
|
37
37
|
gpustack_runtime/detector/__init__.py,sha256=2GaczS5lWLuPsighvq7oPhlPFQSUJfBKLAliXPfl4i0,8162
|
|
38
38
|
gpustack_runtime/detector/__types__.py,sha256=ZiKuYZb0jeXqzyTCUWTDppoHnRmkaZuljAWbnR_ohX8,13626
|
|
39
|
-
gpustack_runtime/detector/__utils__.py,sha256=
|
|
40
|
-
gpustack_runtime/detector/amd.py,sha256=
|
|
41
|
-
gpustack_runtime/detector/ascend.py,sha256=
|
|
39
|
+
gpustack_runtime/detector/__utils__.py,sha256=9ZkfDn1HHKao03xJHRD9TJ4JTkPhnLq7cFjbUk0UxMk,25194
|
|
40
|
+
gpustack_runtime/detector/amd.py,sha256=1zeF0PeXzmDQJA6JYvT1hQcjMN1cs36w8haHpzpp4NM,18413
|
|
41
|
+
gpustack_runtime/detector/ascend.py,sha256=4J7WvUX2cCPpGu0p9rRKEhV71zIMM7M3PPw2dgUauvE,19984
|
|
42
42
|
gpustack_runtime/detector/cambricon.py,sha256=5AXILG9NAMYiWjaLRZ5h8lXtFk7FLC7LB_aFQz0ZtYU,4102
|
|
43
|
-
gpustack_runtime/detector/hygon.py,sha256=
|
|
44
|
-
gpustack_runtime/detector/iluvatar.py,sha256=
|
|
45
|
-
gpustack_runtime/detector/metax.py,sha256=
|
|
46
|
-
gpustack_runtime/detector/mthreads.py,sha256=
|
|
47
|
-
gpustack_runtime/detector/nvidia.py,sha256=
|
|
48
|
-
gpustack_runtime/detector/thead.py,sha256=
|
|
49
|
-
gpustack_runtime/detector/pyacl/__init__.py,sha256=
|
|
43
|
+
gpustack_runtime/detector/hygon.py,sha256=ck7EaSUj1-gTYx1ZgdwbtHsneoCakDhZbQhFYFWd2ik,12967
|
|
44
|
+
gpustack_runtime/detector/iluvatar.py,sha256=YK-O53B_H16BLalbTwVqJWVi9WTCdCRM_GX7d7FmBO0,10682
|
|
45
|
+
gpustack_runtime/detector/metax.py,sha256=JZ9Z9vZ_iFrFOtoM626G0iPviqaTDJzBkh353RJfTMM,10930
|
|
46
|
+
gpustack_runtime/detector/mthreads.py,sha256=LL7iYbV5ov2edLmkZ5NvPt6rzHh7f3H6RWvjJgOXKZc,12880
|
|
47
|
+
gpustack_runtime/detector/nvidia.py,sha256=Xhp13TmhUneBpRFDFnWY9OHva4xlfGAEOGSLlpc56VE,34718
|
|
48
|
+
gpustack_runtime/detector/thead.py,sha256=NEifNMTnj37CB1bHviyE8F9ZGYKpfQtm7TsxnzlkLnU,26998
|
|
49
|
+
gpustack_runtime/detector/pyacl/__init__.py,sha256=sJc6K1NObJKUPQrAYQtcVhEMsN2kskIyNH1CncooTNw,16873
|
|
50
50
|
gpustack_runtime/detector/pyamdgpu/__init__.py,sha256=x-UO07EpKEgfTLmXQOD6j9f6kibuvDC7riQFof3YGdw,8617
|
|
51
51
|
gpustack_runtime/detector/pyamdsmi/__init__.py,sha256=800-khq2w6HLgXM12RkhcdvXBGeAJ4s1_TWJyHebCMk,955
|
|
52
52
|
gpustack_runtime/detector/pycuda/__init__.py,sha256=p-Na5eBjdsFGXPHCEEUfFj5TQFjPxPQGV0i4oU6ywBA,16922
|
|
53
|
-
gpustack_runtime/detector/pydcmi/__init__.py,sha256=
|
|
53
|
+
gpustack_runtime/detector/pydcmi/__init__.py,sha256=63FoyTLAdJRUBUJ86CVONpO0Q15kvEhaEH_kN4qqrdo,37314
|
|
54
54
|
gpustack_runtime/detector/pyhgml/__init__.py,sha256=Yp9s-QhHS4ck7Iq9kd4v6a4BruyJQcuOTYlyYSmnOgI,182896
|
|
55
55
|
gpustack_runtime/detector/pyhgml/libhgml.so,sha256=BPzGVBpzrMX1tSvbXddq8Q0Qhi8w-No2JXX8sRxTioI,2101640
|
|
56
56
|
gpustack_runtime/detector/pyhgml/libuki.so,sha256=EE6v1vIYYT4FSDMMm9rSfAqwrwIPFD-4_6KtP51lSps,702352
|
|
@@ -59,9 +59,9 @@ gpustack_runtime/detector/pyixml/__init__.py,sha256=2YmNoYhcIvc4CbRZgORM9o-GKdQ6
|
|
|
59
59
|
gpustack_runtime/detector/pymxsml/__init__.py,sha256=YxfNHq7TWd7CpNroP45BGXhcWNpY_sXgVzNGtx68DII,45409
|
|
60
60
|
gpustack_runtime/detector/pyrocmcore/__init__.py,sha256=rgwIdPS-7GG7_5luRMR1XG9QyNM3lJh5ryD7kfZqpWg,2523
|
|
61
61
|
gpustack_runtime/detector/pyrocmsmi/__init__.py,sha256=Gk4pTadOMzLCZJvQJ2S1N_1ivogtYokfVPHj_9Y874Y,12286
|
|
62
|
-
gpustack_runtime/_version_appendix.py,sha256
|
|
63
|
-
gpustack_runtime-0.1.42.dist-info/METADATA,sha256=
|
|
64
|
-
gpustack_runtime-0.1.42.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
65
|
-
gpustack_runtime-0.1.42.dist-info/entry_points.txt,sha256=bBO_61GxP6dIT74uZwbSDgW5Vt2pTePUS3CgjUJkUgg,68
|
|
66
|
-
gpustack_runtime-0.1.42.dist-info/licenses/LICENSE,sha256=OiPibowBvB-NHV3TP_NOj18XNBlXcshXZFMpa3uvKVE,10362
|
|
67
|
-
gpustack_runtime-0.1.42.dist-info/RECORD,,
|
|
62
|
+
gpustack_runtime/_version_appendix.py,sha256=-PDS1ZkWXq1N9cDAPU9eY8t4sJ5GHs8YQgMCBrRBrX0,23
|
|
63
|
+
gpustack_runtime-0.1.42.post1.dist-info/METADATA,sha256=2OqVrE1DJE5z3w_isNfXgoFioudBbs_EtlmV6LrHlBQ,2364
|
|
64
|
+
gpustack_runtime-0.1.42.post1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
65
|
+
gpustack_runtime-0.1.42.post1.dist-info/entry_points.txt,sha256=bBO_61GxP6dIT74uZwbSDgW5Vt2pTePUS3CgjUJkUgg,68
|
|
66
|
+
gpustack_runtime-0.1.42.post1.dist-info/licenses/LICENSE,sha256=OiPibowBvB-NHV3TP_NOj18XNBlXcshXZFMpa3uvKVE,10362
|
|
67
|
+
gpustack_runtime-0.1.42.post1.dist-info/RECORD,,
|
|
File without changes
|
{gpustack_runtime-0.1.42.dist-info → gpustack_runtime-0.1.42.post1.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{gpustack_runtime-0.1.42.dist-info → gpustack_runtime-0.1.42.post1.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|