빠른 애플리케이션 빌드와 효율적인 패키징을 통해 머신러닝(ML) 반복 속도를 크게 개선할 수 있습니다. Meta는 빌드 비효율성과 실행 파일 배포의 문제를 해결함으로써 ML 엔지니어의 작업 효율성을 높이고, 개발 속도를 크게 향상시켰습니다.
1. 서론
Meta에서는 ML 엔지니어들이 빠르게 변화하는 요구에 대응할 수 있도록 인프라를 최적화하는 것이 중요합니다. 이를 위해 빌드 속도를 개선하고 패키징 및 배포 과정을 효율화하는 방법을 모색했습니다.
2. 문제의 발견
기존의 빌드 및 배포 과정은 느리고 비효율적이었습니다. 특히, 많은 컴포넌트를 반복적으로 빌드하고 링크해야 하는 경우가 많아 ML 엔지니어들에게 큰 부담이 되었습니다.
3. 빌드 속도 개선 방법
빌드 속도를 높이기 위해 우리는 비결정성을 해결하고 사용되지 않는 코드와 의존성을 제거하는 데 중점을 두었습니다. 이를 통해 빌드 시간과 불필요한 재빌드를 줄였습니다.
3.1 비결정성의 원인 분석
- 도구 비결정성: 일부 컴파일러는 동일한 입력에 대해 다른 바이너리를 생성하여 비결정적 결과를 초래합니다.
- 소스 코드 및 빌드 규칙의 비결정성: 개발자가 임시 디렉토리, 랜덤 값 또는 타임스탬프 등을 포함하여 비결정성을 도입할 수 있습니다.
3.2 해결 방법
- Buck2와 원격 실행(RE) 서비스를 사용하여 비결정성을 완화하고 일관된 출력을 제공하도록 했습니다.
- 불필요한 의존성을 찾아 제거하여 빌드 그래프를 간소화했습니다.
4. 실행 파일 배포의 효율성 향상
기존의 XAR 파일을 사용하는 배포 방식은 비효율적이었고, 새로운 접근 방식이 필요했습니다. 이를 위해 Content Addressable Filesystem (CAF)를 도입했습니다.
4.1 CAF의 장점
- 콘텐츠 인식 접근 방식을 통해 중복 업로드를 피하고, 이미 존재하는 파일을 재사용하여 효율성을 극대화합니다.
- 목적지 호스트에서 로컬 캐시를 유지하여 다운로드 시간을 줄입니다.
4.2 P2P 네트워크의 활용
- Meta의 데이터 센터 호스트에 CAS 데몬을 배포하여 P2P 네트워크를 구성하고, 직접 콘텐츠를 가져와 지연 시간과 스토리지 대역폭을 절감했습니다.
5. LazyCAF와 향후 개선 사항
추가적인 최적화를 통해 실행 파일의 일부만 필요할 때 해당 부분만을 가져오는 방식으로 물질화 시간을 줄일 계획입니다. 또한, 일관된 수정 버전을 사용하도록 하여 빌드 캐시 히트 비율을 높이고, 개발 속도를 더욱 개선할 것입니다.
6. 결론
빠른 애플리케이션 빌드와 효율적인 패키징을 통해 ML 엔지니어의 작업 효율성을 크게 향상시킬 수 있었습니다. 앞으로도 지속적인 개선을 통해 더 나은 개발 환경을 제공할 것입니다.