[ { "param_type": "data", "label": "Block size", "name": "block_size", "value": 1024, "placeholder": "", "description": "최대 시퀀스 길이 또는 텍스트 한 블록의 길이. -1로 설정하면 블록 크기가 자동으로 결정됨. 기본값은 -1.", "inputType": "number", "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "data", "label": "Model max length", "name": "model_max_length", "value": 2048, "placeholder": "", "description": "모델이 단일 배치에서 처리할 최대 길이를 설정하면 성능과 메모리 사용량에 영향을 줄 수 있음. 기본값은 1024.", "inputType": "number", "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "data", "label": "Padding side", "name": "padding", "placeholder": "", "description": "시퀀스를 패딩할 측면(왼쪽 또는 오른쪽)", "inputType": "select", "value": "right", "options": [ { "label": "right", "value": "right" }, { "label": "left", "value": "left" }, { "label": "None", "value": "None" } ], "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "data", "label": "Add eos token", "name": "add_eos_token", "placeholder": "", "description": "시퀀스 끝에 EOS 토큰을 추가할 지 여부", "inputType": "bool", "value": "true", "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "trainer", "label": "Logging method", "name": "log", "placeholder": "", "description": "실험 추적을 위한 로깅 방법", "inputType": "select", "value": "tensorboard", "options": [ { "label": "tensorboard", "value": "tensorboard" }, { "label": "wandb", "value": "wandb", "disabled": true } ], "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "trainer", "label": "Logging steps", "name": "logging_steps", "value": 1, "placeholder": "", "description": "이벤트 로깅 사이의 단계 수", "inputType": "number", "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "trainer", "label": "Use flash attention 2", "name": "use_flash_attention", "placeholder": "", "description": "flash attention version 2 사용 여부", "inputType": "bool", "value": false, "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "trainer", "label": "Evaluation strategy", "name": "eval_strategy", "placeholder": "", "description": "evaluation 전략 (예: \"epoch\")", "inputType": "select", "value": "steps", "options": [ { "label": "epoch", "value": "epoch" }, { "label": "steps", "value": "steps" } ], "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "trainer", "label": "Save total limit", "name": "save_total_limit", "placeholder": "", "description": "유지해야 하는 최대 체크포인트 수", "inputType": "number", "value": 1, "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "trainer", "label": "Auto find batch size", "name": "auto_find_batch_size", "placeholder": "", "description": "최적의 배치 크기를 자동으로 찾을지 여부. 기본값은 False.", "inputType": "bool", "value": true, "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "trainer", "label": "Mixed precision", "name": "mixed_precision", "placeholder": "", "description": "사용할 mixed precision 타입(예: “fp16”, “bf16” 또는 None)", "inputType": "select", "value": "fp16", "options": [ { "label": "fp16", "value": "fp16" }, { "label": "bp16", "value": "bp16" }, { "label": "None", "value": "None" } ], "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "trainer", "label": "Learning rate", "name": "learning_rate", "value": 0.00003, "placeholder": "", "description": "트레이닝 학습률(Learning rate)", "inputType": "number", "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "trainer", "label": "Epochs", "name": "epochs", "value": 1, "placeholder": "", "description": "트레이닝 epochs 수", "inputType": "number", "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "trainer", "label": "Batch size", "name": "batch_size", "value": 2, "placeholder": "", "description": "트레이닝 배치 사이즈", "inputType": "number", "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "trainer", "label": "Warmup proportion", "name": "warmup_ratio", "value": 0.1, "placeholder": "", "description": "학습률(Learning rate) 워밍업 수행을 위한 트레이닝 비율", "inputType": "number", "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "trainer", "label": "Gradient accumulation", "name": "gradient_accumulation", "value": 4, "placeholder": "", "description": "업데이트 전 gradients를 누적하는 단계 수", "inputType": "number", "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "trainer", "label": "Optimizer", "name": "optimizer", "placeholder": "", "description": "트레이닝에 사용할 Optimizer", "inputType": "select", "value": "adamw_torch", "options": [ { "label": "adamw_torch", "value": "adamw_torch" }, { "label": "adamw", "value": "adamw" }, { "label": "adam", "value": "adam" }, { "label": "sgd", "value": "sgd" } ], "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "trainer", "label": "Scheduler", "name": "scheduler", "placeholder": "", "description": "학습률(Learning rate) 스케쥴러", "inputType": "select", "value": "linear", "options": [ { "label": "linear", "value": "linear" }, { "label": "cosine", "value": "cosine" }, { "label": "cosine_warmup", "value": "cosine_warmup" }, { "label": "constant", "value": "constant" } ], "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "trainer", "label": "Weight decay", "name": "weight_decay", "value": 0, "placeholder": "", "description": "optimizer에 적용할 가중치 감쇠", "inputType": "number", "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "trainer", "label": "Max grad norm", "name": "max_grad_norm", "value": 1, "placeholder": "", "description": "gradient clipping의 최대 표준", "inputType": "number", "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "trainer", "label": "Seed", "name": "seed", "value": 42, "placeholder": "", "description": "재현성을 위한 Random seed", "inputType": "number", "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "trainer", "label": "Chat template", "name": "chat_template", "placeholder": "", "description": "채팅 기반 모델 템플릿 옵션: None, zephyr, chatml, or tokenizer", "inputType": "select", "value": "None", "options": [ { "label": "None", "value": "None" }, { "label": "zephyr", "value": "zephyr" }, { "label": "chatml", "value": "chatml" }, { "label": "tokenizer", "value": "tokenizer" } ], "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "trainer", "label": "model_ref", "name": "model_ref", "placeholder": "", "description": "DPO 트레이너용 참조 모델", "inputType": "text", "value": "", "required": false, "disabled": false, "hidden": true, "trainer": [ "dpo" ], "mode": [ "full" ] }, { "param_type": "trainer", "label": "dpo_beta", "name": "dpo_beta", "placeholder": "", "description": "DPO 트레이너용 Beta parameter", "inputType": "number", "value": 0.1, "required": false, "disabled": false, "hidden": true, "trainer": [ "dpo" ], "mode": [ "full" ] }, { "param_type": "trainer", "label": "max prompt length", "name": "max_prompt_length", "placeholder": "", "description": "프롬프트 최대 길이", "inputType": "number", "value": 0.1, "required": false, "disabled": false, "hidden": true, "trainer": [ "dpo", "orpo" ], "mode": [ "full" ] }, { "param_type": "trainer", "label": "Max completion length", "name": "max_completion_length", "placeholder": "", "description": "completion 최대 길이", "inputType": "number", "value": 0.1, "required": false, "disabled": false, "hidden": true, "trainer": [ "dpo", "orpo" ], "mode": [ "full" ] }, { "param_type": "peft", "label": "Quantization", "name": "quantization", "placeholder": "", "description": "사용할 양자화 방법 (예: \"int4\", \"int8\", or None)", "inputType": "select", "value": "int4", "options": [ { "label": "int4", "value": "int4" }, { "label": "int8", "value": "int8" }, { "label": "None", "value": "None" } ], "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "peft", "label": "PEFT/LoRA", "name": "peft", "placeholder": "", "description": "파라미터 효율적 미세 조정(PEFT) 사용 여부. 비활성화 시 Full-FT방식으로 훈련합니다.", "inputType": "bool", "value": true, "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "peft", "label": "Target modules", "name": "target_modules", "value": "all-linear", "placeholder": "", "description": "양자화 또는 파인 튜닝을 위한 타겟 모듈", "inputType": "text", "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "peft", "label": "Merge adapter", "name": "merge_adapter", "placeholder": "", "description": "어댑터 레이어 병합 여부", "inputType": "bool", "value": "false", "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "peft", "label": "Lora r", "name": "lora_r", "value": 16, "placeholder": "", "description": "LoRA matrices 순위", "inputType": "number", "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "peft", "label": "Lora alpha", "name": "lora_alpha", "value": 32, "placeholder": "", "description": "LoRA용 Alpha parameter", "inputType": "number", "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "peft", "label": "Lora dropout", "name": "lora_dropout", "value": 0.05, "placeholder": "", "description": "LoRA의 Dropout rate", "inputType": "number", "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "column_mappings", "label": "Prompt text column", "name": "prompt_text_column", "placeholder": "프롬프트 텍스트의 컬럼 이름", "description": "프롬프트 텍스트의 컬럼 이름. 특정할 값이 없으면 'text'를 입력하세요.", "inputType": "text", "value": "text", "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "dataset", "label": "Dataset files", "name": "dataset_files", "placeholder": "data/*.json", "description": "데이터셋으로 활용할 경로 또는 파일을 글로브패턴(와일드카드패턴)으로 입력하세요 예) *.parquet, data/train/*.jsonl", "inputType": "text", "value": "*.parquet", "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "dataset", "label": "Pre-processing", "name": "pre_processing", "placeholder": "데이터셋은 dataset_dict, 토크나이저는 tokenizer 변수를 사용하여 접근하세요.", "description": "데이터 전처리를 위한 Python 코드", "inputType": "textarea", "value": "def _normalize_role(raw_role):\n role = str(raw_role).strip().lower()\n\n if role in (\"human\", \"user\"):\n return \"user\"\n if role in (\"gpt\", \"assistant\", \"model\"):\n return \"assistant\"\n if role == \"system\":\n return \"system\"\n\n # 알 수 없는 role은 학습 중단 대신 assistant로 보내지 말고 명확히 실패\n raise ValueError(f\"Unsupported role: {raw_role}\")\n\n\ndef _extract_turn(turn):\n # 보통 parquet -> datasets 에서는 dict 형태로 들어옴\n if isinstance(turn, dict):\n if \"from\" in turn and \"value\" in turn:\n return {\n \"role\": _normalize_role(turn[\"from\"]),\n \"content\": \"\" if turn[\"value\"] is None else str(turn[\"value\"]),\n }\n if \"role\" in turn and \"content\" in turn:\n return {\n \"role\": _normalize_role(turn[\"role\"]),\n \"content\": \"\" if turn[\"content\"] is None else str(turn[\"content\"]),\n }\n\n # 예외적으로 [role, content] 형태일 때도 처리\n if isinstance(turn, (list, tuple)) and len(turn) == 2:\n return {\n \"role\": _normalize_role(turn[0]),\n \"content\": \"\" if turn[1] is None else str(turn[1]),\n }\n\n raise ValueError(f\"Unsupported conversation turn format: {turn}\")\n\n\ndef formatting_func(example):\n if \"conversations\" not in example:\n raise ValueError(f\"Missing 'conversations'. Available columns: {list(example.keys())}\")\n\n messages = [_extract_turn(turn) for turn in example[\"conversations\"]]\n\n # 빈 메시지는 제거\n messages = [m for m in messages if m[\"content\"].strip()]\n\n if not messages:\n raise ValueError(\"No valid messages found in example\")\n\n formatted_text = tokenizer.apply_chat_template(\n messages,\n tokenize=False,\n add_generation_prompt=False,\n )\n\n return {\"text\": formatted_text}\n\n\nfor split in list(dataset_dict.keys()):\n dataset_dict[split] = dataset_dict[split].map(\n formatting_func,\n batched=False,\n remove_columns=dataset_dict[split].column_names,\n )", "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full", "basic" ] }, { "param_type": "distributed", "label": "distributed backend", "name": "distributed_backend", "placeholder": "", "description": "분산 트레이닝에 사용할 백엔드", "inputType": "text", "value": "None", "required": true, "disabled": false, "hidden": true, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "distributed", "label": "Use fsdp2", "name": "use_fsdp2", "placeholder": "", "description": "분산 트레이닝에 FSDP2 사용", "inputType": "bool", "value": "false", "required": true, "disabled": false, "hidden": true, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "etc", "label": "Disable GC", "name": "disable_gc", "placeholder": "", "description": "GC 비활성화", "inputType": "bool", "value": false, "required": false, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] }, { "param_type": "etc", "label": "Unsloth", "name": "unsloth", "placeholder": "", "description": "Unsloth", "inputType": "select", "value": "false", "options": [ { "label": "true", "value": "true" }, { "label": "false", "value": "false" } ], "required": true, "disabled": false, "hidden": false, "trainer": [ "default", "sft" ], "mode": [ "full" ] } ]