hf offline decorator for tests to workaround rate limits (#2452) [skip ci]
* hf offline decorator for tests to workaround rate limits * fail quicker so we can see logs * try new cache name * limit files downloaded * phi mini predownload * offline decorator for phi tokenizer * handle meta llama 8b offline too * make sure to return fixtures if they are wrapped too * more fixes * more things offline * more offline things * fix the env var * fix the model name * handle gemma also * force reload of modules to recheck offline status * prefetch mistral too * use reset_sessions so hub picks up offline mode * more fixes * rename so it doesn't seem like a context manager * fix backoff * switch out tinyshakespeare dataset since it runs a py script to fetch data and doesn't work offline * include additional dataset * more fixes * more fixes * replace tiny shakespeaere dataset * skip some tests for now * use more robust check using snapshot download to determine if a dataset name is on the hub * typo for skip reason * use local_files_only * more fixtures * remove local only * use tiny shakespeare as pretrain dataset and streaming can't be offline even if precached * make sure fixtures aren't offline improve the offline reset try bumping version of datasets reorder reloading and setting prime a new cache run the tests now with fresh cache try with a static cache * now run all the ci again with hopefully a correct cache * skip wonky tests for now * skip wonky tests for now * handle offline mode for model card creation
This commit is contained in:
85
tests/utils/__init__.py
Normal file
85
tests/utils/__init__.py
Normal file
@@ -0,0 +1,85 @@
|
||||
"""
|
||||
test utils for helpers and decorators
|
||||
"""
|
||||
|
||||
import os
|
||||
from functools import wraps
|
||||
|
||||
from huggingface_hub.utils import reset_sessions
|
||||
|
||||
|
||||
def reload_modules(hf_hub_offline):
|
||||
# Force reload of the modules that check this variable
|
||||
import importlib
|
||||
|
||||
import datasets
|
||||
import huggingface_hub.constants
|
||||
|
||||
# Reload the constants module first, as others depend on it
|
||||
importlib.reload(huggingface_hub.constants)
|
||||
huggingface_hub.constants.HF_HUB_OFFLINE = hf_hub_offline
|
||||
importlib.reload(datasets.config)
|
||||
datasets.config.HF_HUB_OFFLINE = hf_hub_offline
|
||||
reset_sessions()
|
||||
|
||||
|
||||
def enable_hf_offline(test_func):
|
||||
"""
|
||||
test decorator that sets HF_HUB_OFFLINE environment variable to True and restores it after the test even if the test fails.
|
||||
:param test_func:
|
||||
:return:
|
||||
"""
|
||||
|
||||
@wraps(test_func)
|
||||
def wrapper(*args, **kwargs):
|
||||
# Save the original value of HF_HUB_OFFLINE environment variable
|
||||
original_hf_offline = os.getenv("HF_HUB_OFFLINE")
|
||||
|
||||
# Set HF_OFFLINE environment variable to True
|
||||
os.environ["HF_HUB_OFFLINE"] = "1"
|
||||
|
||||
reload_modules(True)
|
||||
try:
|
||||
# Run the test function
|
||||
return test_func(*args, **kwargs)
|
||||
finally:
|
||||
# Restore the original value of HF_HUB_OFFLINE environment variable
|
||||
if original_hf_offline is not None:
|
||||
os.environ["HF_HUB_OFFLINE"] = original_hf_offline
|
||||
reload_modules(bool(original_hf_offline))
|
||||
else:
|
||||
del os.environ["HF_HUB_OFFLINE"]
|
||||
reload_modules(False)
|
||||
|
||||
return wrapper
|
||||
|
||||
|
||||
def disable_hf_offline(test_func):
|
||||
"""
|
||||
test decorator that sets HF_HUB_OFFLINE environment variable to False and restores it after the wrapped func
|
||||
:param test_func:
|
||||
:return:
|
||||
"""
|
||||
|
||||
@wraps(test_func)
|
||||
def wrapper(*args, **kwargs):
|
||||
# Save the original value of HF_HUB_OFFLINE environment variable
|
||||
original_hf_offline = os.getenv("HF_HUB_OFFLINE")
|
||||
|
||||
# Set HF_OFFLINE environment variable to True
|
||||
os.environ["HF_HUB_OFFLINE"] = "0"
|
||||
|
||||
reload_modules(False)
|
||||
try:
|
||||
# Run the test function
|
||||
return test_func(*args, **kwargs)
|
||||
finally:
|
||||
# Restore the original value of HF_HUB_OFFLINE environment variable
|
||||
if original_hf_offline is not None:
|
||||
os.environ["HF_HUB_OFFLINE"] = original_hf_offline
|
||||
reload_modules(bool(original_hf_offline))
|
||||
else:
|
||||
del os.environ["HF_HUB_OFFLINE"]
|
||||
reload_modules(False)
|
||||
|
||||
return wrapper
|
||||
Reference in New Issue
Block a user