Distilabel
Distilabel
Distilabel은 검증된 연구 논문에 기반해 빠르고, 신뢰할 수 있고, 확장 가능한 파이프라인이 필요한 엔지니어를 위한 합성 데이터와 AI 피드백 프레임워크예요. 기존 예측 NLP(분류, 추출 등)부터 생성·대규모 언어 모델 시나리오(지시 따르기, 대화 생성, 평가 등)까지 다양한 프로젝트에서 합성 데이터와 AI 피드백 생성에 사용할 수 있답니다.
출처: 문서
본문
Distilabel은 빠르고, 신뢰할 수 있고, 확장 가능한, 검증된 연구 논문에 기반한 파이프라인을 필요로 하는 엔지니어를 위한 합성 데이터와 AI 피드백 프레임워크예요.
Distilabel은 전통적인 예측 NLP(분류, 추출 등)나 생성·대규모 언어 모델 시나리오(지시 따르기, 대화 생성, 평가 등)를 포함한 다양한 프로젝트를 위한 합성 데이터와 AI 피드백 생성에 사용할 수 있어요. Distilabel의 프로그래매틱 접근 방식은 데이터 생성과 AI 피드백을 위한 확장 가능한 파이프라인을 구축하게 해줘요. distilabel의 목표는 검증된 연구 방법론에 기반해 고품질의 다양한 데이터셋을 빠르게 생성함으로써 AI 개발을 가속화하는 거예요.
사람들은 distilabel로 무엇을 만들까요?
Argilla 커뮤니티는 distilabel을 사용해 훌륭한 데이터셋과 모델을 만들어요.
- 1M OpenHermesPreference는 teknium/OpenHermes-2.5 LLM으로 생성된 약 100만 개의 AI 선호도 데이터셋이에요. distilabel을 사용해 데이터셋 개발을 확장하고 증가시키는 방법을 보여주는 훌륭한 예시예요.
- distilabeled Intel Orca DPO 데이터셋 — 개선된 OpenHermes 모델을 파인튜닝하는 데 사용돼요. 이 데이터셋은 Argilla에서의 인간 큐레이션과 distilabel의 AI 피드백을 결합해 만들어졌으며, 원본 데이터셋으로 파인튜닝된 모델보다 성능이 나은 개선된 Intel Orca 데이터셋 버전이 만들어졌어요.
- haiku DPO 데이터는 특정 작업을 위해 누구나 합성 데이터셋을 만들 수 있는 방법을 보여주는 예시예요. 큐레이션·평가 후 커스텀 LLM 파인튜닝에 사용할 수 있죠.
사전 요구 사항
먼저 Hugging Face 계정으로 로그인해요:
hf auth login
distilabel이 설치돼 있는지 확인해요:
pip install -U distilabel[vllm]
Distilabel 파이프라인
Distilabel 파이프라인은 서로 연결된 임의 개수의 단계나 작업으로 만들 수 있어요. 한 단계·작업의 출력이 다른 것의 입력으로 전달돼요. 일련의 단계를 연결해 LLM으로 복잡한 데이터 처리·생성 파이프라인을 구축할 수 있어요. 각 단계의 입력은 데이터 배치(batch)로, 딕셔너리 목록을 담고 있어요. 각 딕셔너리는 데이터셋의 한 행을, 키는 컬럼 이름을 나타내요. Hugging Face Hub와 데이터를 주고받기 위해 우리는 datasets.DatasetDict의 추상화로 Distiset 클래스를 정의했어요.
Distiset을 데이터셋 객체로
distilabel의 Pipeline은 Hugging Face datasets.DatasetDict의 특별한 타입인 Distiset을 반환해요.
Pipeline은 Distiset에서 여러 subset을 출력할 수 있는데, subset별로 한 항목씩 가진 사전형 객체예요. 그런 다음 Distiset은 모든 subset을 같은 저장소에 담아 Hugging Face Hub에 매끄럽게 push할 수 있어요.
Hub에서 Distiset으로 데이터 로드하기
Hub에서 데이터를 로드하는 예시를 보여주기 위해 Prometheus 2 논문을 재현하고, distilabel에 구현된 PrometheusEval 작업을 사용할 거예요. Prometheus 2와 Prometheuseval 작업은 직접 평가(direct assessment)와 쌍별 순위(pairwise ranking) 작업이에요 — 즉, 주어진 지시에 대한 단일 응답의 품질을 참조 답변 유·무에 따라 평가하는 것과, 주어진 지시에 대해 한 응답을 다른 것과 비교해 품질을 평가하는 것이에요. 이 작업들을 Hugging Face H4 팀이 만든 HuggingFaceH4/instruction-dataset이라는 Hub에서 로드한 데이터셋에 사용할 거예요.
from distilabel.llms import vLLM
from distilabel.pipeline import Pipeline
from distilabel.steps import KeepColumns, LoadDataFromHub
from distilabel.steps.tasks import PrometheusEval
if __name__ == "__main__":
with Pipeline(name="prometheus") as pipeline:
load_dataset = LoadDataFromHub(
name="load_dataset",
repo_id="HuggingFaceH4/instruction-dataset",
split="test",
output_mappings={"prompt": "instruction", "completion": "generation"},
)
task = PrometheusEval(
name="task",
llm=vLLM(
model="prometheus-eval/prometheus-7b-v2.0",
chat_template="[INST] {{ messages[0]['content'] }}\n{{ messages[1]['content'] }}[/INST]",
),
mode="absolute",
rubric="factual-validity",
reference=False,
num_generations=1,
group_generations=False,
)
keep_columns = KeepColumns(
name="keep_columns",
columns=["instruction", "generation", "feedback", "result", "model_name"],
)
load_dataset >> task >> keep_columns
그런 다음 런타임 파라미터와 함께 pipeline.run을 호출해야 파이프라인이 실행되고 데이터가 Distiset 객체에 저장돼요.
distiset = pipeline.run(
parameters={
task.name: {
"llm": {
"generation_kwargs": {
"max_new_tokens": 1024,
"temperature": 0.7,
},
},
},
},
)
distilabel Distiset을 Hub에 push하기
Distiset을 Hugging Face 저장소에 push하세요. 각 subset이 서로 다른 configuration에 대응해요:
distiset.push_to_hub(
"my-org/my-dataset",
commit_message="Initial commit",
private=False,
token=os.getenv("HF_TOKEN"),
)
📚 리소스
- 🚀 Distilabel Docs
- 🚀 Distilabel Docs - distiset
- 🚀 Distilabel Docs - prometheus
- 🆕 Introducing distilabel
더 알아보기 (Learn more)
- distilabel 파이프라인은
Distiset(특수한datasets.DatasetDict)을 반환하고, subset별로 Hub에 push할 수 있어요. LoadDataFromHub로 Hub 데이터를 로드하고,PrometheusEval같은 작업으로 AI 피드백을 생성할 수 있어요.