어느날 갑자기 잘 동작하던 학습 파이프라인에 아래와 같은 에러로 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 드라이버 버전보다 높음.
해결방안
- Display driver 버전을 업그레이드하여 CUDA 버전과 호환성을 맞춘다
- CUDA 버전을 다운그레이드한다.
- 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의 버전을 의미