Reference
Api Server
https://raw.githubusercontent.com/RVC-Boss/GPT-SoVITS/refs/heads/main/api_v2.py
Git Repo
GitHub - RVC-Boss/GPT-SoVITS: 1 min voice data can also be used to train a good TTS model! (few shot voice cloning)
1 min voice data can also be used to train a good TTS model! (few shot voice cloning) - RVC-Boss/GPT-SoVITS
github.com
시작
GPT-SoVITS는 소량의 음성데이터로 해당 음성을 학습하고 학습한 목소리로 TTS를 수행하는
오픈 소스 기반의 제로샷(Zero-shot) 음성 합성(TTS) 및 음성 변환(Voice Conversion) 모델입니다. - Google Gemini -
이처럼 샘플 보이스 가지고 샘플 보이스의 화자(話者)가 말하지 않아도 해당 말을 한 것처럼 TTS를 수행한다.
나는 내 목소리를 계속 들을 자신이 없어 "무료 텍스트 음성 변환 도구" TTS Maker를 이용해 샘플보이스를 생성하여 샘플 보이스 파일로 이용했다.(즉, TTS된파일로 TTS하는격)
물론 사람 목소리로 녹음해서도 해봤지만 노이즈가 좀 있어서 그런지 기계가 말하는것 같았다.
난 단지 완성된 모델에 추론하는 용도 + 프로그램과의 연계가 필요하여 API를 이용하였다(WebUI는 자료가 많더라)
우선 NVIDIA DGX Spark 장비에서 안돌아갔다
ARM, x86 아키텍처간 호환성이슈같지만 깊게 파해치지 않았다.
그래서 x86장비에 RTX3090 장비에서 설치하고 추론해봤더니? 잘된다.
샘플파일 만들기
위에서 말했다시피 그냥 TTSMaker에서 추출했다.
무료 온라인 텍스트 음성 변환 도구 - TTSMaker
텍스트를 음성으로 변환 성공! 이 오디오 파일은 30분 이내에 자동으로 삭제되므로 제때 다운로드하시기 바랍니다. 짧은 링크를 통해 이 오디오를 30일 동안 온라인으로 무료로 공유하려면 클릭
ttsmaker.com

해당 wav 파일을 샘플 보이스로 지정했다.
화자의 목소리로 제대로 하고싶으면 좀더 깔끔하게 녹음해야한다.
1. 잡소리 X
2. 또박또박
3. 그렇다고 인위적 말투 X
4. 음질 고품질
5. 또렷한 화자의 목소리
6. 적당한 볼륨의 목소리
Install
나는 관리하기 편하게 DockerInstall로 선택했다.
1. CUDA버전 확인
해당 이미지의 버전은 아래와 같다
GPT-SoVITS-CU126-Lite <- CUDA12.6 , 경량화
GPT-SoVITS-CU126 <- CUDA12.6, 풀버전
GPT-SoVITS-CU128-Lite <- CUDA12.8, 경량화
GPT-SoVITS-CU128 <- CUDA12.8, 풀버전
이미지가 CUDA 버전에 따라 다르다.
그래서 우선 docker Image를 받기전, 설치대상 PC의 CUDA 버전을 확인한다
경량화 버전은 의존성 모듈을 축소한 버전이다.
아래 명령어로 CUDA버전을 확인한다.
nvidia-smi
그럼 아래처럼 출력된다.

