Hub documentation

Distilabel

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Distilabel

Distilabel์€ ๊ฒ€์ฆ๋œ ์—ฐ๊ตฌ ๋…ผ๋ฌธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋น ๋ฅด๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํŒŒ์ดํ”„๋ผ์ธ์ด ํ•„์š”ํ•œ ์—”์ง€๋‹ˆ์–ด๋ฅผ ์œ„ํ•œ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ ๋ฐ AI ํ”ผ๋“œ๋ฐฑ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

Distilabel์€ ์ „ํ†ต์ ์ธ ์˜ˆ์ธกํ˜• NLP(๋ถ„๋ฅ˜, ์ถ”์ถœ ๋“ฑ)๋ถ€ํ„ฐ ์ƒ์„ฑํ˜• ๋ฐ ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ ์‹œ๋‚˜๋ฆฌ์˜ค(์ง€์‹œ ๋”ฐ๋ฅด๊ธฐ, ๋Œ€ํ™” ์ƒ์„ฑ, ํŒ๋‹จ ๋“ฑ)๊นŒ์ง€ ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ ๋ฐ AI ํ”ผ๋“œ๋ฐฑ ์ƒ์„ฑ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Distilabel์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์€ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๋ฐ AI ํ”ผ๋“œ๋ฐฑ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. distilabel์˜ ๋ชฉํ‘œ๋Š” ๊ฒ€์ฆ๋œ ์—ฐ๊ตฌ ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ AI ํ”ผ๋“œ๋ฐฑ ์ƒ์„ฑ ๋ฐ ํŒ๋‹จ์„ ํ†ตํ•ด ๊ณ ํ’ˆ์งˆ์ด๊ณ  ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ์…‹์„ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑํ•˜์—ฌ AI ๊ฐœ๋ฐœ์„ ๊ฐ€์†ํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์€ distilabel๋กœ ๋ฌด์—‡์„ ๋งŒ๋“œ๋‚˜์š”?

Argilla ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” distilabel์„ ์‚ฌ์šฉํ•˜์—ฌ ๋†€๋ผ์šด ๋ฐ์ดํ„ฐ์…‹๊ณผ ๋ชจ๋ธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • 1M OpenHermesPreference๋Š” teknium/OpenHermes-2.5 LLM์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ์•ฝ 100๋งŒ ๊ฐœ์˜ AI ์„ ํ˜ธ๋„ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ๋œ ๋ฐ์ดํ„ฐ์…‹์ž…๋‹ˆ๋‹ค. distilabel์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์…‹ ๊ฐœ๋ฐœ์„ ํ™•์žฅํ•˜๊ณ  ๊ทœ๋ชจ๋ฅผ ํ‚ค์šธ ์ˆ˜ ์žˆ๋Š” ํ›Œ๋ฅญํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
  • distilabeled Intel Orca DPO dataset๋Š” improved OpenHermes model์„ fine-tuneํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ์…‹์€ Argilla์˜ human curation๊ณผ distilabel์˜ AI feedback์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฉฐ, Intel Orca dataset์˜ ๊ฐœ์„ ๋œ ๋ฒ„์ „์œผ๋กœ, ์›๋ณธ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ fine-tune๋œ ๋ชจ๋ธ๋ณด๋‹ค ์šฐ์ˆ˜ํ•œ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค.
  • haiku DPO ๋ฐ์ดํ„ฐ๋Š” ๋ˆ„๊ตฌ๋‚˜ ํŠน์ • ์ž‘์—…์„ ์œ„ํ•œ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ์…‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์˜ˆ์‹œ์ด๋ฉฐ, ์ด ๋ฐ์ดํ„ฐ์…‹์€ ํ๋ ˆ์ด์…˜๊ณผ ํ‰๊ฐ€๋ฅผ ๊ฑฐ์นœ ํ›„ ๋งž์ถคํ˜• LLM์˜ ํŒŒ์ธํŠœ๋‹์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ์กฐ๊ฑด

๋จผ์ € Hugging Face ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค:

hf auth login

distilabel์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”:

pip install -U distilabel[vllm]

Distilabel ํŒŒ์ดํ”„๋ผ์ธ

Distilabel ํŒŒ์ดํ”„๋ผ์ธ์€ ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋‚˜ ์ž‘์—…์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๋‹จ๊ณ„ ๋˜๋Š” ์ž‘์—…์˜ ์ถœ๋ ฅ์€ ๋‹ค๋ฅธ ๋‹จ๊ณ„์˜ ์ž…๋ ฅ์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ LLM์„ ํ™œ์šฉํ•œ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„์˜ ์ž…๋ ฅ์€ ๋ฐ์ดํ„ฐ ๋ฐฐ์น˜์ด๋ฉฐ, ๋ฐ์ดํ„ฐ์…‹์˜ ๊ฐ ํ–‰์„ ๋‚˜ํƒ€๋‚ด๋Š” ์‚ฌ์ „์˜ ๋ชฉ๋ก์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์‚ฌ์ „์˜ ํ‚ค๋Š” ์—ด ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. Hugging Face ํ—ˆ๋ธŒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด datasets.DatasetDict์˜ ์ถ”์ƒํ™”๋กœ Distiset ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

Distiset๋ฅผ ๋ฐ์ดํ„ฐ์…‹ ๊ฐ์ฒด๋กœ

distilabel์˜ Pipeline์€ Distiset์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” Hugging Face์˜ datasets.DatasetDict ํŠน์ˆ˜ ์œ ํ˜•์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Pipeline์€ Distiset์—์„œ ์—ฌ๋Ÿฌ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Distiset์€ ํ•˜์œ„ ์ง‘ํ•ฉ๋ณ„๋กœ ํ•˜๋‚˜์˜ ํ•ญ๋ชฉ์„ ๊ฐ€์ง„ ์‚ฌ์ „๊ณผ ์œ ์‚ฌํ•œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ดํ›„ Distiset์€ ๋ชจ๋“  ํ•˜์œ„ ์ง‘ํ•ฉ์ด ๋™์ผํ•œ ์ €์žฅ์†Œ์— ํฌํ•จ๋˜๋„๋ก Hugging Face Hub์— ์›ํ™œํ•˜๊ฒŒ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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,
                },
            },
        },
    },
)

Hub์— distilabel Distiset ์—…๋กœ๋“œ

Distiset์„ Hugging Face ์ €์žฅ์†Œ์— ํ‘ธ์‹œํ•˜๋ฉด ๊ฐ ์„œ๋ธŒ์…‹์ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ตฌ์„ฑ์— ๋Œ€์‘ํ•ฉ๋‹ˆ๋‹ค:

distiset.push_to_hub(
    "my-org/my-dataset",
    commit_message="Initial commit",
    private=False,
    token=os.getenv("HF_TOKEN"),
)

๐Ÿ“š ๋ฆฌ์†Œ์Šค

Update on GitHub