NGC(NVIDIA GPU Cloud)는 심층 학습 및 과학적 계산에 최적화된 GPU 가속 클라우드 플랫폼입니다. AI 및 ML 워크플로의 성능을 향상하기 위해 NGC에서 실행 중인 vSphere Bitfusion 클라이언트에 PVRDMA 어댑터를 추가할 수 있습니다.
NGC용 AI 및 ML 이미지에는 RDMA 지원을 위한 MOFED(Mellanox Open Fabrics Enterprise Distribution) 패키지가 포함되어 있습니다. PVRDMA에서 지원되는 오픈 소스 rdma-core 패키지는 이러한 이미지에 포함되지 않으며 두 가지 유형의 패키지가 동일한 컨테이너에 공존할 수 없습니다. NGC 컨테이너에서 PVRDMA를 사용하도록 설정하려면 MOFED 라이브러리를 삭제하고 오픈 소스 rdma-core 패키지를 설치해야 합니다.
이 절차에 따라 컨테이너로 실행할 수 있는 이미지를 구축할 수 있는 Dockerfile을 생성할 수 있습니다. Dockerfile 예제는 Ubuntu Linux 배포 및 Ubuntu 배포용 오픈 소스 rdma-core 패키지를 포함하는 TensorRT용 NVIDIA 컨테이너 이미지를 기반으로 하는 이미지를 생성합니다.
프로시저
- UBUNTU_CODENAME을 가져오고 NVIDIA 컨테이너 이미지에서 MOFED deb 패키지를 찾습니다.
NVIDIA 컨테이너 이미지를 Dockerfile의 기본 이미지로 사용합니다.
- Docker에서
sudo docker run -it --rm -u root --ipc=host --privileged --net=host --cap-add=IPC_LOCK --pid=host NGC_Containter
명령을 실행하여 NGC 컨테이너를 시작합니다. 여기서 NGC_Containter는 TensorRT에 대한 NVIDIA 컨테이너 이미지의 URL의 이름입니다. 예를 들면 nvcr.io/nvidia/tensorrt:20.12-py3입니다.
- NGC 컨테이너에서
cat /etc/os-release
명령을 실행하여 UBUNTU_CODENAME을 가져옵니다.
예를 들어 Ubuntu 20.04의
UBUNTU_CODENAME은
focal
입니다.
-
ls -l /opt/mellanox/DEBS/*
명령을 실행하여 /opt/melanox/DEBS/ 폴더의 컨텐츠를 나열합니다.
- 표시된 파일 목록에서 MOFED deb 패키지를 찾습니다.
예를 들어
ibverbs-providers_51mlnx1-1.51246_amd64.deb
,
ibverbs-utils_51mlnx1-1.51246_amd64.deb
,
libibverbs-dev_51mlnx1-1.51246_amd64.deb
및
libibverbs1_51mlnx1-1.51246_amd64.deb
는 MOFED
deb 패키지입니다.
참고: NGC 컨테이너마다 다른 MOFED 패키지가 포함되어 있거나 MOFED 패키지가 전혀 없을 수 있습니다.
- Dockerfile을 생성합니다.
예:
FROM nvcr.io/nvidia/tensorrt:20.12-py3
- MOFED deb 패키지를 제거합니다.
예를 들어
RUN apt-get purge -y ibverbs-providers ibverbs-utils libibverbs-dev libibverbs1
명령을 추가합니다.
- Ubuntu용
rdma-core
패키지를 설치합니다.
예를 들어
RUN apt-get update && apt-get install -y --reinstall -t focal rdma-core libibverbs1 ibverbs-providers infiniband-diags ibverbs-utils perftest
명령을 추가합니다. 여기서
focal은 Ubuntu 20.04 배포의 이름입니다.
- NVIDIA TensorRT 샘플 프로젝트를 빌드합니다.
예를 들어
WORKDIR /workspace/tensorrt/samples
명령을 추가합니다.
- NVIDIA TersorRT에 필요한 Python 종속성을 설치합니다.
예를 들어
RUN /opt/tensorrt/python/python_setup.sh
명령을 추가합니다.
- MNIST 데이터 집합을 설치합니다.
예를 들어 다음 명령을 추가합니다.
WORKDIR /workspace/tensorrt/data/mnist
RUN python download_pgms.py
- Ubuntu용 vSphere Bitfusion 클라이언트를 설치합니다.
예를 들어 다음 명령을 추가합니다.
WORKDIR /workspace
RUN wget https://packages.vmware.com/bitfusion/ubuntu/20.04/bitfusion-client-ubuntu2004_3.0.1-4_amd64.deb
RUN apt-get update && DEBIAN_FRONTEND=noninteractive TZ=America/Los_Angeles apt-get install -y ./bitfusion-client-ubuntu2004_3.0.1-4_amd64.deb
이는 전체 Dockerfile의 예제입니다.
FROM nvcr.io/nvidia/tensorrt:20.12-py3
RUN apt-get purge -y ibverbs-providers ibverbs-utils libibverbs-dev libibverbs1
RUN apt-get update && apt-get install -y --reinstall -t focal rdma-core libibverbs1 ibverbs-providers infiniband-diags ibverbs-utils libcapstone3 perftest
WORKDIR /workspace/tensorrt/samples
RUN make -j4
RUN /opt/tensorrt/python/python_setup.sh
WORKDIR /workspace/tensorrt/data/mnist
RUN python download_pgms.py
WORKDIR /workspace
RUN wget https://packages.vmware.com/bitfusion/ubuntu/20.04/bitfusion-client-ubuntu2004_3.0.1-4_amd64.deb
RUN apt-get update && DEBIAN_FRONTEND=noninteractive TZ=America/Los_Angeles apt-get install -y ./bitfusion-client-ubuntu2004_3.0.1-4_amd64.deb
- Docker를 사용하여 Dockerfile에서 이미지를 구축합니다.
예를 들어
sudo docker build -t Dockerimage_name
명령을 실행합니다. 여기서
Dockerimage_name은 새 이미지의 이름입니다.
- vSphere Bitfusion 클라이언트를 활성화합니다.
- (선택 사항) Docker 파일을 실행하고 PVRDMA 어댑터가 구성된 vSphere Bitfusion 서버를 대상으로 지정합니다.
예를 들어 다음 명령을 실행합니다. 여기서
Dockerimage_name은 새 이미지의 이름이고
BF_Server_IP는
vSphere Bitfusion 서버의 IP 주소입니다.
sudo docker run -it --rm -u root --ipc=host --privileged --net=host --cap-add=IPC_LOCK --pid=host Dockerimage_name
cd /workspace/tensorrt/bin
bitfusion run -n 1 -l BF_Server_IP -- ./sample_mnist
결과
데이터 트래픽에 대해 PVRDMA를 사용하도록 설정한
vSphere Bitfusion 클라이언트가 포함된 NGC 컨테이너 이미지를 생성했습니다.