하이브리드 렌더링 작업장 개념 증명 실행


이 문서에서는 개념 증명(PoC)을 실행하여 Google Cloud에서 하이브리드 렌더링 작업장을 빌드하는 방법을 보여줍니다. 이 문서는 하이브리드 렌더링 작업장 구축의 지침이며 Google Cloud에서 애니메이션, 영화, 광고 또는 비디오 게임의 테스팅과 벤치마킹 렌더링에 도움이 되도록 작성되었습니다.

테스트 범위를 중요한 구성요소로만 한정하면 Google Cloud에서 하이브리드 렌더링 작업장의 PoC를 실행할 수 있습니다. 전체 엔드 투 엔드 솔루션의 설계와 달리 PoC의 목적은 다음과 같습니다.

  • 클라우드에서 온프레미스 렌더링 환경을 재현하는 방법을 결정합니다.
  • 온프레미스 렌더링 작업자와 클라우드 인스턴스 간의 렌더링 및 네트워킹 성능 차이를 측정합니다.
  • 온프레미스 및 클라우드 작업 부하 간의 비용 차이를 확인합니다.

중요도가 낮은 다음과 같은 작업은 PoC에서 연기하거나 아예 삭제할 수 있습니다.

  • 시설과 클라우드 간에 자산이 동기화되는 방식을 결정합니다(동기화되는 경우).
  • 큐 관리 소프트웨어를 사용하여 클라우드 렌더링 작업자에게 작업을 배포하는 방법을 결정합니다.
  • Google Cloud에 연결하는 가장 좋은 방법을 결정합니다.
  • 시설과 Google 데이터 센터 간의 지연 시간을 측정합니다.

연결

PoC 렌더링에는 Google에 대한 엔터프라이즈급 연결이 필요하지 않습니다. 공개 인터넷을 통한 연결이면 충분합니다. 연결 속도, 지연 시간, 대역폭은 렌더링 성능에 크게 중요하지 않습니다.

PoC에 대한 Dedicated Interconnect 또는 Partner Interconnect를 준비하는 작업은 시간이 걸릴 수 있으며 렌더링 테스트와 동시에 수행할 수 있으므로 연결을 별도의 PoC로 처리할 수 있습니다.

목표

  • Compute Engine 인스턴스를 만들고 렌더링 작업자 역할을 하도록 맞춤설정합니다.
  • 커스텀 이미지를 만듭니다.
  • 렌더링 작업자를 배포합니다.
  • 애셋을 렌더링 작업자로 복사합니다.
  • 렌더링 벤치마크를 수행합니다.
  • 테스트 렌더링을 평가를 위해 렌더링 작업자에서 로컬 워크스테이션으로 복사합니다.

비용

보호되는 사용량을 예측할 때 온프레미스와 클라우드 기반 렌더링 작업자 간의 비용 차이를 예측하세요.

이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Google Cloud CLI를 설치합니다.
  5. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  6. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  7. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  8. Google Cloud CLI를 설치합니다.
  9. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  10. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  11. 이 문서에서는 주로 Cloud Shell을 사용하여 단계를 수행하지만, 온프레미스 머신에서 Cloud Storage로 데이터를 복사하려면 해당 머신에서 Google Cloud CLI가 실행되어야 합니다.

환경 설정

  • Cloud Shell에서 Compute Engine 영역을 설정합니다.

    gcloud config set compute/zone [ZONE]
    

    [ZONE]은 모든 리소스가 생성되는 영역입니다.

인스턴스 배포

PoC를 위해 온프레미스 렌더링 작업자 하드웨어를 다시 만들 수도 있습니다. Google Cloud는 사용자의 하드웨어와 일치할 가능성이 있는 여러 CPU 플랫폼을 제공하지만, 클라우드 기반 가상 머신의 아키텍처는 온프레미스 렌더링 작업장의 베어메탈 렌더링 블레이드와 다릅니다.

Google Cloud에서는 자원이 가상화되며 다른 자원과 독립적입니다. 가상 머신(인스턴스)은 다음과 같은 주요 구성요소로 이루어집니다.

  • 가상 CPU(vCPU)
  • 메모리(RAM)
  • 디스크

    • 부팅 디스크 및 게스트 OS
    • 추가 스토리지 디스크
  • NVIDIA Tesla GPU(선택사항)

또한 네트워킹, 방화벽 규칙, 사용자 액세스와 같은 리소스의 다른 측면도 제어할 수 있습니다. 하지만 PoC를 위해서는 앞에서 언급한 네 가지 구성요소에만 주의하면 됩니다.

