렌더링 > 클러스터
클러스터 렌더링을 사용하여 여러 컴퓨터 간에 렌더링 프로세스를 공유해 렌더링 시간을 줄입니다. 내부적으로 보면, 장면 그래프가 네트워크를 통해 각 컴퓨터로 전송된 후 렌더링을 위해 여러 타일로 분할되는 것입니다. 그리고 그 결과가 마스터로 다시 전송되어 최종 이미지가 작성됩니다.
클러스터를 구성하려면 클러스터링하려는 각 호스트의 IP 주소 또는 이름을 알아야 합니다. 각 호스트에는 클러스터 서비스 또는 VRED Professional 버전이 설치되어 있어야 합니다.
불필요한 렌더 노드 라이센스의 체크 아웃을 피하려면 클러스터 서비스에서 개별 호스트를 비활성화할 수 있습니다.
마스터 및 렌더링 노드는 네트워크를 통해 연결됩니다. 구성은 전역 옵션, 네트워크 옵션 및 각 렌더링 노드에 대한 옵션과 함께 트리 뷰로 제공됩니다.
렌더링 > 클러스터를 선택해 클러스터 모듈을 엽니다.
왼쪽 패널에서 옵션을 선택한 다음 편집 > 네트워크 추가를 선택합니다.
다음 중 하나를 수행합니다.
렌더링 노드를 개별적으로 추가하려면 편집 > 계산 노드 추가를 선택하고 오른쪽 패널의 계산 노드에서 이름을 입력합니다.
한 번에 여러 노드를 추가하려면 편집 > 클러스터 구성을 선택하여 클러스터 구성 대화상자를 엽니다.
구성 텍스트 상자에서 구성을 추가합니다. 이전 VRED 버전에 포함된 클러스터 모듈의 연결 문자열을 비롯하여 광범위한 형식이 인식됩니다.
PC1 PC2 PC3 PC4
PC1, PC2, PC3, PC4
PC1 - PC4
Master1 {PC1 PC2 PC3}
Master1₩[forwards=PC1|PC2|PC3₩]
Master1 {C1PC01 - C1PC50} Master2 {C2PC00 - C2PC50}
외부에서 생성된 파일에서 구성을 읽어 올 수도 있습니다. 예를 들어 시작 스크립트가 사용 가능한 모든 클러스터 노드의 이름이 포함된 파일을 생성할 수 있습니다. 파일의 구성 읽기 필드에 유효한 파일 이름이 포함되어 있는 경우 시작 버튼을 클릭할 때마다 구성을 읽습니다.
참고 VRED가 실행 중인 호스트에서 액세스할 수 없는 로컬 네트워크에 클러스터 노드가 있는 경우에는 중간 노드를 구성해야 합니다. 이 노드는 VRED가 실행 중인 호스트와 동일한 네트워크에 연결되어야 하며 두 번째 네트워크 카드를 통해 클러스터 네트워크에 연결되어야 합니다. 이 설정에서는 네트워크 두 개를 구성해야 합니다. 첫 번째는 VRED와 게이트웨이 노드를 연결하는 네트워크입니다. 두 번째는 클러스터 노드에 연결하는 네트워크입니다.
대화상자의 오른쪽 패널에서 클러스터, 네트워크 및 렌더 노드 옵션을 설정합니다.
클러스터 옵션을 표시하려면 왼쪽 패널에서 옵션을 선택합니다.
네트워크 옵션을 표시하려면 왼쪽 패널에서 네트워크 노드를 선택합니다.
렌더 노드 옵션을 표시하려면 왼쪽 패널에서 해당 노드를 선택합니다.
VRED 2016 SR1 이후부터 레이트레이싱 클러스터 구성이 변경되었고, VRED 2017 이후부터는 Display Cluster 구성이 변경되었습니다. 이전 구성을 가져와서 새 형식으로 전환할 수 있습니다.
클러스터 대화상자에서 파일 > 기존 항목 가져오기를 선택합니다.
VRED의 여러 인스턴스에서 동일한 클러스터 노드에 연결할 수 있습니다. 하지만 여러 VREDClusterServer 인스턴스 사이에서 가용 리소스가 공유되어야 하므로 이 경우 문제가 발생할 수 있습니다.
예를 들어, 예측할 수 없는 부하 분산 결과 또는 다른 VREDClusterServer 인스턴스에 의한 CPU 사용으로 인해 성능이 저하될 수 있습니다. 두 번째 사용자가 동일한 클러스터 노드에 연결하려고 하면 다음 메시지가 나타납니다.
하나 이상의 요청된 클러스터 노드에서 실행 중인 VREDClusterServer가 이미 있습니다. 클러스터링을 시작하고 성능 문제의 위험을 감수하시겠습니까?
또 다른 문제는 사용 가능한 메모리입니다. 큰 모델을 사용하는 경우 여러 모델을 클러스터 노드의 메모리에 로드하지 못할 수 있습니다. VRED는 필요한 메모리 양을 예측하려고 시도합니다. 요청한 메모리를 사용할 수 없으면 다음 메시지가 나타납니다.
하나 이상의 요청된 클러스터 노드에서 실행 중인 VREDClusterServer가 이미 있으며 메모리가 충분하지 않습니다. 클러스터링을 시작하고 불안정한 서버의 위험을 감수하시겠습니까?
VRED에서 클러스터 서버를 강제로 시작하면 서버에서 예상치 못한 충돌이 발생할 수 있습니다.
클러스터 렌더링에서 개별 호스트를 비활성화할 수 있습니다. 비활성화된 호스트는 렌더 노드 라이센스를 체크 아웃하지 않습니다.
₩[RT=0₩]
을 추가합니다.Display Cluster 설정에서 장면은 네트워크를 통해 연결된 여러 호스트에서 볼 수 있습니다. Display Cluster 설정이 완전히 기능하도록 하려면 다음 정보를 구성해야 합니다.
표시 설정 - 어떤 화면에서 투영의 어느 부분을 표시할지 정의해야 합니다. 정확한 뷰포트 위치를 정의할 수 있습니다. 비활성 또는 활성 설정을 선택할 수 있습니다.
메뉴 막대에서 렌더링 > 클러스터를 선택하여 클러스터 대화상자를 엽니다.
투영을 설정합니다.
여러 투영 유형이 지원됩니다. 타일 벽, CAVE 또는 임의의 투영 기준면에 대한 투영을 정의할 수 있습니다. 여러 표시에 대해 여러 투영 유형을 정의할 수 있습니다. 예를 들어, VRED는 CAVE 투영과 평행하게 배열된 표시를 처리할 수 있습니다.
타일 벽 또는 CAVE와 같은 투영 유형은 각 단일 표시에 대한 하위 투영을 생성합니다. 하위 투영은 읽기 전용입니다. 생성된 투영을 실제 상황에 맞게 변경해야 하는 경우 생성된 투영을 마우스 오른쪽 버튼으로 클릭하고 평면으로 전환을 선택하여 평면 투영으로 전환합니다. 그런 다음은 각 평면을 개별적으로 편집할 수 있습니다.
표시를 설정합니다.
투영이 정의된 경우 각 투영은 클러스터 노드 중 하나의 창에 매핑되어야 합니다. 동일한 표시에 속하는 모든 창은 함께 표시 노드로 그룹화됩니다.
표시, 창 및 뷰포트는 마우스 오른쪽 버튼 메뉴를 사용하여 복사하고 붙여 넣을 수 있습니다. 이것은 전체 표시가 유사한 창으로 구성된 경우 정의를 단순화합니다.
VRED는 여러 클러스터 노드 간 스왑 동기화를 지원합니다. NVidia Quadro Sync와 같은 동기화 하드웨어를 설치하고 올바르게 구성하고 함께 연결해야 합니다. 이러한 모든 전제 조건이 충족되면 표시 속성의 하드웨어 동기화 속성을 사용할 수 있습니다. 연결된 모든 표시는 버퍼 스왑 동기화를 수행해야 합니다.
네트워크 하드웨어는 클러스터에서 렌더링 노드에 장면 그래프를 분산시킬 수 있는 속도와 도달 가능한 최대 프레임 속도를 제한하는 한 요인입니다. Autodesk는 여러 가지 네트워크 구성으로 된 32 노드 클러스터에서 프레임 속도 및 데이터 전송 속도를 측정했습니다. 또한 CPU 래스터화가 적용된 매우 간단한 장면을 사용하여 이미지를 생성하면서 렌더링 속도가 CPU의 영향을 크게 받지 않음을 확인했습니다. 모든 측정값은 기타 트래픽이 없고 네트워크 구성요소가 잘 구성된 전용 네트워크에서 수집되었습니다.
데이터 전송 속도는 항상 클러스터에서 가장 느린 네트워크 링크에 의해 제한됩니다. 인피니밴드는 이론적으로 최대 30GBit/s 속도로 데이터를 전송할 수 있지만 마스터의 10GBit 링크로 인해 이 속도에 도달할 수 없습니다. 현재까지는 10GB 이더넷으로 연결된 대규모 클러스터는 사용해 본 적이 없습니다. 10GB>인피니밴드 구성은 최대 300개 노드를 사용하여 테스트했습니다.
네트워크 | 압축되지 않음(MB/s) | 중간(MB/s) | 높음(MB/s) |
---|---|---|---|
10GB->인피니밴드 | 990 | 1100 | 910 |
10GB->1GB | 110 | 215 | 280 |
1GB | 110 | 215 | 280 |
일부의 경우, 장면 그래프의 전송 속도와 달리 프레임 속도는 가장 느린 연결로 제한되지 않습니다. 렌더링 노드가 마스터로의 업링크가 10GBit인 1GBit 스위치에 연결된 경우 10개 렌더링 노드는 합쳐서 총 10GBit 업링크를 사용할 수 있습니다. 대형 클러스터의 경우 네트워크 대기 시간의 영향이 점점 더 중요해집니다. 인피니밴드가 기본 클러스터 네트워크가 되어야 합니다.
해상도 | 네트워크 | 압축되지 않음(fps) | 무손실(fps) | 중간 손실(fps) | 높은 손실(fps) |
---|---|---|---|---|---|
1024x768 | 10GB->인피니밴드 | 250 | 220 | 300 | 250 |
10GB->1GB | 250 | 220 | 300 | 250 | |
1GB | 50 | 100 | 145 | 220 | |
1920x1080 | 10GB->인피니밴드 | 130 | 120 | 200 | 130 |
10GB->1GB | 130 | 120 | 200 | 130 | |
1GB | 20 | 40 | 50 | 130 | |
4096x2160 | 10GB->인피니밴드 | 40 | 40 | 55 | 40 |
10GB->1GB | 40 | 40 | 55 | 40 | |
1GB | 5 | 10 | 15 | 40 | |
8192x4320 | 10GB->인피니밴드 | 10 | 12 | 14 | 13 |
10GB->1GB | 10 | 12 | 14 | 13 | |
1GB | 1 | 2 | 3 | 10 |
Mellanox 및 QLogic/Intel 인피니밴드 카드를 테스트했습니다. 10GB 이더넷의 경우 Intel X540-T1 네트워크 카드를 사용했습니다.
VRED는 최대한 많은 대역폭을 사용하려고 시도합니다. 이로 인해 동일한 네트워크의 다른 사용자와 문제가 발생할 수 있습니다. 그렇지 않은 경우(예: 동일한 네트워크에서 대용량 파일을 전송하는 경우) 렌더링 속도가 느려집니다. 가능한 한 클러스터에 전용 네트워크 인프라를 사용하십시오.
클러스터 렌더링을 위해서는 렌더링 노드에서 렌더링 서버를 시작해야 합니다. 이 프로세스를 자동화하기 위해 VREDClusterService가 사용됩니다. 이 프로그램은 요청에 따라 클러스터 서버를 시작 및 중지합니다.
기본적으로 이 서비스는 포트 8889에서 들어오는 연결을 수신합니다. 포트 하나에 대해서는 한 번에 하나의 서비스만 시작할 수 있습니다. 여러 서비스를 시작해야 하는 경우에는 각 서비스가 서로 다른 포트를 사용해야 합니다. -p
옵션을 사용하여 포트를 지정합니다.
테스트를 위해 VREDClusterService를 수동으로 시작할 수 있습니다. 옵션 -e -c
를 추가하면 콘솔에서 몇 가지 디버그 정보가 생성됩니다.
Windows에서는 VRED 설치 프로그램이 시스템 서비스인 "VRED Cluster Daemon"을 추가합니다. 이 서비스가 시스템 시작 시 VREDClusterService 시작을 담당합니다. Windows 제어판에서 "로컬 서비스 보기"를 선택하여 이 서비스를 확인할 수 있습니다. 경로가 올바른 설치 위치를 가리켜야 하고, 시작 유형은 "자동", 서비스 상태는 "시작됨"이어야 합니다.
Linux에서는 init 시스템에 bin/vredClusterService를 추가하거나 bin/clusterService
를 수동으로 실행하여 이 서비스를 시작해야 합니다.
대화상자의 아래쪽에서 클러스터 시작을 클릭합니다.
그러면 Windows에서 VREDClusterService가 시작됩니다. 이 서비스는 VRED 대신 렌더링 프로세스를 처리합니다.
주 메뉴에서 렌더링 > 렌더 설정을 선택하고 렌더링을 저장할 경로를 입력합니다.
렌더 설정 대화상자에서 렌더를 클릭합니다.
클러스터 스냅샷 대화상자가 열립니다. 렌더링 미리보기와 진행률이 표시됩니다.
렌더링 프로세스 중 언제든지 클러스터 스냅샷 대화상자에서 미리보기 업데이트를 선택하여 미리보기 이미지를 업데이트할 수 있습니다.
클러스터 서비스의 단일 호스트를 비활성화할 수 있습니다. 제외된 호스트는 렌더 노드 라이센스를 체크 아웃하지 않습니다.
₩[RT=0₩]
를 추가합니다.Linux VREDCluster 설치 프로그램은 자동 압축 풀림 바이너리로 제공됩니다. 패키지의 파일 이름에는 버전 번호와 빌드 날짜가 들어 있습니다. 현재 디렉토리로 압축을 풀려면 쉘 명령으로 설치 프로그램을 실행합니다.
sh VREDCluster-2016-SP4-8.04-Linux64-Build20150930.sh
이렇게 하면 클러스터 렌더링에 필요한 모든 파일이 들어 있는 VREDCluster-8.04 디렉토리가 생성됩니다. 각 클러스터 노드에는 이 디렉토리에 대한 읽기 권한이 있어야 합니다. 이것은 각 노드 또는 공유 네트워크 드라이브에 개별적으로 설치할 수 있습니다.
클러스터 노드에 연결할 수 있으려면 클러스터 서비스를 시작해야 합니다. 이것은 다음 명령을 수동으로 호출하거나 Linux 시작 프로세스에 이 스크립트를 추가하여 수행할 수 있습니다.
VREDCluster-8.04/bin/clusterService
Linux에서는 시스템을 시작할 때 프로그램을 시작하는 여러 가지 방법이 있습니다. Linux 배포판마다 약간씩 다른 방법이 있습니다. 한 가지 가능한 방법은 /etc/rc.local
에 시작 명령을 추가하는 것입니다. 이 스크립트는 시작할 때와 각 실행 수준 변경 시 실행됩니다.
예를 들어, 설치 파일이 /opt/VREDCluster-8.04
에 저장되어 있으면 rc.local
을 다음과 같이 편집해야 합니다.
#!/bin/sh -e
killall -9 VREDClusterService
/opt/VREDCluster-8.04/bin/clusterService &
exit 0
루트로 서비스를 실행하지 않으려면 예를 들어 vreduser로 서비스를 시작할 수 있습니다.
#!/bin/sh -e
killall -9 VREDClusterService
su - vreduser '/opt/VREDCluster-8.04/bin/clusterService &'
exit 0
시스템 시작 시 VRED 서비스를 시작하는 또 다른 옵션은 /etc/init.d
에 init 스크립트를 추가하는 것입니다. 설치 디렉토리 bin/vredClusterService
에서 /etc/init.d
로 init 스크립트를 복사합니다. 그런 다음 다른 실행 수준에 맞게 스크립트를 활성화해야 합니다.
Redhat 또는 CentOS Linux의 경우: chkconfig vredClusterService on
Ubuntu
의 경우: update-rc.d vredClusterService
defaults
라이센스 서버의 주소는 홈 디렉토리 .flexlmrc
의 구성 파일에 저장하거나 환경 변수 ADSKFLEX₩_LICENSE₩_FILE
로 설정해야 합니다. 서버 이름이 mylicenseserver
인 경우:
~/ .flexlmrc
에는 다음이 포함되어야 합니다. ADSKFLEX₩_LICENSE₩_FILE=@ mylicenseserver
또는 로그인 스크립트에 다음을 추가합니다. export ADSKFLEX₩_LICENSE₩_FILE=@ mylicenseserver
클러스터 서비스를 시작하는 사용자의 환경이 설정되었는지 확인하십시오.
로그 파일은 디렉토리 /tmp/clusterServer/log
에 기록됩니다. 로그 파일은 웹 브라우저를 사용하여 볼 수 있습니다. 문제 해결을 위해 콘솔 모드에서 클러스터 서비스를 시작하는 것이 도움이 될 수 있습니다. 실행 중인 클러스터 서비스를 중지하고 bin/clusterService -e -c
를 수동으로 시작합니다. 이제 모든 디버그 및 오류 메시지가 콘솔에 기록됩니다.
서비스가 실행되고 있는지 확인: ps -C VREDClusterService
클러스터 서비스 중지 killall -9 VREDClusterService
클러스터 서버 중지: killall -9 VREDClusterServer
완전한 비차단 네트워크에서는 연결된 모든 노드가 최대 링크 속도로 서로 통신할 수 있습니다. 16포트 기가비트 스위치의 경우 이는 스위치가 16포트 읽기 및 쓰기 트래픽을 병렬로 처리할 수 있음을 의미합니다. 여기에는 32GBit/s의 내부 대역폭이 필요합니다. VRED는 비차단 네트워크에서 가장 잘 작동합니다. 예를 들어 장면 그래프 전송은 파이프라인처럼 노드에서 노드로 패키지를 전송하는 방식으로 이루어집니다. 이 방법은 전체 장면을 각 노드로 직접 전송하는 것보다 훨씬 더 빠릅니다.
가능한 한 네트워크 허브는 사용하지 마십시오. 허브는 들어오는 패키지를 연결된 모든 노드로 전송하기 때문에. 장면 그래프 전송이 매우 느립니다.
대규모 클러스터에서는 완전한 비차단 네트워크를 사용하는 비용이 매우 클 수 있습니다. 클러스터 노드가 여러 스위치에 연결되어 있는 경우에는 렌더링 노드가 연결된 스위치별로 렌더링 노드를 정렬하기만 하면 양호한 성능을 얻을 수 있습니다.
예를 들어, 256개의 노드가 있는 클러스터를 사용하는 경우 이러한 노드는 4개의 스위치에 연결됩니다. 여기에서 최악의 구성은 다음과 같은 구성입니다.
Node001 Node177 Node002 Node200 Node090 ...
다음과 같이 정렬된 목록을 사용하면 더 나은 결과를 얻을 수 있습니다.
Node001 - Node256
이 구성으로 인해 어떤 성능 문제가 발생하면 네트워크 위상을 다음과 같은 구성으로 모델링해 볼 수 있습니다.
Node001 { Node002 - Node064 }
Node065 { Node066 - Node128 }
Node129 { Node130 - Node192 }
Node193 { Node194 - Node256 }
이 구성을 사용하면 스위치 간에 전송되는 데이터의 양이 효과적으로 줄어듭니다.
ib₩_write₩_bw
를 사용해 두 노드 간의 통신을 확인합니다.ulimit -l
을 확인합니다. 잠긴 메모리의 양이 무제한으로 설정되어 있어야 합니다.ulimit -n
을 확인합니다. 열려 있는 파일의 수가 무제한 또는 큰 값으로 설정되어 있어야 합니다.VREDClusterServer
를 통해 Infiniband
를 실행할 수 없는 대부분의 경우 약간의 성능 저하를 감수하고 IP
over Infiniband
를 사용할 수 있습니다.iperf -P4
를 사용해 시뮬레이션할 수 있습니다. 양쪽 방향 모두에서 처리량을 확인합니다.Intel 10GB X540-T1 이더넷 카드의 경우 다음과 같은 옵션을 통해 Windows에서 네트워크 처리량을 늘릴 수 있습니다.
Default = 2
, 4
로 변경Default = 512
, 2048
로 변경Default = 512
, 2048
로 변경Linux에서 /etc/sysctl.conf
의 net.ipv4.tcp_rmem
, net.ipv4.tcp_wmem
, net.ipv4.tcp_mem
매개변수를 늘릴 수 있습니다.
Windows용 MLNX₩_VPI₩_WinOF
인피니밴드 드라이버를 사용하면 InfiniBand에서 TCP를 사용하여 클러스터 노드를 연결할 수 있습니다. 다음 네트워크 설정을 사용합니다.
Linux가 "연결된 모드"를 사용하도록 구성된 경우 Linux 네트워크에 연결할 수 없습니다. 모든 연결된 노드의 MTU가 동일한지 확인하십시오.