Skip to content

Commit 5551506

Browse files
hlkyyiyixuxu
andauthored
Rename Lumina(2)Text2ImgPipeline -> Lumina(2)Pipeline (#10827)
* Rename Lumina(2)Text2ImgPipeline -> Lumina(2)Pipeline --------- Co-authored-by: YiYi Xu <[email protected]>
1 parent 20e4b6a commit 5551506

File tree

13 files changed

+136
-42
lines changed

13 files changed

+136
-42
lines changed

docs/source/en/api/pipelines/lumina.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ Use [`torch.compile`](https://huggingface.co/docs/diffusers/main/en/tutorials/fa
5858
First, load the pipeline:
5959

6060
```python
61-
from diffusers import LuminaText2ImgPipeline
61+
from diffusers import LuminaPipeline
6262
import torch
6363

64-
pipeline = LuminaText2ImgPipeline.from_pretrained(
64+
pipeline = LuminaPipeline.from_pretrained(
6565
"Alpha-VLLM/Lumina-Next-SFT-diffusers", torch_dtype=torch.bfloat16
6666
).to("cuda")
6767
```
@@ -86,11 +86,11 @@ image = pipeline(prompt="Upper body of a young woman in a Victorian-era outfit w
8686

8787
Quantization helps reduce the memory requirements of very large models by storing model weights in a lower precision data type. However, quantization may have varying impact on video quality depending on the video model.
8888

89-
Refer to the [Quantization](../../quantization/overview) overview to learn more about supported quantization backends and selecting a quantization backend that supports your use case. The example below demonstrates how to load a quantized [`LuminaText2ImgPipeline`] for inference with bitsandbytes.
89+
Refer to the [Quantization](../../quantization/overview) overview to learn more about supported quantization backends and selecting a quantization backend that supports your use case. The example below demonstrates how to load a quantized [`LuminaPipeline`] for inference with bitsandbytes.
9090

9191
```py
9292
import torch
93-
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, Transformer2DModel, LuminaText2ImgPipeline
93+
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, Transformer2DModel, LuminaPipeline
9494
from transformers import BitsAndBytesConfig as BitsAndBytesConfig, T5EncoderModel
9595

9696
quant_config = BitsAndBytesConfig(load_in_8bit=True)
@@ -109,7 +109,7 @@ transformer_8bit = Transformer2DModel.from_pretrained(
109109
torch_dtype=torch.float16,
110110
)
111111

112-
pipeline = LuminaText2ImgPipeline.from_pretrained(
112+
pipeline = LuminaPipeline.from_pretrained(
113113
"Alpha-VLLM/Lumina-Next-SFT-diffusers",
114114
text_encoder=text_encoder_8bit,
115115
transformer=transformer_8bit,
@@ -122,9 +122,9 @@ image = pipeline(prompt).images[0]
122122
image.save("lumina.png")
123123
```
124124

125-
## LuminaText2ImgPipeline
125+
## LuminaPipeline
126126

127-
[[autodoc]] LuminaText2ImgPipeline
127+
[[autodoc]] LuminaPipeline
128128
- all
129129
- __call__
130130

docs/source/en/api/pipelines/lumina2.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ Single file loading for Lumina Image 2.0 is available for the `Lumina2Transforme
3636

3737
```python
3838
import torch
39-
from diffusers import Lumina2Transformer2DModel, Lumina2Text2ImgPipeline
39+
from diffusers import Lumina2Transformer2DModel, Lumina2Pipeline
4040

4141
ckpt_path = "https://huggingface.co/Alpha-VLLM/Lumina-Image-2.0/blob/main/consolidated.00-of-01.pth"
4242
transformer = Lumina2Transformer2DModel.from_single_file(
4343
ckpt_path, torch_dtype=torch.bfloat16
4444
)
4545

46-
pipe = Lumina2Text2ImgPipeline.from_pretrained(
46+
pipe = Lumina2Pipeline.from_pretrained(
4747
"Alpha-VLLM/Lumina-Image-2.0", transformer=transformer, torch_dtype=torch.bfloat16
4848
)
4949
pipe.enable_model_cpu_offload()
@@ -60,7 +60,7 @@ image.save("lumina-single-file.png")
6060
GGUF Quantized checkpoints for the `Lumina2Transformer2DModel` can be loaded via `from_single_file` with the `GGUFQuantizationConfig`
6161

6262
```python
63-
from diffusers import Lumina2Transformer2DModel, Lumina2Text2ImgPipeline, GGUFQuantizationConfig
63+
from diffusers import Lumina2Transformer2DModel, Lumina2Pipeline, GGUFQuantizationConfig
6464

6565
ckpt_path = "https://huggingface.co/calcuis/lumina-gguf/blob/main/lumina2-q4_0.gguf"
6666
transformer = Lumina2Transformer2DModel.from_single_file(
@@ -69,7 +69,7 @@ transformer = Lumina2Transformer2DModel.from_single_file(
6969
torch_dtype=torch.bfloat16,
7070
)
7171

72-
pipe = Lumina2Text2ImgPipeline.from_pretrained(
72+
pipe = Lumina2Pipeline.from_pretrained(
7373
"Alpha-VLLM/Lumina-Image-2.0", transformer=transformer, torch_dtype=torch.bfloat16
7474
)
7575
pipe.enable_model_cpu_offload()
@@ -80,8 +80,8 @@ image = pipe(
8080
image.save("lumina-gguf.png")
8181
```
8282

83-
## Lumina2Text2ImgPipeline
83+
## Lumina2Pipeline
8484

85-
[[autodoc]] Lumina2Text2ImgPipeline
85+
[[autodoc]] Lumina2Pipeline
8686
- all
8787
- __call__

scripts/convert_lumina_to_diffusers.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from safetensors.torch import load_file
66
from transformers import AutoModel, AutoTokenizer
77

8-
from diffusers import AutoencoderKL, FlowMatchEulerDiscreteScheduler, LuminaNextDiT2DModel, LuminaText2ImgPipeline
8+
from diffusers import AutoencoderKL, FlowMatchEulerDiscreteScheduler, LuminaNextDiT2DModel, LuminaPipeline
99

1010

1111
def main(args):
@@ -115,7 +115,7 @@ def main(args):
115115
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b")
116116
text_encoder = AutoModel.from_pretrained("google/gemma-2b")
117117

118-
pipeline = LuminaText2ImgPipeline(
118+
pipeline = LuminaPipeline(
119119
tokenizer=tokenizer, text_encoder=text_encoder, transformer=transformer, vae=vae, scheduler=scheduler
120120
)
121121
pipeline.save_pretrained(args.dump_path)

src/diffusers/__init__.py

+4
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,9 @@
403403
"LEditsPPPipelineStableDiffusionXL",
404404
"LTXImageToVideoPipeline",
405405
"LTXPipeline",
406+
"Lumina2Pipeline",
406407
"Lumina2Text2ImgPipeline",
408+
"LuminaPipeline",
407409
"LuminaText2ImgPipeline",
408410
"MarigoldDepthPipeline",
409411
"MarigoldIntrinsicsPipeline",
@@ -945,7 +947,9 @@
945947
LEditsPPPipelineStableDiffusionXL,
946948
LTXImageToVideoPipeline,
947949
LTXPipeline,
950+
Lumina2Pipeline,
948951
Lumina2Text2ImgPipeline,
952+
LuminaPipeline,
949953
LuminaText2ImgPipeline,
950954
MarigoldDepthPipeline,
951955
MarigoldIntrinsicsPipeline,

src/diffusers/pipelines/__init__.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,8 @@
265265
)
266266
_import_structure["latte"] = ["LattePipeline"]
267267
_import_structure["ltx"] = ["LTXPipeline", "LTXImageToVideoPipeline"]
268-
_import_structure["lumina"] = ["LuminaText2ImgPipeline"]
269-
_import_structure["lumina2"] = ["Lumina2Text2ImgPipeline"]
268+
_import_structure["lumina"] = ["LuminaPipeline", "LuminaText2ImgPipeline"]
269+
_import_structure["lumina2"] = ["Lumina2Pipeline", "Lumina2Text2ImgPipeline"]
270270
_import_structure["marigold"].extend(
271271
[
272272
"MarigoldDepthPipeline",
@@ -619,8 +619,8 @@
619619
LEditsPPPipelineStableDiffusionXL,
620620
)
621621
from .ltx import LTXImageToVideoPipeline, LTXPipeline
622-
from .lumina import LuminaText2ImgPipeline
623-
from .lumina2 import Lumina2Text2ImgPipeline
622+
from .lumina import LuminaPipeline, LuminaText2ImgPipeline
623+
from .lumina2 import Lumina2Pipeline, Lumina2Text2ImgPipeline
624624
from .marigold import (
625625
MarigoldDepthPipeline,
626626
MarigoldIntrinsicsPipeline,

src/diffusers/pipelines/auto_pipeline.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@
6969
)
7070
from .kandinsky3 import Kandinsky3Img2ImgPipeline, Kandinsky3Pipeline
7171
from .latent_consistency_models import LatentConsistencyModelImg2ImgPipeline, LatentConsistencyModelPipeline
72-
from .lumina import LuminaText2ImgPipeline
73-
from .lumina2 import Lumina2Text2ImgPipeline
72+
from .lumina import LuminaPipeline
73+
from .lumina2 import Lumina2Pipeline
7474
from .pag import (
7575
HunyuanDiTPAGPipeline,
7676
PixArtSigmaPAGPipeline,
@@ -141,8 +141,8 @@
141141
("flux", FluxPipeline),
142142
("flux-control", FluxControlPipeline),
143143
("flux-controlnet", FluxControlNetPipeline),
144-
("lumina", LuminaText2ImgPipeline),
145-
("lumina2", Lumina2Text2ImgPipeline),
144+
("lumina", LuminaPipeline),
145+
("lumina2", Lumina2Pipeline),
146146
("cogview3", CogView3PlusPipeline),
147147
("cogview4", CogView4Pipeline),
148148
]

src/diffusers/pipelines/lumina/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
_dummy_objects.update(get_objects_from_module(dummy_torch_and_transformers_objects))
2424
else:
25-
_import_structure["pipeline_lumina"] = ["LuminaText2ImgPipeline"]
25+
_import_structure["pipeline_lumina"] = ["LuminaPipeline", "LuminaText2ImgPipeline"]
2626

2727
if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
2828
try:
@@ -32,7 +32,7 @@
3232
except OptionalDependencyNotAvailable:
3333
from ...utils.dummy_torch_and_transformers_objects import *
3434
else:
35-
from .pipeline_lumina import LuminaText2ImgPipeline
35+
from .pipeline_lumina import LuminaPipeline, LuminaText2ImgPipeline
3636

3737
else:
3838
import sys

src/diffusers/pipelines/lumina/pipeline_lumina.py

+24-5
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from ...schedulers import FlowMatchEulerDiscreteScheduler
3131
from ...utils import (
3232
BACKENDS_MAPPING,
33+
deprecate,
3334
is_bs4_available,
3435
is_ftfy_available,
3536
is_torch_xla_available,
@@ -60,11 +61,9 @@
6061
Examples:
6162
```py
6263
>>> import torch
63-
>>> from diffusers import LuminaText2ImgPipeline
64+
>>> from diffusers import LuminaPipeline
6465
65-
>>> pipe = LuminaText2ImgPipeline.from_pretrained(
66-
... "Alpha-VLLM/Lumina-Next-SFT-diffusers", torch_dtype=torch.bfloat16
67-
... )
66+
>>> pipe = LuminaPipeline.from_pretrained("Alpha-VLLM/Lumina-Next-SFT-diffusers", torch_dtype=torch.bfloat16)
6867
>>> # Enable memory optimizations.
6968
>>> pipe.enable_model_cpu_offload()
7069
@@ -134,7 +133,7 @@ def retrieve_timesteps(
134133
return timesteps, num_inference_steps
135134

136135

137-
class LuminaText2ImgPipeline(DiffusionPipeline):
136+
class LuminaPipeline(DiffusionPipeline):
138137
r"""
139138
Pipeline for text-to-image generation using Lumina-T2I.
140139
@@ -932,3 +931,23 @@ def __call__(
932931
return (image,)
933932

934933
return ImagePipelineOutput(images=image)
934+
935+
936+
class LuminaText2ImgPipeline(LuminaPipeline):
937+
def __init__(
938+
self,
939+
transformer: LuminaNextDiT2DModel,
940+
scheduler: FlowMatchEulerDiscreteScheduler,
941+
vae: AutoencoderKL,
942+
text_encoder: GemmaPreTrainedModel,
943+
tokenizer: Union[GemmaTokenizer, GemmaTokenizerFast],
944+
):
945+
deprecation_message = "`LuminaText2ImgPipeline` has been renamed to `LuminaPipeline` and will be removed in a future version. Please use `LuminaPipeline` instead."
946+
deprecate("diffusers.pipelines.lumina.pipeline_lumina.LuminaText2ImgPipeline", "0.34", deprecation_message)
947+
super().__init__(
948+
transformer=transformer,
949+
scheduler=scheduler,
950+
vae=vae,
951+
text_encoder=text_encoder,
952+
tokenizer=tokenizer,
953+
)

src/diffusers/pipelines/lumina2/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
_dummy_objects.update(get_objects_from_module(dummy_torch_and_transformers_objects))
2424
else:
25-
_import_structure["pipeline_lumina2"] = ["Lumina2Text2ImgPipeline"]
25+
_import_structure["pipeline_lumina2"] = ["Lumina2Pipeline", "Lumina2Text2ImgPipeline"]
2626

2727
if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
2828
try:
@@ -32,7 +32,7 @@
3232
except OptionalDependencyNotAvailable:
3333
from ...utils.dummy_torch_and_transformers_objects import *
3434
else:
35-
from .pipeline_lumina2 import Lumina2Text2ImgPipeline
35+
from .pipeline_lumina2 import Lumina2Pipeline, Lumina2Text2ImgPipeline
3636

3737
else:
3838
import sys

src/diffusers/pipelines/lumina2/pipeline_lumina2.py

+24-3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from ...models.transformers.transformer_lumina2 import Lumina2Transformer2DModel
2626
from ...schedulers import FlowMatchEulerDiscreteScheduler
2727
from ...utils import (
28+
deprecate,
2829
is_torch_xla_available,
2930
logging,
3031
replace_example_docstring,
@@ -47,9 +48,9 @@
4748
Examples:
4849
```py
4950
>>> import torch
50-
>>> from diffusers import Lumina2Text2ImgPipeline
51+
>>> from diffusers import Lumina2Pipeline
5152
52-
>>> pipe = Lumina2Text2ImgPipeline.from_pretrained("Alpha-VLLM/Lumina-Image-2.0", torch_dtype=torch.bfloat16)
53+
>>> pipe = Lumina2Pipeline.from_pretrained("Alpha-VLLM/Lumina-Image-2.0", torch_dtype=torch.bfloat16)
5354
>>> # Enable memory optimizations.
5455
>>> pipe.enable_model_cpu_offload()
5556
@@ -133,7 +134,7 @@ def retrieve_timesteps(
133134
return timesteps, num_inference_steps
134135

135136

136-
class Lumina2Text2ImgPipeline(DiffusionPipeline, Lumina2LoraLoaderMixin):
137+
class Lumina2Pipeline(DiffusionPipeline, Lumina2LoraLoaderMixin):
137138
r"""
138139
Pipeline for text-to-image generation using Lumina-T2I.
139140
@@ -767,3 +768,23 @@ def __call__(
767768
return (image,)
768769

769770
return ImagePipelineOutput(images=image)
771+
772+
773+
class Lumina2Text2ImgPipeline(Lumina2Pipeline):
774+
def __init__(
775+
self,
776+
transformer: Lumina2Transformer2DModel,
777+
scheduler: FlowMatchEulerDiscreteScheduler,
778+
vae: AutoencoderKL,
779+
text_encoder: Gemma2PreTrainedModel,
780+
tokenizer: Union[GemmaTokenizer, GemmaTokenizerFast],
781+
):
782+
deprecation_message = "`Lumina2Text2ImgPipeline` has been renamed to `Lumina2Pipeline` and will be removed in a future version. Please use `Lumina2Pipeline` instead."
783+
deprecate("diffusers.pipelines.lumina2.pipeline_lumina2.Lumina2Text2ImgPipeline", "0.34", deprecation_message)
784+
super().__init__(
785+
transformer=transformer,
786+
scheduler=scheduler,
787+
vae=vae,
788+
text_encoder=text_encoder,
789+
tokenizer=tokenizer,
790+
)

src/diffusers/utils/dummy_torch_and_transformers_objects.py

+30
Original file line numberDiff line numberDiff line change
@@ -1232,6 +1232,21 @@ def from_pretrained(cls, *args, **kwargs):
12321232
requires_backends(cls, ["torch", "transformers"])
12331233

12341234

1235+
class Lumina2Pipeline(metaclass=DummyObject):
1236+
_backends = ["torch", "transformers"]
1237+
1238+
def __init__(self, *args, **kwargs):
1239+
requires_backends(self, ["torch", "transformers"])
1240+
1241+
@classmethod
1242+
def from_config(cls, *args, **kwargs):
1243+
requires_backends(cls, ["torch", "transformers"])
1244+
1245+
@classmethod
1246+
def from_pretrained(cls, *args, **kwargs):
1247+
requires_backends(cls, ["torch", "transformers"])
1248+
1249+
12351250
class Lumina2Text2ImgPipeline(metaclass=DummyObject):
12361251
_backends = ["torch", "transformers"]
12371252

@@ -1247,6 +1262,21 @@ def from_pretrained(cls, *args, **kwargs):
12471262
requires_backends(cls, ["torch", "transformers"])
12481263

12491264

1265+
class LuminaPipeline(metaclass=DummyObject):
1266+
_backends = ["torch", "transformers"]
1267+
1268+
def __init__(self, *args, **kwargs):
1269+
requires_backends(self, ["torch", "transformers"])
1270+
1271+
@classmethod
1272+
def from_config(cls, *args, **kwargs):
1273+
requires_backends(cls, ["torch", "transformers"])
1274+
1275+
@classmethod
1276+
def from_pretrained(cls, *args, **kwargs):
1277+
requires_backends(cls, ["torch", "transformers"])
1278+
1279+
12501280
class LuminaText2ImgPipeline(metaclass=DummyObject):
12511281
_backends = ["torch", "transformers"]
12521282

0 commit comments

Comments
 (0)