구글의 Compute Engine은 AWS나 Azure와 같은 VPC 서비스입니다. 클라우드의 일부를 빌려주고 이를 이용한만큼 비용을 청구하는 방식입니다.
다만, 구글을 AWS와 달리 평가기간을 길게 주고 어떤 인스턴스를 쓰더라도 쓸 수 있는(대신 강력할 수록 그만큼 크레딧을 많이 쓰지만) 300$의 크레딧을 줍니다. 이것을 이용하면 CPU를 더럽게 많이 쓰는 Blender 렌더링을 무료로 원격렌더링 할 수 있습니다. (대신 SSH나 명령줄이 익숙하지 않으면 렌더링하기 힘들겁니다.)
사실 미리 비슷한 서비스 같은 것을 만들어두면 참 편리한데 사람이란게 참 귀찮아서 말이지요.
원격 렌더링에는 https://blendergrid.com/ 이러한 서비스가 이미 있지만 우린 직접 구축해서 해보는 것을 목표로 해보겠습니다. 이번에 하는 것을 잘 이용하면 Blendergrid 같은 서비스도 만들 수 있을 겁니다. 어차피 Blender도 요즘 웬만한 CGI같이 Python으로 굴러가니까요.
우선 구글 Compute Engine이 뭔지 알아야겠지요.https://cloud.google.com/compute/?hl=ko
이곳으로 접속해봅시다.
구글에 로그인이 되어있는 상태라면 무료로 사용해보기를 누를 수 있습니다. 여기서 사용을 활성화 하세요.
그리고 결제니 뭐니 그런건 일단 신경 끄고(일단 지금 결제를 할 것은 아니니까 어디까지나 우린 평가중입니다.)
compute Engine의 설정으로 들어갑니다.
그리고 어느 서버에서 사용할 것인지 설정을 해두는 것입니다.
여기서 Region과 영역을 설정합니다. 저 같은 경우에는 asia-northeast1과 asia-northeast1-a 를 선택했습니다. 여기가 도쿄 서버라서 속도가 홍콩이나 다른 곳보다 낫습니다. 아쉽게도 서울은 없습니다.
그리고 VM인스턴스로 들어가서 인스턴스를 하나 생성합니다.
Blender는 닥치고 CPU코어가 많은 것이 짱이기 때문에 vCPU8개를 쑤셔 넣었습니다. 맞춤 설정에서 물론 GPU도 넣으면 상당히 좋지만 GPU까지 끌고 오면 평가판 크레딧이 남아나지를 않습니다. 하나만 넣었는데 배로 나가더군요. 만약 시간이 부족하신 분이라면 맞춤 설정에서 GPU를 넣거나 그냥 계정 활성화를 한번 더 넣어서 코어96개를 박아버리는 것도 방법입니다. 사실 코어96개가 성능이 더 나을거에요. CUDA설정은 조금 귀찮거든요.
그리고 저는 OS를 속편한 Ubuntu 18.04로 했습니다. 참고로 작업한 Blender버전과 렌더링할 Blender버전을 맞추는 것이 좋은데 일단 Blender버전만 같으면 어떤 OS에서 작업해도 상관은 없지만 아무래도 저는 Blender를 따로 wget으로 설치한다던지 하는게 너무 귀찮아서(저는 우분투18.04제공 Blender를 씁니다. 그냥 똑같이 맞춘겁니다.) 2019년 현재 안정버전은 2.79버전이고 제일 많이 쓰이는 것도 이 버전일테니 2.79버전을 저장소에서 제공하는 Ubuntu18.04를 선택한 겁니다. 다른 이유는 없습니다.
이제 서버 접속을 위한 Google Cloud SDK를 설치합니다. 자세한 것은 아래의 주소를 참고하세요. Windows 유저분은 그냥 설치 프로그램을 써서 설치하시면 됩니다.
https://cloud.google.com/sdk/docs/?hl=ko
여기서 Cloud SDK설치가 가능한데 우리의 데비안/우분투는 apt로 설치가 가능합니다.
우선 버전을 맞추기 위해 터미널에서 다음과 같이 명령을 내립니다.
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
리눅스 민트의 경우에는
$(lsb_release -c -s) 을 우분투에 맞춰서 바꿔주셔야 합니다.
19.x의 경우에는 bionic이라고 적어주세요. (우분투 18.04기반이므로 우분투 18.04의 것으로 적어두는 겁니다.)
export CLOUD_SDK_REPO="cloud-sdk-bionic"
그리고 저장소를 추가합니다.
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
그다음에 다음 명령으로 저장소 키를 추가합니다.
만약 curl이 없다면 curl을 미리 설치합니다. (그런데 보통은 미리 설치되어 있습니다.)
sudo apt install curl
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
이제 익숙한 명령어를 쓰면 됩니다.
sudo apt update
sudo apt install google-cloud-sdk
이제 gcloud 명령을 이용할 수 있습니다.
다음 명령으로 gcloud를 초기화 해봅시다.
gcloud init
이것저것 물어보고 구글 로그인도 하고 그럴텐데 그냥 열심히 진행합시다.
이것으로 인스턴스에 접속하면서 파일 전송을 SCP로 가능하게 됩니다.
다시 VM인스턴스로 돌아와서
인스턴스가 만들어졌다면 SSH라는 것이 있을텐데 이걸 쓰면 바로 브라우저에서 리눅스 서버에 접속이 가능합니다. gcloud의 기능을 쓸 수 없습니다. 간단한 것은 상관 없지만 파일전송이라던가 다른 귀찮은 것은 불가능합니다. 아니면 Private키를 받아와서 SSH클라이언트로 접속하는 것도 있는데 AWS 써보신 분은 아시겠지만 귀찮습니다.
그냥 gcloud로 하면 귀찮은거 없고 짱이에요.
gcloud명령보기를 누르면 gcloud로 터미널이나 CMD에서 긁어다가 쓸 수 있는 명령이 짠하고 나옵니다. 이것을 복사해다가 넣으면 인스턴스에 접속이 됩니다!!!
이제 서버에서 필요한 것을 설치하면 됩니다. 우린 Blender를 설치하려고 했으니 Blender를 설치하기로 합시다.
(서버에 접속한 상태에서)
sudo apt update
sudo apt install blender
먄약 Blender의 다른 버전을 원하시는 분들은 PPA를 등록하던지 직접 Blender홈페이지에서 wget으로 설치하던지 하는 방법으로 Blender를 설치하세요!
2019년 현재 우분투 18.04는 Blender 2.79버전을 제공하고 있습니다.
이제 렌더링을 할 Blend 파일을 서버로 전송하고 서버에서 렌더링을 돌려봅시다.
우선 작업한 Blender에서 설정을 조금 해야 합니다.
우선 Blend파일을 서버로 넣기 전에 필요한 설정을 미리 해둡시다. 렌더링결과를 어떻게 얻을 것 인지를 미리 설정하는 것입니다.
Blender 2.7x 기준 기본UI 상태에서 카메라탭을 누르면 렌더링 설정을 미리 할 수 있습니다.
일단 Output은 ./ 로 해두는 것이 정신 건강에 좋습니다. 자신 있으면 절대경로로 해두는 것도 좋습니다. 그런데 권한 문제로 복잡할 겁니다. 그냥 조용히 ./로 합시다.
그리고 결과물은 어떤 형태인지 몇 프레임에서 몇 프레임으로 할 것인지 후처리는 얼마나 할 것인지 등등을 미리 다 설정합니다. Blender의 좋은 점은 모든 것을 Blend파일안에 다 넣어 준다는 것입니다. 이러한 설정까지 말이지요.
그리고 텍스처와 기타 데이터를 모두 포함하기 위해서 한 가지 더 넣습니다.
File-External Data-Pack All Into .blend 를 눌러서 모든 데이터를 전부 Blend파일 안에 넣습니다.
이제 file-Save를 눌러서 해당 Blend파일을 저장합니다. 데이터에 따라 용량이 어마어마할 겁니다.
그리고 이것을 서버로 전송합니다.
아마도 여러분들이 만든 인스턴스는 instance-1 instance-2 이런 식으로 만들어져 있을 것입니다.
VM인스턴스 페이지에서 확인해보세요.
instance 이름을 확인하자
이 이름을 알아야 하는 이유가 이제 blend파일을 서버로 올려야 하기 때문입니다.
파일을 서버로 올리는 방법은 여러가지가 있지만 저는 gcloud명령을 통해서 scp로 보내는 방법을 쓸 겁니다.
다른 방법은 https://cloud.google.com/compute/docs/instances/transfer-files?hl=ko
이 페이지를 참조하세요.
여기서 이런식으로 파일을 인스턴스 서버의 홈폴더로 전송이 가능합니다. 홈폴더에 넣으면 SSH접속후에 바로 써먹을 수 있어서 편리하지요.
[INSTANCE_NAME]은 위에서 확인한 instance-1 같은 이름을 의미합니다.
gcloud compute scp [LOCAL_FILE_PATH] [INSTANCE_NAME]:~/
예를들어 ~/Dance.blend 파일을 instance-1 인스턴스 서버의 ~/에 올리고 싶다면
gcloud compute scp ~/Dance.blend instance-1:~/
이렇게 하면 전송이 됩니다. 이제 SSH 접속후에 ls명령으로 파일이 들어왔나 확인해봅시다.
gcloud명령으로 접속하면 쉽지요.
그리고 이제 SSH에서 Blender를 명령어로 렌더링 해봅시다.
https://docs.blender.org/manual/en/latest/render/workflows/command_line.html
여길 참고하면 됩니다.
명령어는 현재 blend파일이 있다는 가정하에
애니메이션의 경우
blender -b *.blend -a
특정 프레임의 경우
blender -b *.blend -f XX
이런식으로 하면 해당 폴더에 렌더링 결과물이 나오게 됩니다. 우린 CPU8개 짜리 인스턴스에서 돌리고 있지만 만약 CPU 96개의 인스턴스라면 엄청난 속도로 렌더링을 하고 있겠지요? 거기에 GPU까지 붙이면? 절대로 싼 비용으로는 못할 엄청난 렌더링 속도를 볼 수 있을 것입니다.
그리고 결과물은 다시 gcloud명령으로 받아올 수 있습니다.
gcloud compute scp instance-1:~/결과물 내컴퓨터경로
혹은 폴더로 받아오고 싶으시면
gcloud compute scp --recurse instance-1:~/결과물폴더 내컴퓨터경로
이렇게 하면 원격으로 구글 컴퓨트 엔진을 통해서 렌더링을 할 수 있게 됩니다.
뭔가 복잡한거 같은데 이것을 쉽게 만든다면 SaaS로서 충분히 훌륭한 서비스가 될 것이라고 생각합니다. 특히 Cycle렌더링할 때 CPU를 어마어마하게 사용하는데 원격에 렌더링 시켜놓고 우린 다른 작업을 할 수 있게 되는 것이지요.