Skip to content

Commit 3df88e1

Browse files
committed
fix: use importlib.metadata for all framework probes, add tensorrt_llm to identity
import tensorrt_llm loads native CUDA extensions which crash without GPU context. The fingerprint script runs before the worker starts, so GPU may not be available. importlib.metadata.version() only reads package metadata from dist-info — no native code, no GPU needed. Applied to all framework probes (vllm, sglang, tensorrt_llm, torch, dynamo).
1 parent 3b6e231 commit 3df88e1

2 files changed

Lines changed: 20 additions & 15 deletions

File tree

recipes/mocker/kimi-trace-agg.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,5 @@ identity:
5656
revision: "c0285e649c34d4386b01e38abca642c06cbe014e"
5757
frameworks:
5858
dynamo: "1.0.0"
59+
tensorrt_llm: "1.3.0rc9"
5960
torch: "2.10.0a0+b4e4ee81d3.nv25.12"

src/srtctl/core/fingerprint.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -246,16 +246,21 @@ def probe_nccl_version() -> ProbeResult:
246246

247247

248248
def probe_frameworks() -> ProbeResult:
249-
"""Get versions of inference frameworks (only detected ones)."""
249+
"""Get versions of inference frameworks (only detected ones).
250+
251+
Uses importlib.metadata instead of importing modules directly to avoid
252+
loading native CUDA extensions (tensorrt_llm, torch) which fail without
253+
GPU context.
254+
"""
250255
versions: dict[str, str] = {}
251-
for name, cmd in [
252-
("vllm", 'python3 -c "import vllm; print(vllm.__version__)"'),
253-
("sglang", 'python3 -c "import sglang; print(sglang.__version__)"'),
254-
("tensorrt_llm", 'python3 -c "import tensorrt_llm; print(tensorrt_llm.__version__)"'),
255-
("dynamo", "python3 -c \"import importlib.metadata; print(importlib.metadata.version('ai-dynamo'))\""),
256-
("torch", 'python3 -c "import torch; print(torch.__version__)"'),
256+
for name, pkg in [
257+
("vllm", "vllm"),
258+
("sglang", "sglang"),
259+
("tensorrt_llm", "tensorrt-llm"),
260+
("torch", "torch"),
261+
("dynamo", "ai-dynamo"),
257262
]:
258-
v = _run_cmd(cmd)
263+
v = _run_cmd(f"python3 -c \"import importlib.metadata; print(importlib.metadata.version('{pkg}'))\"")
259264
if v:
260265
versions[name] = v
261266
return ProbeResult.success(versions)
@@ -779,20 +784,19 @@ def gpu_info():
779784
return {{'available': True, 'driver': gpus[0]['driver'] if gpus else 'unknown', 'gpus': gpus}}
780785
781786
def framework_versions():
787+
# Use importlib.metadata for all packages — avoids loading native CUDA
788+
# extensions (tensorrt_llm, torch) which fail without GPU context.
782789
versions = {{}}
783-
for name, mod in [
790+
for name, pkg in [
784791
('vllm', 'vllm'),
785792
('sglang', 'sglang'),
786-
('tensorrt_llm', 'tensorrt_llm'),
793+
('tensorrt_llm', 'tensorrt-llm'),
787794
('torch', 'torch'),
795+
('dynamo', 'ai-dynamo'),
788796
]:
789-
v = run(f'{{PY}} -c "import {{mod}}; print({{mod}}.__version__)"'.format(PY=PY, mod=mod))
797+
v = run(f"{{PY}} -c \\"import importlib.metadata; print(importlib.metadata.version('{{pkg}}'))\\"".format(PY=PY, pkg=pkg))
790798
if v:
791799
versions[name] = v
792-
# dynamo uses ai-dynamo package name
793-
v = run(f"{{PY}} -c \\"import importlib.metadata; print(importlib.metadata.version('ai-dynamo'))\\"".format(PY=PY))
794-
if v:
795-
versions['dynamo'] = v
796800
return versions
797801
798802
def model_identity(model_path):

0 commit comments

Comments
 (0)