TECHARTNOMAD TECHARTFLOW.IO

UNREAL ENGINE

UE5용 FASTBuild 빠르게 배우기.

jplee 2023. 11. 29. 12:40

자주 하게 되는 말인데... 그냥 비용 지불하는 상용툴 쓰는게 정신건강에는 분명히 좋을 수도 있습니다. 하지만 약간의 인내를 갖고~ FASTBUILD 를 사용해 보는 것도 좋을 것 같아요.
CI/CD 의 가장 첫 번째 단추 중의 하나인 분산 빌드에 대한 기사를 쓰고싶었습니다. 
렌더링쪽 수정 때문에도 머리가 아픈 판국인데... 이건 빌드 시간이... 거의 인생을 갈가먹고 있더군요. 회사 프로젝트야 인크레디빌드를 많이 사용하겠지만 견적을 내 보니... 년간 비용이.. .ㅎㅎㅎ 그래서 스타트업을 위해 정리를 해 봤습니다.


개요
언리얼과 패스트빌드에 대한 글은 인터넷에 많이 있지만, 모두 UE4에 대한 내용이라 UE5에서 직접 사용하기는 어렵습니다. 그리고 실제로 사용하다 보면 여러 가지 문제가 발생합니다. 주로 인터넷에서 찾을 수 있는 자료들은 구 버전 인데다가... 설정 가이드 부족.

시간을 절약할 수 있도록 아주 간단한 내용으로 작은 매뉴얼을 작성했습니다. 셰이더 컴파일 디버깅을 할 때 ue 관련 소스 코드의 일부를 변경하고 디버깅하는데, fb도 디버깅이 매우 어렵고, 결국 멀리 갈수록 결과를 전혀 예측할 수 없는 뭐 그런 상황이 되는 것이기 때문인데요....

다시 말하지만 내용은 매우 간단합니다. 이미 프로세스를 실행해 본 적이 있다면 이 글을 읽을 필요가 없습니다. 
아직 실행하지 않았다면 VS2022(2017 2019) + Windows10 환경에서 실행하도록 패키징된 문서와 비교하여 살펴볼 수 있습니다.
사용법
언리얼 (5.3.2) + 인티그레이티드 패스트빌드 또는 최근 수정 된 최신 버전의 패스트 빌드. ( 글 중간에 제가 구글드라이브 쉐어 해 놨습니다. )
이미 에픽에서 언리얼엔진소스 버전에 모두 통합을 했습니다.
D:\UnrealEngineSRC\EngineSRC\UnrealEngine\Engine\Extras\ThirdPartyNotUE\FASTBuild\Win64
여기서 찾아볼 수 있습니다. 소스빌드가 잘 되었다면 이렇게 찾아볼 수 있습니다.

또는 최신 파일을 다운로드 할 수 있습니다. 최신판 사용을 추천 합니다.

 

FBuild.v1.07-UE-Win-x64.zip

 

drive.google.com

FBuild.exe 는 분산처리 코어

FBuildCoordinator.exe 는 에이전트 로케이션(커뮤니케이션) 코어

FBuildWorker.exe 는 실제 작업노드에서 실행 되며 에이전트 로케이션 코어와 트렌젝션을 위해 사용 됩니다. 또한 각 노드의 자원가용 벨런싱 설정을 주관 합니다.



FBuildWorker를 열면 다음과 같은 인터페이스를 볼 수 있습니다.

공유 디렉토리 구성
먼저 노드 머신이 호스트에 핑할 수 있는지 확인한 다음 노드 머신에서 호스트의 공유 폴더에 액세스합니다. 처음 배포하는 경우 액세스를 사용할 수 없을 가능성이 매우 높으므로 다음 해결 방법을 시도해 볼 수 있습니다:
Windows 방화벽 끄기
윈도우스 기능 켜기/끄기 찾기.

다음 SMB 1.0/CIFS 파일 공유 지원을 모두 켜 주세요.
고급 공유 설정에서 공유 활성화를 켭니다:

Windows 기능 사용 또는 사용 안 함에서 SMB 1.0/CIFS 파일 공유 지원을 켭니다.

이런 창이 뜨고 기능이 활성화 됩니다. 리부팅을 해야 합니다.
패스트빌드는 모든 노드 머신 관련 정보(IP, 코어, 호스트명) 등을 공유 폴더에 저장하며, 이 폴더는 분산 빌드에 참여하는 모든 호스트가 액세스할 수 있어야 합니다. 단계는 다음과 같습니다!

