NVIDIA Jetson 사용자를 위한 CUDA 업그레이드 간소화

Reading Time: 6 minutes

NVIDIA JetPack은 Jetson 플랫폼에서 하드웨어 가속화된 엣지에서의 AI를 위한 완전한 개발 환경을 제공합니다. 이전에는 독립형 NVIDIA JetPack 버전이 CUDA의 단일 릴리스를 지원하며 주어진 NVIDIA JetPack 버전에서 CUDA를 업그레이드할 능력이 없었습니다. NVIDIA JetPack은 CUDA의 단일 버전이 있는 롤링 케이던스로 출시되며, 일반적으로 각 주요 릴리스 주기(예: NVIDIA JetPack 4.x 또는 NVIDIA JetPack 5.x)에 걸쳐 지원됩니다.

CUDA 툴킷 11.8부터 NVIDIA JetPack 5.0 이상의 Jetson 사용자는 NVIDIA JetPack 버전 또는 Jetson Linux BSP(보드 지원 패키지)를 업데이트하지 않고 최신 CUDA 릴리스로 업그레이드할 수 있습니다. CUDA 데스크톱 릴리스와 동등한 상태를 유지할 수 있습니다.

데스크톱의 CUDA와 비교한 Jetson의 CUDA

CUDA 지원 모델이 외장 GPU(dGPU)와 통합 GPU(iGPU)를 갖춘 Jetson의 데스크톱과 다른 이유를 이해하면 다음을 이해하는 데 도움이 됩니다.

  • CUDA가 Jetson에서 패키징되는 방법
  • CUDA가 데스크톱에서 패키징되는 방법
  • 이 두 가지 간의 차이점

그림 1은 Jetson Linux BSP의 코어와 NVIDIA JetPack SDK를 구성하는 다양한 소프트웨어 구성 요소의 레이어를 갖춘 Jetson 소프트웨어 아키텍처를 보여줍니다. 자세한 내용은 Jetson 소프트웨어 아키텍처를 참조하세요.

그림 1. Jetson 소프트웨어 아키텍처

그림 2는 CUDA가 전체 NVIDIA JetPack SDK 패키징 구조에서 자리하는 위치, Jetson Linux BSP의 다른 모든 구성 요소와 상호 작용하는 방식을 보여줍니다. 그림 2에서 볼 수 있듯이 CUDA 드라이버는 다른 구성 요소와 함께 Jetson Linux BSP의 일부입니다. 이러한 모든 구성 요소는 분기별 CUDA 릴리스 케이던스와는 다른 Jetson Linux BSP의 릴리스 케이던스 및 빈도에 따라 업데이트됩니다. CUDA 툴킷은 BSP와 분리되어 있으며 CUDA 드라이버를 패키지화하지 않습니다.

NVIDIA JetPack SDK를 설치하면 Jetson Linux BSP(CUDA 드라이버 포함) 및 CUDA 툴킷이 기본적으로 설치됩니다.

그림 2. Jetson(iGPU)의 CUDA 패키징. CUDA 드라이버가 Jetson Linux BSP에 베이킹된 후

그림 3. 데스크톱(dGPU)의 CUDA 패키징. CUDA 드라이버는 NV 디스플레이 드라이버 및 UDA 패키지의 일부입니다.

이러한 패키징 구조로 인해 데스크톱의 CUDA 개발자는 CUDA 분기별 릴리스 케이던스와 일치하는 최신 CUDA 릴리스를 통해 최신 상태를 유지할 수 있는 유연성을 갖춥니다. 또한 순방향 호환성사소한 버전 호환성과 같은 기능은 드라이버 및 툴킷의 조합을 선택하고 애플리케이션 요구 사항에 맞게 맞춤화하는 데 도움이 됩니다.

Jetson의 CUDA 업그레이드 가능 패키지

CUDA 11.8부터 CUDA는 Jetson 개발자에게 CUDA 드라이버와 CUDA 툴킷을 최신 버전으로 업데이트할 수 있는 옵션을 제공하는 업그레이드 경로를 도입했습니다.

