예제 소스
인베이더 게임으로 배우는 휴리스틱과 AI 브리지 · 파일 17개
download_vlm_model.py
#!/usr/bin/env python3
"""Qwen3-VL 등 가중치를 invader/vlm_models/ 아래에 받습니다 (omook download_qwen3vl 와 동일 패턴).
사용:
cd invader
pip install -r requirements-vlm.txt
python download_vlm_model.py
로그인 필요 모델이면: huggingface-cli login 또는 export HF_TOKEN=...
다운로드 후 서버 (mock 끔):
python invader_vlm_server.py --port 9300 --device mps
# 또는 CPU: --device cpu
"""
from __future__ import annotations
import argparse
from pathlib import Path
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument("--repo", default="Qwen/Qwen3-VL-2B-Instruct")
parser.add_argument(
"--out",
default=str(Path(__file__).resolve().parent / "vlm_models"),
help="저장 부모 디렉터리 (아래에 repo_id 의 / → __ 폴더 생성)",
)
args = parser.parse_args()
try:
from huggingface_hub import snapshot_download
except ImportError as e:
raise SystemExit("pip install huggingface_hub") from e
out_root = Path(args.out)
target = out_root / args.repo.replace("/", "__")
target.mkdir(parents=True, exist_ok=True)
print(f"[download] repo={args.repo}\n[download] dir={target}")
path = snapshot_download(
repo_id=args.repo,
local_dir=str(target),
max_workers=4,
)
print(f"DONE → {path}")
print("\n서버 실행 예 (로컬 경로 자동 인식은 config.json 있으면 됨):")
print(f" python invader_vlm_server.py --host 127.0.0.1 --port 9300 --device mps")
print(f" # 명시 경로: --model-id {path!r}")
if __name__ == "__main__":
main()