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 = [
|
||||
"torch==2.6.0+cu124",
|
||||
]
|
||||
rocm = [
|
||||
"torch==2.5.1+rocm6.2",
|
||||
"pytorch-triton-rocm==3.1.0",
|
||||
]
|
||||
cpu = [
|
||||
"torch==2.6.0",
|
||||
]
|
||||
|
@ -61,6 +65,7 @@ conflicts = [
|
|||
[
|
||||
{ extra = "cpu" },
|
||||
{ extra = "gpu" },
|
||||
{ extra = "rocm" },
|
||||
],
|
||||
]
|
||||
|
||||
|
@ -68,6 +73,11 @@ conflicts = [
|
|||
torch = [
|
||||
{ index = "pytorch-cpu", extra = "cpu" },
|
||||
{ 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]]
|
||||
|
@ -80,6 +90,11 @@ name = "pytorch-cuda"
|
|||
url = "https://download.pytorch.org/whl/cu124"
|
||||
explicit = true
|
||||
|
||||
[[tool.uv.index]]
|
||||
name = "pytorch-rocm"
|
||||
url = "https://download.pytorch.org/whl/rocm6.2"
|
||||
explicit = true
|
||||
|
||||
[build-system]
|
||||
requires = ["setuptools>=61.0"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
|
|
Loading…
Add table
Reference in a new issue