상세 컨텐츠

본문 제목

Unreal Engine에서 CUDA와 OpenCV 사용 시행착오 정리하기

언리얼엔진

by zmo 2025. 8. 30. 23:06

본문

이번주는 저번에 공부했던 Unreal Engine에서 CUDA와 OpenCV 사용시에 격었던 시행착오에 대해 알아보고 GPT와 함께 그 해결 방법을 알아보자

1. 파이썬 버전문제 (버전 11)

왜 Python 3.13이 안 됐는가?

  • 아직 많은 라이브러리(특히 PyTorch, TensorFlow, ONNX Runtime 등)가 Python 3.13을 공식 지원하지 않아요.
  • 그래서 pip로 설치하려고 하면 "버전을 찾을 수 없다"는 오류가 떴던 거예요.

🔹 Python 3.11로 바꾼 게 왜 잘 됐는가?

  • Python 3.11은 현재 가장 널리 지원되는 안정 버전이라, PyTorch, OpenCV, ONNX 등 대부분이 빌드되어 있어요.
  • Python 3.13을 그냥 제거하면, python 명령이 자동으로 3.11을 가리키게 되고 정상 작동하게 돼요.

즉, 굳이 환경 설정을 직접 바꾸지 않고도 3.13을 지워버리면 시스템이 남아 있는 3.11을 사용하게 되는 거예요.


🔹 더 확실하게 확인하는 방법

 

1.터미널에서

python --version

→ Python 3.11.x 가 나와야 함.

 

2. pip도 같은 버전을 따라가야 한다.

python -m pip --version

 → Python 3.11 경로가 보이면 정상 연결됨.


👉 그래서 지금처럼 3.13 삭제 → 3.11 설치 후 사용하는 게 가장 안전하고 흔한 방법이에요.

추가로, 앞으로 충돌 방지하려면 PATH 환경변수에 Python 3.11만 남아 있는지 확인해주면 더 깔끔해요.

 

⚠️ 하지만 저처럼 3.13 버전을 그대로 두고 3.11 버전을 설치한 뒤에 3.13 버전을 그냥 삭제해버린다면 PATH 경로에 3.13 버전이 그대로 남아있을 수 있어 더 귀찮은 일이 벌어질 수 있습니다!

그러므로 다음과 같은 방법으로 Python 버전 관리해주기!

🐍 Python 여러 버전 안전하게 관리하는 방법

 

1️⃣ Windows용 Python Launcher (py) 사용

  • Python 설치할 때 기본으로 같이 설치되는 런처예요.
  • 버전별로 실행할 수 있습니다:
py -3.11 # Python 3.11 실행 
py -3.13 # Python 3.13 실행 
py -3.9 # Python 3.9 실행
  • 패키지 설치도 버전 지정 가능:
py -3.11 -m pip install torch

 

👉 이렇게 하면 PATH 꼬임 문제 없이 원하는 버전을 자유롭게 쓸 수 있어요.


2️⃣ PATH 충돌 방지

  • 굳이 PATH에 여러 버전을 다 등록할 필요 없음.
  • 기본 PATH에는 주로 쓸 하나의 버전만 두고, 나머지는 py 명령어로 관리하는 게 안전함.

3️⃣ 가상환경(venv) 적극 활용

  • 프로젝트별로 다른 Python 버전 & 라이브러리 필요할 때 유용:
py -3.11 -m venv myenv # Python 3.11 가상환경 생성 
myenv\\Scripts\\activate # 가상환경 진입 
pip install numpy torch opencv-python
  • 이렇게 하면 시스템 Python이랑 프로젝트 Python이 분리돼서 충돌이 거의 없음.

4️⃣ 권장 워크플로우

  • 시스템에는 최신 안정 버전(예: 3.11) 하나만 PATH에 두기
  • 다른 버전 필요하면 py -3.xx로 실행
  • 프로젝트 단위에서는 무조건 venv 사용

👉 요약:

  • py 런처 쓰면 버전 충돌 없음
  • PATH는 한 버전만
  • 프로젝트는 venv로 독립

2. 쿠다의 버전&설치 방법 (왜 터미널에서 설치할까)

Chat GPT 왈

NVIDIA 공식 설치 관리자(그래픽 UI)에서 문제가 발생했을 때

  • 우리가 보통 "다음 → 다음" 하는 방식
  • 여기서 오류가 났다는 건 설치 중 일부가 실패했을 수 있다는 뜻

제가 말한 UI 문제라는 건 "설치 프로그램의 그래픽 인터페이스(윈도우 창)"에서만 오류가 나고, 실제로 내부적으로는 정상 설치가 되는 경우를 말하는 거예요.


