게시판인베이더 게임으로 배우는 휴리스틱과 AI 브리지예제 소스

예제 소스

인베이더 게임으로 배우는 휴리스틱과 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()