동적 계산 그래프를 활용한 딥러닝
이 논문은 입력마다 구조가 달라지는 그래프형 신경망을 효율적으로 학습·추론할 수 있도록 “동적 배칭(dynamic batching)” 기법을 제안한다. 정적 데이터플로우 그래프만 지원하는 기존 딥러닝 프레임워크에서도 동적 계산 그래프(DCG)를 정적 그래프로 변환해 배치 연산을 수행하도록 설계했으며, 이를 구현한 TensorFlow Fold 라이브러리를 공개한다. 실험 결과, GPU·CPU 모두에서 기존 수동 배칭 대비 20배 이상 속도 향상을…
저자: Moshe Looks, Marcello Herreshoff, DeLesley Hutchins
본 논문은 입력마다 서로 다른 그래프 구조를 갖는 신경망, 즉 동적 계산 그래프(DCG)를 효율적으로 학습·추론하기 위한 “동적 배칭(dynamic batching)” 기법을 제안한다. 기존 딥러닝 라이브러리(TensorFlow, Theano 등)는 정적 데이터플로우 그래프를 전제로 하며, 연산 그래프가 고정된 경우에만 미니배치를 통한 병렬 처리를 지원한다. 따라서 DCG를 직접 구현하면 매 샘플마다 새로운 그래프를 생성해야 하고, 그래프 구축 비용과 GPU 커널 호출 오버헤드가 급증해 실용성이 떨어진다.
동적 배칭은 이러한 문제를 해결하기 위해 연산을 두 단계로 구분한다. ‘op’는 기본 연산(덧셈, 행렬곱 등)이고, ‘operation’은 여러 op를 포함하는 서브그래프(예: LSTM 셀)이다. 논문은 입력 그래프 집합을 하나의 비연결 그래프로 결합하고, 각 노드에 깊이(depth)를 할당한다. 깊이가 0인 노드는 상수 텐서이며, 그 외 노드는 operation이다. 이후 동일한 depth에 위치한 같은 종류의 operation을 하나의 배치 연산으로 합친다. 이를 위해 concat와 gather 연산을 삽입해 원래 그래프의 토폴로지를 인덱스로 보존한다. 최종 정적 그래프는 tf.while_loop, tf.concat, tf.gather 로 구성되며, while‑loop 반복마다 현재 depth에 해당하는 모든 operation을 한 번에 실행한다.
알고리즘 절차는 다음과 같다. 1) 입력 그래프들을 하나의 큰 DAG로 결합하고, 모든 노드에 depth를 할당한다. 2) depth 차이가 1보다 큰 경우 identity 연산을 삽입해 인접 depth만 참조하도록 만든다. 3) 같은 depth·같은 operation에 속하는 노드를 하나로 병합하고, 그 출력들을 텐서 타입별로 concat한다. 4) 원본 edge마다 (depth, tensor type, index) 라벨을 부여해 gather 연산이 올바른 위치에서 데이터를 추출하도록 한다. 5) 정적 그래프는 while‑loop 안에서 concat·gather·operation 순으로 실행된다.
이 설계는 두 가지 주요 장점을 제공한다. 첫째, 동일 연산을 여러 번 호출하는 대신 한 번만 호출하므로 GPU 커널 호출 횟수가 O(n) → O(log n) 으로 감소한다. 특히 트리와 같이 깊이가 로그 규모인 구조에서는 작은 배치 크기에서도 의미 있는 속도 개선을 얻는다. 둘째, concat·gather 삽입에 따른 오버헤드가 존재하지만, 실험 결과 GPU에서는 배치 1일 때도 120배, CPU에서는 28배 정도의 순수 연산 속도 향상이 확인되었다.
구현 측면에서 저자들은 TensorFlow Fold 라는 오픈소스 라이브러리를 제공한다. 이 라이브러리는 동적 배칭을 자동화할 뿐 아니라, 함수형 프로그래밍 스타일의 combinator(예: Map, Fold, Reduce, OneOf, Optional 등)를 통해 복잡한 DCG 모델을 선언형으로 기술하도록 돕는다. 블록(block) 개념을 도입해 입력→출력 함수 형태로 모델을 정의하고, 타입 시스템을 통해 텐서 형태와 시퀀스 길이 등을 정적 검증한다. 이렇게 하면 연구자는 저수준 그래프 조작 없이도 트리‑LSTM, 그래프‑위브, 어텐션 등 다양한 구조 모델을 간결하게 구현할 수 있다.
실험에서는 이진 트리‑LSTM을 대상으로 synthetic benchmark를 수행했다. 동일한 형태의 트리를 수동 배칭한 경우와, 동적 배칭으로 동일 형태·다양한 형태 트리를 처리한 경우를 비교하였다. GPU에서는 배치 1일 때도 0.16 s(동적) vs 0.52 s(수동)으로 3배 가량 빠르고, 배치 1024에서는 1.59 s vs 0.978 s으로 약 1.6배의 추가 이득을 보였다. CPU에서도 비슷한 비율로 속도 향상이 확인되었다. 또한, concat·gather 로 인한 오버헤드가 전체 비용의 20~60% 수준에 머무르며, 대규모 배치에서는 오히려 배치 효율이 크게 증가한다는 점을 강조한다.
결론적으로, 동적 배칭은 DCG 기반 모델을 기존 정적 프레임워크에 통합하는 실용적인 방법을 제공한다. 그래프 구조가 다양하고 복잡한 현대의 NLP·화학·소셜 네트워크 분야에서 미니배치를 유지하면서도 구현 복잡도를 크게 낮출 수 있다. 향후 연구에서는 자동 미분과 메모리 최적화, 그리고 다른 프레임워크(Torch, MXNet 등)로의 포팅이 기대된다.
원본 논문
고화질 논문을 불러오는 중입니다...
댓글 및 학술 토론
Loading comments...
의견 남기기