Add experimental rocm support

Tested with rocm 6.3.1.

Known issues with this commit:
 * The generated docker image becomes quite big
 * Suppressed MIOPEN warnings, which might not be a good idea
 * No windows support, at least not tested
 * Incomplete documentation
 * Not thoroughly tested
This commit is contained in:
bgs4free 2025-01-18 13:51:47 +01:00
parent 7711c32fc2
commit b064066b9e
8 changed files with 2304 additions and 43 deletions

View file

@ -9,6 +9,9 @@ docker/
├── 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
```
@ -27,6 +30,12 @@ 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
@ -45,6 +54,16 @@ uv venv
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:
@ -65,6 +84,12 @@ 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

@ -39,6 +39,10 @@ dependencies = [
gpu = [
"torch==2.5.1+cu121",
]
rocm = [
"torch==2.5.1+rocm6.2",
"pytorch-triton-rocm==3.1.0",
]
cpu = [
"torch==2.5.1+cpu",
]
@ -56,6 +60,7 @@ conflicts = [
[
{ extra = "cpu" },
{ extra = "gpu" },
{ extra = "rocm" },
],
]
@ -63,6 +68,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]]
@ -75,6 +85,11 @@ name = "pytorch-cuda"
url = "https://download.pytorch.org/whl/cu121"
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"

130
uv.lock generated
View file

@ -1,14 +1,15 @@
version = 1
requires-python = ">=3.10"
resolution-markers = [
"python_full_version == '3.11.*'",
"python_full_version < '3.11'",
"python_full_version >= '3.13'",
"python_full_version == '3.11.*'",
"python_full_version == '3.12.*'",
"python_full_version >= '3.13'",
]
conflicts = [[
{ package = "kokoro-fastapi", extra = "cpu" },
{ package = "kokoro-fastapi", extra = "gpu" },
{ package = "kokoro-fastapi", extra = "rocm" },
]]
[[package]]
@ -34,10 +35,10 @@ name = "anyio"
version = "4.8.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "exceptiongroup", marker = "python_full_version < '3.11' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "exceptiongroup", marker = "python_full_version < '3.11' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
{ name = "idna" },
{ name = "sniffio" },
{ name = "typing-extensions", marker = "python_full_version < '3.13' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "typing-extensions", marker = "python_full_version < '3.13' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a3/73/199a98fc2dae33535d6b8e8e6ec01f8c1d76c9adb096c6b7d64823038cde/anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a", size = 181126 }
wheels = [
@ -234,7 +235,7 @@ name = "click"
version = "8.1.8"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "colorama", marker = "platform_system == 'Windows' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 }
wheels = [
@ -286,7 +287,7 @@ name = "colorlog"
version = "6.9.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d3/7a/359f4d5df2353f26172b3cc39ea32daa39af8de522205f512f458923e677/colorlog-6.9.0.tar.gz", hash = "sha256:bfba54a1b93b94f54e1f4fe48395725a3d92fd2a4af702f6bd70946bdc0c6ac2", size = 16624 }
wheels = [
@ -354,7 +355,7 @@ wheels = [
[package.optional-dependencies]
toml = [
{ name = "tomli", marker = "python_full_version <= '3.11' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "tomli", marker = "python_full_version <= '3.11' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
]
[[package]]
@ -473,7 +474,7 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiofiles" },
{ name = "anyio" },
{ name = "audioop-lts", marker = "python_full_version >= '3.13' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "audioop-lts", marker = "python_full_version >= '3.13' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
{ name = "fastapi" },
{ name = "ffmpy" },
{ name = "gradio-client" },
@ -490,15 +491,15 @@ dependencies = [
{ name = "pydub" },
{ name = "python-multipart" },
{ name = "pyyaml" },
{ name = "ruff", marker = "sys_platform != 'emscripten' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "ruff", marker = "sys_platform != 'emscripten' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
{ name = "safehttpx" },
{ name = "semantic-version" },
{ name = "starlette", marker = "sys_platform != 'emscripten' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "starlette", marker = "sys_platform != 'emscripten' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
{ name = "tomlkit" },
{ name = "typer", marker = "sys_platform != 'emscripten' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "typer", marker = "sys_platform != 'emscripten' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
{ name = "typing-extensions" },
{ name = "urllib3", marker = "sys_platform == 'emscripten' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "uvicorn", marker = "sys_platform != 'emscripten' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "urllib3", marker = "sys_platform == 'emscripten' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
{ name = "uvicorn", marker = "sys_platform != 'emscripten' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/7a/70/fb8611fabeb432d05946ef89d7acc6fde6c7e85ca9a05d39626b4cdf1a17/gradio-5.12.0-py3-none-any.whl", hash = "sha256:b4b79a2c537131a8a5e23046565e64da40156ac24f9082e563e734e89641e160", size = 57580407 },
@ -639,7 +640,7 @@ name = "humanfriendly"
version = "10.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pyreadline3", marker = "sys_platform == 'win32' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "pyreadline3", marker = "sys_platform == 'win32' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/cc/3f/2c29224acb2e2df4d2046e4c73ee2662023c58ff5b113c4c1adac0886c43/humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc", size = 360702 }
wheels = [
@ -817,6 +818,10 @@ cpu = [
gpu = [
{ name = "torch", version = "2.5.1+cu121", source = { registry = "https://download.pytorch.org/whl/cu121" } },
]
rocm = [
{ name = "pytorch-triton-rocm" },
{ name = "torch", version = "2.5.1+rocm6.2", source = { registry = "https://download.pytorch.org/whl/rocm6.2" } },
]
test = [
{ name = "gradio" },
{ name = "httpx" },
@ -824,7 +829,6 @@ test = [
{ name = "pytest" },
{ name = "pytest-asyncio" },
{ name = "pytest-cov" },
{ name = "ruff" },
]
[package.metadata]
@ -849,15 +853,16 @@ requires-dist = [
{ name = "pytest-asyncio", marker = "extra == 'test'", specifier = "==0.23.5" },
{ name = "pytest-cov", marker = "extra == 'test'", specifier = "==4.1.0" },
{ name = "python-dotenv", specifier = "==1.0.1" },
{ name = "pytorch-triton-rocm", marker = "extra == 'rocm'", specifier = "==3.1.0", index = "https://download.pytorch.org/whl/rocm6.2", conflict = { package = "kokoro-fastapi", extra = "rocm" } },
{ name = "regex", specifier = "==2024.11.6" },
{ name = "requests", specifier = "==2.32.3" },
{ name = "ruff", marker = "extra == 'test'", specifier = ">=0.2.2" },
{ name = "scipy", specifier = "==1.14.1" },
{ name = "soundfile", specifier = "==0.13.0" },
{ name = "sqlalchemy", specifier = "==2.0.27" },
{ name = "tiktoken", specifier = "==0.8.0" },
{ name = "torch", marker = "extra == 'cpu'", specifier = "==2.5.1+cpu", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "kokoro-fastapi", extra = "cpu" } },
{ name = "torch", marker = "extra == 'gpu'", specifier = "==2.5.1+cu121", index = "https://download.pytorch.org/whl/cu121", conflict = { package = "kokoro-fastapi", extra = "gpu" } },
{ name = "torch", marker = "extra == 'rocm'", specifier = "==2.5.1+rocm6.2", index = "https://download.pytorch.org/whl/rocm6.2", conflict = { package = "kokoro-fastapi", extra = "rocm" } },
{ name = "tqdm", specifier = "==4.67.1" },
{ name = "transformers", specifier = "==4.47.1" },
{ name = "uvicorn", specifier = "==0.34.0" },
@ -877,8 +882,8 @@ name = "loguru"
version = "0.7.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "win32-setctime", marker = "sys_platform == 'win32' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
{ name = "win32-setctime", marker = "sys_platform == 'win32' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559 }
wheels = [
@ -1637,12 +1642,12 @@ name = "pytest"
version = "8.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "exceptiongroup", marker = "python_full_version < '3.11' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
{ name = "exceptiongroup", marker = "python_full_version < '3.11' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
{ name = "iniconfig" },
{ name = "packaging" },
{ name = "pluggy" },
{ name = "tomli", marker = "python_full_version < '3.11' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "tomli", marker = "python_full_version < '3.11' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/50/fd/af2d835eed57448960c4e7e9ab76ee42f24bcdd521e967191bc26fa2dece/pytest-8.0.0.tar.gz", hash = "sha256:249b1b0864530ba251b7438274c4d251c58d868edaaec8762893ad4a0d71c36c", size = 1395242 }
wheels = [
@ -1704,6 +1709,19 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", size = 24546 },
]
[[package]]
name = "pytorch-triton-rocm"
version = "3.1.0"
source = { registry = "https://download.pytorch.org/whl/rocm6.2" }
dependencies = [
{ name = "filelock" },
]
wheels = [
{ url = "https://download.pytorch.org/whl/pytorch_triton_rocm-3.1.0-cp310-cp310-linux_x86_64.whl", hash = "sha256:328592189d7f7bbebdfdcb806c02970977f124d756e7915ff8ff8493f2d12802" },
{ url = "https://download.pytorch.org/whl/pytorch_triton_rocm-3.1.0-cp311-cp311-linux_x86_64.whl", hash = "sha256:4b0a563986aa591ecbbfd69d53f171447f64ba453cecaafd80d853b3f1047eca" },
{ url = "https://download.pytorch.org/whl/pytorch_triton_rocm-3.1.0-cp312-cp312-linux_x86_64.whl", hash = "sha256:3b56b87886d03dcf3aeb8f78f372f5da60b29ffdffcba5cd767b4bfdec47175b" },
]
[[package]]
name = "pytz"
version = "2024.2"
@ -1762,7 +1780,7 @@ name = "rdflib"
version = "7.1.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "isodate", marker = "python_full_version < '3.11' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "isodate", marker = "python_full_version < '3.11' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
{ name = "pyparsing" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d4/0b/b6ba1bd99f028df962a55c9a2a28c9248f046fac4a82b565c8e2c87fc9ce/rdflib-7.1.2.tar.gz", hash = "sha256:4fc8f6d50b199dc38fbc5256370f038c1cedca6102ccbde4e37c0fd2b7f36e65", size = 505897 }
@ -1883,7 +1901,7 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "markdown-it-py" },
{ name = "pygments" },
{ name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149 }
wheels = [
@ -2160,7 +2178,7 @@ name = "sqlalchemy"
version = "2.0.27"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
{ name = "typing-extensions" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b9/fc/327f0072d1f5231d61c715ad52cb7819ec60f0ac80dc1e507bc338919caa/SQLAlchemy-2.0.27.tar.gz", hash = "sha256:86a6ed69a71fe6b88bf9331594fa390a2adda4a49b5c06f98e47bf0d392534f8", size = 9527460 }
@ -2339,10 +2357,10 @@ name = "torch"
version = "2.5.1+cpu"
source = { registry = "https://download.pytorch.org/whl/cpu" }
resolution-markers = [
"python_full_version == '3.11.*'",
"python_full_version < '3.11'",
"python_full_version >= '3.13'",
"python_full_version == '3.11.*'",
"python_full_version == '3.12.*'",
"python_full_version >= '3.13'",
]
dependencies = [
{ name = "filelock" },
@ -2368,30 +2386,30 @@ name = "torch"
version = "2.5.1+cu121"
source = { registry = "https://download.pytorch.org/whl/cu121" }
resolution-markers = [
"python_full_version == '3.11.*'",
"python_full_version < '3.11'",
"python_full_version >= '3.13'",
"python_full_version == '3.11.*'",
"python_full_version == '3.12.*'",
"python_full_version >= '3.13'",
]
dependencies = [
{ name = "filelock" },
{ name = "fsspec" },
{ name = "jinja2" },
{ name = "networkx" },
{ name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and platform_system == 'Linux'" },
{ name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and platform_system == 'Linux'" },
{ name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and platform_system == 'Linux'" },
{ name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and platform_system == 'Linux'" },
{ name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and platform_system == 'Linux'" },
{ name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and platform_system == 'Linux'" },
{ name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and platform_system == 'Linux'" },
{ name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and platform_system == 'Linux'" },
{ name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and platform_system == 'Linux'" },
{ name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and platform_system == 'Linux'" },
{ name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and platform_system == 'Linux'" },
{ name = "setuptools", marker = "python_full_version >= '3.12'" },
{ name = "sympy" },
{ name = "triton", marker = "python_full_version < '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "triton", marker = "python_full_version < '3.13' and platform_machine == 'x86_64' and platform_system == 'Linux'" },
{ name = "typing-extensions" },
]
wheels = [
@ -2404,12 +2422,38 @@ wheels = [
{ url = "https://download.pytorch.org/whl/cu121/torch-2.5.1%2Bcu121-cp313-cp313-linux_x86_64.whl", hash = "sha256:1bfe18b79b0ff9be9383257a66c3f84621ce5f384f02c0a7c79503583d6ffd4b" },
]
[[package]]
name = "torch"
version = "2.5.1+rocm6.2"
source = { registry = "https://download.pytorch.org/whl/rocm6.2" }
resolution-markers = [
"python_full_version < '3.11'",
"python_full_version == '3.11.*'",
"python_full_version == '3.12.*'",
"python_full_version >= '3.13'",
]
dependencies = [
{ name = "filelock" },
{ name = "fsspec" },
{ name = "jinja2" },
{ name = "networkx" },
{ name = "pytorch-triton-rocm", marker = "python_full_version < '3.13' and platform_machine == 'x86_64' and platform_system == 'Linux'" },
{ name = "setuptools", marker = "python_full_version >= '3.12'" },
{ name = "sympy" },
{ name = "typing-extensions" },
]
wheels = [
{ url = "https://download.pytorch.org/whl/rocm6.2/torch-2.5.1%2Brocm6.2-cp310-cp310-linux_x86_64.whl", hash = "sha256:c76e18da9e49b5d6f3cc607bc9d41a905425ab0bb2a75c9d2ba06989ccd9a300" },
{ url = "https://download.pytorch.org/whl/rocm6.2/torch-2.5.1%2Brocm6.2-cp311-cp311-linux_x86_64.whl", hash = "sha256:9c4c4d985923d0e31aab4108c56a1586ca599ab26abc919833b890f7f40dcc01" },
{ url = "https://download.pytorch.org/whl/rocm6.2/torch-2.5.1%2Brocm6.2-cp312-cp312-linux_x86_64.whl", hash = "sha256:80c7af931acb3941530a717aaa1d142985ae7f29b7660a72e47f1a890fc191fb" },
]
[[package]]
name = "tqdm"
version = "4.67.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "colorama", marker = "platform_system == 'Windows' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 }
wheels = [
@ -2442,7 +2486,7 @@ name = "triton"
version = "3.1.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "filelock", marker = "python_full_version < '3.13'" },
{ name = "filelock" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/98/29/69aa56dc0b2eb2602b553881e34243475ea2afd9699be042316842788ff5/triton-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b0dd10a925263abbe9fa37dcde67a5e9b2383fc269fdf59f5657cac38c5d1d8", size = 209460013 },
@ -2508,7 +2552,7 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "click" },
{ name = "h11" },
{ name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu')" },
{ name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-gpu') or (extra == 'extra-14-kokoro-fastapi-cpu' and extra == 'extra-14-kokoro-fastapi-rocm') or (extra == 'extra-14-kokoro-fastapi-gpu' and extra == 'extra-14-kokoro-fastapi-rocm')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/4b/4d/938bd85e5bf2edeec766267a5015ad969730bb91e31b44021dfe8b22df6c/uvicorn-0.34.0.tar.gz", hash = "sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9", size = 76568 }
wheels = [