Skip to content

vllm_omni.diffusion.models.soulx_singer.modules

Modules:

Name Description
convnext
decoder
flow_matching
llama
mel_transform
note_transcription
preprocess

Preprocess neural network modules for SoulX-Singer.

vocoder
whisper_encoder

Frozen Whisper encoder wrapper (wav -> encoder embeddings).

CFMDecoder

Bases: Module

model instance-attribute

model = FlowMatchingTransformer(cfg=config, **config)

forward

forward(mel, x_mask, decoder_inp, is_prompt)

reverse_diffusion

reverse_diffusion(
    pt_mel,
    pt_decoder_inp,
    gt_decoder_inp,
    n_timesteps=32,
    cfg=1,
)

ConvNeXtV2Block

Bases: Module

act instance-attribute

act = nn.GELU()

dwconv instance-attribute

dwconv = nn.Conv1d(
    dim,
    dim,
    kernel_size=7,
    padding=padding,
    groups=dim,
    dilation=dilation,
)

grn instance-attribute

grn = GRN(intermediate_dim)

norm instance-attribute

norm = nn.LayerNorm(dim, eps=1e-06)

pwconv1 instance-attribute

pwconv1 = nn.Linear(dim, intermediate_dim)

pwconv2 instance-attribute

pwconv2 = nn.Linear(intermediate_dim, dim)

forward

forward(x: Tensor) -> Tensor

DiffLlama

Bases: LlamaModel

cond_mlp instance-attribute

cond_mlp = nn.Sequential(
    nn.Linear(hidden_size, hidden_size * 4),
    nn.SiLU(),
    nn.Linear(hidden_size * 4, hidden_size),
)

diff_step_embedding instance-attribute

diff_step_embedding = SinusoidalPosEmb(hidden_size)

diff_step_mlp instance-attribute

diff_step_mlp = nn.Sequential(
    nn.Linear(hidden_size, hidden_size * 4),
    nn.SiLU(),
    nn.Linear(hidden_size * 4, hidden_size),
)

embed_tokens instance-attribute

embed_tokens = None

layers instance-attribute

layers = nn.ModuleList(
    [
        (LlamaNARDecoderLayer(layer_config, layer_idx=i))
        for i in (range(num_layers))
    ]
)

mel_mlp instance-attribute

mel_mlp = nn.Sequential(
    nn.Linear(mel_dim, hidden_size * 4),
    nn.SiLU(),
    nn.Linear(hidden_size * 4, hidden_size),
)

mel_out_mlp instance-attribute

mel_out_mlp = nn.Sequential(
    nn.Linear(hidden_size, hidden_size * 4),
    nn.SiLU(),
    nn.Linear(hidden_size * 4, mel_dim),
)

norm instance-attribute

norm = LlamaAdaptiveRMSNorm(
    hidden_size, dim_cond=hidden_size
)

forward

forward(
    x,
    diffusion_step,
    cond,
    x_mask,
    input_ids: LongTensor = None,
    attention_mask: Tensor | None = None,
    position_ids: LongTensor | None = None,
    past_key_values: list[FloatTensor] | None = None,
    inputs_embeds: FloatTensor | None = None,
    use_cache: bool | None = None,
    output_attentions: bool | None = None,
    output_hidden_states: bool | None = None,
    return_dict: bool | None = False,
) -> BaseModelOutputWithPast | Tensor | dict

FlowMatchingTransformer

Bases: Module

cfg instance-attribute

cfg = cfg

cfg_drop_prob instance-attribute

cfg_drop_prob = cfg_drop_prob

cond_codebook_size instance-attribute

cond_codebook_size = cond_codebook_size

cond_emb instance-attribute

cond_emb = nn.Embedding(
    cond_codebook_size, self.hidden_size
)

cond_scale_factor instance-attribute

cond_scale_factor = cond_scale_factor

ctc_layer_index instance-attribute

ctc_layer_index = None