그림 4는 NVIDIA JetPack 5.0 SDK에 기본적으로 존재하는 구성 요소를 묘사한 파란색 상자를 보여줍니다. 점선은 Jetson Linux BSP를 NVIDIA JetPack SDK의 일부인 다른 구성 요소와 구분합니다. 녹색 상자는 이 기능을 통해 업그레이드할 수 있는 CUDA 구성 요소를 나타냅니다.

그림 4. Jetson의 CUDA 업그레이드 경로

이러한 업그레이드는 그림 5에 표시된 것처럼 CUDA 드라이버 업그레이드(CUDA 호환성 패키지라고도 함)의 도입을 통해 가능합니다.

이 업그레이드 패키지에는 주로 CUDA 드라이버(libcuda.so.*)와 종속성이 포함되어 있어 모든 분기별 CUDA 릴리스와 함께 제공되는 최고의 최신 CUDA 기능에 액세스할 수 있습니다.

이 패키지가 없었던 이전에는 Jetson Linux BSP에 패키징된 기본 CUDA 드라이버가 제공하는 기능으로 제한되었습니다. 최신 CUDA 드라이버 및 툴킷으로 업그레이드할 메커니즘이 없었습니다.

이 패키지로 인해 기존 Jetson Linux BSP에 대한 길고 철저한 검증 주기에 투자한 Jetson 사용자는 최신 CUDA 버전으로 업그레이드할 수 있습니다. 이 업그레이드는 기존 Jetson Linux BSP를 통해 수행되어 변경되지 않은 상태로 유지됩니다.

그림 5. 새로운 CUDA 업그레이드 패키지 소개

Jetson에서 CUDA를 업그레이드하는 방법

CUDA 11.8을 이용하면 이제 CUDA 다운로드 페이지에 그림 6과 같이 새로운 아키텍처인 aarch64-Jetson이 관련 aarch64-Jetson CUDA 설치 프로그램과 함께 표시되며 로컬 설치 프로그램 또는 CUDA 네트워크 리포지토리를 다운로드 및 사용하여 최신 CUDA 릴리스를 설치하는 방법에 대한 단계별 지침을 제공합니다.

그림 6. aarch64-Jetson 설치 프로그램 다운로드 옵션을 갖춘 CUDA 11.8 다운로드 페이지

새로운 aarch64-Jetson CUDA 인스톨러는 CUDA 툴킷과 업그레이드 패키지를 모두 함께 패키지로 제공합니다. 제공되는 단계별 설치 지침은 CUDA 업그레이드 패키지가 Jetson 디바이스에 해당하는 CUDA 툴킷과 함께 다운로드 및 설치되도록 합니다.

그림 7. Jetson 디바이스용 aarch64-Jetson CUDA 설치 프로그램

설치된 업그레이드 패키지는 버전이 있는 툴킷 파일 디렉터리에서 사용할 수 있습니다. 예를 들어 다음 디렉터리에서 11.8을 찾을 수 있습니다.

/usr/local/cuda-11.8/

업그레이드 패키지는 다음과 같은 파일로 구성됩니다.

  • libcuda.so.*: CUDA 드라이버.
  • libnvidia-nvvm.so.*: 적시에 링크 시간 최적화(CUDA 11.8 이상만 해당).
  • libnvidia-ptxjitcompiler.so.*: PTX 파일의 JIT(적시) 컴파일러입니다.

이러한 파일은 함께 CUDA 드라이버 인터페이스를 구현합니다. 이 패키지는 파일만을 제공하며 시스템을 구성하지 않습니다.

x86 호스트에서 작업하고 aarch64-Jetson 대상으로 교차 컴파일하는 경우 U20.04 CUDA 호스트 인스톨러를 CUDA 다운로드 페이지에서 찾을 수 있습니다. 교차 컴파일 비트는 다음 디렉터리에서 확인할 수 있습니다.

aarch64-jetson/cross/Ubuntu/20.04/deb installer

다음 코드 예제는 CUDA 업그레이드 패키지를 설치하고 애플리케이션을 실행하는 데 사용되는 방법을 보여줍니다.

