콘텐츠로 이동

GPU 사용하기

GPU 환경 설정

바른은 형태소 분석을 위해 딥러닝 모델을 사용합니다. GPU는 CPU보다 처리 코어가 더 많기 때문에 동시에 여러 계산을 수행할 수 있으므로 GPU를 사용한다면 바른을 더 빠르게 사용할 수 있습니다.

바른 3.0부터는 ONNX 런타임 1.23.0을 사용하여 다양한 하드웨어 가속 옵션을 지원합니다. 설정 파일(bareun.json)의 executionProvider 항목을 통해 CPU 또는 GPU 실행 환경을 선택할 수 있습니다.

지원되는 Execution Provider

바른은 다음과 같은 Execution Provider를 지원합니다:

  • CPU: 기본 CPU 실행 (모든 플랫폼)
  • CUDA: NVIDIA GPU 가속 (Linux, Windows)
  • TensorRT: NVIDIA TensorRT 최적화 엔진 (Linux, Windows)
  • DirectML: DirectX 12 기반 GPU 가속 (Windows)
  • CoreML: Apple Neural Engine 가속 (macOS)
  • DNNL: Intel CPU 최적화 (모든 플랫폼)
  • OpenVINO: Intel GPU/CPU/NPU 가속 (모든 플랫폼)
  • ROCm: AMD GPU 가속 (Linux)
  • MIGraphX: AMD GPU 최적화 (Linux)

플랫폼별 지원 현황

다음 표는 각 Execution Provider의 플랫폼별 지원 현황을 나타냅니다:

Execution Provider Linux Windows macOS 설명
CPU 기본 CPU 실행 (모든 플랫폼)
CUDA NVIDIA GPU 가속
TensorRT NVIDIA TensorRT 최적화
DirectML DirectX 12 기반 GPU 가속 (Windows 전용)
CoreML Apple Neural Engine 가속 (macOS/iOS 전용)
DNNL Intel CPU 최적화 (모든 플랫폼)
OpenVINO Intel GPU/CPU/NPU 가속 (모든 플랫폼)
ROCm AMD GPU 가속 (Linux 전용)
MIGraphX AMD GPU 최적화 (Linux 전용)

플랫폼별 권장 사항

  • Linux: CUDA/TensorRT (NVIDIA), ROCm/MIGraphX (AMD), OpenVINO (Intel)
  • Windows: CUDA/TensorRT (NVIDIA), DirectML (범용 GPU), OpenVINO (Intel)
  • macOS: CoreML (Apple Silicon), OpenVINO (Intel), DNNL (CPU 최적화)

설정 예제

설치 디렉토리의 config/ 폴더에는 다양한 예제 설정 파일이 포함되어 있습니다:

  • bareun.cpu-example.json: CPU 실행 예제
  • bareun.cuda-example.json: CUDA GPU 실행 예제
  • bareun.tensorrt-example.json: TensorRT 최적화 실행 예제
  • bareun.directml-example.json: DirectML (Windows) 실행 예제
  • bareun.coreml-example.json: CoreML (macOS) 실행 예제
  • bareun.dnnl-example.json: Intel DNNL CPU 최적화 예제
  • bareun.openvino-example.json: Intel OpenVINO 실행 예제
  • bareun.rocm-example.json: AMD ROCm GPU 실행 예제
  • bareun.migraphx-example.json: AMD MIGraphX 최적화 예제

필요에 따라 예제 파일을 참고하여 bareun.json을 수정할 수 있습니다.

설명

설치 디렉토리의 config/ 폴더에는 설정 파일에 대한 자세한 설명 파일이 포함되어 있습니다:

  • README_EXAMPLES.md: 각 예제 파일의 용도와 사용 방법
  • EXECUTION_PROVIDER.md: Execution Provider 옵션 상세 설명

1. CPU 모드 (기본값)

CPU만 사용하여 실행하는 기본 설정입니다. 별도의 GPU 드라이버 설치가 필요 없습니다.

