Day2 세션들 중 관심있는 세션들을 슬라이드 내용을 중심으로 요약정리했습니다
WebtoonMe 개발기: 내가 웹툰 안으로 들어가면 여신강림 임주경 보다 이쁠까 안이쁠까?
김승권, 백지혜/ NAVER WEBTOON
1. WebtoonMe 소개: 내가 웹툰으로 들어가면 어떤 느낌일까?
2. “웹툰으로 변환” 여정을 위한 모델 개발
- 생성 모델의 트렌드를 읊고 이를 바로 적용하자
- 기존에는 성능이 좋은 “모델”을 만드는 것이 중요했다면,
- 최근에는 이 모델을 활용하여 task에 적합한 (1) 고품질의 “데이터”를 생성한 후
- (2) 가볍고 학습이 쉬운 별도의 network를 학습시키는 것이 트렌드
- 웹툰 캐릭터의 경우 데포로메가 심하기 때문에 얼굴 변환이 잘 안되는 문제 발생
- 현업의 니즈를 바로바로 적용하자
- 다양한 피부 톤 반영
- 다양한 조명 조건 반영
- 캐릭터 고유 피부 반영
- 추론 속도 개선
- 빠른 Ad-hoc 기능 반영
3. 힘들게 만든 모델, 어떻게 밖으로 내보내지?
- 빠른 프로덕트 프로토타이핑
- 추상화 높은 방법론으로 최대한 빠른 결과로 작지만 유의미한 성공을
- 보여주고
- 이를 바탕으로 전문가를 섭외해서 추상화를 낮추자!
- 만들었는데 어떻게 홍보를 해야하지?
4. WebtoonMe 이렇게 활용 했어요.
- 방송에 데뷔한 네이버 쇼핑라이브 기술 지원 사례
- 직접 웹툰 컷으로 들어가 볼 수 있는 실시간 체험 존 구축
- 목마른 사람이 우물파는 컨셉의 현업 기술 지원
5. WebtoonMe 다음은?
- WebtoonMe 판을 키워보기
- 높은 개인화, 실시간 변환, 다양한 웹툰 캐릭터 지원
NSML: 대규모 HPC 클러스터의 효율적 활용을 위한 Scheduler, Monitoring, Diagnostics
박흥석,조애리,이하영/ NAVER Cloud
1. Introduction
- NAVER 대규모 분산학습 플랫폼: NSML
- 고성능 하드웨어와 고용량의 스토리지를 쉽게 사용할 수 있도록 학습 모델링 관련 도구를 제공하는 플랫폼
- NSML Pods는 최대 GPU 128장 규모의 모델까지 학습 가능한 대규모 HPC 클러스터
- NSML Pod 내 모든 GPU 서버는 고속 네트워크 InfiniBand(IB)로 연결
- NSML Pod 내 GPU 서버 간 통신 병목 최소화 → 분산 학습에 유리
- NSML의 대규모 HPC 클러스터와 효율화 전략
- Scheduling (GPU 활용률을 높이는 스케쥴링)
- Monitoring (대규모 HPC 클러스터 모니터링 도구 개발)
- Diagnostics (정형화하기 어려운 분산학습 엔지니어링 이슈 진단)
2. Scheduler
- GPU 점유 환경의 문제점
- GPU 서버를 팀별로 구입하고 점유해 사용
- 흩어진 GPU 자원을 모아 효율적으로 배분하기 위해 수요 및 정책에 따른 스케쥴링 도입
- GPU 활용률을 높이기 효율적인 스케줄링 전략
- 자원 파편화 현상 : 할당량 감소로 이어짐
- 파편화 (Fragmentation)
- 자원을 배정하고 회수하는 과정에서 발생하는 작은 리소스 조각
- 파편화된 리소스들은 사용되지 못하고 방치됨
- 할당률을 저해하는 가장 큰 요소
- 사용자의 실험 스펙상이
- 호스트에 종속되어 있는 자원
- 리소스 유형 정의
- GPU 개수에 비례하여 CPU, RAM 등의 호스트 자원을 배정
- 호스트 내 자원 파편화 방지
- MostAllocated 정책 적용
- 소규모 실험이 대규모 실험의 할당을 저해해서는 안 됨
- 리소스를 많이 사용 중인 호스트부터 우선 배치
- 실험 규모에 따라 NSML Pod에 역할 부여
- 규모가 유사한 실험끼리 조합해서 배치
- 다양한 실험 규모에 따른 호스트 자원 파편화 방지
- 할당량 향상으로는 한계가 있다
- 수요에 비해 상대적으로 부족한 공급량
- NSML 스케줄러 도입기
- 경제학 전문가와 협업하여 자원 활용에 대한 정성적 / 정량적 분석 진행
- GPU 활용률
- 리소스 유형별 대기 시간
- 팀별 리소스 사용 현황
- 규모에 따른 구역 활용률
- 전체 사용자별 GPU 점유 시간
- 우선순위 낮은 소규모 실험 활용률
- 커스텀 스케쥴링 도입
- k8s Scheduler Framework를 활용해 커스터마이징
- GPU 활용률을 높이는 방향으로 할당 제어
- 정책 우선순위 기반 스코어링
- 실험 규모, 대기 시간에 따른 스케쥴링 우선순위 조정
- 중, 대규모 학습 예약
- 규모가 큰 실험에 대한 예약 시스템 도입
- 분산학습 지원
- 반드시 같은 NSML Pod 내에 배치
- 동시 실행 보장 (coscheduling)
3. Monitoring
- 대규모 HPC 클러스터 관측의 배경
- 자원 활용량의 극대화: 운영자 & 사용자 모두의 노력 필요
- 기존 모니터링 & MLOps 도구의 한계
- MLOps 플랫폼: 모델 학습에 대한 가시성 제공에 집중, 개별 학습에 대한 단순 시스템 지표 제공
- Cloud 모니터링 플랫폼: 서비스 인프라 모니터링에 집중, 학습 이상 상태 탐지 기능 구축 어려움
- 클러스터 자원 현황과 학습 상태를 한눈에 파악할 수 있는 “통합된 가시성” 제공
- 모니터링 도구 개발 과정
- 전체 클러스터 자원(수천 개의 GPU) 상태와 할당된 실험 상태를 동시에 표현해야 함
- Unit visualization
- 사용자의 멘탈 모델과 가장 일치하는 방식, GPU 자원 하나를 정사각형 유닛으로 매칭하여 시각화
- 유닛에 생삭, 패턴을 매핑하여 아웃라이어를 빠르게 드러낼 수 있음
- 웹 어플리케이션
- deck.gl(WebGL 프레임워크)로 구현
- 유닛 위치/컬러 트랜지션을 통해 클러스터 자원의 실시간 상태 변화를 직관적으로 이해
- 운영자/사용자의 서로 다른 모니터링 니즈를 만족해야 함
- Atomic Unit Visualization Grammar 논문의 유닛 시각화 활용 기법 구현
- 클러스터의 물리적 요소, 실험의 논리적 요소를 포함한 다양한 데이터 속성을 계층 구조로 표현할수 있도록 설계
- 자원이나 실험의 이상 현상을 빠르게 탐지할 수 있도록 도와야 함
- Violation rule을 통한 힌트 제공
- 학습 시작 시점부터 GPU 활용률 등 시스템 지표의 95%, 25% 분위값을 춫적
- 사용자가 정의한 임계치 이하의 실험들을 하이라이팅
- 강조된 실험들은 빠르게 진단 도구로 분석하도록 유도
- Violation rule을 통한 힌트 제공
- 문제를 디버깅할 수 있는 상세한 시슽메 지표 데이터를 제공해야 함
- 전체 클러스터 자원(수천 개의 GPU) 상태와 할당된 실험 상태를 동시에 표현해야 함
- HPC 클러스터 관측하기
4. Diagnostics
- 분산학습 시 마주하는 엔지니어링 이슈
- Data Parallelism: 데이터를 머신별로 나누어 학습
- Model Parallelism: 모델을 머신별로 나누어 학습
- 동기화 병목: 일부 Worker의 작업이 지연될 수 있음
- workload imbalance 로 인한 작업 지연
- 일부 노드 / GPU의 장애로 연산 지연
- 노드 간 / GPU 간 데이터 통신 지연
- 강력하지만, 대규모 실험의 엔지니어링 이슈를 효과적으로 드러내지 못함
- 분산학습 전략에 따른 다양한 지표 패턴
- 분산학습 진단 도구 개발 과정
- 분산학습 엔지니어링 이슈 진단하기
- 어떤 GPU/ Node를 분석해야 하는가?
- 각 GPU 들의 지표 분포 / 패턴이 드러나도록 지표 preview 시각화
- Violation rule에 해당하는 GPU는 강조
-
- Clustering 을 통해 확연한 차이 및 잠재된 imbalane / outlier 표현
- 어떤 구간을 분석해야 하는가?
- 시스템 지표 간 상관관계 분석
- 상관관계 및 분포에서 멀리 떨어진 이상치 데이터 강조
- 이상치 데이터와 상호작용, 해당 구간 상세 분석
- 이상치를 직관적으로 드러내고, 효율적인 분석 방향 제시
### 5. What’s Next?
- Scheduling
- 데이터 기반 우선순위 스케쥴링 강화 (사용자의 월 소비량, GPU 활용률 실적 등)
- Monitoring
- 커스텀 가능한 학습 이상 상태 탐지 조건
- Diagnostics
- 이상치 탐지 방법론 고도화 (root cause 가시화)
- 분산 학습 엔지니어링 이슈 알람 체계 구축
- 어떤 GPU/ Node를 분석해야 하는가?
ML/AI 개발자를 위한 단계별 Python 최적화 가이드라인
문주혁/ NAVER Cloud
0. 모델러 출신이 CPU 속도를 신경쓰게된 배경
서버환경; X86_64(cuda)
개발자: computer vision 전공
사용언어: Python + OpenCV + NumPy (PyTorch)
1. Python 간단 프로파일링
- 이미지 로딩, 투명 픽셀 제거, 픽셀 카운팅, 패널 생성 으로 진행
- line profiler 소개 및 사용법
- line by line profiling for Python
- pip install line_porfiler
- OSX / Apple silicon (arm)의 경우 Rosetta 필요
- profile 중 사고 방식 및 주의점
2. Python level 최적화
- 베이스 Python 코드 작성시 주의점
- OpenCV/NumPy 등 기존 Python 패키지 잘 쓰는 법
- python 패키지 같은 출력을 내는 여러 문법을 비교해 병목구간을 더 빠르게 바꿔보자
3. Semi-C level 최적화
- Cython/Numba를 활용한 최적화
- Numba/Cython 활용시 주의점 (언제 어떻게 써야하는가)
- 유용한 경우
- 코드 내 pure Python 구현의 비중이 너무 큰 경우
4. C level 최적화
- Python/C API로 C extension 만들기
- 각각의 crop이 독립적이므로 병렬처리를 하고싶지만, 원본 이미지가 GIL에 묶여있어 동시 접근 불가
- C/C++ 에 가져가서 자유롭게 crop 해보자..
- C 라이브러리 활용하기 (feat. OpenMP 도입하기)
- core implementation 위아래로 OpenMP 구문 추가
- 87.7 ms → 4.64ms (-94.7%)
- Python/C API 꼭 한번 써보라.
- 진입 장벽은 있지만 개발이 자유로워진다.
- 이런 때 아니면 언제 C/C++에 입문해볼까?
- 기존 Python 패키지 (OpenCV/NumPy)와 호환 가능한 C extension 만들기
- C extension 개발 시 주의점 (lifetime 관리, memory leak 예방)
5. 기타
- 도커 환경 및 환경 변수에 대한 이야기
웨일 브라우저 오픈 소스 생존기
이형욱/ NAVER Cloud
1. 브라우저 오픈소스 전성 시대
2. 웨일 브라우저와 크로미움
3. 리베이스의 무게를 견뎌라
- 리베이스란 무엇인가?
- 사용중인 오픈소스의 버전을 최신 버전으로 가져오는 작업
- 브라우저에서 리베이스가 왜 중요한가?
- 브라우저는 발전 속도가 빠른 웹플랫폼으로 빠른 속도로 따라 가야함
- 리베이스 속도를 따라 가지 못하면 사이트 호환성, 보안등이 취약
- 크로미움 오픈 소스를 실시간으로 따라 가지 못하는 것은 브라우저 생존과 직결
- 기능 기반 배포 대비 일정 주기 배포가 어려운 이유?
- Time based release 가 가능한 개발 문화와 인프라가 갖춰져야 가능한 도전
- 브라우저는 단순한 앱이 아닌 하나의 웹 플랫폼으로 플랫폼 수준의 배포 난이도
- 일정 주기 배포로 웹생태계 전반에 걸친 예측 가능성 확보가 가능해 짐
- 빠른 코드 리베이스를 위한 리베이스-봇 개발
- 크로미움은 매달 대략 21,274 파일이 변경되고 735,896 라인 추가 410,142 라인 삭제
- 웨일은 크로미움 소스에서 대략 1만여개 파일을 수정 하였음
- 코드 리베이스를 잘 하기 위해서는 변경된 파일을 최소한의 컨플릭트로 반영하는 것!
- 리베이스-봇의 개발로 자동으로 웨일 소스에 크로미움 패치들을 적용 (80%정도는 무충돌)
- 컨플릭트 발생시 패치가 아닌 파일 단위로 관리 (작업 순서 관리에 유리
- 자주 리베이스를 할 수록 코드 컨플릭트가 드라마틱하게 줄어 듬
- “매 PR마다 15만여개의 테스트 케이스를 12대의 테스트 봇을 활용해서 검증 함
- 배포 전 350여개의 테스트 케이스를 성능 봇을 활용해서 검증 함
- “배포 전 주요 사이트들을 대상으로 자동으로 메모리 사용량을 테스트 함
- 경쟁사 브라우저 대비 약점 이었던 리베이스 속도를 개선하여 글로벌 경쟁력 확보
4. 생존을 넘어서 기여하기
- 웨일의 Local User First 전략의 일환으로 국내 웹생태계 이슈는 웨일팀의 주요 관심사
- Safe Browsing DB, 텍스트 기반 피싱 탐지에 더 나아가 이미지 기반 실시간 피싱 탐지 기술 개발
Noir: 메일검색 서버를 반의 반으로 줄여준 신규 검색엔진 제작기
이창현, 신우진/ NAVER Search
1. 개별데이터 검색서비스와 역색인 검색
- 개별데이터 검색 서비스의 특징
- 내가 받은 메일
- 내가 속한 채팅룸 대화
- 내 파일
- 기존 역색인 검색방식의 장단점
- 단 한명의 메일을 검색하기 위해 전체문서 검색
- 단 한명의 신규메일로 전체볼륨 업데이트 부하
- Locality가 떨어져 제한된 메모리에서 검색성능을 만족하기 어려움
- 역색인 검색엔진으로 개별데이터 검색서비스 서빙 시 어려움
- 해당 사용자 문서만 검색
- 해당 사용자 볼륨만 업데이트
- 검색대상 문서가 물리적으로 모이므로 성능 개선
- 신규 검색엔진 이전에 존재했던 개별 역색인 관리 솔루션의 한계
- 개별 역색인 볼륨 방식
- 검색시 동적으로 해당 볼륨을 메모리에 올려 검색
- 장점: 역색인을 메모리에 상주시킬 필요 없음
- 메모리 기반에서 disk 기반으로, 비용 감소
- 일부 문서 set에 대해 작업하므로 문서 업데이트 및 검색 비용 감소
- 수천만 이상의 개별 볼륨 서빙
- 각 검색서버마다 다수의 볼륨 저장
- 검색요청 시 적절한 검색서버를 찾아 검색
- 색인 서버에서 볼륨생성 후 검색서버로 배포
- 개별 역색인 볼륨 방식의 어려움
- 일일 문서 수억 건 유입으로 서버비용이 가파르게 상승 (Disk 수요, 검색서버)
- 문서 증분 비용이 비쌈 (CPU 수요, 색인서버
- 큰 볼륨 검색 시 응답속도가 너무 느림
- 수천만 역색인을 다루는 운영상의 어려움
2. 역색인을 대체하는 Full Scan 검색방식
- full scan 검색방식 소개
- 문서 원본 scan, 문서가 쿼리와 부분일치할 시 검색됨
- 문서 블록단위 압축으로 full scan 검색성능 끌어올리기
- 문서를 일정 크기로 모아 블록 단위 압축
- 각 압축블록을 병렬적으로 Scan
- full scan 검색엔진 MVP버전 성능
- 역색인 검색엔진 대비 장점
- Noir (No information retrieval)
3. 신규 검색엔진 Noir
- full scan 방식을 사용하는 신규 검색엔진
- 개별 데이터 서비스에서 충분한 검색속도
- 볼륨 생성, 업데이트 비용이 저렴함
- 검색볼륨과 문서볼륨의 역할이 통합된 볼륨
- 부분일치 검색 방식
- 실서비스 적용 효과
- 검색서버 1/3, 색인서버 없음
- 볼륨구축 및 증분 비용 감소
- 운영 공수 절감
4. 설계
- Noir 볼륨 설계
- 문서 입력 연산 목표
- 문서입력 중 검색 가능해야 한다
- 문서입력 중 셧다운 당하더라도 볼륨이 망가지지 않아야 한다
- 문서입력 비용을 최소화하고 싶다
- compaction 시작 전
- 기존 증분볼륨에 신규문서를 더해 압축
- 신규 압축블록은 기존 압축볼륨에 append
- 압축볼륨에 덧붙여진 블록과 새로 생성된 증분볼륨.v2 를 알고있는 메타데이터 디렉토리 생성
- 새 info 디렉토리로 심볼릭링크 변경
- 기존 info 디렉토리 삭제
- 볼륨 CRUD 방식
- 문서 수정 요청 유입 시 매번 볼륨 내 문서를 수정하기 어려움
- 별도의 Patch 볼륨에 변경내역을 쌓아둔 뒤 검색 시 동적으로 반영
- 변경 내역이 많이 쌓이면 검색 성능 저하
- 일정 이상 쌓이면 볼륨을 재구축해 반영
- Timeout이 발생하면 검색한 결과를 최대한 반환
- Timeout 발생지점 offset으로 나머지 문서 검색 가능
- 분산 구조
- 저널링
- 서버 셧다운 시 인입된 요청이 유실되지 않게 한다
- 요청을 WAL(Write Ahead Log)에 완전히 로깅 후 요청 수행
- 서버 셧다운 시 기록된 모든 요청을 replay
- 토폴로지 버전 관리
5. 고도화
- Collation
- 동일한 의미의 문자를 구분없이 검색하는 기능
- 현재 구현: 검색 시 정규화
- 검색 시 문서내용을 동적으로 정규화 개선 예정: 전처리 테이블
- 문서내용을 미리 정규화해서 검색성능 개선
- 문서 요약문 추출 시 테이블 활용
- 볼륨 샤딩
VictoriaMetrics: 시계열 데이터 대혼돈의 멀티버스
1. Background
- Monitoring NAVER Search System
- Large-scale time series data
- Time series DB History
2. A Deep-dive into Time series DB
- Time series DB = Index DB + Data Storage
- LSM Tree 구조를 통해 Read/ Write 모두 빠르게 처리
- Gorilla Compression 을 활용하여 압축률 향상 & 메모리 효율 증가
- High Churn Rate 상황은 피하는 것이 중요
3. Time series in the Multiverse of Madness
- Single Point of Failure 문제를 해결하기 위해 Cluster Mode 사용
- 다양한 Application의 서로 다른 접근 패턴으로 과부하 문제 발생
- Application들이 서로 영향을 주지 않도록 Multiverse 형태로 분리
4. Lessons Learned
- 비상등 역할을 잘 하기 위해서 지표 유실과 중단 시간 최소화 필요
- 지표 유실을 방지하기 위해 Message Queue 와 Data Buffering 도입
- 중단 시간 최소화를 위해 Pre-calculator 를 통한 Heavy Query 완화
- High Availability 구성을 위해 Multi-level Cluster 기능 도입
- 효과적인 Multiverse 운영을 위해 Data Migration 기능 활용
5. Takeaways
- Understand time series DBs and VictoriaMetrics
- It’s simple, but you still need to be skillful
- Let’s do it together