ctc_mlp_layer instance-attribute

ctc_mlp_layer = nn.Sequential(
    nn.Linear(hidden_size, hidden_size * 4),
    nn.SiLU(),
    nn.Linear(hidden_size * 4, cfg.ctc.output_dim),
)

diff_estimator instance-attribute

diff_estimator = DiffLlama(
    mel_dim=mel_dim,
    hidden_size=hidden_size,
    num_heads=num_heads,
    num_layers=num_layers,
    config=llama_config,
)

do_resampling instance-attribute

do_resampling = True

hidden_size instance-attribute

hidden_size = hidden_size

mel_dim instance-attribute

mel_dim = mel_dim

num_heads instance-attribute

num_heads = num_heads

num_layers instance-attribute

num_layers = num_layers

repa_layer_index instance-attribute

repa_layer_index = None

repa_mlp_layer instance-attribute

repa_mlp_layer = nn.Sequential(
    nn.Linear(hidden_size, hidden_size * 4),
    nn.SiLU(),
    nn.Linear(hidden_size * 4, cfg.repa.output_dim),
)

resampling_layers instance-attribute

resampling_layers = nn.Sequential(*up_layers)

sigma instance-attribute

sigma = sigma

time_scheduler instance-attribute

time_scheduler = time_scheduler

use_ctc instance-attribute

use_ctc = 'ctc' in cfg

use_repa instance-attribute

use_repa = 'repa' in cfg

compute_loss

compute_loss(x, x_mask, cond=None, is_prompt=None)

forward

forward(
    x: Tensor,
    x_mask: Tensor,
    cond_code: Tensor,
    is_prompt: Tensor | None = None,
)

Parameters:

Name Type Description Default
x Tensor

(B, T, mel_dim)

required
x_mask Tensor

(B, T)

required
cond_code Tensor

(B, T), Note that cond_code might be not at 50Hz!

required

forward_diffusion

forward_diffusion(x, t, is_prompt=None)

x: (B, T, mel_dim) t: (B,)

loss_t

loss_t(x, x_mask, t, cond=None, is_prompt=None)

reset_parameters

reset_parameters()

reverse_diffusion

reverse_diffusion(
    cond,
    prompt,
    x_mask=None,
    prompt_mask=None,
    n_timesteps=10,
    cfg=1.0,
    rescale_cfg=0.75,
)

reverse_diffusion_v2

reverse_diffusion_v2(
    cond,
    prompt,
    x_mask=None,
    prompt_mask=None,
    n_timesteps=10,
    cfg=1.0,
    rescale_cfg=0.75,
)

MelSpectrogramEncoder

Bases: Module

mel_mean instance-attribute

mel_mean = audio_config.get('mel_mean', -4.92)

mel_var instance-attribute

mel_var = audio_config.get('mel_var', 8.14)

model instance-attribute

model = load_mel_spectrogram_from_cfg(audio_config)

forward

forward(x)

Vocoder

Bases: Module

model instance-attribute

model = load_vocos_model(
    ckpt_path=ckpt_path, config=model_cfg
)

forward

forward(x)

WhisperEncoder

Auxiliary content encoder for SVC.

Kept in FP32 for stable HF Whisper inference under vLLM-Omni's default BF16 diffusion trunk (same idea as Stable Audio's FP32 VAE). Outputs are cast to the trunk dtype before fusion with the CFM conditioner.

device instance-attribute

device = torch.device(
    device
    or ("cuda" if torch.cuda.is_available() else "cpu")
)

dtype property

dtype: dtype

fe instance-attribute

fe = WhisperFeatureExtractor.from_pretrained(
    "openai/whisper-base"
)

model instance-attribute

model = self.model.to(
    device=self.device, dtype=torch.float32
)

encode

encode(
    wav: Tensor,
    sr: int,
    *,
    output_dtype: dtype | None = None,
) -> Tensor

float

float() -> WhisperEncoder