공유 폴더 만들기
오른쪽 클릭 - 속성 - 공유
아래로 스크롤 - 모든 사람 - 추가를 선택하고 권한을 읽기/쓰기 - 공유로 변경합니다.
저는 윈도우즈 11 을 사용하고 있기 때문에 윈도우즈 11 기준으로 설명하겠습니다.

FASTBuild 를 설치한 디렉토리를 공유 합니다.

고급 공유로 들어가서..

동시 사용자 수를 빌드에 연관 된 컴퓨터 노드 수 만큼 늘렸구요.

사용권한에서 Everyone 에 모든권한을 할당.
FASTBUILD_BROKERAGE_PATH 환경 변수 설정
빌드 호스트와 빌드 워커는 명령어를 전달하고 빌드 작업을 수행하기 위해 서로에 대해 알아야 합니다.

모든 활성 빌드 워커(FBuildWorker.exe를 실행하는 머신)는 1단계에서 생성한 브로커리지 폴더에 파일을 씁니다. 빌드를 시작하면 빌드 호스트(Fbuild.exe 실행)가 브로커리지 폴더 내의 파일을 스캔하고 관련 머신을 작업을 배포하는 데 사용할 수 있는 빌드 워커로 등록합니다.

FBuild.exe 및 FBuildWorker.exe 프로세스는 빌드 배포에 참여하는 모든 머신에 설정해야 하는 FASTBUILD_BROKERAGE_PATH 환경 변수를 통해 브로커리지 위치를 알 수 있으며, 이 값은 1단계에서 생성한 경로여야 합니다.

이 예제에서는 다음과 같습니다:

위에서 언급했듯이 와이파이를 통해 빌드를 배포하면 네트워크 포화, 느린 전송 및 시간 초과가 발생하여 빌드 시간에 부정적인 영향을 미칠 수 있습니다. 일부 컴퓨터가 예상대로 기여하지 않는 경우 다른 컴퓨터에서 공유 브로커리지 폴더에 대한 액세스를 테스트해 보세요. 예를 들어 폴더를 생성하고 삭제하여 전체 액세스 권한이 있는지 확인합니다.

 
환경 변수 구성
환경 변수 PATH에 FASTBuild 바이너리가 위치한 경로를 추가합니다.


FASTBUILD_BROKERAGE_PATH를 추가합니다.

선택적 구성: FASTBUILD_CACHE_PATH. 나중에 다시 사용됩니다.


노드 머신 구성
노드 머신은 더 이상 새 공유 디렉터리를 생성할 필요가 없지만, 호스트의 공유 디렉터리 주소가 되도록 FASTBUILD_BROKERAGE_PATH를 구성합니다.

호스트가 노드 머신과 동일한 도메인 네트워크에 속하지 않는 경우 \\ip\ 공유 폴더 경로를 통해 호스트에 액세스해 보세요. (간소화를 위해 앞으로 호스트 이름은 사용되지 않습니다.)
언리얼 엔진 빌드 환경설정
공식 웹사이트 문서: 빌드 환경설정을 참고하세요.

 

빌드 환경설정

엔진 빌드 방식을 환경설정합니다.

docs.unrealengine.com

UnrealBuildTool(UBT) 은 Config/UnrealBuildTool 폴더에 생성된 언리얼 엔진(UE) 프로젝트에 추가되는 것 외에도, Windows의 다음 위치에 있는 XML 환경설정 파일에서 세팅을 가져와 읽습니다.

  • Engine/Saved/UnrealBuildTool/BuildConfiguration.xml
  • [User]/AppData/Roaming/Unreal Engine/UnrealBuildTool/BuildConfiguration.xml
  • My Documents/Unreal Engine/UnrealBuildTool/BuildConfiguration.xml

원본 코드

<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
</Configuration>

 
수정 후 코드

<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
    <BuildConfiguration>
    <bAllowFASTBuild>true</bAllowFASTBuild>
    </BuildConfiguration>
</Configuration>

또는 좀 더 확장 해서...

<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
	<BuildConfiguration>
		<bAllowFASTBuild>true</bAllowFASTBuild>
	</BuildConfiguration>
	<FASTBuild>
		<bEnableDistribution>true</bEnableDistribution>
	</FASTBuild>
</Configuration>

 
다음 폴더에 저장할 수도 있습니다.