{
  "executionProvider": {
    "provider": "cpu"
  }
}

executionProvider 항목을 생략하면 자동으로 CPU 모드로 실행됩니다.

2. CUDA 모드 (NVIDIA GPU)

NVIDIA GPU를 사용하여 가속하는 모드입니다. Linux와 Windows에서 사용 가능합니다.

사전 준비사항

CUDA를 사용하려면 다음이 필요합니다:

  • NVIDIA GPU (Compute Capability 3.5 이상)
  • CUDA Toolkit 11.8 이상
  • cuDNN 라이브러리 8.x 이상
  • 최신 NVIDIA 드라이버

설정 예제

{
  "executionProvider": {
    "provider": "cuda",
    "cudaOptions": {
      "deviceId": 0,
      "gpuMemLimit": "2G",
      "arenaExtendStrategy": "kNextPowerOfTwo",
      "cudnnConvAlgoSearch": "HEURISTIC",
      "doCopyInDefaultStream": true,
      "enableCudaGraph": false
    }
  }
}

CUDA 옵션 상세 설명

옵션 타입 기본값 설명
deviceId 정수 0 사용할 GPU 장치 번호 (0부터 시작). 여러 GPU가 있는 경우 0, 1, 2 등 중 하나를 선택
gpuMemLimit 문자열/정수 "2G" GPU 메모리 사용 제한. "2G", "512M", "1024K", "1T" 또는 바이트 숫자 형식 지원 (단위: K/KB, M/MB, G/GB, T/TB, 대소문자 무관)
arenaExtendStrategy 문자열 "kNextPowerOfTwo" 메모리 할당 전략. "kNextPowerOfTwo" (기본값) 또는 "kSameAsRequested" (대소문자 정확히 구분)
cudnnConvAlgoSearch 문자열 "DEFAULT" cuDNN 컨볼루션 알고리즘 검색 방법. "EXHAUSTIVE", "HEURISTIC", "DEFAULT" (대소문자 정확히 구분)
doCopyInDefaultStream 불린 true 기본 스트림에서 복사 작업 수행 여부 (true 또는 false)
enableCudaGraph 불린 false CUDA Graph 최적화 활성화 (실험적 기능, true 또는 false)

메모리 크기 단위

gpuMemLimit는 다음 형식을 지원합니다:

  • 킬로바이트 (KB): "1024K", "1024k", "1024KB", "1024kb"
  • 메가바이트 (MB): "512M", "512m", "512MB", "512mb"
  • 기가바이트 (GB): "2G", "2g", "2GB", "2gb"
  • 테라바이트 (TB): "1T", "1t", "1TB", "1tb"
  • 바이트 (Bytes): "2147483648" (숫자만 입력 시 바이트로 해석)

단위는 대소문자를 구분하지 않으며, 모두 1024 기반(Binary)으로 계산됩니다.

예시: "2G" = "2048M" = "2097152K" = "2147483648"

문자열 옵션 대소문자 주의

arenaExtendStrategycudnnConvAlgoSearch 옵션은 대소문자를 정확히 구분합니다. 예를 들어, "knextpoweroftwo"나 "KNEXTPOWEROFTWO"는 작동하지 않으며 반드시 "kNextPowerOfTwo"로 입력해야 합니다.

단일 GPU 사용

현재 바른은 하나의 세션에서 하나의 GPU 디바이스만 사용합니다. deviceId는 시스템에 설치된 여러 GPU 중 하나를 선택하는 용도입니다.

3. TensorRT 모드 (NVIDIA 최적화)

NVIDIA TensorRT를 사용하여 추가 최적화를 수행하는 모드입니다. CUDA보다 더 높은 성능을 제공할 수 있습니다.

사전 준비사항

TensorRT를 사용하려면 CUDA 요구사항에 추가로 다음이 필요합니다:

  • TensorRT 8.6 이상

설정 예제

