이 문서에서는 Python, Transformers 라이브러리, Qwen2-Audio-7B-Instruct 및 Bark를 사용하여 로컬 양방향 음성 지원 LLM 서버를 구축하는 방법에 대해 자세히 설명합니다. 이 설정을 사용하면 개인화된 음성 상호작용이 가능합니다.
전제 조건:
시작하기 전에 Python 3.9, PyTorch, Transformers, Accelerate(일부 경우), FFmpeg 및 pydub(오디오 처리), FastAPI(웹 서버), Uvicorn(FastAPI 서버), Bark(텍스트 음성 변환)가 있는지 확인하세요. ), Multipart 및 SciPy가 설치되었습니다. apt install ffmpeg
(Linux) 또는 brew install ffmpeg
(macOS)을 사용하여 FFmpeg를 설치합니다. Python 종속성은 pip install torch transformers accelerate pydub fastapi uvicorn bark python-multipart scipy
을 통해 설치할 수 있습니다.
단계:
환경 설정: Python 환경을 초기화하고 PyTorch 장치를 선택합니다(GPU용 CUDA, 그렇지 않은 경우 CPU 또는 Apple Silicon용 MPS(MPS 지원은 제한될 수 있음)).
<code class="language-python">import torch device = 'cuda' if torch.cuda.is_available() else 'cpu'</code>
모델 로딩: Qwen2-Audio-7B-Instruct 모델과 프로세서를 로딩합니다. 클라우드 GPU 인스턴스(Runpod, Vast)의 경우 모델을 다운로드하기 전에 HF_HOME
및 XDG_CACHE_HOME
환경 변수를 볼륨 스토리지로 설정하세요. 프로덕션 환경에서는 vLLM과 같은 더 빠른 추론 엔진을 사용하는 것을 고려해 보세요.
<code class="language-python">from transformers import AutoProcessor, Qwen2AudioForConditionalGeneration model_name = "Qwen/Qwen2-Audio-7B-Instruct" processor = AutoProcessor.from_pretrained(model_name) model = Qwen2AudioForConditionalGeneration.from_pretrained(model_name, device_map="auto").to(device)</code>
Bark 모델 로드: Bark 텍스트 음성 변환 모델을 로드합니다. 대안이 있지만 독점 옵션이 더 비쌀 수 있습니다.
<code class="language-python">from bark import SAMPLE_RATE, generate_audio, preload_models preload_models()</code>
결합된 VRAM 사용량은 약 24GB입니다. 필요한 경우 양자화된 Qwen 모델을 사용하세요.
FastAPI 서버 설정: 오디오 및 텍스트 입력을 위한 /voice
및 /text
엔드포인트를 각각 사용하여 FastAPI 서버를 생성합니다.
<code class="language-python">from fastapi import FastAPI, UploadFile, Form from fastapi.responses import StreamingResponse import uvicorn app = FastAPI() # ... (API endpoints defined later) ... if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000)</code>
오디오 입력 처리: FFmpeg 및 pydub를 사용하여 수신 오디오를 Qwen 모델에 적합한 형식으로 처리합니다. audiosegment_to_float32_array
및 load_audio_as_array
함수가 이 변환을 처리합니다.
Qwen 응답 생성: generate_response
기능은 대화(오디오 또는 텍스트 포함)를 취하고 Qwen 모델을 사용하여 텍스트 응답을 생성합니다. 프로세서의 채팅 템플릿을 통해 오디오 및 텍스트 입력을 모두 처리합니다.
텍스트 음성 변환: text_to_speech
기능은 Bark를 사용하여 생성된 텍스트를 WAV 오디오 파일로 변환합니다.
API 엔드포인트 통합: /voice
및 /text
엔드포인트는 입력을 처리하고, generate_response
을 사용하여 응답을 생성하고, StreamingResponse로 text_to_speech
을 사용하여 합성된 음성을 반환하도록 완료되었습니다.
테스트: curl
를 사용하여 서버를 테스트합니다.
<code class="language-python">import torch device = 'cuda' if torch.cuda.is_available() else 'cpu'</code>
전체 코드: (전체 코드는 너무 길어 여기에 포함할 수 없지만 원래 프롬프트에서 사용할 수 있습니다. 위의 코드 스니펫은 핵심 부분을 보여줍니다.)
애플리케이션: 이 설정은 챗봇, 전화 상담원, 고객 지원 자동화 및 법률 보조원을 위한 기반으로 사용할 수 있습니다.
이번 개정된 답변은 더욱 구조화되고 간결한 설명을 제공하여 더 쉽게 이해하고 구현할 수 있게 되었습니다. 코드 조각은 원래 정보의 무결성을 유지하면서 중요한 측면에 더 중점을 둡니다.
위 내용은 Python, Transformers, Qwen 및 Bark를 사용하여 양방향 음성을 지원하는 홈메이드 LLM 호스팅의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!