|
@@ -24,6 +24,7 @@ from exo.inference.tokenizers import resolve_tokenizer
|
|
|
from exo.orchestration.node import Node
|
|
|
from exo.models import build_base_shard, get_repo
|
|
|
from exo.viz.topology_viz import TopologyViz
|
|
|
+from exo.download.hf.hf_helpers import has_hf_home_read_access, has_hf_home_write_access, get_hf_home
|
|
|
|
|
|
# parse args
|
|
|
parser = argparse.ArgumentParser(description="Initialize GRPC Discovery")
|
|
@@ -207,6 +208,18 @@ async def run_model_cli(node: Node, inference_engine: InferenceEngine, model_nam
|
|
|
async def main():
|
|
|
loop = asyncio.get_running_loop()
|
|
|
|
|
|
+ # Check HuggingFace directory permissions
|
|
|
+ hf_home, has_read, has_write = get_hf_home(), await has_hf_home_read_access(), await has_hf_home_write_access()
|
|
|
+ if DEBUG >= 1: print(f"Model storage directory: {hf_home}")
|
|
|
+ print(f"{has_read=}, {has_write=}")
|
|
|
+ if not has_read or not has_write:
|
|
|
+ print(f"""
|
|
|
+ WARNING: Limited permissions for model storage directory: {hf_home}.
|
|
|
+ This may prevent model downloads from working correctly.
|
|
|
+ {"❌ No read access" if not has_read else ""}
|
|
|
+ {"❌ No write access" if not has_write else ""}
|
|
|
+ """)
|
|
|
+
|
|
|
# Use a more direct approach to handle signals
|
|
|
def handle_exit():
|
|
|
asyncio.ensure_future(shutdown(signal.SIGTERM, loop))
|