[개발로그] CUDA_ERROR_SYSTEM_DRIVER_MISMATCH 이슈 해결

chrisjune
5 min readAug 20, 2024

--

어느날 갑자기 잘 동작하던 학습 파이프라인에 아래와 같은 에러로 GPU장비를 사용할 수 없게 되었다.

2024-08-19 01:32:26.558208: E external/local_xla/xla/stream_executor/cuda/cuda_driver.cc:274] failed call to cuInit: CUDA_ERROR_SYSTEM_DRIVER_MISMATCH: system has unsupported display driver / cuda driver combination
2024-08-19 01:32:26.558254: I external/local_xla/xla/stream_executor/cuda/cuda_diagnostics.cc:129] retrieving CUDA diagnostic information for host: example-server-850-2495792118-1213822419
2024-08-19 01:32:26.558265: I external/local_xla/xla/stream_executor/cuda/cuda_diagnostics.cc:136] hostname: example-server-850-2495792118-1213822419
2024-08-19 01:32:26.558382: I external/local_xla/xla/stream_executor/cuda/cuda_diagnostics.cc:159] libcuda reported version is: 550.54.15
2024-08-19 01:32:26.558409: I external/local_xla/xla/stream_executor/cuda/cuda_diagnostics.cc:163] kernel reported version is: 515.48.7
2024-08-19 01:32:26.558421: E external/local_xla/xla/stream_executor/cuda/cuda_diagnostics.cc:244] kernel version 515.48.7 does not match DSO version 550.54.15 -- cannot find working devices in this configuration
[name: "/device:CPU:0"

원인 (CUDA_ERROR_SYSTEM_DRIVER_MISMATCH)

CUDA driver version과 display version이 다르다고 함. CUDA 드라이버 버전이 Display 드라이버 버전보다 높음.

해결방안

  1. Display driver 버전을 업그레이드하여 CUDA 버전과 호환성을 맞춘다
  2. CUDA 버전을 다운그레이드한다.
  3. kubenetes 환경이라면 CUDA버전에 맞는 GPU 장비를 스케줄링 하도록 pod nodeselector를 추가한다.

3–1) yaml에 affinity 정의

affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: nvidia.com/cuda.driver.major
operator: In
values:
- 510
- 515
- 520

3–2) KFP 사용시 add_affinity 메서드로 정의

import kfp
from kfp import dsl

def my_pipeline():
affinity = {
'nodeAffinity': {
'requiredDuringSchedulingIgnoredDuringExecution': {
'nodeSelectorTerms': [{
'matchExpressions': [{
'key': 'nvidia.com/cuda.driver.major',
'operator': 'In',
'values': ['510', '515', '520']
}]
}]
}
}
}

task = (dsl.ContainerOp(
name='my-task',
image='my-image:latest',
command=['python', 'my_script.py'],
arguments=['arg1', 'arg2']
)
.add_affinity(affinity))

kfp.compiler.Compiler().compile(my_pipeline, 'pipeline.yaml')

용어정리

display driver: 그래픽 드라이버, OS와 프로그램이 GPU를 사용할 수 있도록 해주는 프로그램. 여기서는 nvidia gpu 드라이버

kernel version: 여기서 말하는 kernel은 NVIDIA kernel 드라이버. NVIDIA 드라이버 패키지중 핵심부분이고 OS커널과 하드웨어와 상호 작용하는 드라이버의 일부임

libcuda version: CUDA toolkit의 버전을 의미

kernel driver version: NVIDIA kernel의 버전을 의미

--

--