| #!/usr/bin/env bash |
| set -euo pipefail |
|
|
| release_root="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| python_bin="${PYTHON_BIN:-python3.12}" |
| venv_dir="${release_root}/.venv" |
| build_dir="${release_root}/.build" |
| scales_revision="a04c1b63b1a7a670840fb3e97a82c0dbe2a35ded" |
| scales_dir="${build_dir}/fish-scales-ops-${scales_revision}" |
| cuda_root="${CUDA_HOME:-/usr/local/cuda}" |
|
|
| for command_name in "${python_bin}" git; do |
| if ! command -v "${command_name}" >/dev/null 2>&1; then |
| echo "Missing required command: ${command_name}" >&2 |
| exit 1 |
| fi |
| done |
| if [[ ! -x "${cuda_root}/bin/nvcc" ]]; then |
| echo "CUDA compiler not found at ${cuda_root}/bin/nvcc" >&2 |
| exit 1 |
| fi |
|
|
| mkdir -p "${build_dir}" "${release_root}/runtime-data/torch-extensions" |
| if [[ ! -x "${venv_dir}/bin/python" ]]; then |
| "${python_bin}" -m venv "${venv_dir}" |
| fi |
| "${venv_dir}/bin/python" -m pip install --upgrade "pip>=25" "uv==0.12.3" |
| uv_bin="${venv_dir}/bin/uv" |
|
|
| "${uv_bin}" pip install --python "${venv_dir}/bin/python" \ |
| "setuptools>=75" wheel ninja packaging \ |
| "torch==2.11.0" "torchaudio==2.11.0" \ |
| --torch-backend=cu130 |
| "${uv_bin}" pip install --python "${venv_dir}/bin/python" \ |
| --overrides "${release_root}/runtime/torch-overrides.txt" \ |
| --torch-backend=cu130 \ |
| "${release_root}/vendor/fish-speech" \ |
| -r "${release_root}/requirements.txt" |
|
|
| if [[ ! -d "${scales_dir}/.git" ]]; then |
| if [[ -e "${scales_dir}" ]]; then |
| echo "${scales_dir} exists but is not the expected Git checkout; move it aside and retry." >&2 |
| exit 1 |
| fi |
| git init "${scales_dir}" |
| git -C "${scales_dir}" remote add origin https://github.com/fishaudio/fish-scales-ops.git |
| git -C "${scales_dir}" fetch --depth 1 origin "${scales_revision}" |
| git -C "${scales_dir}" checkout --detach FETCH_HEAD |
| git -C "${scales_dir}" submodule update --init --recursive --depth 1 |
| fi |
| if [[ "$(git -C "${scales_dir}" rev-parse HEAD)" != "${scales_revision}" ]]; then |
| echo "Unexpected fish-scales-ops revision in ${scales_dir}" >&2 |
| exit 1 |
| fi |
| git -C "${scales_dir}" submodule update --init --recursive --depth 1 |
|
|
| CUTLASS_DIR="${scales_dir}/3rdparty/cutlass" \ |
| CUDA_HOME="${cuda_root}" \ |
| MAX_JOBS="${MAX_JOBS:-2}" \ |
| TORCH_CUDA_ARCH_LIST=12.0a \ |
| "${uv_bin}" pip install --python "${venv_dir}/bin/python" \ |
| --no-build-isolation "${scales_dir}/python" |
|
|
| "${venv_dir}/bin/python" -c \ |
| "import comfy_kitchen, fish_scales_ops, fish_speech, torch; print('installed', torch.__version__, torch.version.cuda)" |
| echo "Installation complete. Start the service with ./launch.sh" |
|
|