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 항목을 생략하면 자동으로 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"
문자열 옵션 대소문자 주의
arenaExtendStrategy와 cudnnConvAlgoSearch 옵션은 대소문자를 정확히 구분합니다.
예를 들어, "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 기반으로 계산됩니다.
문자열 옵션 대소문자 주의
arenaExtendStrategy와 miopenConvAlgoSearch 옵션은 대소문자를 정확히 구분합니다.
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로 설정하면 성능이 크게 향상될 수 있습니다.
설정 파일 적용 방법
config/bareun.json파일을 편집기로 엽니다- 원하는 Execution Provider 설정을 추가하거나 수정합니다
- 변경사항을 저장합니다
바른서비스를 재시작합니다
# 서비스 확인(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
GPU 사용 확인
GPU가 정상적으로 사용되고 있는지 확인하는 방법:
작업 관리자 → 성능 → GPU 탭에서 "Compute_0" 또는 "3D" 사용률을 확인할 수 있습니다.
Activity Monitor에서 GPU 사용률을 확인하거나, 초기 로딩 시간이 단축된 것으로 확인할 수 있습니다.
CPU 사용률이 증가하는 것을 확인할 수 있습니다. DNNL은 일반 CPU 모드보다 효율적으로 CPU를 활용합니다.
문제 해결
GPU가 인식되지 않는 경우
- GPU 드라이버가 최신인지 확인
- CUDA/cuDNN 버전이 호환되는지 확인
- 로그 파일(
var/logs/)에서 오류 메시지 확인 - CPU 모드로 전환하여 기본 동작 확인
메모리 부족 오류
gpuMemLimit(CUDA) 또는maxWorkspaceSize(TensorRT) 값을 줄입니다- 동시에 처리하는 요청 수를 줄입니다
- 다른 GPU 사용 프로그램을 종료합니다
성능이 기대보다 낮은 경우
- TensorRT 모드에서
fp16Enable: true설정 확인 - 캐시 기능이 활성화되어 있는지 확인 (
trtEngineCacheEnable,enableModelCaching) - 첫 실행 시 모델 컴파일로 느릴 수 있으며, 이후 실행부터 빨라집니다
참고사항
실험적 기능
GPU 가속 기능은 현재 실험적 단계입니다. 다음 사항에 유의하세요:
- 일부 옵션은 특정 하드웨어나 드라이버 버전에서 제대로 작동하지 않을 수 있습니다
- 성능 향상은 하드웨어 사양과 모델 특성에 따라 다를 수 있습니다
- 프로덕션 환경에 적용하기 전에 충분한 테스트를 권장합니다
- 이 문서의 모든 GPU 가속 기능은 아직 전부 테스트되지 않았습니다
도움이 되었나요?