{
  "executionProvider": {
    "provider": "tensorrt",
    "tensorrtOptions": {
      "deviceId": 0,
      "maxWorkspaceSize": "1G",
      "maxPartitionIterations": 1000,
      "minSubgraphSize": 1,
      "fp16Enable": true,
      "int8Enable": false,
      "trtEngineCachePath": "${BAREUN_ROOT}/var/trt_cache",
      "trtEngineCacheEnable": true,
      "trtDlaCore": -1,
      "trtLayerNormFp32Fallback": false
    }
  }
}

TensorRT 옵션 상세 설명

옵션 타입 기본값 설명
deviceId 정수 0 사용할 GPU 장치 번호 (0부터 시작). 시스템의 여러 GPU 중 하나를 선택
maxWorkspaceSize 문자열/정수 "1G" TensorRT 작업공간 최대 크기. "1G", "512M", "1024K", "1T" 또는 바이트 숫자 형식 지원 (단위: K/KB, M/MB, G/GB, T/TB, 대소문자 무관)
maxPartitionIterations 정수 1000 그래프 분할 최대 반복 횟수
minSubgraphSize 정수 1 TensorRT로 변환할 최소 서브그래프 크기
fp16Enable 불린 true FP16 반정밀도 연산 활성화 (더 빠름, 약간의 정확도 손실, true 또는 false)
int8Enable 불린 false INT8 양자화 활성화 (가장 빠름, 정확도 손실 가능, true 또는 false)
trtEngineCachePath 문자열 - 컴파일된 TensorRT 엔진 캐시 경로. ${BAREUN_ROOT} 변수 사용 가능
trtEngineCacheEnable 불린 true 엔진 캐시 사용 여부 (true시 재시작 시 빠른 로딩, true 또는 false)
trtDlaCore 정수 -1 DLA(Deep Learning Accelerator) 코어 번호. -1은 사용 안함
trtLayerNormFp32Fallback 불린 false LayerNorm을 FP32로 폴백 (정확도 향상, true 또는 false)

메모리 크기 단위

maxWorkspaceSize는 다양한 단위를 지원합니다:

  • 킬로바이트: "1024K", "1024k", "1024KB", "1024kb"
  • 메가바이트: "512M", "512m", "512MB", "512mb"
  • 기가바이트: "1G", "1g", "1GB", "1gb"
  • 테라바이트: "1T", "1t", "1TB", "1tb"
  • 바이트: "1073741824" (숫자만 입력)

단위는 대소문자를 구분하지 않으며, 모두 1024 기반으로 계산됩니다.

TensorRT 엔진 캐시

trtEngineCacheEnable을 true로 설정하면 첫 실행 시 모델을 TensorRT 엔진으로 변환하여 캐시에 저장합니다. 이후 실행에서는 캐시된 엔진을 로드하므로 시작 시간이 크게 단축됩니다.

4. DirectML 모드 (Windows GPU)

Windows의 DirectX 12를 사용하는 범용 GPU 가속 모드입니다. NVIDIA뿐만 아니라 AMD, Intel GPU에서도 작동합니다.

사전 준비사항

  • Windows 10 버전 1903 이상
  • DirectX 12 지원 GPU
  • 최신 그래픽 드라이버

설정 예제

{
  "executionProvider": {
    "provider": "directml",
    "directmlOptions": {
      "deviceId": 0,
      "enableMetacommands": true,
      "enableGraphCapture": true
    }
  }
}

DirectML 옵션 상세 설명

옵션 타입 기본값 설명
deviceId 정수 0 사용할 GPU 장치 번호 (0부터 시작). 시스템의 여러 GPU 중 하나를 선택
enableMetacommands 불린 true DirectML 메타명령 최적화 활성화 (true 또는 false)
enableGraphCapture 불린 true 그래프 캡처 최적화 활성화 (true 또는 false)

5. CoreML 모드 (macOS 가속)

Apple Silicon 및 Intel Mac의 Neural Engine을 활용하는 모드입니다. macOS 전용입니다.

사전 준비사항

  • macOS 13.4 (Ventura) 이상
  • Apple Silicon (M1/M2/M3) 또는 Intel Mac with Neural Engine

