ci: enable offline mode when local cache is complete to avoid HF Hub … (#16121)
This commit is contained in:
@@ -590,39 +590,56 @@ class ModelConfig:
|
||||
|
||||
hf_api = HfApi()
|
||||
try:
|
||||
# Retry HF API call up to 3 times
|
||||
file_exists = retry(
|
||||
lambda: hf_api.file_exists(
|
||||
self.model_path, "hf_quant_config.json"
|
||||
),
|
||||
max_retry=2,
|
||||
initial_delay=1.0,
|
||||
max_delay=5.0,
|
||||
# In offline mode, skip file_exists check to avoid OfflineModeIsEnabled error
|
||||
# Instead, directly try to download/read from cache with local_files_only
|
||||
file_exists = False # Initialize to avoid UnboundLocalError
|
||||
if not huggingface_hub.constants.HF_HUB_OFFLINE:
|
||||
# Online mode: check if file exists before attempting download (optimization)
|
||||
file_exists = retry(
|
||||
lambda: hf_api.file_exists(
|
||||
self.model_path, "hf_quant_config.json"
|
||||
),
|
||||
max_retry=2,
|
||||
initial_delay=1.0,
|
||||
max_delay=5.0,
|
||||
)
|
||||
if not file_exists:
|
||||
# File doesn't exist on hub, no need to try downloading
|
||||
return quant_cfg # None
|
||||
|
||||
# Download (online mode) or read from cache (offline mode)
|
||||
if envs.SGLANG_USE_MODELSCOPE.get():
|
||||
quant_config_file = model_file_download(
|
||||
model_id=self.model_path,
|
||||
file_path="hf_quant_config.json",
|
||||
revision=self.revision,
|
||||
)
|
||||
else:
|
||||
quant_config_file = hf_hub_download(
|
||||
repo_id=self.model_path,
|
||||
filename="hf_quant_config.json",
|
||||
revision=self.revision,
|
||||
local_files_only=huggingface_hub.constants.HF_HUB_OFFLINE,
|
||||
)
|
||||
with open(quant_config_file) as f:
|
||||
quant_config_dict = json.load(f)
|
||||
quant_cfg = self._parse_modelopt_quant_config(quant_config_dict)
|
||||
except huggingface_hub.errors.LocalEntryNotFoundError:
|
||||
# Offline mode and file not in cache - this is normal for non-quantized models
|
||||
logger.debug(
|
||||
f"hf_quant_config.json not found in cache for {self.model_path} "
|
||||
"(offline mode, normal for non-quantized models)"
|
||||
)
|
||||
if file_exists:
|
||||
# Download and parse the quantization config for remote models
|
||||
if envs.SGLANG_USE_MODELSCOPE.get():
|
||||
quant_config_file = model_file_download(
|
||||
model_id=self.model_path,
|
||||
file_path="hf_quant_config.json",
|
||||
revision=self.revision,
|
||||
)
|
||||
else:
|
||||
quant_config_file = hf_hub_download(
|
||||
repo_id=self.model_path,
|
||||
filename="hf_quant_config.json",
|
||||
revision=self.revision,
|
||||
)
|
||||
with open(quant_config_file) as f:
|
||||
quant_config_dict = json.load(f)
|
||||
quant_cfg = self._parse_modelopt_quant_config(quant_config_dict)
|
||||
except huggingface_hub.errors.OfflineModeIsEnabled:
|
||||
# Should not reach here after our changes, but keep for safety
|
||||
logger.warning(
|
||||
"Offline mode is enabled, skipping hf_quant_config.json check"
|
||||
)
|
||||
except Exception as e:
|
||||
logger.warning(
|
||||
f"Failed to check hf_quant_config.json: {self.model_path} {e}"
|
||||
"Failed to load hf_quant_config.json for model %s: %s",
|
||||
self.model_path,
|
||||
e,
|
||||
)
|
||||
elif os.path.exists(os.path.join(self.model_path, "hf_quant_config.json")):
|
||||
quant_config_file = os.path.join(
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -566,7 +566,9 @@ class DefaultModelLoader(BaseModelLoader):
|
||||
)
|
||||
|
||||
hf_config = AutoConfig.from_pretrained(
|
||||
model_config.model_path, trust_remote_code=True
|
||||
model_config.model_path,
|
||||
trust_remote_code=True,
|
||||
local_files_only=huggingface_hub.constants.HF_HUB_OFFLINE,
|
||||
)
|
||||
with init_empty_weights():
|
||||
torch_dtype = getattr(hf_config, "torch_dtype", torch.float16)
|
||||
@@ -599,6 +601,7 @@ class DefaultModelLoader(BaseModelLoader):
|
||||
device_map=device_map,
|
||||
**model_kwargs,
|
||||
trust_remote_code=True,
|
||||
local_files_only=huggingface_hub.constants.HF_HUB_OFFLINE,
|
||||
)
|
||||
# Handle both legacy modelopt_quant and unified quantization flags
|
||||
if hasattr(model_config, "modelopt_quant") and model_config.modelopt_quant:
|
||||
|
||||
Reference in New Issue
Block a user