인스턴스 만들기

  1. Cloud Shell에서 프로토타입 렌더링 작업자 인스턴스를 만듭니다.

    gcloud compute instances create [INSTANCE_NAME] \
        --machine-type [MACHINE_TYPE] \
        --image-project [IMAGE_PROJECT] \
        --image-family [IMAGE_FAMILY] \
        --boot-disk-size [SIZE]
    

    각 항목의 의미는 다음과 같습니다.

    • [INSTANCE_NAME]은 인스턴스의 이름입니다.
    • [MACHINE_TYPE]은 vCPU 개수와 머신 유형의 메모리 양을 정의할 때 custom-[NUMBER_OF_CPUS]-[NUMBER_OF_MB] 형식을 사용하는 사전 정의된 머신 유형 또는 커스텀 머신 유형입니다.
    • [IMAGE_PROJECT]는 해당 이미지 계열의 이미지 프로젝트입니다.
    • [IMAGE_FAMILY]는 이 이미지가 속한 이미지 계열을 지정하는 플래그이며 선택사항입니다.
    • [SIZE]는 부팅 디스크의 크기(GB 단위)입니다.

    예를 들면 다음과 같습니다.

    gcloud compute instances create render-worker-proto \
        --machine-type custom-24-32768 \
        --image-project centos-cloud \
        --image-family centos-7 \
        --boot-disk-size 100
    

    위의 명령어는 24개의 vCPU, 32GB RAM, 100GB의 표준 부팅 디스크로 CentOS 7 인스턴스를 만듭니다. 이전에 기본 컴퓨팅 영역으로 설정한 영역에서 인스턴스가 만들어집니다.

최대 96개의 vCPU(더 필요한 경우 ultramem 유형을 사용), 624GB의 RAM 또는 여러 개의 NVIDIA Tesla GPU로 원하는 크기의 VM을 만들 수 있습니다. 가능성은 무한하지만 과도하게 프로비저닝하지 않도록 주의하세요. 어떤 크기의 작업에도 적합한 비용 효율적이고 확장 가능한 클라우드 기반 렌더링 작업장을 설계하는 것이 좋습니다.

인스턴스에 로그온

  1. Cloud Shell에서 SSH를 사용하여 인스턴스에 연결합니다.

    gcloud compute ssh [INSTANCE_NAME]
    
  2. 온프레미스 렌더링 작업자와 마찬가지로 인스턴스에 소프트웨어를 설치하고 라이선스를 부여합니다.

기본 이미지 만들기

커스텀 Linux 커널이나 이전 OS 버전 등을 필요로 하는 커스텀 소프트웨어를 테스트하지 않는 한, 공개 디스크 이미지 중 하나로 시작한 다음 사용할 소프트웨어를 추가하는 것이 좋습니다.

사용자의 이미지를 가져올 때는 게스트 OS가 Google Cloud와 통신할 수 있도록 하는 추가 라이브러리를 설치하여 이 이미지를 구성해야 합니다.

렌더링 작업자 설정

  1. Cloud Shell의 앞에서 만든 인스턴스에서 소프트웨어 및 라이브러리를 설치하여 온프레미스 작업자와 마찬가지로 렌더링 작업자를 설정합니다.

  2. 인스턴스를 중지합니다.

    gcloud compute instances stop [INSTANCE_NAME]
    

커스텀 이미지 만들기

  1. Cloud Shell에서 VM의 부팅 디스크 이름을 확인합니다.

    gcloud compute instances describe [INSTANCE_NAME]
    

    결과에 인스턴스의 부팅 디스크 이름이 포함됩니다.

    mode: READ_WRITE
    source:https://www.googleapis.com/compute/v1/projects/[PROJECT]/zones/[ZONE]/disks/[DISK_NAME]
    

    각 항목의 의미는 다음과 같습니다.

    • [PROJECT]은 Google Cloud 프로젝트 이름입니다.
    • [ZONE]은 디스크가 있는 영역입니다.
    • [DISK_NAME]은 인스턴스에 연결된 부팅 디스크의 이름입니다. 디스크 이름은 일반적으로 인스턴스 이름과 같거나 유사합니다.
  2. 인스턴스에서 이미지를 만듭니다.

    gcloud compute images create [IMAGE_NAME] \
        --source-disk [DISK_NAME] \
        --source-disk-zone [ZONE]
    

    각 항목의 의미는 다음과 같습니다.

    • [IMAGE_NAME]은 새 이미지의 이름입니다.
    • [DISK_NAME]은 새 이미지를 만들 디스크입니다.
    • [ZONE]은 디스크가 있는 영역입니다.

