diff --git a/tensorrt_llm/_torch/model_config.py b/tensorrt_llm/_torch/model_config.py index f2a15151d781..fa448d8876c2 100644 --- a/tensorrt_llm/_torch/model_config.py +++ b/tensorrt_llm/_torch/model_config.py @@ -1,4 +1,5 @@ import contextlib +import errno import json import os import tempfile @@ -86,8 +87,14 @@ def config_file_lock(timeout: int = 10): try: with lock: yield - except (PermissionError, filelock.Timeout): - # Fallback to tempdir + except (PermissionError, OSError, filelock.Timeout) as e: + # Fallback to tempdir when primary lock path is unusable (e.g., + # NFS locking failures like ENOLCK/ESTALE, permission issues, + # or lock acquisition timeouts) + if isinstance(e, + OSError) and e.errno not in (errno.EACCES, errno.EPERM, + errno.ENOLCK, errno.ESTALE): + raise tmp_dir = Path(tempfile.gettempdir()) tmp_dir.mkdir(parents=True, exist_ok=True) tmp_lock_path = tmp_dir / "_remote_code.lock" @@ -101,7 +108,11 @@ def config_file_lock(timeout: int = 10): ) # proceed without lock yield - except (PermissionError) as e: + except (PermissionError, OSError) as e: + if isinstance( + e, OSError) and e.errno not in (errno.EACCES, errno.EPERM, + errno.ENOLCK, errno.ESTALE): + raise logger.warning( f"tempdir config lock unavailable due to OS/permission issue: {e}, proceeding without lock" )