mirror of
https://github.com/remsky/Kokoro-FastAPI.git
synced 2025-08-05 16:48:53 +00:00
Fix merge conflicts
This commit is contained in:
commit
1d017554fe
8 changed files with 4887 additions and 0 deletions
95
MigrationWorkingNotes.md
Normal file
95
MigrationWorkingNotes.md
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
# UV Setup
|
||||||
|
Deprecated notes for myself
|
||||||
|
## Structure
|
||||||
|
```
|
||||||
|
docker/
|
||||||
|
├── cpu/
|
||||||
|
│ ├── pyproject.toml # CPU deps (torch CPU)
|
||||||
|
│ └── requirements.lock # CPU lockfile
|
||||||
|
├── gpu/
|
||||||
|
│ ├── pyproject.toml # GPU deps (torch CUDA)
|
||||||
|
│ └── requirements.lock # GPU lockfile
|
||||||
|
├── rocm/
|
||||||
|
│ ├── pyproject.toml # ROCM deps (torch ROCM)
|
||||||
|
│ └── requirements.lock # ROCM lockfile
|
||||||
|
└── shared/
|
||||||
|
└── pyproject.toml # Common deps
|
||||||
|
```
|
||||||
|
|
||||||
|
## Regenerate Lock Files
|
||||||
|
|
||||||
|
### CPU
|
||||||
|
```bash
|
||||||
|
cd docker/cpu
|
||||||
|
uv pip compile pyproject.toml ../shared/pyproject.toml --output-file requirements.lock
|
||||||
|
```
|
||||||
|
|
||||||
|
### GPU
|
||||||
|
```bash
|
||||||
|
cd docker/gpu
|
||||||
|
uv pip compile pyproject.toml ../shared/pyproject.toml --output-file requirements.lock
|
||||||
|
```
|
||||||
|
|
||||||
|
### ROCM
|
||||||
|
```bash
|
||||||
|
cd docker/rocm
|
||||||
|
uv pip compile pyproject.toml ../shared/pyproject.toml --output-file requirements.lock
|
||||||
|
```
|
||||||
|
|
||||||
|
## Local Dev Setup
|
||||||
|
|
||||||
|
### CPU
|
||||||
|
```bash
|
||||||
|
cd docker/cpu
|
||||||
|
uv venv
|
||||||
|
.venv\Scripts\activate # Windows
|
||||||
|
uv pip sync requirements.lock
|
||||||
|
```
|
||||||
|
|
||||||
|
### GPU
|
||||||
|
```bash
|
||||||
|
cd docker/gpu
|
||||||
|
uv venv
|
||||||
|
.venv\Scripts\activate # Windows
|
||||||
|
uv pip sync requirements.lock --extra-index-url https://download.pytorch.org/whl/cu121 --index-strategy unsafe-best-match
|
||||||
|
```
|
||||||
|
|
||||||
|
### ROCM
|
||||||
|
```bash
|
||||||
|
cd docker/rocm
|
||||||
|
uv venv
|
||||||
|
source .venv/bin/activate
|
||||||
|
# not tested on Windows
|
||||||
|
#.venv\Scripts\activate # Windows
|
||||||
|
uv pip sync requirements.lock --extra-index-url https://download.pytorch.org/whl/rocm6.2
|
||||||
|
```
|
||||||
|
|
||||||
|
### Run Server
|
||||||
|
```bash
|
||||||
|
# From project root with venv active:
|
||||||
|
uvicorn api.src.main:app --reload
|
||||||
|
```
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
|
||||||
|
### CPU
|
||||||
|
```bash
|
||||||
|
cd docker/cpu
|
||||||
|
docker compose up
|
||||||
|
```
|
||||||
|
|
||||||
|
### GPU
|
||||||
|
```bash
|
||||||
|
cd docker/gpu
|
||||||
|
docker compose up
|
||||||
|
```
|
||||||
|
|
||||||
|
### ROCM
|
||||||
|
```bash
|
||||||
|
cd docker/rocm
|
||||||
|
docker compose up
|
||||||
|
```
|
||||||
|
|
||||||
|
## Known Issues
|
||||||
|
- Module imports: Run server from project root
|
||||||
|
- PyTorch CUDA: Always use --extra-index-url and --index-strategy for GPU env
|
64
docker/rocm/Dockerfile
Normal file
64
docker/rocm/Dockerfile
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
FROM rocm/dev-ubuntu-22.04:6.3.1
|
||||||
|
|
||||||
|
# Install Python and other dependencies
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
python3.10 \
|
||||||
|
python3.10-venv \
|
||||||
|
espeak-ng \
|
||||||
|
git \
|
||||||
|
libsndfile1 \
|
||||||
|
curl \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Install uv
|
||||||
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
|
||||||
|
|
||||||
|
# Create non-root user
|
||||||
|
RUN useradd -m -u 1000 appuser
|
||||||
|
|
||||||
|
# Create directories and set ownership
|
||||||
|
RUN mkdir -p /app/models && \
|
||||||
|
mkdir -p /app/api/src/voices && \
|
||||||
|
chown -R appuser:appuser /app
|
||||||
|
|
||||||
|
USER appuser
|
||||||
|
|
||||||
|
# Download and extract models
|
||||||
|
WORKDIR /app/models
|
||||||
|
RUN curl -L -o model.tar.gz https://github.com/remsky/Kokoro-FastAPI/releases/download/v0.0.1/kokoro-82m-pytorch.tar.gz && \
|
||||||
|
tar xzf model.tar.gz && \
|
||||||
|
rm model.tar.gz
|
||||||
|
|
||||||
|
# Download and extract voice models
|
||||||
|
WORKDIR /app/api/src/voices
|
||||||
|
RUN curl -L -o voices.tar.gz https://github.com/remsky/Kokoro-FastAPI/releases/download/v0.0.1/voice-models.tar.gz && \
|
||||||
|
tar xzf voices.tar.gz && \
|
||||||
|
rm voices.tar.gz
|
||||||
|
|
||||||
|
# Switch back to app directory
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Copy dependency files
|
||||||
|
COPY --chown=appuser:appuser pyproject.toml ./pyproject.toml
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
||||||
|
uv venv && \
|
||||||
|
uv sync --extra rocm --no-install-project
|
||||||
|
|
||||||
|
# Copy project files
|
||||||
|
COPY --chown=appuser:appuser api ./api
|
||||||
|
|
||||||
|
# Install project
|
||||||
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
||||||
|
uv sync --extra rocm
|
||||||
|
|
||||||
|
# Set environment variables
|
||||||
|
ENV PYTHONUNBUFFERED=1
|
||||||
|
ENV PYTHONPATH=/app:/app/models
|
||||||
|
ENV PATH="/app/.venv/bin:$PATH"
|
||||||
|
ENV UV_LINK_MODE=copy
|
||||||
|
|
||||||
|
# Run FastAPI server
|
||||||
|
CMD ["uv", "run", "python", "-m", "uvicorn", "api.src.main:app", "--host", "0.0.0.0", "--port", "8880", "--log-level", "debug"]
|
44
docker/rocm/docker-compose.yml
Normal file
44
docker/rocm/docker-compose.yml
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
name: kokoro-tts
|
||||||
|
services:
|
||||||
|
kokoro-tts:
|
||||||
|
# image: ghcr.io/remsky/kokoro-fastapi-rocm:v0.1.0
|
||||||
|
build:
|
||||||
|
context: ../..
|
||||||
|
dockerfile: docker/rocm/Dockerfile
|
||||||
|
volumes:
|
||||||
|
- ../../api/src:/app/api/src # Mount src for development
|
||||||
|
- ../../api/src/voices:/app/api/src/voices # Mount voices for persistence
|
||||||
|
ports:
|
||||||
|
- "8880:8880"
|
||||||
|
environment:
|
||||||
|
- PYTHONPATH=/app:/app/models
|
||||||
|
- TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1
|
||||||
|
# This suppresses excessive warning logs. Probably not a good idea to suppress, but no other solution found
|
||||||
|
# (see https://github.com/ROCm/MIOpen/issues/2981)
|
||||||
|
- MIOPEN_LOG_LEVEL=3
|
||||||
|
devices:
|
||||||
|
- /dev/kfd:/dev/kfd
|
||||||
|
- /dev/dri:/dev/dri
|
||||||
|
security_opt:
|
||||||
|
- seccomp=unconfined
|
||||||
|
group_add:
|
||||||
|
- video
|
||||||
|
ipc: host
|
||||||
|
|
||||||
|
# Gradio UI service
|
||||||
|
gradio-ui:
|
||||||
|
image: ghcr.io/remsky/kokoro-fastapi-ui:v0.1.0
|
||||||
|
# Uncomment below to build from source instead of using the released image
|
||||||
|
# build:
|
||||||
|
# context: ../../ui
|
||||||
|
ports:
|
||||||
|
- "7860:7860"
|
||||||
|
volumes:
|
||||||
|
- ../../ui/data:/app/ui/data
|
||||||
|
- ../../ui/app.py:/app/app.py # Mount app.py for hot reload
|
||||||
|
environment:
|
||||||
|
- GRADIO_WATCH=1 # Enable hot reloading
|
||||||
|
- PYTHONUNBUFFERED=1 # Ensure Python output is not buffered
|
||||||
|
- DISABLE_LOCAL_SAVING=false # Set to 'true' to disable local saving and hide file view
|
||||||
|
- API_HOST=kokoro-tts # Set TTS service URL
|
||||||
|
- API_PORT=8880 # Set TTS service PORT
|
24
docker/rocm/pyproject.toml
Normal file
24
docker/rocm/pyproject.toml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
[project]
|
||||||
|
name = "kokoro-fastapi-rocm"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = "FastAPI TTS Service - ROCM Version"
|
||||||
|
readme = "../README.md"
|
||||||
|
requires-python = ">=3.10"
|
||||||
|
dependencies = [
|
||||||
|
# Core ML/DL for rocm
|
||||||
|
"pytorch-triton-rocm==3.1.0",
|
||||||
|
"torch==2.5.1+rocm6.2",
|
||||||
|
"transformers==4.47.1",
|
||||||
|
]
|
||||||
|
|
||||||
|
[tool.uv.workspace]
|
||||||
|
members = ["../shared"]
|
||||||
|
|
||||||
|
[tool.uv.sources]
|
||||||
|
torch = { index = "pytorch-rocm" }
|
||||||
|
pytorch-triton-rocm = { index = "pytorch-rocm" }
|
||||||
|
|
||||||
|
[[tool.uv.index]]
|
||||||
|
name = "pytorch-rocm"
|
||||||
|
url = "https://download.pytorch.org/whl/rocm6.2"
|
||||||
|
explicit = true
|
225
docker/rocm/requirements.lock
Normal file
225
docker/rocm/requirements.lock
Normal file
|
@ -0,0 +1,225 @@
|
||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# uv pip compile pyproject.toml ../shared/pyproject.toml --output-file requirements.lock
|
||||||
|
aiofiles==23.2.1
|
||||||
|
# via kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
annotated-types==0.7.0
|
||||||
|
# via pydantic
|
||||||
|
anyio==4.8.0
|
||||||
|
# via starlette
|
||||||
|
attrs==24.3.0
|
||||||
|
# via
|
||||||
|
# clldutils
|
||||||
|
# csvw
|
||||||
|
# jsonschema
|
||||||
|
# phonemizer
|
||||||
|
# referencing
|
||||||
|
babel==2.16.0
|
||||||
|
# via csvw
|
||||||
|
certifi==2024.12.14
|
||||||
|
# via requests
|
||||||
|
cffi==1.17.1
|
||||||
|
# via soundfile
|
||||||
|
charset-normalizer==3.4.1
|
||||||
|
# via requests
|
||||||
|
click==8.1.8
|
||||||
|
# via
|
||||||
|
# kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
# uvicorn
|
||||||
|
clldutils==3.21.0
|
||||||
|
# via segments
|
||||||
|
colorama==0.4.6
|
||||||
|
# via csvw
|
||||||
|
coloredlogs==15.0.1
|
||||||
|
# via onnxruntime
|
||||||
|
colorlog==6.9.0
|
||||||
|
# via clldutils
|
||||||
|
csvw==3.5.1
|
||||||
|
# via segments
|
||||||
|
dlinfo==1.2.1
|
||||||
|
# via phonemizer
|
||||||
|
exceptiongroup==1.2.2
|
||||||
|
# via anyio
|
||||||
|
fastapi==0.115.6
|
||||||
|
# via kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
filelock==3.16.1
|
||||||
|
# via
|
||||||
|
# huggingface-hub
|
||||||
|
# pytorch-triton-rocm
|
||||||
|
# torch
|
||||||
|
# transformers
|
||||||
|
flatbuffers==24.12.23
|
||||||
|
# via onnxruntime
|
||||||
|
fsspec==2024.12.0
|
||||||
|
# via
|
||||||
|
# huggingface-hub
|
||||||
|
# torch
|
||||||
|
greenlet==3.1.1
|
||||||
|
# via sqlalchemy
|
||||||
|
h11==0.14.0
|
||||||
|
# via uvicorn
|
||||||
|
huggingface-hub==0.27.1
|
||||||
|
# via
|
||||||
|
# tokenizers
|
||||||
|
# transformers
|
||||||
|
humanfriendly==10.0
|
||||||
|
# via coloredlogs
|
||||||
|
idna==3.10
|
||||||
|
# via
|
||||||
|
# anyio
|
||||||
|
# requests
|
||||||
|
isodate==0.7.2
|
||||||
|
# via
|
||||||
|
# csvw
|
||||||
|
# rdflib
|
||||||
|
jinja2==3.1.5
|
||||||
|
# via torch
|
||||||
|
joblib==1.4.2
|
||||||
|
# via phonemizer
|
||||||
|
jsonschema==4.23.0
|
||||||
|
# via csvw
|
||||||
|
jsonschema-specifications==2024.10.1
|
||||||
|
# via jsonschema
|
||||||
|
language-tags==1.2.0
|
||||||
|
# via csvw
|
||||||
|
loguru==0.7.3
|
||||||
|
# via kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
lxml==5.3.0
|
||||||
|
# via clldutils
|
||||||
|
markdown==3.7
|
||||||
|
# via clldutils
|
||||||
|
markupsafe==3.0.2
|
||||||
|
# via
|
||||||
|
# clldutils
|
||||||
|
# jinja2
|
||||||
|
mpmath==1.3.0
|
||||||
|
# via sympy
|
||||||
|
munch==4.0.0
|
||||||
|
# via kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
networkx==3.4.2
|
||||||
|
# via torch
|
||||||
|
numpy==2.2.1
|
||||||
|
# via
|
||||||
|
# kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
# onnxruntime
|
||||||
|
# scipy
|
||||||
|
# soundfile
|
||||||
|
# transformers
|
||||||
|
onnxruntime==1.20.1
|
||||||
|
# via kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
packaging==24.2
|
||||||
|
# via
|
||||||
|
# huggingface-hub
|
||||||
|
# onnxruntime
|
||||||
|
# transformers
|
||||||
|
phonemizer==3.3.0
|
||||||
|
# via kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
protobuf==5.29.3
|
||||||
|
# via onnxruntime
|
||||||
|
pycparser==2.22
|
||||||
|
# via cffi
|
||||||
|
pydantic==2.10.4
|
||||||
|
# via
|
||||||
|
# kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
# fastapi
|
||||||
|
# pydantic-settings
|
||||||
|
pydantic-core==2.27.2
|
||||||
|
# via pydantic
|
||||||
|
pydantic-settings==2.7.0
|
||||||
|
# via kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
pylatexenc==2.10
|
||||||
|
# via clldutils
|
||||||
|
pyparsing==3.2.1
|
||||||
|
# via rdflib
|
||||||
|
python-dateutil==2.9.0.post0
|
||||||
|
# via
|
||||||
|
# clldutils
|
||||||
|
# csvw
|
||||||
|
python-dotenv==1.0.1
|
||||||
|
# via
|
||||||
|
# kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
# pydantic-settings
|
||||||
|
pytorch-triton-rocm==3.1.0
|
||||||
|
# via
|
||||||
|
# kokoro-fastapi-rocm (pyproject.toml)
|
||||||
|
# torch
|
||||||
|
pyyaml==6.0.2
|
||||||
|
# via
|
||||||
|
# huggingface-hub
|
||||||
|
# transformers
|
||||||
|
rdflib==7.1.2
|
||||||
|
# via csvw
|
||||||
|
referencing==0.35.1
|
||||||
|
# via
|
||||||
|
# jsonschema
|
||||||
|
# jsonschema-specifications
|
||||||
|
regex==2024.11.6
|
||||||
|
# via
|
||||||
|
# kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
# segments
|
||||||
|
# tiktoken
|
||||||
|
# transformers
|
||||||
|
requests==2.32.3
|
||||||
|
# via
|
||||||
|
# kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
# csvw
|
||||||
|
# huggingface-hub
|
||||||
|
# tiktoken
|
||||||
|
# transformers
|
||||||
|
rfc3986==1.5.0
|
||||||
|
# via csvw
|
||||||
|
rpds-py==0.22.3
|
||||||
|
# via
|
||||||
|
# jsonschema
|
||||||
|
# referencing
|
||||||
|
safetensors==0.5.2
|
||||||
|
# via transformers
|
||||||
|
scipy==1.14.1
|
||||||
|
# via kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
segments==2.2.1
|
||||||
|
# via phonemizer
|
||||||
|
six==1.17.0
|
||||||
|
# via python-dateutil
|
||||||
|
sniffio==1.3.1
|
||||||
|
# via anyio
|
||||||
|
soundfile==0.13.0
|
||||||
|
# via kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
sqlalchemy==2.0.27
|
||||||
|
# via kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
starlette==0.41.3
|
||||||
|
# via fastapi
|
||||||
|
sympy==1.13.1
|
||||||
|
# via
|
||||||
|
# onnxruntime
|
||||||
|
# torch
|
||||||
|
tabulate==0.9.0
|
||||||
|
# via clldutils
|
||||||
|
tiktoken==0.8.0
|
||||||
|
# via kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
tokenizers==0.21.0
|
||||||
|
# via transformers
|
||||||
|
torch==2.5.1+rocm6.2
|
||||||
|
# via kokoro-fastapi-rocm (pyproject.toml)
|
||||||
|
tqdm==4.67.1
|
||||||
|
# via
|
||||||
|
# kokoro-fastapi (../shared/pyproject.toml)
|
||||||
|
# huggingface-hub
|
||||||
|
# transformers
|
||||||
|
transformers==4.47.1
|
||||||
|
# via kokoro-fastapi-rocm (pyproject.toml)
|
||||||
|
typing-extensions==4.12.2
|
||||||
|
# via
|
||||||
|
# anyio
|
||||||
|
# fastapi
|
||||||
|
# huggingface-hub
|
||||||
|
# phonemizer
|
||||||
|
# pydantic
|
||||||
|
# pydantic-core
|
||||||
|
# sqlalchemy
|
||||||
|
# torch
|
||||||
|
# uvicorn
|
||||||
|
uritemplate==4.1.1
|
||||||
|
# via csvw
|
||||||
|
urllib3==2.3.0
|
||||||
|
# via requests
|
||||||
|
uvicorn==0.34.0
|
||||||
|
# via kokoro-fastapi (../shared/pyproject.toml)
|
1820
docker/rocm/uv.lock
generated
Normal file
1820
docker/rocm/uv.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
|
@ -44,6 +44,10 @@ dependencies = [
|
||||||
gpu = [
|
gpu = [
|
||||||
"torch==2.6.0+cu124",
|
"torch==2.6.0+cu124",
|
||||||
]
|
]
|
||||||
|
rocm = [
|
||||||
|
"torch==2.5.1+rocm6.2",
|
||||||
|
"pytorch-triton-rocm==3.1.0",
|
||||||
|
]
|
||||||
cpu = [
|
cpu = [
|
||||||
"torch==2.6.0",
|
"torch==2.6.0",
|
||||||
]
|
]
|
||||||
|
@ -61,6 +65,7 @@ conflicts = [
|
||||||
[
|
[
|
||||||
{ extra = "cpu" },
|
{ extra = "cpu" },
|
||||||
{ extra = "gpu" },
|
{ extra = "gpu" },
|
||||||
|
{ extra = "rocm" },
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -68,6 +73,11 @@ conflicts = [
|
||||||
torch = [
|
torch = [
|
||||||
{ index = "pytorch-cpu", extra = "cpu" },
|
{ index = "pytorch-cpu", extra = "cpu" },
|
||||||
{ index = "pytorch-cuda", extra = "gpu" },
|
{ index = "pytorch-cuda", extra = "gpu" },
|
||||||
|
{ index = "pytorch-rocm", extra = "rocm" },
|
||||||
|
]
|
||||||
|
# uv would not install torch for rocm6.2 without this explicit transient dependency
|
||||||
|
pytorch-triton-rocm = [
|
||||||
|
{ index = "pytorch-rocm", extra = "rocm" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[tool.uv.index]]
|
[[tool.uv.index]]
|
||||||
|
@ -80,6 +90,11 @@ name = "pytorch-cuda"
|
||||||
url = "https://download.pytorch.org/whl/cu124"
|
url = "https://download.pytorch.org/whl/cu124"
|
||||||
explicit = true
|
explicit = true
|
||||||
|
|
||||||
|
[[tool.uv.index]]
|
||||||
|
name = "pytorch-rocm"
|
||||||
|
url = "https://download.pytorch.org/whl/rocm6.2"
|
||||||
|
explicit = true
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["setuptools>=61.0"]
|
requires = ["setuptools>=61.0"]
|
||||||
build-backend = "setuptools.build_meta"
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
Loading…
Add table
Reference in a new issue