start.sh mirrors start.bat: finds Python 3.10+, creates the venv, installs PyTorch (CUDA index on Linux, the MPS build on macOS, or the CPU index with --cpu), installs ACE-Step, reports the device and launches the UI. Same flags, and the defaults can also come from the environment (PORT=7870 ./start.sh). On macOS it passes --bf16 false, which the README already calls for. Dropped start.sh from .gitignore, where it sat among the upstream author's local scratch files. Both launchers also gain two fixes found while testing on WSL: - A venv is only accepted if pip works in it, not merely if the interpreter exists. A directory left by an interrupted install looked ready and then failed several steps later with a misleading "check your internet connection". Such a venv is now recreated, and if creation fails on Debian/Ubuntu the error points at python3-venv, which is the actual cause there. - The launch banner announced the URL as if the server were already up, while model loading still had a minute to go. It now says the interface will be available once "Running on local URL" appears. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
267 lines
11 KiB
Batchfile
267 lines
11 KiB
Batchfile
@echo off
|
||
chcp 65001 >nul 2>&1
|
||
setlocal
|
||
title ACE-Step
|
||
pushd "%~dp0"
|
||
|
||
REM ============================ НАСТРОЙКИ ============================
|
||
REM Каталог виртуального окружения
|
||
set "VENV_DIR=venv"
|
||
REM Порт веб-интерфейса
|
||
set "PORT=7865"
|
||
REM Адрес, на котором слушает сервер (0.0.0.0 - доступ из локальной сети)
|
||
set "SERVER_NAME=127.0.0.1"
|
||
REM Номер видеокарты
|
||
set "DEVICE_ID=0"
|
||
REM Путь к весам модели. Пусто - скачать в ~/.cache/ace-step/checkpoints
|
||
set "CHECKPOINT_PATH="
|
||
REM Сборка PyTorch (cu126 / cu124 / cu121 - под вашу версию CUDA)
|
||
set "TORCH_INDEX=https://download.pytorch.org/whl/cu126"
|
||
REM ==================================================================
|
||
|
||
REM Имя скрипта надо запомнить до shift: shift сдвигает и %0
|
||
set "SCRIPT_NAME=%~nx0"
|
||
|
||
set "OPT_LOWVRAM=0"
|
||
set "OPT_CPU=0"
|
||
set "OPT_SHARE=0"
|
||
set "DO_SETUP_ONLY=0"
|
||
set "DO_REINSTALL=0"
|
||
set "DO_UPDATE=0"
|
||
|
||
set "FROM_EXPLORER=0"
|
||
echo %cmdcmdline% | find /i "%~nx0" >nul 2>&1 && set "FROM_EXPLORER=1"
|
||
|
||
REM ------------------------- разбор аргументов -------------------------
|
||
:parse_args
|
||
if "%~1"=="" goto args_done
|
||
if /i "%~1"=="--help" goto usage
|
||
if /i "%~1"=="-h" goto usage
|
||
if /i "%~1"=="/?" goto usage
|
||
if /i "%~1"=="--lowvram" ( set "OPT_LOWVRAM=1" & shift & goto parse_args )
|
||
if /i "%~1"=="--cpu" ( set "OPT_CPU=1" & shift & goto parse_args )
|
||
if /i "%~1"=="--share" ( set "OPT_SHARE=1" & shift & goto parse_args )
|
||
if /i "%~1"=="--setup" ( set "DO_SETUP_ONLY=1" & shift & goto parse_args )
|
||
if /i "%~1"=="--reinstall" ( set "DO_REINSTALL=1" & shift & goto parse_args )
|
||
if /i "%~1"=="--update" ( set "DO_UPDATE=1" & shift & goto parse_args )
|
||
if /i "%~1"=="--listen" ( set "SERVER_NAME=0.0.0.0" & shift & goto parse_args )
|
||
if /i "%~1"=="--port" ( set "PORT=%~2" & shift & shift & goto parse_args )
|
||
if /i "%~1"=="--device" ( set "DEVICE_ID=%~2" & shift & shift & goto parse_args )
|
||
echo [ОШИБКА] Неизвестный аргумент: %~1
|
||
echo Запустите "%SCRIPT_NAME% --help" для справки.
|
||
goto fail
|
||
:args_done
|
||
|
||
echo.
|
||
echo ==========================================
|
||
echo ACE-Step - генерация музыки
|
||
echo ==========================================
|
||
echo.
|
||
|
||
set "VENV_PY=%CD%\%VENV_DIR%\Scripts\python.exe"
|
||
|
||
if "%DO_REINSTALL%"=="1" (
|
||
if exist "%VENV_DIR%\" (
|
||
echo [1/4] Удаляю старое окружение "%VENV_DIR%"...
|
||
rmdir /s /q "%VENV_DIR%"
|
||
)
|
||
)
|
||
|
||
REM ------------------------- поиск Python -------------------------
|
||
REM Рабочим считаем окружение, в котором есть и python, и pip: каталог от
|
||
REM прерванной установки выглядит как готовый, но валится дальше с невнятной
|
||
REM ошибкой про интернет.
|
||
if not exist "%VENV_PY%" goto venv_create
|
||
"%VENV_PY%" -m pip --version >nul 2>&1 && goto venv_ready
|
||
echo [1/4] Окружение "%VENV_DIR%" неработоспособно, пересоздаю...
|
||
rmdir /s /q "%VENV_DIR%"
|
||
|
||
:venv_create
|
||
echo [1/4] Ищу подходящий Python...
|
||
set "SYS_PY="
|
||
for %%V in (3.12 3.11 3.10 3.13) do (
|
||
if not defined SYS_PY (
|
||
py -%%V -c "import sys" >nul 2>&1 && set "SYS_PY=py -%%V"
|
||
)
|
||
)
|
||
if not defined SYS_PY (
|
||
python -c "import sys; sys.exit(0 if sys.version_info >= (3,10) else 1)" >nul 2>&1 && set "SYS_PY=python"
|
||
)
|
||
if not defined SYS_PY (
|
||
echo.
|
||
echo [ОШИБКА] Не найден Python 3.10 или новее.
|
||
echo Установите его с https://www.python.org/downloads/
|
||
echo и обязательно отметьте галочку "Add Python to PATH".
|
||
goto fail
|
||
)
|
||
for /f "delims=" %%O in ('%SYS_PY% -c "import sys;print(sys.version.split()[0])" 2^>nul') do set "PYVER=%%O"
|
||
echo Найден Python %PYVER% (%SYS_PY%)
|
||
|
||
echo [1/4] Создаю виртуальное окружение в "%VENV_DIR%"...
|
||
%SYS_PY% -m venv "%VENV_DIR%"
|
||
if errorlevel 1 goto venv_failed
|
||
if not exist "%VENV_PY%" goto venv_failed
|
||
"%VENV_PY%" -m pip --version >nul 2>&1 || goto venv_failed
|
||
set "FRESH_VENV=1"
|
||
|
||
:venv_ready
|
||
if not defined FRESH_VENV echo [1/4] Виртуальное окружение найдено: %VENV_DIR%
|
||
|
||
REM ------------------------- зависимости -------------------------
|
||
echo [2/4] Проверяю зависимости...
|
||
|
||
set "NEED_TORCH=0"
|
||
"%VENV_PY%" -c "import importlib.util,sys; sys.exit(0 if importlib.util.find_spec('torch') else 1)" >nul 2>&1 || set "NEED_TORCH=1"
|
||
REM Проверяем именно установку пакета: сам каталог acestep лежит рядом со скриптом,
|
||
REM поэтому find_spec('acestep') сработал бы даже без установленных зависимостей.
|
||
set "NEED_ACESTEP=0"
|
||
"%VENV_PY%" -c "import importlib.metadata as md, importlib.util as u, sys; md.version('ace_step'); sys.exit(0 if u.find_spec('click') and u.find_spec('gradio') else 1)" >nul 2>&1 || set "NEED_ACESTEP=1"
|
||
|
||
if "%DO_UPDATE%"=="1" set "NEED_TORCH=1"
|
||
if "%DO_UPDATE%"=="1" set "NEED_ACESTEP=1"
|
||
|
||
if "%NEED_TORCH%%NEED_ACESTEP%"=="00" goto deps_ready
|
||
|
||
echo Обновляю pip...
|
||
"%VENV_PY%" -m pip install --upgrade pip setuptools wheel --quiet
|
||
if errorlevel 1 (
|
||
echo [ОШИБКА] Не удалось обновить pip. Проверьте подключение к интернету.
|
||
goto fail
|
||
)
|
||
|
||
if "%NEED_TORCH%"=="1" (
|
||
if "%OPT_CPU%"=="1" (
|
||
echo Устанавливаю PyTorch для CPU. Это займёт несколько минут...
|
||
"%VENV_PY%" -m pip install --upgrade torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
|
||
) else (
|
||
echo Устанавливаю PyTorch с поддержкой CUDA. Это займёт несколько минут...
|
||
"%VENV_PY%" -m pip install --upgrade torch torchvision torchaudio --index-url %TORCH_INDEX%
|
||
)
|
||
if errorlevel 1 (
|
||
echo [ОШИБКА] Не удалось установить PyTorch.
|
||
echo Если у вас другая версия CUDA, поменяйте TORCH_INDEX в начале этого файла.
|
||
goto fail
|
||
)
|
||
)
|
||
|
||
if "%NEED_ACESTEP%"=="1" (
|
||
echo Устанавливаю ACE-Step и зависимости...
|
||
"%VENV_PY%" -m pip install -e .
|
||
if errorlevel 1 (
|
||
echo [ОШИБКА] Не удалось установить ACE-Step.
|
||
goto fail
|
||
)
|
||
)
|
||
|
||
:deps_ready
|
||
|
||
if "%OPT_LOWVRAM%"=="1" (
|
||
"%VENV_PY%" -c "import importlib.util,sys; sys.exit(0 if importlib.util.find_spec('triton') else 1)" >nul 2>&1 || (
|
||
echo Режим экономии VRAM: устанавливаю triton-windows...
|
||
"%VENV_PY%" -m pip install triton-windows --quiet
|
||
if errorlevel 1 echo [ВНИМАНИЕ] triton-windows не установился, --torch_compile может не заработать.
|
||
)
|
||
)
|
||
|
||
REM ------------------------- проверка GPU -------------------------
|
||
echo [3/4] Проверяю видеокарту...
|
||
if "%OPT_CPU%"=="1" goto gpu_cpu_mode
|
||
|
||
set "BF16=true"
|
||
set "GPUINFO="
|
||
set "GPUTMP=%TEMP%\acestep_gpu_%RANDOM%.txt"
|
||
"%VENV_PY%" -c "import torch; print((torch.cuda.get_device_name(0) + ' - ' + str(round(torch.cuda.get_device_properties(0).total_memory/1073741824, 1)) + ' GB VRAM') if torch.cuda.is_available() else 'NO_CUDA')" > "%GPUTMP%" 2>nul
|
||
if exist "%GPUTMP%" set /p GPUINFO=<"%GPUTMP%"
|
||
del "%GPUTMP%" >nul 2>&1
|
||
if not defined GPUINFO set "GPUINFO=NO_CUDA"
|
||
if not "%GPUINFO%"=="NO_CUDA" goto gpu_ok
|
||
echo.
|
||
echo [ВНИМАНИЕ] CUDA недоступна - модель будет работать на процессоре ^(очень медленно^).
|
||
echo Если у вас есть видеокарта NVIDIA, обновите драйвер и переустановите PyTorch:
|
||
echo "%SCRIPT_NAME%" --update
|
||
echo.
|
||
goto gpu_done
|
||
|
||
:gpu_ok
|
||
echo %GPUINFO%
|
||
goto gpu_done
|
||
|
||
:gpu_cpu_mode
|
||
echo Принудительный режим CPU. Генерация будет очень медленной.
|
||
set "DEVICE_ID=-1"
|
||
set "BF16=false"
|
||
|
||
:gpu_done
|
||
|
||
if "%DO_SETUP_ONLY%"=="1" (
|
||
echo.
|
||
echo Установка завершена. Для запуска выполните "%SCRIPT_NAME%".
|
||
goto success
|
||
)
|
||
|
||
REM ------------------------- запуск -------------------------
|
||
set "ARGS=--port %PORT% --server_name %SERVER_NAME% --device_id=%DEVICE_ID% --bf16 %BF16%"
|
||
if not "%CHECKPOINT_PATH%"=="" set ARGS=%ARGS% --checkpoint_path "%CHECKPOINT_PATH%"
|
||
if "%OPT_SHARE%"=="1" set "ARGS=%ARGS% --share true"
|
||
if "%OPT_LOWVRAM%"=="1" set "ARGS=%ARGS% --cpu_offload true --overlapped_decode true --torch_compile true"
|
||
|
||
echo [4/4] Запускаю веб-интерфейс...
|
||
echo.
|
||
if "%OPT_LOWVRAM%"=="1" echo Режим: экономия видеопамяти
|
||
echo Идёт загрузка моделей, это занимает время.
|
||
echo При первом запуске дополнительно скачиваются веса (~8 ГБ).
|
||
echo.
|
||
echo Интерфейс будет доступен на http://%SERVER_NAME%:%PORT%
|
||
echo когда ниже появится строка "Running on local URL".
|
||
echo Остановить: Ctrl+C в этом окне.
|
||
echo.
|
||
|
||
"%VENV_PY%" -m acestep.gui %ARGS%
|
||
if errorlevel 1 (
|
||
echo.
|
||
echo [ОШИБКА] ACE-Step завершился с ошибкой. Текст ошибки - выше.
|
||
goto fail
|
||
)
|
||
goto success
|
||
|
||
REM ------------------------- справка -------------------------
|
||
:usage
|
||
echo.
|
||
echo Использование: %SCRIPT_NAME% [флаги]
|
||
echo.
|
||
echo --lowvram Режим экономии видеопамяти (~8 ГБ VRAM)
|
||
echo --cpu Запуск на процессоре, без CUDA (очень медленно)
|
||
echo --share Публичная ссылка Gradio
|
||
echo --port ^<N^> Порт веб-интерфейса (по умолчанию %PORT%)
|
||
echo --device ^<N^> Номер видеокарты (по умолчанию %DEVICE_ID%)
|
||
echo --listen Слушать 0.0.0.0 (доступ из локальной сети)
|
||
echo --reinstall Пересоздать виртуальное окружение с нуля
|
||
echo --update Обновить зависимости
|
||
echo --setup Только установка, без запуска
|
||
echo --help Эта справка
|
||
echo.
|
||
echo Настройки по умолчанию - в блоке НАСТРОЙКИ в начале файла.
|
||
echo.
|
||
goto success
|
||
|
||
REM ------------------------- завершение -------------------------
|
||
:venv_failed
|
||
echo.
|
||
echo [ОШИБКА] Не удалось создать рабочее виртуальное окружение в "%VENV_DIR%".
|
||
echo Переустановите Python с https://www.python.org/downloads/,
|
||
echo отметив "Add Python to PATH", и запустите "%SCRIPT_NAME% --reinstall".
|
||
goto fail
|
||
|
||
:fail
|
||
echo.
|
||
pause
|
||
popd
|
||
endlocal
|
||
exit /b 1
|
||
|
||
:success
|
||
if "%FROM_EXPLORER%"=="1" pause
|
||
popd
|
||
endlocal
|
||
exit /b 0
|