🔹 예를 들어

  • NVIDIA에서 제공하는 CUDA 설치 관리자는 두 가지 방식이 있어요:
    1. GUI(그래픽 설치 관리자) → 창이 뜨고 "다음(next)" 버튼 눌러서 설치하는 방식
    2. CLI(명령 프롬프트 설치) → exe를 실행할 때 옵션을 줘서 진행하는 방식
  • 가끔 GUI 설치에서 UI 충돌, 권한 문제, 레지스트리 읽기 오류 같은 게 생겨서 설치 실패 메시지가 뜨기도 해요.
  • 하지만 CLI 방식(프롬프트)에서는 이런 UI 의존성이 없으니까 실제 CUDA Toolkit과 드라이버가 정상적으로 설치될 수 있어요.

🔹 쉽게 말하면

  • UI 설치 실패 = 겉에서 "설치 실패" 알림만 뜬 경우
  • 실제 내부 설치 = 파일 복사, 환경 변수 등록 같은 건 정상적으로 완료된 경우

즉, 설치 창에서는 실패처럼 보여도 CUDA 자체는 잘 깔려 있을 수 있다는 뜻이에요

3. onnxr 다운로드 파일이 따로 있는 이유( gpu버전과 소스코드)

ONNX Runtime GPU 버전 주의점

1️⃣ CUDA와 cuDNN 버전 호환성

  • onnxruntime-gpu는 내부적으로 CUDA와 cuDNN을 사용함.
  • 따라서 ONNX Runtime 빌드가 지원하는 CUDA 버전과 실제 설치된 CUDA Toolkit이 맞아야 함.
  • 예시:
    • onnxruntime-gpu 1.22.1 → CUDA 12.2 지원
    • CUDA 13.0 설치 상태라면 아직 호환 안 될 수도 있음

ONNX Runtime 공식 Release Note 확인해서 버전 맞추기.

2️⃣ GPU 메모리 부족 문제

  • GPU 버전은 CPU보다 메모리를 많이 씀.
  • RTX 3090 같은 대형 GPU는 괜찮지만, 메모리 작은 GPU에서는 OOM(Out of Memory) 오류 발생 가능.
  • 특히 YOLO, Transformer 계열은 메모리 관리 신경 써야 함.

 

  • providers=["CUDAExecutionProvider", "CPUExecutionProvider"] 같이 CPU fallback 추가
  • Batch size 줄이기

3️⃣ 추론 코드에서 ExecutionProvider 지정

  • onnxruntime-gpu를 설치해도, 기본적으로 CPU provider만 잡히는 경우가 있음.
  • 반드시 코드에서 GPU를 명시해야 함:

import onnxruntime as ort

 

GPU 우선, GPU 사용 불가시 CPU로 fallback

sess = ort.InferenceSession("model.onnx", providers=["CUDAExecutionProvider", "CPUExecutionProvider"])

print(sess.get_providers())

 

3. 왜 언리얼에서 OpenCV 파일이 안 보였을까?

1️⃣ 언리얼은 "외부 라이브러리 코드"를 자동으로 보여주지 않음

  • UE 프로젝트는 기본적으로 자기 자신의 C++ 소스 코드만 관리해요.
  • OpenCV 같은 외부 라이브러리를 가져다 쓰는 경우, 보통은 .lib + .dll + 헤더파일(.h) 경로를 빌드 세팅에만 추가합니다.
  • 그래서 OpenCV 내부 소스(.cpp) 파일들은 언리얼의 C++ Classes나 Source 폴더에서 보이지 않는 게 정상이에요.

2️⃣ "경로 추가"만 했을 경우

  • Build.cs 파일에서 OpenCV 경로를 PublicIncludePaths / PublicAdditionalLibraries 등에 추가하면 → 언리얼은 "컴파일할 때 OpenCV를 참조하겠다" 정도만 알아요.
  • 하지만 언리얼 에디터나 Visual Studio 솔루션에서 실제 OpenCV 소스 파일 구조는 안 보임.
  • 대신 헤더(.h) 파일은 include 경로로 열 수 있어요.

3️⃣ 저장/빌드 후 보였던 이유

  • 언리얼은 C++ 코드 구조를 변경하거나 외부 경로를 추가하면,
  • 프로젝트 리빌드 & Visual Studio 솔루션 리젠(re-generate) 과정을 거쳐야 새 파일들이 Solution Explorer에 반영돼요.
  • 그래서 경로 세팅 후 "저장 → 언리얼이 VS 솔루션 리빌드" → 그제야 OpenCV 관련 헤더들이 External Dependencies 같은 노드에 표시됐을 거예요.

📌 정리

  • 언리얼에서 OpenCV 같은 라이브러리는 파일 탐색기처럼 내부 소스가 다 보이는 게 아님
  • 보통은 #include <opencv2/opencv.hpp> 식으로 필요한 헤더만 열 수 있음
  • 빌드 세팅(.Build.cs)에 경로 추가 후 저장해야 Visual Studio에서 External Dependencies에 헤더들이 반영됨
  • 실제 .cpp 소스들은 언리얼 프로젝트에 직접 포함되지 않기 때문에, 보이지 않는 게 정상

관련글 더보기