write songs with a model the server cannot hold in its own interpreter
ACE-Step generates a whole track -- style prompt, sung lyrics, a length in seconds -- and it ships a package pinning transformers 4.50 and spacy 3.8.4. spacy 3.8.4 publishes no cp313 wheel, so this is not a stack the server would rather not hold: it is one that cannot be installed on the server's interpreter. It gets a python 3.12 venv of its own and an HTTP service in it, driven the way CrisperWhisper, Canary and pyannote are. Built on the first request to such a model, so a model that is configured and never called costs nothing; `uv venv` covers the hosts that have python3.12 without ensurepip. Three upstream details that fail silently rather than loudly: * the pipeline resolves its own dtype as `bfloat16 if dtype == "bfloat16" else float32`, so asking it for float16 quietly doubles the VRAM. ACE_PIPELINE_DTYPE is read after that switch, so precision goes through there instead. * constructing the pipeline loads NOTHING -- it reads the checkpoints on the first call. coderai measures a model's footprint as the free-VRAM delta across the load, and that window closes when the worker reports healthy, so a lazy load would measure ~0 GB and eviction would treat a resident 3.5B model as free. The service loads before answering /health. * `quantized=True` does not quantize: it loads a separate int4wo export from the same directory layout. Missing, that is a FileNotFoundError minutes into a load, so the worker names the file it wants first. The handle cached in the manager exposes cleanup(), which is what eviction calls, and here it stops the worker -- the only thing that frees its VRAM. `duration` and `cfg_coef` are shared with MusicGen and default to 10s/3.0, which would make every ACE-Step call a 10-second clip at a guidance it is not tuned for. The branch reads which fields the client actually SENT, so an omitted one gets ACE-Step's default and an explicit `duration: 10` still means 10. `lyrics` and `steps` become declared fields: both branches already read `steps` off the request, where only extra="allow" was letting it through. The venv is ~6.4 GB, so the default image does not carry it and --with-acestep bakes it in -- copying the dev venv when there is one, building it when there is not. Ubuntu 22.04's system python is 3.10, so a baked 3.12 venv also needs a relocatable interpreter bundled beside it, like the 3.10 venvs. Verified on a 3090: healthy after ~3.5 min, 8.5 GB VRAM, a real 48 kHz stereo WAV from a 10s/12-step request. Suite at its 15-failure baseline, 5292 passed. Co-Authored-By:Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014T3rZnLhydX9QqUcfBbqLu
Showing
codai/api/acestep_worker.py
0 → 100644
This diff is collapsed.
docs/text-to-music.md
0 → 100644
tests/test_acestep_worker.py
0 → 100644
tools/acestep_service.py
0 → 100644
Please
register
or
sign in
to comment