안전하게 세 곳 모두 수정.
모든 빌드 머신에서 FBuildWorker.exe를 시작합니다.
빌드 배포에 참여하는 모든 머신에서 FBuildWorker.exe를 시작합니다.

작업 부하를 관리하기 위해 몇 가지 커스터마이징 설정을 제공하는 작업자 UI가 표시될 것입니다.
분산 빌드 실행하기
분산 빌드를 실행하기 전 마지막 단계는 Unreal FastBuild.cs 에서 활성화되어 있는지 확인하는 것입니다. bEnableDistribution 어트리뷰트가 true로 설정되어 있는지 확인합니다.
에이전트 서버 구성.
서버 아이피를 확인 합니다.
작업 컴퓨터에 코디네이터에 대한 환경변수를 추가.

변수값은 에이전트 서버 주소입니다. 
에이전트 서버에도 FBuild 구성을 모두 해야 합니다.
에이전트 서버에서 FBuildCoordinator.exe 를 실행 시킵니다.
작업컴에서 FBuildWorker.exe 를 모두 실행 해 놔야 합니다. (에이전트들...)

연결 확인 됨.

이건 제가 기사 쓰고 있는 작업컴이고 에이전트 모니터링 상태. 100 프로 가용 하구요. 논리코어 32개 쓰고있네요.
이건 어쩔 수 없이 에이전트 서버에서 에이전트도 구동 해서 테스트 한 MSI 노트북 컴입니다. 논리코어 12개 쓰네요.

잡워커에 연결 확인 됨.
테스트 결과로 보면 논리코어 총 44개를 사용하게 됩니다.  다만 지금 홈네트워크망 상태가 Fully WIFI 망 이라는 점은 효율평가 하기엔 무리가 있구요. 

정식 빌드서버에 팀시티 기반에서 에이전트 서버와 하위 에이전트들(작업용 컴퓨터 아니고 실제 빌드코어 쉐어용 슬레이브 캄퓨터들...은 분리된 망을 구축 하고 이중화로 구성 된 코드버전서버에서 팀시티 빌드서버와 연결 하는 구조로 전체 망 설계를 잘 하는 것이 효율성을 높이는 가장 현명한 방법이 될 것 같아요.

 
이제 새 빌드를 시작하면 빌드 출력 창에 분산 빌드가 활성화되었음을 보여주는 몇 가지 중요한 정보가 기록되는 것을 확인할 수 있습니다.

분산컴파일 확인 됨. 아이피 100번과 101번 가용 중.
일단 이 기사를 쓰기 위해서 집에 있는 노트북에 에이전트 서버를 설치하고 동시에 에이전트로도 사용을 했다.
또한 렌트하우스 특성상 내 두 대의 컴퓨터가 모두 저가형 와이파이 공유기에 물려있다는 점.
이런 분산처리망을 도입하려면 가능하면 내부 네트워크망이 기가망 또는 10기가망으로 구성 되는 것이 좋을 것이다. 종종 CG VFX 회사들은 내부망에서 직접 스토리지에 접근 해서 작업하는 경우가 많아서 10기가망을 사용하는 경우도 있고 데드라인이나 렌더팜들을 사용할 때도 꽤 좋은 스위칭 허브에 1기가망 또는 10기가망을 셋팅 한다.
이렇게 파편화 되어 있던 페스트 빌드 기본 셋업 내용을 총정리 해 봤다.
규모가 작은 게임들 위주로 만든 경험의 개발자나 개발실장들도 빌드망 구축에 대해서 체감을 잘 못하는 듯 하다.
오픈월드 엠엠오나 중규모에서 대규모 게임을 개발할 때는 이건 진짜 필수다.

QA 부서 에게 하루에 몇 번의 버전을 딜리버리 할 수 있는가! 몇 번의 피드백에 빠르게 대응하고 각 이슈를 클로징 할수 있는가! 이게 사실 CI/CD 와 DEV-Ops 의 가장 중요한 점이다. 적어도 게임개발에서는 .... 이것은 게임의 질을 향상 시키는 방법의 매우 중요한 부분이라는 점을 절대 잊지 말도록 합니다.

 
 
 
 


부록.
젠킨스에 FASTBuild 바인딩.

 

Gametech workshop

AWS Game tech labs. These labs help first-time users of AWS to get started with Amazon Gamelift, Amazon Gamelift FleetIQ, and Amazon Gamelift FlexMatch via hands-on experience. Advanced labs help users understand how to setup create pipelines to build and

catalog.us-east-1.prod.workshops.aws