렌더링 작업자 배포

필요한 OS, 소프트웨어, 라이브러리로 커스텀 이미지를 준비했으므로 공개 이미지를 사용하는 대신 커스텀 이미지를 사용하여 렌더링 작업자 인스턴스를 배포할 수 있습니다.

  • Cloud Shell에서 렌더링 작업자 인스턴스를 만듭니다. 이 인스턴스에서 Cloud Storage에 쓸 수 있도록 devstorage.read_write 범위를 추가합니다.

    gcloud compute instances create [WORKER_NAME] \
        --machine-type [MACHINE_TYPE] \
        --image [IMAGE_NAME] \
        --scopes https://www.googleapis.com/auth/devstorage.read_write \
        --boot-disk-size [SIZE]
    

    [WORKER_NAME]은 렌더링 작업자의 이름입니다.

소프트웨어에 라이선스 부여

새로운 클라우드 기반 라이선스 서버의 라이선스를 재발급할 필요가 없으므로 온프레미스 라이선스 서버를 사용하여 PoC 중에 라이선스를 제공할 수 있습니다. 클라우드 인스턴스에서 온프레미스 라이선스 서버에 안전하게 연결하려면 필요한 포트를 통한 트래픽만 허용하는 방화벽 규칙을 만듭니다. 이 방화벽 규칙은 온프레미스 인터넷 게이트웨이 또는 라이선스 서버 자체의 IP 주소에서 발생하는 트래픽도 허용합니다.

Google Cloud 인스턴스의 트래픽이 온프레미스 라이선스 서버에 도달할 수 있도록 시설의 인터넷 게이트웨이를 구성해야 할 수도 있습니다.

온프레미스 라이선스 서버 사용

방화벽 규칙을 만들어 Virtual Private Cloud(VPC) 네트워크로 트래픽을 허용할 수 있습니다.

  • Cloud Shell에서 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create [RULE_NAME] \
       --direction=INGRESS \
       --priority=1000 \
       --network=default \
       --action=ALLOW \
       --rules=[PROTOCOL]:[PORT] \
       --source-ranges=[IP_ADDRESS]
    

각 항목의 의미는 다음과 같습니다.

  • [RULE_NAME]은 방화벽 규칙의 이름입니다.
  • [PROTOCOL]은 트래픽의 프로토콜입니다.
  • [PORT]는 트래픽이 통과하는 포트입니다.
  • [IP_ADDRESS]는 온프레미스 라이선스 서버의 IP 주소입니다.

클라우드 기반 라이선스 서버 사용

클라우드 기반 라이선스 서버는 온프레미스 네트워크에 대한 연결이 필요하지 않으며, 렌더링 작업자와 동일한 VPC 네트워크에서 실행됩니다. 라이선스 제공은 상대적으로 가벼운 작업이므로 소수의 렌더링 작업자에게 라이선스를 제공하는 작업 부하는 소규모 인스턴스(2~4개의 vCPU, 6~8GB RAM)로 처리할 수 있습니다.

라이선스를 제공해야 하는 소프트웨어의 유형에 따라 라이선스를 라이선스 서버의 MAC 주소와 같은 고유한 하드웨어 ID 번호로 다시 입력해야 할 수도 있습니다. 다른 라이선스 관리자는 인터넷에 연결된 호스트에서 소프트웨어 라이선스의 유효성을 검사할 수 있습니다. 라이선스 관리자가 많으므로 제품 라이선스 문서에서 안내를 참조하세요.

인스턴스 간 통신 허용

