Show HN: Finetuning Hub를 통한 LLM 미세 조정 (Finetuning)
요약
Finetuning Hub는 YAML 설정 파일 하나로 LLM 미세 조정 실험의 전 과정을 제어할 수 있는 CLI 도구입니다. 프롬프트, 오픈 소스 모델, 최적화 전략 및 테스트를 통합적으로 관리하여 효율적인 실험 파이프라인을 구축할 수 있습니다.
핵심 포인트
- YAML 기반의 설정 파일로 실험 파이프라인 전체 제어 가능
- 데이터 주입, 모델 정의, 학습, 추론, QA 프로세스 지원
- Flash-attention 등 최적화 기술 적용 지원
- Hugging Face 데이터셋 및 사용자 정의 데이터(JSON, CSV) 활용 가능
LLM Finetuning toolkit은 사용자의 데이터로 일련의 LLM 미세 조정 (fine-tuning) 실험을 실행하고 그 결과를 수집할 수 있는 설정 기반 (config-based) CLI 도구입니다. 단 하나의 yaml 설정 파일로부터 일반적인 실험 파이프라인의 모든 요소인 프롬프트 (prompts), 오픈 소스 LLM (open-source LLMs), 최적화 전략 (optimization strategy) 및 **LLM 테스트 (LLM testing)**를 제어할 수 있습니다.
pipx는 패키지와 종속성을 별도의 가상 환경에 설치합니다.
pipx install llm-toolkit
pip install llm-toolkit
이 가이드는 이 툴킷을 최대한 활용할 수 있게 해주는 3단계 과정을 포함하고 있습니다!
기초 (Basic): 첫 번째 LLM 미세 조정 실험 실행
중급 (Intermediate): YAML 설정 파일의 구성 요소를 변경하여 사용자 정의 실험 실행
고급 (Advanced): 단 하나의 YAML 설정 파일을 통해 다양한 프롬프트 템플릿, LLM, 최적화 기술에 걸친 일련의 미세 조정 실험 실행
llmtune generate config
llmtune run ./config.yml
첫 번째 명령은 도움이 되는 시작용 config.yml 파일을 생성하여 현재 작업 디렉토리에 저장합니다. 이는 사용자가 빠르게 시작할 수 있도록 제공되며 추가 수정을 위한 기본 토대로 사용됩니다.
그 다음 두 번째 명령은 기본 YAML 설정 파일인 config.yaml에 지정된 설정을 사용하여 미세 조정 프로세스를 시작합니다.
설정 파일은 툴킷의 동작을 정의하는 핵심 요소입니다. YAML 형식으로 작성되며 데이터 수집 (data ingestion), 모델 정의 (model definition), 학습 (training), 추론 (inference) 및 품질 보증 (quality assurance)과 같이 프로세스의 다양한 측면을 제어하는 여러 섹션으로 구성됩니다. 몇 가지 중요한 섹션을 강조하겠습니다.
지원되는 모델에 대해 Flash-attention을 활성화하려면, 먼저 flash-attn을 설치하십시오:
pipx
pipx inject llm-toolkit flash-attn --pip-args=--no-build-isolation
pip
pip install flash-attn --no-build-isolation
그 다음, 설정 파일에 추가합니다.
model:
torch_dtype: "bfloat16" # 또는 오래된 GPU를 사용하는 경우 "float16"
attn_implementation: "flash_attention_2"
데이터 주입 (Data Ingestion)이 어떤 모습일지에 대한 예시입니다:
data:
file_type: "huggingface"
path: "yahma/alpaca-cleaned"
...
- 위의 예시는 Hugging Face의 공개 데이터셋을 사용하는 방법을 보여주지만, 설정 파일 (Config file)을 통해 사용자의 자체 데이터를 주입할 수도 있습니다.
file_type: "json"
path: "<사용자 데이터 파일 경로>"
file_type: "csv"
path: "<사용자 데이터 파일 경로>"
프롬프트 필드 (Prompt fields)는 LLM을 미세 조정 (Fine-tuning)할 지침 (Instructions)을 생성하는 데 도움을 줍니다. 이는 데이터셋에 존재하는, {} 대괄호로 언급된 특정 컬럼 (Column)에서 데이터를 읽어옵니다. 제공된 예시에서는 데이터 파일에 다음과 같은 컬럼 이름이 있을 것으로 예상됩니다:
instruction
, input
그리고 output
.
프롬프트 필드는 미세 조정 과정 동안 prompt와 prompt_stub을 모두 사용합니다. 하지만 테스트 단계에서는 오직 prompt 섹션만이 미세 조정된 LLM의 입력값으로 사용됩니다.
model:
hf_model_ckpt: "NousResearch/Llama-2-7b-hf"
quantize: true
...
- 위의 예시는 Llama2 7B 사용을 보여주지만, 이론적으로는 Hugging Face에서 지원하는 모든 오픈 소스 LLM을 이 툴킷 (Toolkit)에서 사용할 수 있습니다.
hf_model_ckpt: "mistralai/Mistral-7B-v0.1"
hf_model_ckpt: "tiiuae/falcon-7b"
r (Rank) 및 드롭아웃 (Dropout)과 같은 LoRA 파라미터 (Parameters)는 변경할 수 있습니다.
lora:
r: 64
lora_dropout: 0.25
qa:
llm_metrics:
- length_test
...
미세 조정된 LLM이 예상대로 동작하는지 확인하기 위해, 원하는 동작이 달성되고 있는지 체크하는 테스트를 추가할 수 있습니다. 예시: 요약 (Summarization) 작업을 위해 미세 조정된 LLM의 경우, 생성된 요약이 실제로 입력 텍스트보다 길이가 짧은지 확인하고 싶을 수 있습니다. 또한 원문과 생성된 요약 사이의 단어 중첩 (Overlap) 정도를 파악하고 싶을 수도 있습니다.
이 설정 (Config)은 미세 조정을 실행하고 그 결과를 ./experiment/[unique_hash] 디렉토리 아래에 저장합니다.
각 고유한 설정 (Config)은 고유한 해시 (Hash)를 생성하므로, 저희 도구가 중단된 지점부터 자동으로 다시 시작할 수 있습니다. 예를 들어, 학습 중간에 종료해야 하는 경우, 스크립트를 다시 실행하면 프로그램을 처음부터 다시 시작하는 대신 해당 디렉토리에 이미 생성된 기존 데이터셋 (Dataset)을 자동으로 불러옵니다.
스크립트 실행이 완료되면 다음과 같은 별도의 결과물 (Artifacts)을 확인할 수 있습니다:
/dataset # hf datasets 형식으로 생성된 pkl 파일
/model # hf 형식의 peft 모델 가중치 (Weights)
/results # 프롬프트 (Prompt), 정답 (Ground truth), 예측값 (Predicted values)이 포함된 csv
...
모든 변경 사항이 YAML 파일에 반영되면, 이를 사용하여 간단히 커스텀 미세 조정 (Fine-tuning) 실험을 실행할 수 있습니다!
python toolkit.py --config-path <path to custom YAML file>
미세 조정 워크플로우 (Workflows)는 일반적으로 다양한 LLM, 프롬프트 설계 (Prompt designs) 및 최적화 기술 (Optimization techniques)에 걸쳐 어블레이션 연구 (Ablation studies)를 수행하는 과정을 포함합니다. 설정 파일 (Configuration file)을 수정하여 어블레이션 연구를 수행할 수 있습니다.
- 미세 조정 중에 실험할 다양한 프롬프트 템플릿 (Prompt templates)을 지정합니다.
data:
file_type: "huggingface"
path: "yahma/alpaca-cleaned"
...
- 실험하고자 하는 다양한 LLM을 지정합니다.
model:
hf_model_ckpt:
[
...
- 어블레이션 연구를 수행할 다양한 LoRA 설정을 지정합니다.
lora:
r: [16, 32, 64]
lora_dropout: [0.25, 0.50]
이 툴킷 (Toolkit)은 개발자가 특정 요구 사항에 맞춰 기능을 커스텀하고 강화할 수 있도록 모듈식 (Modular)이며 확장 가능한 (Extensible) 아키텍처 (Architecture)를 제공합니다. 데이터 수집 (Data ingestion), 미세 조정 (Fine-tuning), 추론 (Inference), 품질 보증 테스트 (Quality assurance testing)와 같은 툴킷의 각 구성 요소는 쉽게 확장할 수 있도록 설계되었습니다.
이 툴킷에 대한 오픈 소스 (Open-source) 기여를 환영하며 권장합니다. 기여를 원하시면 CONTRIBUTING.md를 참조해 주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 HN AI Research의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기