본문 바로가기

기계학습과 NLP

CUDA와 GPU, NVIDIA driver 사이의 호환 여부 이해하기

반응형

pytorch나 tensorflow를 이용해 인공신경망을 모델링하고자 할 때, 장비 세팅 단계에서 가장 애먹는 부분이 CUDA의 버전이다. 그것에 대해 파헤쳐 보고자 한다.

 

아래 기술된 내용의 대부분은 nvidia의 document(링크)에서 발췌하고 번역한 것이다. 일부 오역이나 의역이 있을 수 있다.

 

CUDA Compatibility

 

CUDA 도큐먼트에는 다음과 같이 명시하고 있다.

 

the tight coupling of the CUDA runtime with the display driver (for example libcuda.so —the CUDA driver on Linux systems), means that users are required to update the entire driver stack to use the latest CUDA software (including the compiler, libraries, and tools), which can be disruptive in some scenarios.

 

해석하자면, 제목과 같이 호환 여부를 따져가며 버전을 관리하고 하는게 상당히 번거로울 수 있다는 것이다.

(개발자를 배려하는 킹갓 NVIDIA)

 

다음 단락에는 다음과 같이 기술되어 있다.

 

First introduced in CUDA 10, the CUDA Forward Compatible Upgrade is designed to allow users to get access to new CUDA features and run applications built with new CUDA releases on systems with older installations of the NVIDIA datacenter GPU driver.

 

<<본문 아래 댓글 확인 요망>>

 

대략, CUDA 10 이후부터는 상위호환성(forward compatibility)을 고려하겠다는 말이다. CUDA 11에서 작성하고 테스트된 프로그램이면 CUDA 10에서도 실행할 수 있다는 뜻.

 

<<본문 아래 댓글 확인 요망>>

 

 

하위호환성에 대해서는 언급이 없으니, 역은 성립하지 않을 가능성이 있다.

 

더 읽어보자.

 

First introduced in CUDA 11.1, CUDA Enhanced Compatibility provides two benefits:
 - By leveraging semantic versioning across components in the CUDA Toolkit, an application can be built for one CUDA minor release (such as 11.1) and work across all future minor releases within the major family (such as 11.x).
 - CUDA has relaxed the minimum driver version check and thus no longer requires a driver upgrade with minor releases of the CUDA Toolkit.

 

바로 다음 단락에서는 강화된 호환성(Enhanced Compatibility)이라는 새로운 용어를 언급한다.

대략, 다음과 같다.

- minor release에서는 상하위호환을 가능하도록 한다.

- NVIDIA driver upgrade check를 좀 완화하였다.

 

첫번째 문장은 의미가 있다. 개발자 입장에서는 클라이언트의 CUDA major version만 알 수 있다면, 그것에 맞춰 개발이 가능하다.

두번째 문장은 직접적으로 어떤 효과를 낼 지 애매하다.

 

<중략>

Binary Compatibility

우리가 직접 CUDA 프로그램을 개발할 때 가장 중요한 단락이다.

자세히 보면 우리에게 아주 중요한 문장이 있다.

 

In addition, the binary-compatibility is in one direction: backwards.

 

하위호환을 지원한다는 것이다.

즉, 이전 버전의 CUDA에서 작성된 프로그램은 이후 버전의 GPU driver에서 구동이 가능하다는 것이다.

이 문구를 통해, 우리는 GPU driver의 버전을 '최대'로 업그레이드할 수 있다. 아무런 부담 없이.

 

바로 아래에 CUDA와 GPU driver의 호환표가 정리되어 있다.

 

앞서 말하였듯, GPU Driver의 버전을 높이는 것은 어떠한 문제도 일으키지 않는다.

 

Hardware Support

 

이 단락에서는 GPU와 GPU driver 사이의 호환 관계를 보인다.

여기도 표로 쉽게 정리가 되어 있다.

 

앞서 언급한 GPU driver와 CUDA의 호환처럼, GPU의 버전이 높은 것은 '대부분' 문제가 되지 않는다.

표에서는 Fermi generation의 GPU가 현세대 어떠한 driver와도 호환되지 않는 것을 알 수 있다.

후에는 Kepler나 Maxwell처럼 이전 세대의 GPU의 지원이 끊길 가능성이 있음을 시사한다.

그러나 당분간은 GPU driver의 버전을 가능한 최신 버전으로 업그레이드하여도 문제가 없을 것임을 알 수 있다.

 

세줄 요약

GPU Driver의 버전을 가능한 최신 버전으로 유지할 것.

GPU 세대별 지원 driver의 버전이 다르니, 그것을 확인할 것.

구세대 GPU는 언젠가 GPU driver의 지원이 끊길 수 있음.

 

아직 배워야 할 것

- CUDA enhanced compatibility

- cuBLAS

 

반응형

'기계학습과 NLP' 카테고리의 다른 글

Transformer Network 기반 모델 구조들  (0) 2020.04.09