LLM의 엄청난 발전은 다양하고 다량의 높은 품질의 데이터의 중요성을 강조했습니다. 데이터 레시피(data recipe)는 LLM을 훈련하기 위한 다양한 소스 데이터들을 혼합한 것으로, LLM의 성능을 결정하는 가장 중요한 요인으로 알려져있습니다. 존재하는 오픈 소스 도구는 주로 특정 데이터 레시피를 준비하는데에 맞춰져 있습니다. LLM의 잠재력을 지속적으로 발견하고, 새로운 소스로 부터 데이터를 통합(incorporate), LLM의 성능을 향상시키기 위해, 우리는 Data-Juicer라 불리는 새로운 시스템을 개발했습니다, 시스템을 통해 다양한 데이터 레시피를 효율적으로 생산하고, 데이터 혼합물을 형성하는 다양한 가능성을 탐색하며, 그리고 모델의 성능에 미치는 영향을 평가할 수 있습니다. 전통적인 데이터 분석 파이프라인과 달리, Data-Juicer는 여러 유니크한 도전을 직면하고 있습니다. 첫 번째, 데이터 레시피를 형성하는 데 사용 가능한 데이터 원본은 정말 다양하며 다양한 품질을 가지고 있습니다. 두 번째, 데이터 레시피가 LLM 성능에 미치는 영향을 정확하게 평가하는 것은 정말 많은 비용이 듭니다. 세 번째, Data-Juicer의 최종 사용자인 모델 개발자는 다양한 레시피를 구성하고 평가하기 위해 충분한 유연성이 필요합니다.
Data-Juicer는 데이터 레시피를 구성하기 위한 파이프라인들의 fine-grained abstraction을 제공하며, 50개 이상의 내장 연산자를 통한 쉬운 조합 및 확장이 가능합니다. 시각화와 자동 평가 능력을 통합함으로써, Data-Juicer는 LLM의 pre-training과 fine-tuning에 대한 적시의 피드백을 가능하게 합니다. 또한 Data-Juicer는 LLM 학습, 평가 및 분산 컴퓨팅을 위한 생태계와 최적화 되고 통합되어져 있습니다. Data-Juicer로 만들어진 데이터 레시피는 SOTA LLM의 성능을 개선했으며, 16개의 LLM에서 평균 최대 7.45% 증가했으며, pair-wise GPT-4 평가에서 17.5% 높은 승률을 보였습니다. 우리의 시스템, 데이터 레시피 및 튜토리얼은 공개가 되어있으며, LLM의 교육과 이해에 대한 광범위한 데이터 중심 연구를 해야한다고 주장했습니다.
1 INTRODUCTION
- LLM은 엄청난 발전으로 이전에 만족스럽지 못했던 성능으로 불가능했던 응용프로그램들을 가능하게 만들었음
- LLM은 대규모로 일반의 목적을 달성하기 위해 pre-training하고, 구체적인 목적(하위 목적)을 하기위해 fine-tuned 되어짐
- “garbage in, garbage out” 라는 말처럼 LLM을 train하고 fine-tuning 하는데 사용되는 데이터는 모델의 품질에 직접적 영향을 줌
- LLM을 위한 데이터 처리 솔루션을 구축하는 것은 아직 완전히 탐구되지 않은 복잡한 과제로 남아 있으며, pre-training과 fine-tuning 데이터를 처리하는데 공통적인 challenges들이 있고, 좋은 데이터 품질, 다양하고 대용량 데이터를 추구
- LLM 학습 데이터 및 처리 코드를 기여하는 오픈 소스 프로젝트가 다른 모델 및 훈련 인프라 프로젝트에 비해 상대적으로 적음
- (C1)LLM의 데이터 레시피의 높은 다양성, (C2)데이터 레시피에 대한 적시의 피드백, (C3)사용성과 customizability, (C4)대용량 데이터 양 / 4가지에 대해 해당 글에서 정리 예정
- Figure 1: 하향식으로 표시로 설명되며, LLM을 위해 데이터를 더 "juicy" 하게 데이터 레시피를 생성하기 위한 설계
- 녹색상자: 50개 이상의 다양한 OPs(연산자)와 전용 도구를 갖춰서 fine-grained abstraction과 모듈화 할 수 있게 함
- 노란색, 분홍색 상자: 끝에서 끝까지 구성 가능하게 만들어 LLM pre-training 및 fine-tuning의 다양한 시나리오를 추적 및 비교 가능하며 개선 가능한 데이터 레시피를 준비하는데 도움을 줌
- 왼쪽 세개의 직사각형: 다양한 사용자 배경과 요구사항을 충족하기 위해 쉽고 유연하며 확장 가능한 시스템으로 설계
- 오른쪽 두개의 원: Megatron-LM, HELM과 같은 LLM 학습 및 평가, Ray, Beam과 같은 분산 컴퓨팅 생태계를 통합 지원
(포괄적인 LLM 데이터처리를 용이 ➡️ 대규모 데이터 처리 능력 향상)
- 제안된 시스템을 활용하여, 여러 오픈 소스 데이터 세트를 개선하고
LLM pre-training, fine-funing을 위한 다양한 데이터 레시피 도출 가능 ➡️ LLM의 효과적인 성능 향상- 개선된 pre-training data를 활용하여 16개의 LLM 모델의 평균 점수가 최대 7.45% 향상
- compared data 중 43%만 pre-trained 해도 Falcon과 같은 SOTA LLM에 비해 우수한 성능을 보임
- 영어와 중국어 데이터로 fine-tuned된 SOTA LLM과 비교해 Data-Juicer의 데이터를 fine-tuned된 LLM은
pair-wise GPT-4 평가를 이길 확률이 평균 10.3% 높으며, 평균 데이터 양이 56.8% 줄어듦 - Data-Juicer의 우수한 시스템 효율성 및 확장성
➡️ single-machine 처리시간 최대 88.7% 감소, 메모리 및 GPU 자원은 77.1%, 73.1% 절감, 분산처리속도 7.91배 향상
- Contribuitions
- 분리된 모듈과 50가지 이상의 다재다능 연산자(OPs)와 도구를 특징으로 함.
데이터 품질과 인사이트에 쉽게 접근하기 위해 상호작용 시각화 및 자동 평가 능력을 갖춘 적시의 피드백 가능 - 전용 최저화와 통합된 분산 컴퓨팅으로 구동되어 우수한 시스템 성능, LLM을 향상시키기 위한 다수의 고품질 데이터 레시피 생성
- 사용자 중심의 인터페이스 디자인과 LLM 데이터 처리 및 LLM 개발을 위한 데이터 중심 방법론을 통합
➡️ 다양한 사용자들의 접근을 용이하게 하고 LLM 데이터 처리를 democratizes 함 - 더 많은 연구 촉진을 위해 시스템, 데이터 레시피 및 튜토리얼을 제공하며 공개적으로 접근할 수 있게함 - gituhub
- 분리된 모듈과 50가지 이상의 다재다능 연산자(OPs)와 도구를 특징으로 함.
2 BACKGROUND AND RELATED WORKS
2.1 Large Language Model (LLM) Data
- 지난 몇 년간, 특히 pre-trained 및 fine-tuning의 패러다임의 등장으로 이분야에서 놀라운 발전을 보이고 있으며,
언어모델은 특정 목적의 작업을 하기 위해 fine-tuning 되기전에 일반 목적의 말뭉치로 pre-trained 단계를 거침 - 이절차는 NLP 작업의 다양한 스펙트럼에서 뛰어난 성능을 보임.
- self-supervied Tramsformer 아키텍처로, LLM의 모델 파라미터와 training corpus의 규모가 크게 증가함
- 모델 중심의 연구가 확산되지만, LLM 데이터를 어떻게 더 잘 처리해야할 지는 아직 완전히 개척되지 않은 복잡한 영역
pre-trained or fine-tuning 데이터에 대해서도 해당됨
- Pre-training Data
- Pre-training Data, 사전 학습은 LLM 지능의 기초 역할을 함
- 고품질 대량의 데이터로 train되면, LLM은 기본적인 언어 이해 및 생성 능력을 습득할 수 있음
- LLM pre-training data는 일반적으로 웹 크롤러, 대화 또는 소셜 미디어 등 엄격한 백과사전 및 학술 텍스트 등의 산업 분야의 텍스트 등 다양한 유형을 포함
- 그럼에도 불구하고, pre-training data의 전처리, 정제는 잡음, 중복, 관련성 등으로 유해한 내용을 걸러 내는데 어려움이 있음
- 아직도 다양한 요구사항을 충족시키고 고품질 LLM을 제작하는데 도움이 되는 전용 솔루션이 부족함
- 아래 수식은 자동 회귀 언어 모델링을 위한 것으로, pre-trained 𝜃0이 순차적 순서를 준수하여 다음 토큰의 확률 예측
- Fine-tuning Data
- 다수의 연구에서 따르면, 세부 테스크에 특화된 작은 데이터셋을 사용하면 pre-trained LLM을 fine-tuning 하면 LLM의 추가 기능을 향상하거나 활성화할 수 있음
- 해당 단계에서 pre-training data와 비교하면 데이터 양이 굉장히 감소하지만, 데이터 유형의 특성은 매우 다름
- 일반으로 특정 task를 위한 데이터셋{(𝑥1, 𝑠1, 𝑦1), ..., (𝑥𝑗, 𝑠𝑗, 𝑦𝑗), ..., (𝑥𝑚, 𝑠𝑚, 𝑦𝑚)}이 주어질 때, fine-tuning의 목표는 사용자 쿼리 𝑥𝑗에 대한 해당 응답 𝑦𝑗의 가능성을 극대화하는 미리 훈련된 LLM 𝜃0를 조정하여 𝜃∗를 찾는 것
- 𝑠𝑗는 작업별 지침을 나타내며, 선택적으로 맥락 학습을 위한 몇가지 데모 샘플과 함께 제공
- Fine-tuning Data의 two types
- Instuct Fine-Tuing(IFT): LLM의 instruction-following 능력을 향상시키기 위한 것이며 일반적으로 NLP 벤치마크에 적용
- Chat Fine-Tuning(CFT): 대화 능력과 인간 가치 연결을 강화하기 위한 것
- Fine-tuning Data의 경우 데이터의 크기보다 다양성의 중요성을 강조하는 초기 탐구가 있었음
- 몇몇 연구에서는 인간 가치를 나타내는 데이터 유형이 일반 성능 저하로 이어질 수 있다는 점을 지적하며 이를 ➡️ "alignment tax"
- 그러나 Fine-tuning Data를 더 효과적으로 처리하여 유용성을 극대화하고 잠재적 위협을 최소화하는 방법은 계속 조사 필요
- 데이터 품질 측면은 이미 존재하는 문헌에서 광범위하게 연구되었음
(텍스트 구조, 논증의 타당성, 맥락의 풍부함, 글 쓰기의 정확성, 포괄성, 익명화 수준 및 무해성과 같은 측면을 향상시키는 노력들) - pre-training 데이터에서의 cleaning, 중복 제거 및 익명화 프로세스의 사용이 널리 알려진 것은 이러한 목표를 보여줌
- 유사하게 fine-tuning 데이터 처리 또한 필터링, 중복 제거 등을 사용해 사용자 경험과 LLM 성능을 향상시키고자함
- 품질과 다양성은 상충 관계에 있으며, 두 유형의 데이터에서도 반영됩니다.
다양성이 높아진 데이터 ➡️ 높아진 노이즈, 낮은 품질, 증가한 편향 ➡️ 추가 적인 데이터 처리 및 증가한 LLM 훈련 리소스
2.2 Existing LLM Data Processing Solutions
- LLM 데이터 처리는 아직 공통 표준을 마련하고 노력중인 초기분야로, 이를 선구적인 시스템으로 구현하기를 목표로 함
- Data-Juicer는 다재다능, 유연하고 효율적인 데이터 처리 솔루션임
(GPT, LLaMA 등과 같은 유명한 데이터 처리가 나오지 않은 LLM과는 대조적입니다.) - 일부 오픈 소스 LLM들(ex. BLOOM, PromptSouce, RedPajama)이 노력했지만 Data-Juicer처럼 다양한 기능을 완전히 제공하지 못했음
- 기존 작업들은 LLMs를 위한 특정 데이터 원본 및 사용사례에 집중, LLaMA 사전 훈련을 위한 특화된 영어 하위 데이터 집합을 정렬하는 작업, 사전 훈련을 위한 다국어 말뭉치 조립, fine-tuning prompt data를 위한 클라우드 소싱을 진행
- 하지만, 그러한 작업들은 다양한 데이터를 효과적으로 관리하기 위해 체계적이고 모듈식 처리 능력이 부족
➡️ Data-Juicer는 그 한계를 늘리려고 노력하는 분야 (특히, 새로운 데이터 유형을 처리, 언어 번역 등에 잘함)
3 STANDARDIZED OPERATOR POOL
- 다양한 연산자를 위해 OP 개발
- formatter, Mapper, Fliter, Deduplicators 주요 범주 기능있음
- 재사용성을 향상시키고 복잡성을 감소시켜 데이터 레시티 구성을 간소화 및 분리 가능
3.1 Unified Data Representation
- 다양한 데이터 원본을 중간 데이터 표현으로 통합하기 위한 OPs
- Huggingface-datasets 및 Apache Arrow의 지원을 받아 열 중심의 메모리 인프라를 제공하는 프레임워크로,
후속 연산자를 위한 프로세스 디자인을 단순화하는 통합 데이터 인터페이스 제공
3.2 Versatile Data Processing
- Formatter: 데이터 형식을 통합하고 처리 파이프라인 전체에서 일관되고 효율적인 데이터 흐름 기능
- Mapper: LLM 처리의 다양한 요구 사항에 걸쳐 단일 샘플 또는 다중 샘플 처리를 위해 텍스트 편집의 기능
- Fliter: 개별 샘플 메트릭스, 데이터 집합 수준 통계 또는 불용어 목록과 같은 조건부로 필터링 역할
- Deduplicator: 데이터 집합 수준에서 작동, 잠재적으로 저장 공간 낭비 및 효율성 저해할 수 있는 중복 제거
(중복의 정확한 감지와 제거를 보장하기 위해, 해시기반 및 벡터 기반 비교를 포함한 방법 제공)
3.3 Composability
- 사용자가 조합 가능하고, 모듈식 방식으로 다양한 데이터 유형을 손쉽게 처리 가능
- Table 1에 요약된 함수, 입력, 출력 및 처리 수준 외에도, 더 다양한 측면으로 내재되어 있으며 처리해야 하는 필드, 연산자(OP) 파라미터 및 각 OP의 권장 사용 사례들이 있습니다.
- Data-Juicer의 각 OP는 특정 기능을 수행하도록 설계, 사용자가 다른 텍스트 필드를 처리하도록 지시 가능
ex. OP A는 "text.abstract" 샘플 필드를 처리, OP B는 "text.main_body"를 처리하도록 지시 가능 - 기본적으로 각 OP는 "text"필드에 작동하며, 사용자 요구에 따라 "meta" 또는 "stats"와 관련된 다른 데이터 필드도 지정 가능
- 다른 필드를 사진 연산자를 동시에 사용해서 유연성을 제공하며, github 코드에서 조각조각으로 쉽게 조작 가능
- OPs는 토큰 수, 필터링 thresholds, auxiliary 보조 모델, 등 다양하게 구성 가능한 매개변수를 포함하는 일반적인 해결책 제시
- 사용자의 조합을 위해 OPs는 일반적으로 사용 시나리오로 라벨이 붙음
➡️ 쉬운 탐색과 작업을 용이하게 함, Data-Juicer의 아키텍처에서 단순함과 강력함을 조화시키는 목표
4 FEEDBACK-DRIVEN DATA PROCESSING
- (C2)데이터 레시피에 대한 적시의 피드백을 위해, 데이터 처리 파이프라인에 동적 피드백 루프를 통합
➡️ 포괄적인 시각화 도구와 자동 추적 기능을 활용해 데이터를 효과적으로 처리 및 이해 가능 - 대화식 시각화 기능 제공 ➡️ 레시피의 즉각적인 개선 가능
- 이러한 기술은 LLM 처리의 디버깅 및 탐구에 효율적이고 효과적인 솔루션 제공
4.1 HPO for Data Processing
- 데이터 처리 절차에 하이퍼파라미터 최적화(HPO) 개념을 통합
➡️ 데이터 처리에 특화된 하이퍼파라미터를 사용자 정의 대상 지표 및 시각화 결과와 묶음으로 설정 - OP 파라미터 변경 및 잠재적인 실행 오류로 자주 재실행이 필요 ➡️ 내장형 checkpoint 및 캐싱 관리 제공
➡️ 시스템 재시작 또는 장애 중 빠른 복구를 가능하게 하며, checkpoint에 저장된 가장 최적의 최근 상태로 되돌아갈 수 있음
- 전체 시스템 효율성을 향상시키고 검색 비용을 줄이기 위해 Bayesian optimization과 같은 HPO 알고리즘 지원
Hyperband 알고리즘과 같은 early-stop 전략을 사용하고 내장 LLM 샘플링 전략을 제공 - 구체적으로 대상 메트릭이 주어지면 사용자는 데이터 처리 구성 내의 특정 하이퍼파라미터 상관관계 및 중요도 점수 조사 가능
ex.
(1) 모든 M 데이터 셋에 대한 대상 텍스트 필드를 지정하고 필요한 경우 필드 통합 과정 수행
(2) 메타 태그 필터를 활용, 여기서는 언어 태그 "EN"이 있는 샘플만 포함
(3) 데이터셋 D𝑚𝑖𝑥는 HPO 스케줄러에 의해 뽑힌 혼합 가중치 [𝑤𝑖]를 사용하여 𝑀 데이터셋에서 생성되며, 단계 (5)에서 대상 메트릭을 극대화하기 위해 사용
(4) 혼합 데이터셋에 대해 사전 구성된 데이터 처리 및 중복 제거 OPs를 실행하여 데이터 셋 정리
(5) 대상 메트릭은 D𝑚𝑖𝑥에서 다음과 같이 계산됩니다: (𝑛/𝑁 + 𝑠), 여기서 𝑁은 모든 𝑀 데이터셋의 토큰 총수, 𝑛 및 𝑠는 내장 GPT-3 품질 분류기를 사용하여 D𝑚𝑖𝑥의 토큰 수와 평균 품질 점수에 해당합니다. 혼합 데이터셋 D𝑚𝑖𝑥은 더 많은 양과 더 나은 품질을 얻기 위해 단계 (3)∼(5)를 반복적으로 수행합니다. - HPO 결과는 Figure3에 나타난 대로 데이터 통찰력을 시각화하고 이해하는 강력한 수단 제공
- 목표 지표는 내재적 데이터 측정값(ex. 보조 모델에 의해 예측된 toxic 또는 기타 품질 점수) 또는 학습 손실 또는 벤치마크 점수와 같은 LLM의 성능 측정값과 결합된 다른 트레이드 오프 조건이 될 수 있습니다.
4.2 Interactive Visualization
- 상요작용적 시각화 능력은 Data-Juicer의 여러 피드백 단계에 중요한 역할
- 시각적으로 추적 가능, OP의 처리된 데이터 샘플과 OP의 하이퍼파라미터의 영향을 포함
- "Tracer"는 각 작업(Filter, Mapper 등) 적용 후 샘플 변화를 기록하는 혁신적인 내장 도구
➡️ 추적 능력으로 데이터 처리를 더 잘 제어할 수 있도록 도와주며, 프로세스에 대한 이해와 확신을 증가시켜줌 - LLM 데이터 처리의 중기 단계로 전환되면 Data-Juicer는 OP 파이프라인 및 통계 분석의 관점에서 전체 처리 이전과 이후의 데이터를 비교적 시각화로 제공 (Figure (b), (c))
- 내장 도구인 "Analyzer"로 통계분석(카운트, 평균, 표준 편차, 최소/최대 및 분위수 등)을 제공하여 데이터 이해 가능
- 기본적으로, 개별 샘플 통계의 요약은 13 가지 차원을 포함하며, 샘플 혼란도, 단어 수, 깃발 단어 비율, 단락 길이 등 다양한 기준을 포함한 각 통계 변수에 대한 히스토그램과 상자 그림을 자동으로 표시 (관찰할 차원 조절 및 맞춤형 시각화 및 데이터 처리도 가능)
4.3 Feedback with LLM Ecosystem Integration
- 파이프라인 후반 단계에서 Megatron-LM, Deepspeed, HuggingFace-transformers와 같은 주요 훈련 라이브러리와 통합하여 모델의 성능을 쉽게 평가가능
- 다양한 차원을 통합한 모델 능력을 적시에 평가 가능, 효과가 없을 수 있는 데이터와 훈련을 신속하게 식별해 불필요한 데이터 처리와 LLM 처리를 적시에 종료할 수 있게함
- 다양한 메트릭이나 벤치마크를 통한 모델 능력을 지원하고 그 목표 점수의 변화를 추적
➡️ 특정 모델 및 데이터의 계속된 훈련이 타당한지를 판단해 데이터 처리 및 LLM 훈련 비용 최소화 - 추적 가능한 훈련 데이터와 함께 모델 체크포인트, 인기 있는 LLM 아키텍처, 훈련 매개변수, 계산 비용 및 해당 평가 결과와 결합된 참조 모델을 제공
- 균형 잡힌 간단한 평가를 위해 Data-Juicer는 순위 평균, 점수 정규화 평균 또는 다른 맞춤 전략과 같은 다양한 대상 평가 시나리오에서 결과를 통합한 리더보드 스타일의 비교를 지원
4.4 Feedback Loop Showcase
(1) 원본 데이터 셋을 분석
- 기존 데이터 레피시 활용, 내장된 Analyzer 및 Visualizer 활용
- Figure 5 내의 두 개의 원 그래프는 "text.instructions" 필드의 데이터를 기준으로 상위 20개의 가장 일반적인 루트 동사 (내부 원)와 그들의 상위 4개의 직접 명사 객체 (외부 원)를 나타냄
(2) 원본 레시피의 매개변수 개선
- 데이터 프로브를 기반으로 사용자는 원본 데이터셋의 약점을 찾아냄 ex. 다양성이 낮거나 단어 통계 등
- 일부 OP를 추가/제거하거나 필터 범위를 조절하여 레시피의 매개변수를 개선
(3) 개선된 레시피로 원본 데이터 셋 처리
- Data-Juicer를 사용, 개선된 레시피로 원본 데이터셋을 처리하고 개선된 데이터셋과 추가 조정을 위한 여러 저장된 체크포인트를 얻음
(4) 개선된 데이터 셋을 분석
- 단계 (1)과 마찬가지로, 개선된 데이터셋을 다시 분석하여 새로운 데이터 프로브를 얻음
- 통계 및 시각화 결과를 기반으로 데이터 품질의 개선 정도를 평가
- 개선된 데이터가 기대에 미치지 못할 경우, 데이터 레시피를 수동으로 조정하거나 자동 개선을 위해 단계 2로 되돌아감
(5) 개선된 데이터셋을 사용하여 LLM 확인
- Data-Juicer 내부에 통합된 개선된 데이터셋과 훈련 프레임워크를 사용하여 LLM을 훈련하거나 미세 조정
- 훈련 또는 미세 조정 프로세스 중에는 자동 평가 도구를 통해 LLM의 적시 및 다각도 평가를 제공
- 개선된 데이터가 LLM 성능을 약화시키면 프로세스를 조기에 중단하여 불필요한 비용을 방지 가능
(6) 결과를 정리하고 참고 모델과 비교
- 자동으로 평가 결과를 정리하고 데이터 리더보드의 참고 모델과 비교하여 데이터 처리의 효과를 명확히 나타냄
- 참고 모델로 자동 등록할 수 있는 우수한 LLM을 얻거나 LLM 관점에서 추가 개선 지침을 얻어 데이터 레시피를 더욱 향상시킴
5 BOOSTING USABILITY WITH BUILT-INS
- (C3)사용성과 customizability를 하기위해, 데이터 레시피에 대한 통합 및 사용하기 쉬운 구성 패러다임, 다양한 즉시 사용 가능한 데이터 레시피, 그리고 다양한 도구를 제공
5.1 Configuring Your Data Recipe
- 데이터 처리의 전체 파이프라인을 구성 가능하게 만든다는 점에 대해 강조
- 처리 환경 매개 변수, 연산자(OPs) 목록, 사용되는 도구 등 포함
- Jsonargparse 기반으로 통합 유연하며 사용하기 쉽고 강력한 구성 기능 제공
연산자(Operators) 및 도구에 대한 구성 항목을 자동으로 등록하고 명령 줄 항목, yaml 및 jsonnet 파일, 환경 변수, 기본 하드 코딩 값 및 이러한 것들의 다양한 구성 소스를 제공하고 수정 가능
ex. "빼기" 또는 "더하기"라는 두 가지 권장 방법을 사용하여 자체 구성 파일을 쉽게 작성 가능 - "빼기" 방법은 모든 가능한 연산자(Operators), 도구 및 기본 매개 변수가 포함된 미리 설정된 구성 파일을 사용
사용자는 이러한 연산자(Operators)를 간단히 제거하거나 재배열하고 요구 사항에 따라 이러한 매개 변수를 조정할 수 있음 - "더하기" 방법은 사용자가 완전히 새로운 구성 파일을 작성하도록 허용하며, 사전 제작된 데이터 처리 레시피의 널리 사용되는 예제를 활용하여 pre-training, fine-tuning, 영어, 중국어 등에 대한 20개 이상의 고품질 다양한 데이터 처리 레시피를 제공함
5.2 Dedicated Pluggable Tools
- Quality Classifier
- CommonCrawl과 같은 다양한 데이터 원본에서 고품질 텍스트를 추출하기 위한 텍스트 품질 분류기
- GPT-3 품질 점수 계산 모델을 기반으로 하며, 중국어 텍스트와 다양한 코드 유형에 대한 적용 범위를 확장
- 호출 가능한 파이프라인으로 캡슐화되어 사용자가 다양한 상황에 맞게 적용 가능
- 분류기의 기능은 PySpark의 표준 Tokenizer 또는 Sentencepiece 모델 및 기능 추출기로 지원되며,
텍스트의 품질을 측정하기 위해 이진 로지스틱 회귀 분류기를 사용
- Enhanced Sampler for LLM data
- Data-Juicer에서는 LLM에서 대용량 데이터 chuck 처리를 위한 고급 데이터 샘플링 도구를 개발
- 대표적인 추출을 효율적으로 수행하고 처리 시간과 리소스를 최적화하며, LLM 개발자의 고유한 요구 사항을 충족시킴
- 메타데이터 또는 통계 필드 내의 정보를 활용하여 효과적인 데이터 샘플을 생성하며, 문서 길이, 토큰 수, 부울 논리 조건 검사의 빈도 및 동사-명사 쌍 발생을 통해 다양한 선택 메트릭스 활용 가능
- Full Toolkit
- 여러 OPs들 및 시각화들 사용 가능(4.2), Feedback with LLM Ecosystem Integration(4.3) 가능
5.3 User-Friendly Experiences in Data-Juicer
- Zero-Code Processing
- 초보자 사용자를 위해 Data-Juicer는 즉시 사용할 수 있는 데이터 레시피와 플러그인 도구 시리즈를 제공
- 고급 시스템 아키텍처나 OP에 대한 지식이 필요하지 않으며, 섹션 5.1 및 섹션 5.2에서 논의된 것처럼 즉시 사용 가능
- Low-Code Customization
- 중급 사용자는 구성, 데이터 및 외부 리소스를 수정하여 자신의 특수한 요구 사항에 맞출 수 있는 유연성 제공
- 내장된 데이터 구성을 재사용, 결합 및 편집할 수 있으며, 품질 분류기와 토크나이저를 사용자 정의하거나 우리가 개발한 레시피를 기반으로 데이터를 정제하거나 통합 가능
- Advanced Extension
- 숙련된 사용자는 기본 클래스에서 파생하여 "process()" 및 "compute_stats()" 함수를 구현함으로써 새로운 OP 도입 가능
- Data-Juicer의 분리된 디자인은 LLM 데이터 처리 모든 단계의 사용자들에게 새로운 시각화 차원 및 평가 데이터 세트, 사전 또는 사후 처리 스크립트와 같은 도구를 원활하게 통합할 수 있도록 지원
6 COMPREHENSIVE SYSTEM OPTIMIZATION
- Optimized Computation: Context management, Operator (OP) Fusion and Reordering
- 컨텍스트 관리, 연산자(OP) 퓨전 및 재정렬. LLM 데이터 처리의 계산 효율성을 향상시키기 위해 고급 컨텍스트 관리, 연산자 퓨전 및 연산자 재정렬 기술을 제공
- 동일한 컨텍스트나 계산 하위 프로시저를 공유하는 연산자를 식별하는 것을 제안
- 한 연산자가 하나로 퓨전될 때 시간이 많이 소요되므로 연산자 퓨전 후의 OP 목록 실행 순서를 최적화하기 위한 연산자 재정렬 전략을 추가로 설계
ex. Filters의 교환 가능성을 기반으로 시간이 많이 소요되는 OPs(퓨전된 Filters와 같은)의 실행을 지연시키고 다른 시간이 적게 소요되는 OPs를 우선시 함. 앞선 연산자가 일부를 필터링했기 때문에 더 적은 샘플을 처리해야 하며 전체 계산 효율성을 향상 - Figure 6: 중복 계산을 최소화하여 반복되는 공통 계산의 필요성을 제거 + 다중 프로세스 초기화의 오버헤드를 줄여 처리 OPs의 총 수를 감소시킴으로써 신속한 데이터 처리 루틴을 유지
- Optimized Space Utilization: Caching OPs and Compression
- 직렬화할 수 없는 객체들의 직렬화 절차를 우회하기 위한 전용 해싱 방법을 설계
- 각 연산자(OP)의 성공적인 캐싱을 보장하고 Data-Juicer가 최적의 캐시 관리를 활용할 수 있도록 함
- 각 연산자(OP) 이후 자동으로 캐시 파일을 압축하고, 동일한 구성에서 해당 연산자(OP)을 다시 실행할 때 이러한 압축 파일을 일반 캐시 파일로 압축 해제 ➡️ 캐시 데이터 저장량을 크게 줄여 더 큰 데이터셋을 처리하면서 속도나 안정성에 도움
- Optimized Scalability: Distributed Data Processing
- Data-Juicer는 Ray [65], Apache Beam [6] 및 Apache Flink [13]와 같은 분산 처리 프레임워크와 통합되며, 데이터 처리 파이프라인을 단일 노드에서 멀티노드 클러스터로 신속하게 변환할 수 있는 능력을 제공
- Data-Juicer의 거의 모든 연산자(OP) (Mapper, Filter 및 Deduplicator)는 멀티노드 클러스터에서 가속화되며, 메모리 용량 및 IO 처리량에 의한 단일 노드의 병목 현상을 효과적으로 완화
- 모든 최적화는 다양한 관점에서 Data-Juicer의 확장성을 향상시켜 LLM에 포함된 방대한 양의 데이터를 처리하면서 강력하고 효율적인 처리를 보장하고 리소스 요구를 최소화
7 QUANTITATIVE EVALUATION
7.1 Can Data-Juicer Make Better Data Recipes?
7.1.1 Refined Pre-training Data Recipes
- 데이터셋의 품질을 검증하기 위해 우리는 정제된 레시피를 사용하여 LLaMA 아키텍처를 활용하여
LLM을 사전 훈련하고 16개의 핵심 HELM 작업에서 모델의 성능을 평가(자세한 훈련 방법 - 부록 B.3.1과 B.4를 참조) - 결과는 Figure 7에서 시각화되어 있으며, 여기서 훈련 과정 중 토큰 수가 50B, 100B 및 150B에서 증가함에 따라 체크포인트를 평가
- 데이터 양이 절반 뿐인 경우(150B 토큰) Data-Juicer-레시피에서 사전 훈련 된 LLaMA-1.3B는 Pythia-1.4B[7] (300B 토큰)를 능가함
- 350B 토큰으로 훈련된 고도 경쟁력을 지녔던 Falcon-1.3B[70]를 이기는 결과를 보였음
- Alpaca-CoT(39개의 공개적인 세부 튜닝 데이터셋 모음)에서 "Instruct Fine-Tuning (IFT)" 태그를 붙여 17개 하위 데이터셋을 추가로 제공하고 Data-Juicer를 사용하여 데이터 혼합과 처리를 수행
➡️ Data-Juicer(RedPajama+Pile)-150B의 체크포인트를 기반으로 Alpaca-CoT-IFT 원본보다 약 30%의 데이터 양만 사용하면서 상대적으로 4.9%의 개선을 달성
- 품질을 검토하기 위해 먼저 CFT와 EN 태그를 사용하여 경쟁력 있는 여러 하위 데이터셋을 필터링하고, 그런 다음 임의 샘플링과 우리가 설계한 레시피를 기반으로 두 개의 동일한 크기의 데이터셋을 생성 / 오픈 소스 아키텍처, English LLaMA-7B [33]를 기반으로 생성된 데이터셋에 대해 파인튜닝을 진행 (세부 훈련 정보 부록 B.3.2)
- 철저하고 비교적인 성능 평가를 위해 GPT-4 API를 사용하여 짝을 이루어 점수를 매기고 승리와 무승부를 집계 ➡️ Table 3
- 경쟁적인 파인튜닝 오픈 데이터셋에서 훈련된 LLM과 비교했을 때, Data-Juicer 데이터를 사용한 LLM은 더 높은 승률을 보이며 (영어 케이스에서 최대 17.5%), 더 적은 데이터를 사용 (중국어 케이스에서 최대 90.4% 감소)
- 무작위 샘플링에 의한 혼합 처리 전략을 사용한 데이터셋에서 훈련된 LLM과 비교했을 때, Data-Juicer에서 훈련된 LLM은 여전히 더 높은 승률을 얻음 (최대 14.4%)
7.2 How does Data-Juicer perform and scale?
7.2.1 End-to-End System Performance
- 공정한 비교를 위해 우리는 RedPajama의 공식 코드 저장소를 사용하고,
Data-Juicer를 실행하여 그들의 정렬된 레시피를 사용하여 전체 Books 및 arXiv 데이터셋을 처리
다양한 프로세스 수 (np=[32, 64, 128])에서 여러 라운드의 실험을 수행하고 처리 시간, 평균 메모리 사용량 및 평균 CPU 활용률을 포함한 여러 주요 지표를 모니터 - 모든 데이터셋과 다양한 프로세스 수에 대해 Data-Juicer는 평균 55.6% 덜 처리 시간, 63.0% 덜 메모리, 그리고 52.2% 덜 CPU 활용률을 요구함
- 기준선과 비교하여 arXiv 데이터셋의 경우 최대 88.7% 처리 시간 및 73.1% CPU 자원을 절약
- Data-Juicer가 Books 데이터셋을 처리하는 데 기준의 메모리 사용량의 최대 22.9%만 사용하는데, 이는 기준의 처리 절차가 한 번에 전체 데이터셋을 로드하기 때문임
- Data-Juicer는 캐시 파일의 IO로 인한 병목 현상을 효과적으로 완화시키며 여러 측면에서 기존 방법보다 더 나은 종단 간 성능을 달성
7.2.2 Effect of Context Management, OP Fusion, and Reordering
- Data-Juicer는 중복 계산을 최소화하고 처리 시간을 절약하기 위해 특별한 최적화를 사용
- 각 데이터 세트는 동일한 처리 레시피를 거칩니다. 이 레시피에는 14개의 OP(5개의 매퍼, 8개의 필터 및 1개의 중복 제거자)가 포함되어 있으며, 이 중 5개의 OP는 퓨전 가능함
- 4개의 프로세스를 사용한 비교 실험을 진행하며, 가장 큰 데이터 세트의 경우 이러한 기술이 더 큰 규모에서도 효과적인지를 평가하기 위해 50개의 프로세스를 활용
- '#p'는 데이터 세트를 처리하는 데 사용된 프로세스 수
- 결과는 최적화 전략이 전체 프로세스의 총 시간을 최대 24.91% 절약하고 퓨전 가능한 OP의 경우 최대 42.04%의 시간을 절약함
- 데이터 세트의 크기나 사용된 프로세스 수의 변화와 관계없이 최적화가 효과적으로 작동함
7.2.3 System Scalability
- StackExchange와 arXiv 데이터 세트의 크기는 각각 65GB 및 140GB로 jsonl 형식
- Data-Juicer on Ray, Data-Juicer on Beam (Flink 백엔드 사용), 및 원래의 Data-Juicer의 성능을 비교(부록 B.3.4 참고)
- 다양한 최적화 덕분에 원래 시스템은 단일 서버 시나리오에서 Ray 및 Beam을 모두 앞지름
- 노드 수가 증가함에 따라 Ray에서의 시스템 처리 시간이 비례적으로 감소합니다 (StackExchange 및 arXiv에서 각각 최대 87.4% 및 84.6% 시간 감소), 다중 서버에서의 효과적인 확장성
- Beam에서 Data-Juicer의 처리 시간은 노드 수가 증가함에 따라 거의 변하지 않습니다. 처리 워크플로를 더 깊이 조사한 결과, Beam의 데이터 로딩 구성 요소에 의해 제약을 받으며, 이는 주 파일 로딩 시간 비율의 주요한 원인이며 적응 및 추가적인 성능 최적화를 위해 상당한 개발 변경이 필요
8 CONCLUSIONS AND FUTURE WORKS
- 다재다능하며 효율적인 솔루션을 제공함으로써 Data-Juicer는 LLM 데이터 처리에 대한 오픈 소스 도구의 기존 제약 사항을 효과적으로 해결하며 데이터 재현성을 희생하지 않고 적응성과 사용성을 강화
- 50개 이상의 내장 연산자, 특별한 도구 및 풍부한 데이터 레시피의 유기적인 배치는 LLM pre-training과 fine-tuning을 위한 다양한 요구 사항을 충족
- 자동 평가를 지원하는 것을 넘어서 Data-Juicer는 신중하게 최적화되었으며 LLM 및 분산 컴퓨팅 생태계와 원활하게 통합
- 사전 훈련 데이터에 대해 모델 품질의 유효성을 검증하는데 1.3B 매개변수의 상당한 규모를 사용 (사용 가능 자원의 한계로 인해서)
- 앞으로는 3B 및 7B와 같은 더 큰 규모를 유효하게 검증하고 데이터 내의 가능한 큰 가치를 탐색하기로 결정