렌더링 작업자와 라이선스 서버 인스턴스는 서로 통신해야 합니다. 방화벽 규칙 default-allow-internal은 프로젝트의 모든 인스턴스가 서로 통신하도록 허용합니다. 이 방화벽 규칙은 새 프로젝트를 만들 때 만들어집니다. 새 프로젝트를 사용하는 경우 이 섹션을 건너뛸 수 있습니다. 기존 프로젝트를 사용하는 경우에는 방화벽 규칙이 여전히 Google Cloud 프로젝트에 있는지 테스트해야 합니다.

  1. Cloud Shell에서 방화벽 규칙이 프로젝트에 있는지 확인합니다.

    gcloud compute firewall-rules list \
        --filter="name=default-allow-internal"
    

    방화벽 규칙이 프로젝트에 있으면 다음과 같은 결과가 표시됩니다.

    NAME                   NETWORK DIRECTION PRIORITY ALLOW DENY                   DISABLED
    default-allow-internal default INGRESS   65534m   tcp:0-65535,udp:0-65535,icmp False
    

    방화벽 규칙이 프로젝트에 없으면 결과에 아무 것도 표시되지 않습니다.

  2. 방화벽 규칙을 작성해야 하면 다음 명령어를 사용합니다.

    gcloud compute firewall-rules create default-allow-internal \
        --direction=INGRESS \
        --priority=65534 \
        --network=default \
        --action=ALLOW \
        --rules=tcp:0-65535,udp:0-65535,icmp \
        --source-ranges=0.0.0.0/0
    

애셋 저장

렌더링 파이프라인은 한 회사 안에서도 크게 다를 수 있습니다. PoC를 최소한의 구성으로 신속하게 구현하려면 렌더링 작업자 인스턴스의 부팅 디스크를 사용하여 애셋을 저장할 수 있습니다. 이 PoC는 아직 데이터 동기화 또는 더 많은 고급 스토리지 솔루션을 평가할 수 없습니다. 이러한 옵션은 별도의 PoC에서 평가할 수 있습니다.

Google Cloud에는 여러 가지 스토리지 옵션이 있지만 별도의 PoC에서 확장 가능한 공유 스토리지 솔루션을 테스트하는 것이 좋습니다.

여러 렌더링 작업자 구성을 테스트하는 경우 공유 파일 시스템이 필요하면 Filestore 볼륨을 만들고 NFS를 사용하여 이를 렌더링 작업자를 대상으로 마운팅할 수 있습니다. Filestore는 여러 인스턴스에 쓰기/읽기가 가능하도록 마운팅할 수 있는 관리형 파일 스토리지 서비스로서 파일 서버 역할을 합니다.

Google Cloud로 데이터 가져오기

렌더링 PoC를 실행하려면 장면 파일, 캐시, 애셋을 렌더링 작업자로 가져와야 합니다. 10GB를 초과하는 대규모 데이터 세트의 경우 gsutil을 사용하여 데이터를 Cloud Storage로 복사한 다음 렌더링 작업자로 복사할 수 있습니다. 소규모(< 10GB) 데이터 세트의 경우 gcloud CLI를 사용하여 데이터를 렌더링 작업자의 경로로 직접 복사할 수 있습니다(Linux만 해당).

렌더링 작업자에 대상 디렉터리 만들기

  1. Cloud Shell에서 SSH를 사용하여 렌더링 작업자에 연결합니다.

    gcloud compute ssh [WORKER_NAME]
    

    [WORKER_NAME]은 렌더링 작업자의 이름입니다.

  2. 데이터의 대상 디렉터리를 만듭니다.

    mkdir [ASSET_DIR]
    

    [ASSET_DIR]은 렌더링 작업자에 있는 로컬 디렉터리입니다.

gsutil을 사용하여 대량의 데이터 복사

대규모 데이터 세트를 렌더링 작업자로 전송하려면 gsutil과 Cloud Storage를 중간 단계로 사용하세요. 소규모 데이터 세트를 전송할 때는 다음 섹션을 건너뛰고 gcloud CLI를 사용하여 소규모 데이터를 전송하세요.

  1. 로컬 워크스테이션에서 Cloud Storage 버킷을 만듭니다.

    gsutil mb gs://[BUCKET_NAME_ASSETS]
    

    [BUCKET_NAME_ASSETS]는 복사할 파일 또는 디렉터리를 위한 Cloud Storage 버킷의 이름입니다.

  2. 로컬 디렉터리에서 버킷으로 데이터를 복사합니다.

    gsutil -m cp -r [ASSETS] gs://[BUCKET_NAME_ASSETS]
    

    [ASSETS]는 버킷으로 복사할 파일 또는 디렉터리의 목록입니다.

  3. SSH를 사용하여 렌더링 작업자에 연결합니다.

    gcloud compute ssh [WORKER_NAME]
    
  4. 버킷의 콘텐츠를 렌더링 작업자로 복사합니다.

    gsutil -m cp -r gs://[BUCKET_NAME_ASSETS]/* [ASSET_DIR]
    

gcloud CLI를 사용하여 소량의 데이터 복사