설정 예제

{
  "executionProvider": {
    "provider": "coreml",
    "coremlOptions": {
      "useMlprogram": true,
      "enableOnSubgraph": false,
      "enableModelCaching": true,
      "modelCacheDir": "${BAREUN_ROOT}/var/coreml_cache"
    }
  }
}

CoreML 옵션 상세 설명

옵션 타입 기본값 설명
useMlprogram 불린 true ML Program 형식 사용 (iOS 15+, macOS 12+, true 또는 false). false시 레거시 Neural Network 형식
enableOnSubgraph 불린 false 서브그래프에서도 CoreML 활성화 (true 또는 false)
enableModelCaching 불린 true 컴파일된 모델 캐시 활성화 (true 또는 false)
modelCacheDir 문자열 - 모델 캐시 디렉토리 경로. ${BAREUN_ROOT} 변수 사용 가능

Apple Silicon 최적화

애플 실리콘(M1/M2/M3)에서 CoreML을 사용하면 신경망 엔진이 자동으로 활용되어 전력 효율적인 고성능 추론이 가능합니다.

macOS 버전 요구사항

ONNX 런타임의 macOS용 빌드는 macOS 13.4 (Ventura) 이상이 필요합니다. useMlprogram 옵션은 macOS 12.0 이상에서 사용할 수 있으나, ONNX 런타임 자체는 13.4 이상에서 동작합니다.

CoreML 지원 제한

현재 바른에서 사용하는 트랜스포머 기반 ONNX 모델은 CoreML에서 완전히 지원되지 않습니다.

  • CoreML은 동적 shape을 가진 트랜스포머 모델의 일부 연산자(multi_head_attention, Tensordot 등)를 지원하지 않습니다
  • CoreML로 설정 시 inference 실행 중 오류가 발생하면 자동으로 CPU 모드로 폴백됩니다
  • 권장 사항: macOS에서는 CPU 모드 또는 DNNL 모드를 사용하시기 바랍니다

향후 모델 최적화를 통해 CoreML 지원을 개선할 예정입니다.

6. DNNL 모드 (Intel CPU 최적화)

Intel DNNL (Deep Neural Network Library, 구 MKL-DNN)은 Intel CPU에서 최적화된 성능을 제공합니다.

설정 예제

{
  "executionProvider": {
    "provider": "dnnl",
    "dnnlOptions": {
      "numThreads": 0,
      "useArena": true
    }
  }
}

DNNL 옵션 상세 설명

옵션 타입 기본값 설명
numThreads 정수 0 OpenMP 스레드 수 (0 = 자동)
useArena 불린 true 메모리 아레나 사용 여부 (true 또는 false)

Intel CPU 최적화

Intel Xeon, Core i 시리즈 CPU에서 일반 CPU 모드보다 더 나은 성능을 제공합니다.

7. OpenVINO 모드 (Intel GPU/NPU)

Intel OpenVINO는 Intel GPU, CPU, NPU 등 다양한 Intel 하드웨어를 지원합니다.

사전 준비사항

  • Intel GPU (Arc, Iris Xe, UHD Graphics 등)
  • OpenVINO Runtime 설치

설정 예제

{
  "executionProvider": {
    "provider": "openvino",
    "openvinoOptions": {
      "deviceType": "GPU",
      "precision": "FP16",
      "enableDynamicShapes": false,
      "cacheDir": "${BAREUN_ROOT}/var/openvino_cache",
      "numThreads": 0
    }
  }
}

OpenVINO 옵션 상세 설명

옵션 타입 기본값 설명
deviceType 문자열 "CPU" 디바이스 타입: "CPU", "GPU", "GPU.0", "GPU.1", "NPU" 등
precision 문자열 "FP32" 정밀도: "FP32", "FP16", "U8" (INT8)
enableDynamicShapes 불린 false 동적 shape 지원 활성화 (true 또는 false)
cacheDir 문자열 - 컴파일된 모델 캐시 디렉토리. ${BAREUN_ROOT} 변수 사용 가능
numThreads 정수 0 CPU 모드에서 사용할 스레드 수 (0 = 자동)