$ sudo apt-get -y install cuda

Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  cuda-11-8 cuda-cccl-11-8 cuda-command-line-tools-11-8 cuda-compat-11-8
  ...<snip>…

The following NEW packages will be installed:
  cuda cuda-11-8 cuda-cccl-11-8 cuda-command-line-tools-11-8 cuda-compat-11-8
  ...<snip>…

0 upgraded, 48 newly installed, 0 to remove and 38 not upgraded.
Need to get 15.7 MB/1,294 MB of archives.
After this operation, 4,375 MB of additional disk space will be used.
Get:1 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/arm64  cuda-compat-11-8 11.8.31058490-1 [15.8 MB]
Fetched 15.7 MB in 12s (1,338 kB/s)
Selecting previously unselected package cuda-compat-11-8.
(Reading database ... 
  ...<snip>…

(Reading database ... 100%
(Reading database ... 148682 files and directories currently installed.)
Preparing to unpack .../00-cuda-compat-11-8_11.8.31058490-1_arm64.deb ...
Unpacking cuda-compat-11-8 (11.8.31058490-1) ...
  ...<snip>…

Unpacking cuda-11-8 (11.8.0-1) ...
Selecting previously unselected package cuda.
Preparing to unpack .../47-cuda_11.8.0-1_arm64.deb ...
Unpacking cuda (11.8.0-1) ...
Setting up cuda-toolkit-config-common (11.8.56-1) ...
Setting up cuda-compat-11-8 (11.8.31058490-1) ...

$ ls -l /usr/local/cuda-11.8/compat
total 55300
lrwxrwxrwx 1 root root       12 Jan  6 19:14 libcuda.so -> libcuda.so.1
lrwxrwxrwx 1 root root       14 Jan  6 19:14 libcuda.so.1 -> libcuda.so.1.1
-rw-r--r-- 1 root root 21702832 Jan  6 19:14 libcuda.so.1.1
lrwxrwxrwx 1 root root       19 Jan  6 19:14 libnvidia-nvvm.so -> libnvidia-nvvm.so.4
lrwxrwxrwx 1 root root       23 Jan  6 19:14 libnvidia-nvvm.so.4 -> libnvidia-nvvm.so.4.0.0
-rw-r--r-- 1 root root 24255256 Jan  6 19:14 libnvidia-nvvm.so.4.0.0
-rw-r--r-- 1 root root 10665608 Jan  6 19:14 libnvidia-ptxjitcompiler.so
lrwxrwxrwx 1 root root       27 Jan  6 19:14 libnvidia-ptxjitcompiler.so.1 -> libnvidia-ptxjitcompiler.so
 
The user can set LD_LIBRARY_PATH to include the libraries installed by upgrade package before running the CUDA 11.8 application:
$ LD_LIBRARY_PATH=/usr/local/cuda-11.8/compat:$LD_LIBRARY_PATH ~/Samples/1_Utilities/deviceQuery
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "Orin"
  CUDA Driver Version / Runtime Version          11.8 / 11.8
  CUDA Capability Major/Minor version number:    8.7
      ...<snip>...
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 11.8, CUDA Runtime Version = 11.8, NumDevs = 1
Result = PASS

기본 드라이버(원래 NVIDIA JetPack 및 Jetson Linux BSP의 일부와 함께 설치됨)는 설치 프로그램에서 유지합니다. 애플리케이션은 CUDA의 기본 버전(원래 NVIDIA JetPack과 함께 설치됨) 또는 업그레이드 패키지에 의해 설치된 버전을 사용할 수 있습니다. LD_LIBRARY_PATH 변수를 사용하여 필요한 버전을 선택합니다.

특정 시스템에서 언제든지 단일 CUDA 업그레이드 패키지만 설치할 수 있습니다. 새로운 CUDA 업그레이드 패키지를 설치하는 동안 설치된 업그레이드 패키지의 이전 버전은 제거되고 새 패키지로 교체됩니다. 업그레이드 패키지가 NVIDIA JetPack 버전과 호환되지 않으면 설치가 실패합니다.

예를 들어, 이전에 CUDA 11.4로 컴파일된 애플리케이션은 CUDA 드라이버의 이전 호환성으로 인해 CUDA 11.8 업그레이드 패키지로 계속 작동합니다.

표 1은 NVIDIA JetPack 5.0 릴리스를 위한 CUDA 사용자 모드 드라이버(UMD) 및 CUDA 툴킷 버전 호환성을 보여줍니다.

표 1. CUDA 툴킷 릴리스와의 CUDA UMD 버전 호환성

CUDA UMDCUDA 툴킷
11.4
(기본값,
NVIDIA JetPack의 일부)
11.8 
11.4
(기본값,
NVIDIA JetPack의 일부)

(사소한 버전 호환성)
11.8
(업그레이드 패키지 포함)

C = 호환, X = 호환되지 않음

참고 사항

  • 이 기능은 CUDA 11.8 및 NVIDIA JetPack 5.0부터 사용 가능하며 최신 Jetson Linux 릴리스에서 지원됩니다.
  • CUDA 업그레이드 패키지는 나머지 NVIDIA JetPack SDK 구성 요소를 그대로 유지하면서 CUDA 드라이버 인터페이스만 업데이트합니다. 최신 CUDA 드라이버의 새로운 기능에 업데이트된 NVIDIA JetPack SDK 구성 요소 또는 인터페이스가 필요한 경우 호출 시 오류가 반환될 수 있습니다. 기능 호환성에 대한 자세한 내용은 CUDA 릴리스 노트를 참조하세요.
  • 모든 NVIDIA JetPack SDK가 모든 CUDA 버전을 지원하는 것은 아니므로 사용자는 NVIDIA JetPack SDK 버전과 새로운 CUDA 버전이 사용되는지 확인해야 합니다. 호환 버전에 대한 자세한 내용은 CUDA for Tegra 앱 노트를 참조하십시오.

Jetson에서는 CUDA, cuDNN, TensorRT 등의 컴퓨팅 스택이 Jetson Linux(L4T)의 특정 버전과 긴밀하게 연결되었습니다. 최신 버전의 컴퓨팅 스택으로 업그레이드하려면 Jetson Linux로의 업그레이드도 처리해야 했습니다.

NVIDIA는 Jetson 개발자가 Jetson Linux를 업그레이드하지 않고도 최신 컴퓨팅 라이브러리 버전으로 마이그레이션할 수 있는 미래를 향해 나아가고 있습니다. CUDA 업그레이드를 지원하는 이 CUDA 기능은 해당 방향으로 나아가는 한 단계입니다.

지금 Jetson의 최신 CUDA 릴리스로 업그레이드하세요!

  • CUDA 11.8 다운로드 페이지에서 aarch64-Jetson용 CUDA 설치 관리자를 다운로드하고 설치 지침에 따라 Jetson 디바이스를 CUDA 11.8로 업그레이드하십시오.
  • Jetson의 CUDA 업그레이드 가능한 패키지에 대한 자세한 내용은 CUDA for Tegra 앱 노트에서 참조하세요.
  • CUDA 11.8이 제공하는 모든 새로운 기능에 대한 정보는 CUDA 11.8 Omnibus를 참조하세요.
  • 문의 사항이 있거나 지원이 필요한 경우 Jetson 포럼에 질문을 게시하세요.

NVIDIA JetPack 5 심층 분석 웨비나에 등록하세요. CUDA와 Jetson 팀이 이 새로운 기능에 대한 세부 정보를 안내하며 실시간으로 질문을 할 수 있는 기회를 드립니다!

이 블로그에 열거된 SDK의 대부분의 독점 액세스, 얼리 액세스, 기술 세션, 데모, 교육 과정, 리소스는 NVIDIA 개발자 프로그램 회원은 무료로 혜택을 받으실 수 있습니다. 지금 무료로 가입하여 NVIDIA의 기술 플랫폼에서 구축하는 데 필요한 도구와 교육에 액세스하시고 여러분의 성공을 가속화 하세요.

Discuss (0)

Tags

답글 남기기