소규모 데이터 세트를 전송할 때는 gcloud CLI를 사용하여 로컬 워크스테이션에서 바로 실행 중인 Linux 렌더링 작업자로 복사할 수 있습니다.

  • 로컬 워크스테이션에서 로컬 디렉터리와 렌더링 작업자 간에 데이터를 복사합니다.

    gcloud compute scp --recurse [ASSETS] [INSTANCE_NAME]:[ASSET_DIR]
    

    각 항목의 의미는 다음과 같습니다.

    • [ASSETS]는 버킷으로 복사할 파일 또는 디렉터리의 목록입니다.
    • [INSTANCE_NAME]은 렌더링 작업자의 이름입니다.
    • [ASSET_DIR]은 렌더링 작업자의 로컬 경로입니다.

테스트 렌더링 실행

렌더링 소프트웨어와 복사한 장면 데이터를 설치하고 라이선스를 부여한 후에는 렌더링 테스트를 실행할 준비가 됩니다. 이 프로세스는 렌더링 파이프라인이 렌더링 명령어를 실행하는 방법에 전적으로 의존합니다.

벤치마크 도구

온프레미스 하드웨어를 대상으로 클라우드 리소스를 벤치마크하려면 Perfkit Benchmarker를 사용하여 네트워크 대역폭과 디스크 성능 같은 통계를 측정할 수 있습니다.

V-Ray, Octane, Maxon과 같은 일부 렌더링 소프트웨어에는 자체 벤치마킹 도구가 있으며, 이를 온프레미스와 클라우드에서 모두 실행하여 일반적인 렌더링 구성을 비교할 수 있습니다.

Google Cloud에서 데이터 가져오기

렌더링 테스트를 수행하고 결과를 보려면 렌더링 결과를 로컬 워크스테이션에 복사해야 합니다. 전송할 데이터 세트의 크기에 따라 gsutil 또는 gcloud CLI를 사용할 수 있습니다.

로컬 워크스테이션에 대상 디렉터리 만들기

  • 로컬 워크스테이션에서 렌더링을 위한 디렉터리를 만듭니다.

    mkdir [RENDER_DIR]
    

    [RENDER_DIR]은 렌더링 작업자의 로컬 경로입니다.

gsutil을 사용하여 대량의 데이터 복사

대규모 데이터 세트를 전송하는 경우 gsutil을 사용합니다. 그렇지 않으면 다음 섹션으로 건너뛰고 gcloud CLI를 사용합니다. 데이터를 렌더링 작업자에서 Cloud Storage 버킷으로 복사하려면 별도의 Cloud Storage 버킷을 만들어 렌더링을 애셋 데이터와 별개로 유지합니다.

  1. 로컬 워크스테이션에서 새 Cloud Storage 버킷을 만듭니다.

    gsutil mb gs://[BUCKET_NAME_RENDERS]
    

    [BUCKET_NAME_RENDERS]은 렌더링된 데이터를 위한 Cloud Storage 버킷의 이름입니다.

  2. SSH를 사용하여 렌더링 작업자에 연결합니다.

    gcloud compute ssh [WORKER_NAME]
    
  3. 렌더링된 데이터를 버킷에 복사합니다.

    gsutil -m cp -r [RENDERS] gs://[BUCKET_NAME_RENDERS]
    

    각 항목의 의미는 다음과 같습니다.

    • [RENDERS]는 버킷으로 복사할 파일 또는 디렉터리의 목록입니다.
  4. 로컬 워크스테이션에서 Cloud Storage 버킷의 파일을 로컬 디렉터리로 복사합니다.

    gsutil -m cp -r gs://[BUCKET_NAME_RENDERS]/* [RENDER_DIR]
    

gcloud CLI를 사용하여 소량의 데이터 복사

소규모 데이터 세트를 복사할 때는 렌더링 작업자에서 로컬 워크스테이션으로 직접 복사할 수 있습니다.

  • 로컬 워크스테이션에서 렌더를 대상 디렉터리로 복사합니다.

    gcloud compute scp --recurse [WORKER_NAME]:[RENDERS] [RENDER_DIR]
    

    [RENDERS]는 로컬 워크스테이션으로 복사할 파일 또는 디렉터리의 목록입니다.

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

프로젝트 삭제

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

개별 리소스 삭제

  1. 인스턴스를 삭제합니다.
    gcloud compute instances delete INSTANCE_NAME
  2. 버킷을 삭제합니다.
    gcloud storage buckets delete BUCKET_NAME

다음 단계