Files
live-app-translator/.gitea/workflows/windows-gpu.yml
EJClaw bb385c1d7b
Some checks failed
Windows / verify (push) Has been cancelled
ci: GPU 검증을 별도 러너 라벨로 분리 (windows-gpu)
GPU 는 한 VM 만 독점한다 — 컨슈머 NVIDIA 는 vGPU/SR-IOV 를 지원하지 않아
쪼개 쓸 방법이 없고, 지금 RTX 5050 은 .9(리눅스)에 물려 있다. 따라서 GPU
없는 상시 CI VM 에서는 CUDA·VRAM·4~5티어를 영영 확인할 수 없다.

코드로 우회할 수 없는 제약이므로, 대신 **나중에 GPU 머신이 생겼을 때 그대로
붙도록** 구조를 지금 잡아뒀다. 이 러너를 다른 프로젝트 GPU 테스트에도 쓸
계획이라면 이 구분이 그쪽에도 그대로 적용된다.

  windows:host      GPU 없는 서버 VM   main push 마다 자동
                    테스트·Windows 경로·오디오→자막·포터블 exe
  windows-gpu:host  GPU 달린 머신      수동 실행만
                    CUDA 인식·VRAM 상한·4·5티어·GPU 번역

- windows_smoke.py --gpu
  GPU 있는 머신에서만 의미 있는 항목만 모았다. CUDA 가용성, 앱의 GPU 인식,
  VRAM 상한이 실제로 걸리는지, torch 필요 티어(4·5)가 열리는지, GPU 로 실제
  번역까지. 다른 모드와 달리 **GPU 부재를 치명적 실패로 처리**한다 —
  GPU 를 확인하겠다고 부른 작업이 조용히 통과하면 안 되기 때문이다.

- .gitea/workflows/windows-gpu.yml
  수동 실행 전용. 러너가 없으면 큐에 쌓이기만 하고 아무 일도 없다.
  포터블 CI 와 달리 torch CUDA 빌드를 설치하고, 설치 직후 CPU 빌드가
  깔리지 않았는지 확인한다. nvidia-smi 가 없으면 그 자리에서 멈춘다.

- 문서에 두 러너 구조와 GPU 머신 확보 3가지 방안(서버에 GPU 추가 /
  .9 에서 옮기기 / 필요할 때만 실물 PC) + 슬롯 확인 명령 추가.

검증: pytest 189개 통과, ruff clean, 두 워크플로 파싱·라벨·트리거 확인,
      --gpu 를 torch 없는 환경에서 실행해 의도대로 실패(종료코드 1)하는지 확인

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-09-23 03:40:01 +09:00

73 lines
2.8 KiB
YAML

# 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:
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))"
- 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