Intel GPU 활용

Intel Arc 또는 Iris Xe GPU가 있는 경우 deviceType: "GPU"로 설정하여 GPU 가속을 사용할 수 있습니다.

8. ROCm 모드 (AMD GPU)

AMD ROCm은 AMD Radeon GPU에서 사용할 수 있는 CUDA의 AMD 버전입니다.

사전 준비사항

  • AMD Radeon GPU (Linux 전용)
  • ROCm 플랫폼 설치

설정 예제

{
  "executionProvider": {
    "provider": "rocm",
    "rocmOptions": {
      "deviceId": 0,
      "gpuMemLimit": "2G",
      "arenaExtendStrategy": "kNextPowerOfTwo",
      "miopenConvAlgoSearch": "HEURISTIC",
      "doCopyInDefaultStream": true
    }
  }
}

ROCm 옵션 상세 설명

옵션 타입 기본값 설명
deviceId 정수 0 사용할 GPU 장치 번호
gpuMemLimit 문자열/정수 "2G" GPU 메모리 사용 제한. "2G", "512M", "1024K", "1T" 또는 바이트 숫자 형식 지원 (단위: K/KB, M/MB, G/GB, T/TB, 대소문자 무관)
arenaExtendStrategy 문자열 "kNextPowerOfTwo" 메모리 할당 전략. "kNextPowerOfTwo" (기본값) 또는 "kSameAsRequested" (대소문자 정확히 구분)
miopenConvAlgoSearch 문자열 "DEFAULT" MIOpen 컨볼루션 알고리즘 검색 방법. "EXHAUSTIVE", "HEURISTIC", "DEFAULT" (대소문자 정확히 구분)
doCopyInDefaultStream 불린 true 기본 스트림에서 복사 작업 수행 여부 (true 또는 false)

메모리 크기 단위

gpuMemLimit는 다양한 단위를 지원합니다:

  • 킬로바이트: "1024K", "1024k", "1024KB", "1024kb"
  • 메가바이트: "512M", "512m", "512MB", "512mb"
  • 기가바이트: "2G", "2g", "2GB", "2gb"
  • 테라바이트: "1T", "1t", "1TB", "1tb"
  • 바이트: "2147483648" (숫자만 입력)

단위는 대소문자를 구분하지 않으며, 모두 1024 기반으로 계산됩니다.

문자열 옵션 대소문자 주의

arenaExtendStrategymiopenConvAlgoSearch 옵션은 대소문자를 정확히 구분합니다.

Linux 전용

ROCm은 현재 Linux에서만 지원됩니다. Windows에서는 사용할 수 없습니다.

9. MIGraphX 모드 (AMD 최적화)

AMD MIGraphX는 AMD GPU에서 추가 최적화를 제공하는 그래프 컴파일러입니다.

사전 준비사항

  • AMD Radeon GPU (Linux 전용)
  • ROCm 및 MIGraphX 설치

설정 예제

{
  "executionProvider": {
    "provider": "migraphx",
    "migraphxOptions": {
      "deviceId": 0,
      "fp16Enable": true,
      "int8Enable": false,
      "cachePath": "${BAREUN_ROOT}/var/migraphx_cache",
      "enableCache": true
    }
  }
}

MIGraphX 옵션 상세 설명

옵션 타입 기본값 설명
deviceId 정수 0 사용할 GPU 장치 번호
fp16Enable 불린 false FP16 (반정밀도) 모드 활성화 (true 또는 false)
int8Enable 불린 false INT8 양자화 모드 활성화 (true 또는 false)
cachePath 문자열 - 컴파일된 그래프 캐시 경로. ${BAREUN_ROOT} 변수 사용 가능
enableCache 불린 false 캐시 기능 활성화 (true 또는 false)

AMD GPU 최적화

fp16Enable: true로 설정하면 성능이 크게 향상될 수 있습니다.

