Spaces:
Running on A100
Running on A100
| set -euo pipefail | |
| # GovOn Runtime์ HuggingFace Spaces์ ๋ฐฐํฌํ๋ ์คํฌ๋ฆฝํธ | |
| # Usage: ./scripts/deploy-hfspace.sh | |
| export SPACE_REPO="${SPACE_REPO:-umyunsang/govon-runtime}" | |
| export HF_TOKEN="${HF_TOKEN:?HF_TOKEN ํ๊ฒฝ๋ณ์๊ฐ ํ์ํฉ๋๋ค}" | |
| echo "=== GovOn HF Spaces ๋ฐฐํฌ ===" | |
| echo "Space: $SPACE_REPO" | |
| # 1. Space ์์ฑ (์ด๋ฏธ ์์ผ๋ฉด skip) | |
| python3 -c " | |
| import os | |
| from huggingface_hub import create_repo | |
| is_private = os.environ.get('SPACE_PRIVATE', 'false').lower() in ('true', '1', 'yes') | |
| create_repo(os.environ['SPACE_REPO'], repo_type='space', space_sdk='docker', exist_ok=True, token=os.environ['HF_TOKEN'], private=is_private) | |
| print('Space repo ready') | |
| " | |
| # 2. ํ์ ํ์ผ ์ ๋ก๋ | |
| python3 -c " | |
| import os | |
| from huggingface_hub import HfApi | |
| api = HfApi(token=os.environ['HF_TOKEN']) | |
| space_repo = os.environ['SPACE_REPO'] | |
| # Dockerfile | |
| api.upload_file(path_or_fileobj='Dockerfile.hfspace', path_in_repo='Dockerfile', | |
| repo_id=space_repo, repo_type='space') | |
| # requirements.txt | |
| api.upload_file(path_or_fileobj='requirements.txt', path_in_repo='requirements.txt', | |
| repo_id=space_repo, repo_type='space') | |
| # src/ ๋๋ ํฐ๋ฆฌ | |
| api.upload_folder(folder_path='src', path_in_repo='src', | |
| repo_id=space_repo, repo_type='space', | |
| ignore_patterns=['__pycache__', '*.pyc', '.pytest_cache']) | |
| # agents/ ๋๋ ํฐ๋ฆฌ (์กด์ฌํ๋ฉด) | |
| if os.path.isdir('agents'): | |
| api.upload_folder(folder_path='agents', path_in_repo='agents', | |
| repo_id=space_repo, repo_type='space') | |
| print('Files uploaded') | |
| " | |
| # 3. Secrets ์ค์ | |
| python3 -c " | |
| import os | |
| from huggingface_hub import HfApi | |
| api = HfApi(token=os.environ['HF_TOKEN']) | |
| api.add_space_secret(os.environ['SPACE_REPO'], 'HF_TOKEN', os.environ['HF_TOKEN']) | |
| # ADAPTER_PATHS: HF Hub repo ID ๋ฐฉ์ (vLLM์ด ์๋ ๋ค์ด๋ก๋) | |
| adapter_paths = os.environ.get('ADAPTER_PATHS', 'civil=umyunsang/govon-civil-adapter,legal=siwo/govon-legal-adapter') | |
| api.add_space_secret(os.environ['SPACE_REPO'], 'ADAPTER_PATHS', adapter_paths) | |
| print('Secrets configured') | |
| " | |
| # 4. ํ๋์จ์ด ์ค์ (L4 24GB โ base 20GB + adapters ~1GB) | |
| # ๊ถํ/์ฟผํฐ ๋ถ์กฑ ์ ๊ฒฝ๊ณ ๋ง ์ถ๋ ฅํ๊ณ ๊ณ์ ์งํ | |
| python3 -c " | |
| import os | |
| from huggingface_hub import HfApi | |
| api = HfApi(token=os.environ['HF_TOKEN']) | |
| try: | |
| api.request_space_hardware(os.environ['SPACE_REPO'], 'l4x1') | |
| print('Hardware set to l4x1 (24GB VRAM)') | |
| except Exception as e: | |
| print(f'WARNING: ํ๋์จ์ด ์ค์ ์คํจ (์๋์ผ๋ก ์ค์ ํ์): {e}') | |
| " || true | |
| echo "" | |
| echo "=== ๋ฐฐํฌ ์๋ฃ ===" | |
| echo "Space URL: https://huggingface.co/spaces/$SPACE_REPO" | |
| echo "ํ๋์จ์ด: L4 24GB (์๋ ์ค์ ๋จ)" | |
| echo "" | |
| echo "GPU ๊ฒ์ฆ ์คํ:" | |
| echo " GOVON_RUNTIME_URL=https://<space-url> python3 scripts/verify_lora_serving.py" | |