94057c3d3e
PR Test (NPU) / check-changes (push) Has been cancelled
PR Test (NPU) / pr-gate (push) Has been cancelled
PR Test (NPU) / set-image-config (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-4-npu-a3 (push) Has been cancelled
PR Test (NPU) / stage-b-test-16-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-1-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-2-npu-a3 (push) Has been cancelled
PR Test (Arm64) / pr-gate (push) Has been cancelled
PR Test (Arm64) / check-changes (push) Has been cancelled
PR Test (Arm64) / build-test (push) Has been cancelled
PR Test (sgl-router) / gate (push) Has been cancelled
PR Test (sgl-router) / tier-1 — lint (push) Has been cancelled
PR Test (sgl-router) / tier-2 — build + test (push) Has been cancelled
PR Test (sgl-router) / tier-3 — docker (placeholder) (push) Has been cancelled
PR Test (sgl-router) / tier-3 — k8s integration (push) Has been cancelled
PR Test (sgl-router) / tier-3 — e2e (push) Has been cancelled
PR Test (sgl-router) / finish (push) Has been cancelled
PR Test (NPU) / single-node-poc (map[name:qwen3_6_27b_w8a8_1p_in64k_out1k_50ms runner:linux-aarch64-a3-2 test_case:test/registered/ascend/performance/qwen3_6_27b/test_npu_qwen3_6_27b_w8a8_1p_in64k_out1k_50ms.py test_type:perf]) (push) Has been cancelled
PR Test (NPU) / pr-test-npu-finish (push) Has been cancelled
PR Test (Xeon) / pr-gate (push) Has been cancelled
PR Test (Xeon) / check-changes (push) Has been cancelled
PR Test (Xeon) / build-test (, xeon-gnr, base-b-test-cpu) (push) Has been cancelled
PR Test (XPU) / check-changes (push) Has been cancelled
PR Test (XPU) / pr-gate (push) Has been cancelled
PR Test (XPU) / stage-a-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / wait-for-stage-a (push) Has been cancelled
PR Test (XPU) / stage-b-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / finish (push) Has been cancelled
CI Model Inventory / build-inventory (push) Has been cancelled
Lint / lint (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Compilation Check (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Manual Policy (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Request Processing (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Summary (push) Has been cancelled
PR Test (SMG) / build-wheel (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on windows (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (x86_64 - auto) (push) Has been cancelled
PR Test (SMG) / python-unit-tests (push) Has been cancelled
PR Test (SMG) / unit-tests (push) Has been cancelled
PR Test (SMG) / benchmarks (push) Has been cancelled
PR Test (SMG) / chat-completions (push) Has been cancelled
PR Test (SMG) / chat-completions-4gpu (push) Has been cancelled
PR Test (SMG) / e2e (push) Has been cancelled
PR Test (SMG) / docker-build-test (push) Has been cancelled
PR Test (SMG) / k8s-integration (push) Has been cancelled
PR Test (SMG) / finish (push) Has been cancelled
PR Test (SMG) / summarize-benchmarks (push) Has been cancelled
Release SGLang Model Gateway Docker Image / publish (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Build SDist (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Upload to PyPI (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (aarch64, 12.9, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (x86_64, 12.9, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu129 (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (aarch64, 13.0, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (x86_64, 13.0, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu130 (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 700) (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 720) (push) Has been cancelled
Release SGLang Kernels / release-rocm700 (push) Has been cancelled
Release SGLang Kernels / release-rocm720 (push) Has been cancelled
Release SGLang Kernels / build-musa43 (43, 3.10) (push) Has been cancelled
Release SGLang Kernels / release-musa43 (push) Has been cancelled
106 lines
4.2 KiB
Python
106 lines
4.2 KiB
Python
"""Krea-2 text-to-image pipeline (native diffusers layout).
|
|
|
|
The released repo is diffusers-style (``model_index.json`` + ``transformer/``,
|
|
``text_encoder/``, ``vae/``, ``tokenizer/``, ``scheduler/`` subfolders), so the
|
|
base ``load_modules`` loads every component from it (the MMDiT via
|
|
``Krea2Transformer2DModel``, the Qwen3-VL text encoder, the Qwen-Image VAE, and
|
|
the ``FlowMatchEulerDiscreteScheduler``). This pipeline only adds the two
|
|
K2-specific touches the base loader can't infer: dropping the unused Qwen3-VL
|
|
vision tower (K2 conditions on text only) and building the assistant-suffix
|
|
tokenizer (``processor``), which has no ``model_index.json`` entry. The stage
|
|
chain is Krea2BeforeDenoisingStage -> DenoisingStage -> DecodingStage.
|
|
"""
|
|
|
|
from typing import Any
|
|
|
|
import torch
|
|
from transformers import Qwen2TokenizerFast
|
|
|
|
from sglang.multimodal_gen.runtime.pipelines_core import LoRAPipeline
|
|
from sglang.multimodal_gen.runtime.pipelines_core.composed_pipeline_base import (
|
|
ComposedPipelineBase,
|
|
)
|
|
from sglang.multimodal_gen.runtime.pipelines_core.stages import DenoisingStage
|
|
from sglang.multimodal_gen.runtime.pipelines_core.stages.model_specific_stages.krea2 import (
|
|
Krea2BeforeDenoisingStage,
|
|
)
|
|
from sglang.multimodal_gen.runtime.server_args import ServerArgs
|
|
from sglang.multimodal_gen.runtime.utils.logging_utils import init_logger
|
|
|
|
logger = init_logger(__name__)
|
|
|
|
_TEXT_MAX_LENGTH = 512
|
|
|
|
|
|
class Krea2Pipeline(LoRAPipeline, ComposedPipelineBase):
|
|
pipeline_name = "Krea2Pipeline"
|
|
|
|
from sglang.multimodal_gen.configs.pipeline_configs.krea2 import Krea2PipelineConfig
|
|
from sglang.multimodal_gen.configs.sample.krea2 import Krea2SamplingParams
|
|
|
|
pipeline_config_cls = Krea2PipelineConfig
|
|
sampling_params_cls = Krea2SamplingParams
|
|
|
|
# Every entry is a diffusers/transformers component declared in model_index.json,
|
|
# so the base loader handles them. "processor" is added in load_modules (no entry).
|
|
_required_config_modules = [
|
|
"text_encoder",
|
|
"tokenizer",
|
|
"vae",
|
|
"transformer",
|
|
"scheduler",
|
|
]
|
|
|
|
def initialize_pipeline(self, server_args: ServerArgs):
|
|
vae_config = server_args.pipeline_config.vae_config
|
|
if hasattr(vae_config, "post_init"):
|
|
vae_config.post_init()
|
|
|
|
def load_modules(
|
|
self,
|
|
server_args: ServerArgs,
|
|
loaded_modules: dict[str, torch.nn.Module] | None = None,
|
|
) -> dict[str, Any]:
|
|
modules = super().load_modules(server_args, loaded_modules)
|
|
|
|
# K2 conditions on text only: drop the unused Qwen3-VL vision tower that the
|
|
# base loader brings in with the full Qwen3VLModel (frees its weights and
|
|
# shrinks the encoder's CPU<->GPU page). It sits on the encoder or under .model.
|
|
text_encoder = modules.get("text_encoder")
|
|
if text_encoder is not None:
|
|
for owner in (text_encoder, getattr(text_encoder, "model", None)):
|
|
if owner is not None and getattr(owner, "visual", None) is not None:
|
|
del owner.visual
|
|
break
|
|
|
|
# The conditioner appends a fixed assistant suffix, tokenized separately;
|
|
# model_index.json has no "processor" entry, so build one from tokenizer/.
|
|
tok_path = self._resolve_component_path(server_args, "tokenizer", "tokenizer")
|
|
modules["processor"] = Qwen2TokenizerFast.from_pretrained(
|
|
tok_path, max_length=_TEXT_MAX_LENGTH
|
|
)
|
|
return modules
|
|
|
|
def create_pipeline_stages(self, server_args: ServerArgs):
|
|
self.add_stage(
|
|
Krea2BeforeDenoisingStage(
|
|
vae=self.get_module("vae"),
|
|
text_encoder=self.get_module("text_encoder"),
|
|
tokenizer=self.get_module("tokenizer"),
|
|
processor=self.get_module("processor"),
|
|
transformer=self.get_module("transformer"),
|
|
scheduler=self.get_module("scheduler"),
|
|
),
|
|
"k2_before_denoising_stage",
|
|
)
|
|
self.add_stage(
|
|
DenoisingStage(
|
|
transformer=self.get_module("transformer"),
|
|
scheduler=self.get_module("scheduler"),
|
|
),
|
|
)
|
|
self.add_standard_decoding_stage()
|
|
|
|
|
|
EntryClass = [Krea2Pipeline]
|