# GPU 미사용 — CUDA 오류 500

> GPU가 설치되어 있는데도 추론 컨테이너가 "CUDA failure 500"을 로깅하고 CPU로 폴백합니다.

## 증상

박스에 NVIDIA GPU가 있는데도 추론이 CPU에서 실행됩니다. 추론 컨테이너 로그에 다음이
표시됩니다:

```
CUDA failure 500: named symbol not found
... resolved to CPU only
```

대시보드의 **Python Inference** 카드에 `TensorRT`나 `CUDA` 대신 CPU (fallback)가 표시됩니다. 엄격한 GPU 강제 적용이 켜져 있으면 컨테이너가 대신 종료되고 계속 재시작됩니다.

`nvidia-smi`가 GPU를 존재하는 것으로 보고한다고 해서 CUDA 컴퓨트가 동작한다는 의미는
**아닙니다**. 관리 계층(`nvidia-smi`)과 컴퓨트 드라이버는 서로 다른 것입니다 — 여기서
실패한 것은 컴퓨트 드라이버입니다.

## 확인

결정적인 테스트는 NVIDIA의 자체 컴퓨트 샘플입니다. 호스트에서 실행하세요:

```bash
docker run --rm --gpus all nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0
```

- **정상 호스트** → `Test PASSED`를 출력합니다.
- **손상된 호스트** → `Failed to allocate device vector A (error code named symbol not found)!`

`nvidia-smi -L`로 GPU가 나열되는데도 이 샘플이 실패하면, 컨테이너에서 컴퓨트 용도로 GPU를
사용할 수 없습니다. 문제는 호스트 GPU 스택이지 Xisom 이미지가 아닙니다.

실행 중인 컨테이너 로그에서도 폴백을 확인할 수 있습니다:

```bash
docker compose -f docker-compose.release.yml logs inference | grep -E "CUDA failure 500|resolved to CPU"
```

## 해결

이것은 플랫폼 드라이버 계층의 호스트 수준 GPU 컴퓨트 문제이므로, 해결은 호스트에서
이루어집니다 — Xisom 스택이 아닙니다.

1. 호스트의 **NVIDIA GPU 드라이버**를 완전한 CUDA 컴퓨트 지원을 갖춘 최신 빌드로
   업데이트합니다. Windows + WSL2 호스트에서는 이후 `wsl --update`를 실행한 뒤
   `wsl --shutdown`도 실행하세요.

   
   Docker / 컨테이너 플랫폼만 업데이트해서는 이 문제가 **해결되지 않습니다**. 컴퓨트
   실패는 컨테이너 런타임 아래의 GPU 드라이버 계층에 있습니다. 플랫폼 업데이트는 GPU
   패스스루 설정을 초기화해 오히려 상황을 악화시킬 수도 있습니다.
   

2. 새로 고친 드라이버에 컨테이너 런타임을 다시 연결합니다:

   ```bash
   sudo nvidia-ctk runtime configure --runtime=docker
   sudo systemctl restart docker
   ```

3. 컴퓨트 샘플이 `Test PASSED`를 출력할 때까지 다시 실행합니다:

   ```bash
   docker run --rm --gpus all nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0
   ```

4. 추론 컨테이너를 재시작하고 GPU를 인식했는지 확인합니다. 구성 변경은 필요 없습니다 —
   기본 실행 모드가 사용 가능한 최적의 공급자를 자동 선택합니다:

   ```bash
   docker compose -f docker-compose.release.yml restart inference
   docker compose -f docker-compose.release.yml logs inference | grep "EP enabled"
   # 예상: "TensorRT EP enabled" 또는 "CUDA EP enabled"
   ```

### 호스트가 아직 손상된 동안

GPU 프로브와 씨름하는 대신 CPU에서 깔끔하게 실행하세요. 추론 서비스에
`EXECUTION_MODE=cpu`(또는 `FORCE_CPU=1`)를 설정하고 재시작합니다. 드라이버가 수정될
때까지 박스는 CPU에서 계속 예측합니다.

손상된 호스트에서 GPU 모드와 함께 엄격한 GPU 강제 적용(`STRICT_EP=1`)을 **켜지 마세요** —
조용히 CPU로 동작하는 대신 올바르게 시작을 거부하게 되며, 이는 우회 작업 중 원하는 것과
정반대입니다.

## 예방

- **GPU가 필수인 곳에서는 조용한 CPU 폴백을 시끄럽게 만드세요.** 반드시 GPU에서 실행해야
  하는 박스에서는 공급자를 고정하고 엄격한 강제 적용(`EXECUTION_MODE=cuda` +
  `STRICT_EP=1`)을 켜서, GPU 라이브러리가 없으면 조용히 CPU로 저하되는 대신 시작 시
  컨테이너가 실패하도록 하세요.
- **GPU 드라이버나 호스트 업데이트 후 컴퓨트 샘플을 합격 게이트로 취급하세요** —
  `nvidia-smi` 통과만으로는 추론이 GPU를 사용한다는 충분한 증거가 아닙니다.
- **첫 실행은 느린 것이지 멈춘 것이 아닙니다.** 첫 GPU 시작 시 엔진이 컴파일되고
  캐시됩니다(2~3분). 이후 재시작은 빠릅니다. 긴 시작 구간을 위 실패와 혼동하지 마세요.

## 관련 항목

- [GPU 예상 시 CPU에서 실행됨](/ko/troubleshooting/execution-provider-fallback/) — 호스트 GPU는 정상이나 공급자가 여전히 등급을 낮출 때.
- [하드웨어 설정](/ko/install-deploy/hardware-setup/) — 지원되는 GPU 등급.
- [관측성 및 알림](/operate/monitoring/) — 활성 공급자가 표시되는 곳.
