Mirrors fastvideo.entrypoints.VideoGenerator (from_config(GeneratorConfig) -> generate( GenerationRequest) -> GenerationResult.video_path), reusing the OFFICIAL fastvideo.api config classes so a basic_dmd_new_api.py-style script differs only by importing VideoGenerator from v2. - model_path -> v2 card registry (Wan2.1 / FastWan -> wan21; SFWan -> wan_causal; LTX2 -> ltx2); snapshot_download + stamp_wan21_checkpoints + Engine(cuda) + program; generate maps SamplingConfig -> DiffusionParams -> make_request -> eng.run, saves the [C,T,H,W] decode as an mp4. - Lazy v2.__getattr__ keeps 'import v2' torch-free (verified) so the CPU mini stays green (202+2). - examples/inference/basic/v2_basic_new_api.py runs all three GPU models through this API. - Single-GPU, resident, TORCH_SDPA (EngineConfig offload/num_gpus>1/VSA accepted for parity, not applied). verified: wan21 from_config->generate->mp4 (frames (5,256,256,3) uint8, video_path written).
69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
"""v2 — a scoped, CPU-testable realization of the design_v3 model-native runtime.
|
|
|
|
> A model card is a (recipe, runtime) pair with a parity obligation.
|
|
> The model owns loop semantics; the runtime owns loop lifecycle.
|
|
> One resident instance runs many loops; one scheduler runs their steps in one currency.
|
|
> Caches are correct by key; parity is correct by test; the interleave gate is non-negotiable.
|
|
> Training records behavior on the same loops it serves.
|
|
|
|
Phase 1 supports Wan2.1-1.3B (T2V) and LTX2.3 (2-stage distilled), plus four training
|
|
methods on Wan2.1-1.3B (finetuning, DMD2, DiffusionNFT, self-forcing). The spine is
|
|
omni-ready (multi-loop ModelInstance, ar_decode/chunk_rollout loop kinds) for the phase-2
|
|
Cosmos3 + vllm-omni omni ports.
|
|
|
|
The core is numpy-only and CPU-testable; heavy Wan/LTX neural forwards become lazy torch
|
|
adapters (see ``v2/models/*/components.py``) that are off the test path.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from ._enums import (
|
|
Capability,
|
|
ConsistencyLevel,
|
|
ExecutionProfile,
|
|
LoopKind,
|
|
WorkUnitKind,
|
|
)
|
|
from .card import (
|
|
CapabilityMatrix,
|
|
ComponentSpec,
|
|
CostModel,
|
|
LoopSpec,
|
|
ModelCard,
|
|
ModelInstance,
|
|
ParitySpec,
|
|
RecipeSpec,
|
|
load_card,
|
|
)
|
|
from .program import ComponentNode, ModelLoopNode, Program, ProgramKind, when_opt, when_task
|
|
from .request import (
|
|
DiffusionParams,
|
|
Output,
|
|
Request,
|
|
SamplingParams,
|
|
Session,
|
|
TaskType,
|
|
make_request,
|
|
)
|
|
from .runtime import AsyncEngine, Engine
|
|
|
|
__version__ = "0.2.0"
|
|
|
|
__all__ = [
|
|
"ModelCard", "ComponentSpec", "LoopSpec", "RecipeSpec", "ParitySpec", "CostModel",
|
|
"CapabilityMatrix", "ModelInstance", "load_card",
|
|
"Engine", "AsyncEngine", "Program", "ProgramKind", "ComponentNode", "ModelLoopNode", "when_task", "when_opt",
|
|
"Request", "Session", "Output", "make_request", "TaskType", "SamplingParams", "DiffusionParams",
|
|
"LoopKind", "WorkUnitKind", "ConsistencyLevel", "ExecutionProfile", "Capability",
|
|
"VideoGenerator",
|
|
"__version__",
|
|
]
|
|
|
|
|
|
def __getattr__(name: str):
|
|
# Lazy: the GPU entrypoint imports torch / fastvideo, so resolve it only on access — plain
|
|
# ``import v2`` (and the CPU-only mini) stay torch-free.
|
|
if name == "VideoGenerator":
|
|
from .video_generator import VideoGenerator
|
|
return VideoGenerator
|
|
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|