Fix merge conflicts

This commit is contained in:
Kishor Prins 2025-03-19 19:28:05 -07:00
commit 1d017554fe
8 changed files with 4887 additions and 0 deletions

95
MigrationWorkingNotes.md Normal file
View 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
View 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"]

View 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

View 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

View 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

File diff suppressed because it is too large Load diff

View file

@ -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"

2600
uv.lock generated Normal file

File diff suppressed because it is too large Load diff