설정 파일 적용 방법

  1. config/bareun.json 파일을 편집기로 엽니다
  2. 원하는 Execution Provider 설정을 추가하거나 수정합니다
  3. 변경사항을 저장합니다
  4. 바른 서비스를 재시작합니다
sudo systemctl restart bareun
net stop bareunsvc
net start bareunsvc

또는 서비스 관리자에서 바른 한국어 형태소분석기 서비스를 재시작합니다.

# 서비스 확인(ai.baikal.bareun 문구가 출력됩니다.)
sudo launchctl list | grep bareun

# 서비스 중지(서비스를 완전히 종료하고 메모리에서 내립니다.)
sudo launchctl bootout system/ai.baikal.bareun

# 서비스 시작(중지된 서비스를 다시 켜거나, 부팅 후 수동으로 로드할 때 사용합니다.)
sudo launchctl bootstrap system /Library/LaunchDaemons/ai.baikal.bareun.plist

# 서비스 재시작(설정을 변경했거나 서비스 동작이 이상할 때 프로세스를 강제로 종료하고 즉시 재시작합니다.)
sudo launchctl kickstart -k system/ai.baikal.bareun
docker restart bareun
# 프로세스 종료
pkill bareun

# 서버 재시작
export BAREUN_ROOT=$HOME/bareun-v3.0.0
nohup $BAREUN_ROOT/bin/bareun &

GPU 사용 확인

GPU가 정상적으로 사용되고 있는지 확인하는 방법:

# nvidia-smi로 GPU 사용률 모니터링
watch -n 1 nvidia-smi
바른 실행 시 GPU 메모리 사용량이 증가하는 것을 확인할 수 있습니다.

# rocm-smi로 GPU 사용률 모니터링
watch -n 1 rocm-smi
바른 실행 시 GPU 사용률이 증가하는 것을 확인할 수 있습니다.

# Intel GPU Top 도구 사용 (Linux)
intel_gpu_top
또는 시스템 모니터에서 GPU 사용률을 확인할 수 있습니다.

작업 관리자 → 성능 → GPU 탭에서 "Compute_0" 또는 "3D" 사용률을 확인할 수 있습니다.

Activity Monitor에서 GPU 사용률을 확인하거나, 초기 로딩 시간이 단축된 것으로 확인할 수 있습니다.

CPU 사용률이 증가하는 것을 확인할 수 있습니다. DNNL은 일반 CPU 모드보다 효율적으로 CPU를 활용합니다.

문제 해결

GPU가 인식되지 않는 경우

  1. GPU 드라이버가 최신인지 확인
  2. CUDA/cuDNN 버전이 호환되는지 확인
  3. 로그 파일(var/logs/)에서 오류 메시지 확인
  4. CPU 모드로 전환하여 기본 동작 확인

메모리 부족 오류

  • gpuMemLimit (CUDA) 또는 maxWorkspaceSize (TensorRT) 값을 줄입니다
  • 동시에 처리하는 요청 수를 줄입니다
  • 다른 GPU 사용 프로그램을 종료합니다

성능이 기대보다 낮은 경우

  • TensorRT 모드에서 fp16Enable: true 설정 확인
  • 캐시 기능이 활성화되어 있는지 확인 (trtEngineCacheEnable, enableModelCaching)
  • 첫 실행 시 모델 컴파일로 느릴 수 있으며, 이후 실행부터 빨라집니다

참고사항

실험적 기능

GPU 가속 기능은 현재 실험적 단계입니다. 다음 사항에 유의하세요:

  • 일부 옵션은 특정 하드웨어나 드라이버 버전에서 제대로 작동하지 않을 수 있습니다
  • 성능 향상은 하드웨어 사양과 모델 특성에 따라 다를 수 있습니다
  • 프로덕션 환경에 적용하기 전에 충분한 테스트를 권장합니다
  • 이 문서의 모든 GPU 가속 기능은 아직 전부 테스트되지 않았습니다

도움이 되었나요?