# Windows GPU 검증 — GPU 가 달린 러너에서만 # # GPU 는 한 VM 만 독점한다(컨슈머 NVIDIA 는 vGPU 미지원). 그래서 GPU 없는 # 상시 CI VM(runs-on: windows)에서는 CUDA·VRAM·4~5티어를 확인할 수 없다. # 그 항목만 떼어내 별도 라벨로 돌린다. # # 러너 라벨: windows-gpu:host # - GPU 가 달린 Windows 머신에 등록한다 (두 번째 GPU를 꽂은 VM, 또는 실물 PC) # - 상시로 띄울 필요 없다. 필요할 때만 daemon 을 켜면 된다 # # 그래서 트리거도 **수동 실행만** 이다. 러너가 없으면 큐에 쌓이기만 하고 # 아무 일도 일어나지 않는다. 자동으로 돌리고 싶으면 push 트리거를 켜면 된다. name: Windows GPU on: workflow_dispatch: # GPU 는 나눠 쓸 수 없다. 두 작업이 동시에 VRAM 을 잡으면 둘 다 OOM 으로 # 죽거나, 더 나쁘게는 하나가 조용히 느려져 원인을 못 찾는다. # 이건 같은 저장소 안에서만 막아준다. **다른 저장소까지 포함한 진짜 보장은 # 러너의 capacity: 1** 이다 (docs/WINDOWS-TESTING.md 참고). concurrency: group: windows-gpu cancel-in-progress: false jobs: gpu: runs-on: windows-gpu timeout-minutes: 90 steps: # 라벨이 안 맞으면 Gitea 가 기본 ubuntu 컨테이너로 떨어뜨린다. # GPU 를 확인하겠다고 부른 작업이 엉뚱한 데서 도는 일은 막아야 한다. - name: Windows 인지 확인 shell: pwsh run: | Write-Host "RUNNER_OS=$env:RUNNER_OS" if ($env:RUNNER_OS -ne "Windows") { Write-Host "::error::Windows 러너가 아닙니다 ($env:RUNNER_OS)." Write-Host "::error::러너를 'windows-gpu:host' 라벨로 등록했는지 확인하세요." exit 1 } - name: NVIDIA GPU 가 실제로 보이는지 shell: pwsh run: | nvidia-smi --query-gpu=name,memory.total --format=csv,noheader if ($LASTEXITCODE -ne 0) { Write-Host "::error::nvidia-smi 실패 — 이 러너에는 GPU 가 없습니다." exit 1 } - name: 소스 받기 uses: actions/checkout@v4 # 포터블 CI 와 달리 여기서는 torch CUDA 빌드가 필요하다. # 4~5티어(Seed-X / Qwen3)가 torch 위에서 돌기 때문이다. - name: 의존성 설치 (torch CUDA 포함) shell: pwsh run: | python -m venv .venv-gpu .\.venv-gpu\Scripts\python -m pip install --upgrade pip --quiet .\.venv-gpu\Scripts\python -m pip install torch --index-url https://download.pytorch.org/whl/cu128 .\.venv-gpu\Scripts\python -m pip install -r requirements.txt .\.venv-gpu\Scripts\python -c "import torch; assert torch.cuda.is_available(), 'CUDA 안 잡힘 — CPU 빌드가 깔렸는지 확인'; print('CUDA OK:', torch.cuda.get_device_name(0))" # 4티어(Seed-X AWQ Int4)에만 필요하고 Windows 휠이 없을 때가 있다. # 실패해도 멈추지 않는다 — 점검기가 autoawq 유무를 보고 4티어를 # 건너뛰면서 "건너뜀: 정밀(autoawq 없음)" 이라고 분명히 남긴다. - name: autoawq (4티어 전용, 선택) shell: pwsh continue-on-error: true run: .\.venv-gpu\Scripts\python -m pip install autoawq - name: GPU 전용 점검 shell: pwsh env: PYTHONPATH: src run: .\.venv-gpu\Scripts\python packaging\windows_smoke.py --gpu - name: 결과물 업로드 uses: actions/upload-artifact@v4 if: always() with: name: LiveSub-gpu-report path: artifacts/*.txt retention-days: 14