콘텐츠로 이동

미세 조정 (Fine-tuning)

이 페이지를 열었다는 것은, 사전 훈련된 모델의 제로샷(zero-shot) 성능에 만족하지 못했다는 의미일 것입니다. 여러분의 데이터셋에서 더 나은 성능을 내도록 모델을 미세 조정하고 싶으실 겁니다.

현재 버전에서는 'LLAMA' 부분만 미세 조정하면 됩니다.

LLAMA 미세 조정

1. 데이터셋 준비

.
├── SPK1
│   ├── 21.15-26.44.lab
│   ├── 21.15-26.44.mp3
│   ├── 27.51-29.98.lab
│   ├── 27.51-29.98.mp3
│   ├── 30.1-32.71.lab
│   └── 30.1-32.71.mp3
└── SPK2
    ├── 38.79-40.85.lab
    └── 38.79-40.85.mp3

데이터셋을 위 형식으로 변환하여 data 폴더 아래에 배치해야 합니다. 오디오 파일 확장자는 .mp3, .wav 또는 .flac일 수 있으며, 주석 파일 확장자는 .lab을 권장합니다.

Info

.lab 주석 파일에는 오디오의 전사 텍스트만 포함하면 되며, 특별한 형식 요구사항은 없습니다. 예를 들어 hi.mp3의 내용이 "안녕하세요, 안녕히 가세요."라면, hi.lab 파일에는 "안녕하세요, 안녕히 가세요."라는 한 줄의 텍스트만 포함하면 됩니다.

Warning

데이터셋에 음량 정규화를 적용하는 것이 좋습니다. 이를 위해 fish-audio-preprocess를 사용할 수 있습니다.

fap loudness-norm data-raw data --clean

2. 시맨틱 토큰 일괄 추출

VQGAN 가중치를 다운로드했는지 확인하세요. 그렇지 않은 경우 다음 명령을 실행하세요.

huggingface-cli download fishaudio/openaudio-s1-mini --local-dir checkpoints/openaudio-s1-mini

그런 다음 다음 명령을 실행하여 시맨틱 토큰을 추출할 수 있습니다.

python tools/vqgan/extract_vq.py data \
    --num-workers 1 --batch-size 16 \
    --config-name "modded_dac_vq" \
    --checkpoint-path "checkpoints/openaudio-s1-mini/codec.pth"

Note

--num-workers--batch-size를 조정하여 추출 속도를 높일 수 있지만, GPU 메모리 한도를 초과하지 않도록 주의하세요.

이 명령은 data 디렉토리에 .npy 파일을 생성합니다. 결과는 다음과 같습니다.

.
├── SPK1
│   ├── 21.15-26.44.lab
│   ├── 21.15-26.44.mp3
│   ├── 21.15-26.44.npy
│   ├── 27.51-29.98.lab
│   ├── 27.51-29.98.mp3
│   ├── 27.51-29.98.npy
│   ├── 30.1-32.71.lab
│   ├── 30.1-32.71.mp3
│   └── 30.1-32.71.npy
└── SPK2
    ├── 38.79-40.85.lab
    ├── 38.79-40.85.mp3
    └── 38.79-40.85.npy

3. 데이터셋을 protobuf로 패킹하기

python tools/llama/build_dataset.py \
    --input "data" \
    --output "data/protos" \
    --text-extension .lab \
    --num-workers 16

명령 실행이 완료되면 data 디렉토리에서 protos 파일을 볼 수 있어야 합니다.

4. 마지막으로, LoRA로 미세 조정하기

마찬가지로, LLAMA 가중치를 다운로드했는지 확인하세요. 그렇지 않은 경우 다음 명령을 실행하세요.

huggingface-cli download fishaudio/openaudio-s1-mini --local-dir checkpoints/openaudio-s1-mini

마지막으로, 다음 명령을 실행하여 미세 조정을 시작할 수 있습니다.

python fish_speech/train.py --config-name text2semantic_finetune \
    project=$project \
    +lora@model.model.lora_config=r_8_alpha_16

Note

fish_speech/configs/text2semantic_finetune.yaml 파일을 수정하여 batch_size, gradient_accumulation_steps 등 훈련 매개변수를 GPU 메모리에 맞게 조정할 수 있습니다.

Note

Windows 사용자의 경우, trainer.strategy.process_group_backend=gloo를 사용하여 nccl 관련 문제를 피할 수 있습니다.

훈련이 완료되면 추론 섹션을 참조하여 모델을 테스트할 수 있습니다.

Info

기본 설정에서는 모델이 화자의 발음 방식만 학습하고 음색은 학습하지 않습니다. 음색 안정성을 보장하려면 여전히 프롬프트를 사용해야 합니다. 음색을 학습시키고 싶다면 훈련 스텝 수를 늘리되, 이는 과적합(overfitting)으로 이어질 수 있습니다.

훈련 후, 추론을 수행하기 전에 LoRA 가중치를 일반 가중치로 변환해야 합니다.

python tools/llama/merge_lora.py \
    --lora-config r_8_alpha_16 \
    --base-weight checkpoints/openaudio-s1-mini \
    --lora-weight results/$project/checkpoints/step_000000010.ckpt \
    --output checkpoints/openaudio-s1-mini-yth-lora/

Note

다른 체크포인트를 시도해 볼 수도 있습니다. 요구 사항을 충족하는 가장 이른 체크포인트를 사용하는 것이 좋습니다. 이러한 체크포인트는 보통 OOD(분포 외) 데이터에서 더 나은 성능을 보입니다.