Soup fine-tunes and post-trains LLMs in one command. The interesting part is layer streaming, which keeps the frozen base out of VRAM and feeds it to the GPU one decoder layer at a time.
That turns the question from how much model fits in your card into how much of one layer fits, which is a far smaller number.
The README states the whole workflow is one config and one command, which is the part that decides whether a fine-tune actually gets attempted.
Streaming only counts if the output matches. The project reports the streamed run is bit-exact against a normal resident run.
The feature is off by default and marked beta, so the default path stays the one people already trust.