저기서 `CUDA Version`을 보자.. 12.8이니.. GPT-SoVITS-CU128-Lite, GPT-SoVITS-CU128 둘 중 하나를 사용해야한다.
이미지를 직접 빌드해도 된다. 직접 빌드는 아래 링크를 보자.
GitHub - RVC-Boss/GPT-SoVITS: 1 min voice data can also be used to train a good TTS model! (few shot voice cloning)
1 min voice data can also be used to train a good TTS model! (few shot voice cloning) - RVC-Boss/GPT-SoVITS
github.com
2. docker-compose.yml 작성
version: "3.8"
services:
GPT-SoVITS-CU128:
image: xxxxrt666/gpt-sovits:latest-cu128
container_name: GPT-SoVITS-CU128
ports:
- "9871:9871"
- "9872:9872"
- "9873:9873"
- "9874:9874"
- "9880:9880"
volumes:
- .:/workspace/GPT-SoVITS
environment:
# 반정밀도(fp16) 사용 여부를 제어합니다.
# GPU가 이를 지원하여 메모리 사용량을 줄일 수 있다면 true로 설정하십시오.
- is_half=true
tty: true
stdin_open: true
shm_size: "16g"
restart: unless-stopped
command: python api_v2.py -a 0.0.0.0 -p 9880 -c GPT_SoVITS/configs/tts_infer.yaml
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: "all"
capabilities: [ gpu ]
command에서 `python api_v2.py`가 API 서버를 실행시킨다.
만약 WebUI서버를 띄울거면 `python webui.py`를 실행시키면 될것이다.
API
TTS수행 요청은 GET, POST 메소드 둘 다 사용 가능하다.
우선 기본적인 파라미터(또는 RequestBody) 내용이다.
필수
| 파라미터 | 타입 | 설명 |
| text | string | 음성으로 변환할 텍스트 |
| text_lang | string | 텍스트의 언어 (zh, en, ko, ja 등) |
| ref_audio_path | string | 참조 오디오 파일 경로 |
| prompt_lang | string | 참조 오디오의 언어 |
선택
| 파라미터 | 타입 | 기본값 | 범위 | 설명 |
| prompt_text | string | "" | - | 참조 오디오에 대한 프롬프트 텍스트 |
| aux_ref_audio_paths | array | [] | - | 다중 화자 톤 융합을 위한 추가 참조 오디오 경로 |
| top_k | int | 15 | 1-50 | Top-k 샘플링 |
| top_p | float | 1.0 | 0.1-1.0 | Top-p 샘플링 |
| temperature | float | 1.0 | 0.1-2.0 | 샘플링 온도 (랜덤성 제어) |
| text_split_method | string | "cut5" | - | 텍스트 분할 방법 |
| batch_size | int | 1 | 1-10 | 배치 크기 |
| batch_threshold | float | 0.75 | 0.1-1.0 | 배치 분할 임계값 |
| split_bucket | bool | true | - | 배치를 여러 버킷으로 분할 여부 |
| speed_factor | float | 1.0 | 0.5-2.0 | 음성 재생 속도 제어 |
| fragment_interval | float | 0.3 | 0.1-1.0 | 오디오 프래그먼트 간격 |
| seed | int | -1 | - | 재현 가능성을 위한 랜덤 시드 |
| parallel_infer | bool | true | - | 병렬 추론 사용 여부 |
| repetition_penalty | float | 1.35 | 1.0-2.0 | T2S 모델의 반복 패널티 |
| sample_steps | int | 32 | 8-100 | VITS 모델 V3의 샘플링 단계 수 |
| super_sampling | bool | false | - | VITS 모델 V3 사용 시 슈퍼 샘플링 여부 |
| streaming_mode | bool/int | false | 0,1,2,3 | 스트리밍 모드 설정 |
| overlap_length | int | 2 | 1-10 | 스트리밍 모드에서 의미 토큰 겹침 길이 |
| min_chunk_length | int | 16 | 8-50 | 스트리밍 모드에서 최소 청크 길이 |
| media_type | string | "wav" | wav, raw, ogg, aac | 출력 오디오 포맷 |
streaming_mode 옵션 상세
| 값 | 설명 |
| 0 / false | 비활성화 |
| 1 / true | 최고 품질, 가장 느린 응답 속도 |
| 2 | 중간 품질, 느린 응답 속도 |
| 3 | 낮은 품질, 빠른 응답 속도 |
추출된 음성파일을 다른곳에서 사용할거면 `false`를 사용한다.
스트리밍옵션을 켜고 추출된 음성파일을 저장하면 재생이 안된다.
ref_audio_path 옵션 상세
해당 옵션은 서버디렉토리 기준 샘플음성파일의 위치를 설정한다.
TTS

GET으로 보낼거면 위와같은 내용을 URL Query 형태로 보내면 된다.
Server
서버 재시작, 종료를 제어한다.
요청
| 엔드포인트 | HTTP Method |
| /control | GET(URL Query), POST(RequestBody) |
파라미터
| 파라미터 | 타입 | 설명 |
| command | string | 실행할 명령어(restart, exit) |
Model
1. GPT모델의 가중치파일 변경
요청
| 엔드포인트 | HTTP Method |
| /set_gpt_weights | GET |
파라미터
| 파라미터 | 타입 | 설명 |
| weights_path | string | GPT 모델 가중치 파일 경로 |
2. SoVITS모델의 가중치파일 변경
요청
| 엔드포인트 | HTTP Method |
| /set_sovits_weights | GET |
파라미터
| 파라미터 | 타입 | 설명 |
| weights_path | string | SoVITS 모델 가중치 파일 경로 |
3. 기본 샘플보이스 설정
요청
| 엔드포인트 | HTTP Method |
| /set_refer_audio | GET |
파라미터
| 파라미터 | 타입 | 설명 |
| refer_audio_path | string | 참조 오디오 파일 경로 |
호환
오디오 확장자
| 형식 | 확장자 | 설명 |
| WAV | .wav | 무손실 오디오 (기본값) |
| OGG | .ogg | 압축 오디오 |
| AAC | .aac | 고품질 압축 오디오 |
| RAW | .raw | 원시 PCM 데이터 |
언어
| 언어코드 | 언어 |
| zh | 중국어 |
| ko | 한국어 |
| en | 영어 |
| ja | 일본어 |
'Local AI' 카테고리의 다른 글
| [AI TOOL] Comfy-UI 설치부터 API 활용까지 (0) | 2026.02.03 |
|---|---|
| [LLM] NVIDIA DGX Spark vLLM 설치 (0) | 2026.02.03 |