BleachNick's picture
upload required packages
87d40d2
|
raw
history blame
15 kB

ๅŠนๆžœ็š„ใงๅŠน็Ž‡็š„ใชๆ‹กๆ•ฃใƒขใƒ‡ใƒซ

[[open-in-colab]]

[DiffusionPipeline]ใ‚’ไฝฟใฃใฆ็‰นๅฎšใฎใ‚นใ‚ฟใ‚คใƒซใง็”ปๅƒใ‚’็”Ÿๆˆใ—ใŸใ‚Šใ€ๅธŒๆœ›ใ™ใ‚‹็”ปๅƒใ‚’็”Ÿๆˆใ—ใŸใ‚Šใ™ใ‚‹ใฎใฏ้›ฃใ—ใ„ใ“ใจใงใ™ใ€‚ๅคšใใฎๅ ดๅˆใ€[DiffusionPipeline]ใ‚’ไฝ•ๅบฆใ‹ๅฎŸ่กŒใ—ใฆใ‹ใ‚‰ใงใชใ„ใจๆบ€่ถณใฎใ„ใ็”ปๅƒใฏๅพ—ใ‚‰ใ‚Œใพใ›ใ‚“ใ€‚ใ—ใ‹ใ—ใ€ไฝ•ใ‚‚ใชใ„ใจใ“ใ‚ใ‹ใ‚‰ไฝ•ใ‹ใ‚’็”Ÿๆˆใ™ใ‚‹ใซใฏใŸใใ•ใ‚“ใฎ่จˆ็ฎ—ใŒๅฟ…่ฆใงใ™ใ€‚็”Ÿๆˆใ‚’ไฝ•ๅบฆใ‚‚ไฝ•ๅบฆใ‚‚ๅฎŸ่กŒใ™ใ‚‹ๅ ดๅˆใ€็‰นใซใŸใใ•ใ‚“ใฎ่จˆ็ฎ—้‡ใŒๅฟ…่ฆใซใชใ‚Šใพใ™ใ€‚

ใใฎใŸใ‚ใ€ใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใ‹ใ‚‰่จˆ็ฎ—๏ผˆ้€Ÿๅบฆ๏ผ‰ใจใƒกใƒขใƒช๏ผˆGPU RAM๏ผ‰ใฎๅŠน็Ž‡ใ‚’ๆœ€ๅคง้™ใซๅผ•ใๅ‡บใ—ใ€็”Ÿๆˆใ‚ตใ‚คใ‚ฏใƒซ้–“ใฎๆ™‚้–“ใ‚’็Ÿญ็ธฎใ™ใ‚‹ใ“ใจใงใ€ใ‚ˆใ‚Š้ซ˜้€Ÿใชๅๅพฉๅ‡ฆ็†ใ‚’่กŒใˆใ‚‹ใ‚ˆใ†ใซใ™ใ‚‹ใ“ใจใŒ้‡่ฆใงใ™ใ€‚

ใ“ใฎใƒใƒฅใƒผใƒˆใƒชใ‚ขใƒซใงใฏใ€[DiffusionPipeline]ใ‚’็”จใ„ใฆใ€ใ‚ˆใ‚Š้€Ÿใใ€ใ‚ˆใ‚Š่‰ฏใ„่จˆ็ฎ—ใ‚’่กŒใ†ๆ–นๆณ•ใ‚’่ชฌๆ˜Žใ—ใพใ™ใ€‚

ใพใšใ€runwayml/stable-diffusion-v1-5ใƒขใƒ‡ใƒซใ‚’ใƒญใƒผใƒ‰ใ—ใพใ™๏ผš

from diffusers import DiffusionPipeline

model_id = "runwayml/stable-diffusion-v1-5"
pipeline = DiffusionPipeline.from_pretrained(model_id, use_safetensors=True)

ใ“ใ“ใงไฝฟ็”จใ™ใ‚‹ใƒ—ใƒญใƒณใƒ—ใƒˆใฎไพ‹ใฏๅนด่€ใ„ใŸๆˆฆๅฃซใฎ้•ทใฎ่‚–ๅƒ็”ปใงใ™ใŒใ€ใ”่‡ช็”ฑใซๅค‰ๆ›ดใ—ใฆใใ ใ•ใ„๏ผš

prompt = "portrait photo of a old warrior chief"

Speed

๐Ÿ’ก GPUใ‚’ๅˆฉ็”จใงใใชใ„ๅ ดๅˆใฏใ€Colabใฎใ‚ˆใ†ใชGPUใƒ—ใƒญใƒใ‚คใƒ€ใƒผใ‹ใ‚‰็„กๆ–™ใงๅˆฉ็”จใงใใพใ™๏ผ

็”ปๅƒ็”Ÿๆˆใ‚’้ซ˜้€ŸๅŒ–ใ™ใ‚‹ๆœ€ใ‚‚็ฐกๅ˜ใชๆ–นๆณ•ใฎ1ใคใฏใ€PyTorchใƒขใ‚ธใƒฅใƒผใƒซใจๅŒใ˜ใ‚ˆใ†ใซGPUไธŠใซใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใ‚’้…็ฝฎใ™ใ‚‹ใ“ใจใงใ™๏ผš

pipeline = pipeline.to("cuda")

ๅŒใ˜ใ‚คใƒกใƒผใ‚ธใ‚’ไฝฟใฃใฆๆ”น่‰ฏใงใใ‚‹ใ‚ˆใ†ใซใ™ใ‚‹ใซใฏใ€Generatorใ‚’ไฝฟใ„ใ€reproducibilityใฎ็จฎใ‚’่จญๅฎšใ—ใพใ™๏ผš

import torch

generator = torch.Generator("cuda").manual_seed(0)

ใ“ใ‚Œใง็”ปๅƒใ‚’็”Ÿๆˆใงใใพใ™๏ผš

image = pipeline(prompt, generator=generator).images[0]
image

ใ“ใฎๅ‡ฆ็†ใซใฏT4 GPUใง~30็ง’ใ‹ใ‹ใ‚Šใพใ—ใŸ๏ผˆๅ‰ฒใ‚Šๅฝ“ใฆใ‚‰ใ‚Œใฆใ„ใ‚‹GPUใŒT4ใ‚ˆใ‚Šๅ„ชใ‚Œใฆใ„ใ‚‹ๅ ดๅˆใฏใ‚‚ใฃใจ้€Ÿใ„ใ‹ใ‚‚ใ—ใ‚Œใพใ›ใ‚“๏ผ‰ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏใ€[DiffusionPipeline]ใฏๅฎŒๅ…จใชfloat32็ฒพๅบฆใง็”Ÿๆˆใ‚’50ใ‚นใƒ†ใƒƒใƒ—ๅฎŸ่กŒใ—ใพใ™ใ€‚float16`ใฎใ‚ˆใ†ใชไฝŽใ„็ฒพๅบฆใซๅค‰ๆ›ดใ™ใ‚‹ใ‹ใ€ๆŽจ่ซ–ใ‚นใƒ†ใƒƒใƒ—ๆ•ฐใ‚’ๆธ›ใ‚‰ใ™ใ“ใจใง้ซ˜้€ŸๅŒ–ใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

ใพใšใฏ float16 ใงใƒขใƒ‡ใƒซใ‚’ใƒญใƒผใƒ‰ใ—ใฆ็”ปๅƒใ‚’็”Ÿๆˆใ—ใฆใฟใพใ—ใ‚‡ใ†๏ผš

import torch

pipeline = DiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16, use_safetensors=True)
pipeline = pipeline.to("cuda")
generator = torch.Generator("cuda").manual_seed(0)
image = pipeline(prompt, generator=generator).images[0]
image

ไปŠๅ›žใ€็”ปๅƒ็”Ÿๆˆใซใ‹ใ‹ใฃใŸๆ™‚้–“ใฏใ‚ใšใ‹11็ง’ใงใ€ไปฅๅ‰ใ‚ˆใ‚Š3ๅ€่ฟ‘ใ้€Ÿใใชใ‚Šใพใ—ใŸ๏ผ

๐Ÿ’ก ใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใฏๅธธใซ float16 ใงๅฎŸ่กŒใ™ใ‚‹ใ“ใจใ‚’ๅผทใใŠๅ‹งใ‚ใ—ใพใ™ใ€‚

็”Ÿๆˆใ‚นใƒ†ใƒƒใƒ—ๆ•ฐใ‚’ๆธ›ใ‚‰ใ™ใจใ„ใ†ๆ–นๆณ•ใ‚‚ใ‚ใ‚Šใพใ™ใ€‚ใ‚ˆใ‚ŠๅŠน็Ž‡็š„ใชใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒฉใ‚’้ธๆŠžใ™ใ‚‹ใ“ใจใงใ€ๅ‡บๅŠ›ๅ“่ณชใ‚’็Š ็‰ฒใซใ™ใ‚‹ใ“ใจใชใใ‚นใƒ†ใƒƒใƒ—ๆ•ฐใ‚’ๆธ›ใ‚‰ใ™ใ“ใจใŒใงใใพใ™ใ€‚compatiblesใƒกใ‚ฝใƒƒใƒ‰ใ‚’ๅ‘ผใณๅ‡บใ™ใ“ใจใงใ€[DiffusionPipeline]ใฎ็พๅœจใฎใƒขใƒ‡ใƒซใจไบ’ๆ›ๆ€งใฎใ‚ใ‚‹ใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒฉใ‚’่ฆ‹ใคใ‘ใ‚‹ใ“ใจใŒใงใใพใ™๏ผš

pipeline.scheduler.compatibles
[
    diffusers.schedulers.scheduling_lms_discrete.LMSDiscreteScheduler,
    diffusers.schedulers.scheduling_unipc_multistep.UniPCMultistepScheduler,
    diffusers.schedulers.scheduling_k_dpm_2_discrete.KDPM2DiscreteScheduler,
    diffusers.schedulers.scheduling_deis_multistep.DEISMultistepScheduler,
    diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteScheduler,
    diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler,
    diffusers.schedulers.scheduling_ddpm.DDPMScheduler,
    diffusers.schedulers.scheduling_dpmsolver_singlestep.DPMSolverSinglestepScheduler,
    diffusers.schedulers.scheduling_k_dpm_2_ancestral_discrete.KDPM2AncestralDiscreteScheduler,
    diffusers.schedulers.scheduling_heun_discrete.HeunDiscreteScheduler,
    diffusers.schedulers.scheduling_pndm.PNDMScheduler,
    diffusers.schedulers.scheduling_euler_ancestral_discrete.EulerAncestralDiscreteScheduler,
    diffusers.schedulers.scheduling_ddim.DDIMScheduler,
]

Stable Diffusionใƒขใƒ‡ใƒซใฏใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใง[PNDMScheduler]ใ‚’ไฝฟ็”จใ—ใพใ™ใ€‚ใ“ใฎใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒฉใฏ้€šๅธธ50ใฎๆŽจ่ซ–ใ‚นใƒ†ใƒƒใƒ—ใ‚’ๅฟ…่ฆใจใ—ใพใ™ใŒใ€[DPMSolverMultistepScheduler]ใฎใ‚ˆใ†ใช้ซ˜ๆ€ง่ƒฝใชใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒฉใงใฏ20ใพใŸใฏ25ใฎๆŽจ่ซ–ใ‚นใƒ†ใƒƒใƒ—ใงๆธˆใฟใพใ™ใ€‚[ConfigMixin.from_config]ใƒกใ‚ฝใƒƒใƒ‰ใ‚’ไฝฟ็”จใ™ใ‚‹ใจใ€ๆ–ฐใ—ใ„ใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒฉใ‚’ใƒญใƒผใƒ‰ใ™ใ‚‹ใ“ใจใŒใงใใพใ™๏ผš

from diffusers import DPMSolverMultistepScheduler

pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config)

ใ“ใ“ใง num_inference_steps ใ‚’20ใซ่จญๅฎšใ—ใพใ™๏ผš

generator = torch.Generator("cuda").manual_seed(0)
image = pipeline(prompt, generator=generator, num_inference_steps=20).images[0]
image

ๆŽจ่ซ–ๆ™‚้–“ใ‚’ใ‚ใšใ‹4็ง’ใซ็Ÿญ็ธฎใ™ใ‚‹ใ“ใจใซๆˆๅŠŸใ—ใŸ๏ผโšก๏ธ

ใƒกใƒขใƒชใƒผ

ใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใฎใƒ‘ใƒ•ใ‚ฉใƒผใƒžใƒณใ‚นใ‚’ๅ‘ไธŠใ•ใ›ใ‚‹ใ‚‚ใ†1ใคใฎ้ตใฏใ€ๆถˆ่ฒปใƒกใƒขใƒชใ‚’ๅฐ‘ใชใใ™ใ‚‹ใ“ใจใงใ™ใ€‚ไธ€ๅบฆใซ็”Ÿๆˆใงใใ‚‹็”ปๅƒใฎๆ•ฐใ‚’็ขบ่ชใ™ใ‚‹ๆœ€ใ‚‚็ฐกๅ˜ใชๆ–นๆณ•ใฏใ€OutOfMemoryError๏ผˆOOM๏ผ‰ใŒ็™บ็”Ÿใ™ใ‚‹ใพใงใ€ใ•ใพใ–ใพใชใƒใƒƒใƒใ‚ตใ‚คใ‚บใ‚’่ฉฆใ—ใฆใฟใ‚‹ใ“ใจใงใ™ใ€‚

ๆ–‡็ซ ใจ Generators ใฎใƒชใ‚นใƒˆใ‹ใ‚‰็”ปๅƒใฎใƒใƒƒใƒใ‚’็”Ÿๆˆใ™ใ‚‹้–ขๆ•ฐใ‚’ไฝœๆˆใ—ใพใ™ใ€‚ๅ„ Generator ใซใ‚ทใƒผใƒ‰ใ‚’ๅ‰ฒใ‚Šๅฝ“ใฆใฆใ€่‰ฏใ„็ตๆžœใŒๅพ—ใ‚‰ใ‚ŒใŸๅ ดๅˆใซๅ†ๅˆฉ็”จใงใใ‚‹ใ‚ˆใ†ใซใ—ใพใ™ใ€‚

def get_inputs(batch_size=1):
    generator = [torch.Generator("cuda").manual_seed(i) for i in range(batch_size)]
    prompts = batch_size * [prompt]
    num_inference_steps = 20

    return {"prompt": prompts, "generator": generator, "num_inference_steps": num_inference_steps}

batch_size=4ใง้–‹ๅง‹ใ—ใ€ใฉใ‚Œใ ใ‘ใƒกใƒขใƒชใ‚’ๆถˆ่ฒปใ—ใŸใ‹ใ‚’็ขบ่ชใ—ใพใ™๏ผš

from diffusers.utils import make_image_grid 

images = pipeline(**get_inputs(batch_size=4)).images
make_image_grid(images, 2, 2)

ๅคงๅฎน้‡ใฎRAMใ‚’ๆญ่ผ‰ใ—ใŸGPUใงใชใ„้™ใ‚Šใ€ไธŠ่จ˜ใฎใ‚ณใƒผใƒ‰ใฏใŠใใ‚‰ใOOMใ‚จใƒฉใƒผใ‚’่ฟ”ใ—ใŸใฏใšใงใ™๏ผใƒกใƒขใƒชใฎๅคงๅŠใฏใ‚ฏใƒญใ‚นใ‚ขใƒ†ใƒณใ‚ทใƒงใƒณใƒฌใ‚คใƒคใƒผใŒๅ ใ‚ใฆใ„ใพใ™ใ€‚ใ“ใฎๅ‡ฆ็†ใ‚’ใƒใƒƒใƒใงๅฎŸ่กŒใ™ใ‚‹ไปฃใ‚ใ‚Šใซใ€้€ๆฌกๅฎŸ่กŒใ™ใ‚‹ใ“ใจใงใƒกใƒขใƒชใ‚’ๅคงๅน…ใซ็ฏ€็ด„ใงใใพใ™ใ€‚ๅฟ…่ฆใชใฎใฏใ€[~DiffusionPipeline.enable_attention_slicing]้–ขๆ•ฐใ‚’ไฝฟ็”จใ™ใ‚‹ใ“ใจใ ใ‘ใงใ™๏ผš

pipeline.enable_attention_slicing()

ไปŠๅบฆใฏbatch_sizeใ‚’8ใซใ—ใฆใฟใฆใใ ใ•ใ„๏ผ

images = pipeline(**get_inputs(batch_size=8)).images
make_image_grid(images, rows=2, cols=4)

ไปฅๅ‰ใฏ4ๆžšใฎ็”ปๅƒใฎใƒใƒƒใƒใ‚’็”Ÿๆˆใ™ใ‚‹ใ“ใจใ•ใˆใงใใพใ›ใ‚“ใงใ—ใŸใŒใ€ไปŠใงใฏ8ๆžšใฎ็”ปๅƒใฎใƒใƒƒใƒใ‚’1ๆžšใ‚ใŸใ‚Š๏ฝž3.5็ง’ใง็”Ÿๆˆใงใใพใ™๏ผใ“ใ‚ŒใฏใŠใใ‚‰ใใ€ๅ“่ณชใ‚’็Š ็‰ฒใซใ™ใ‚‹ใ“ใจใชใT4 GPUใงใงใใ‚‹ๆœ€้€Ÿใฎๅ‡ฆ็†้€Ÿๅบฆใงใ™ใ€‚

ๅ“่ณช

ๅ‰ใฎ2ใคใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใงใฏใ€fp16 ใ‚’ไฝฟใฃใฆใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใฎ้€Ÿๅบฆใ‚’ๆœ€้ฉๅŒ–ใ™ใ‚‹ๆ–นๆณ•ใ€ใ‚ˆใ‚Šใƒ‘ใƒ•ใ‚ฉใƒผใƒžใƒณ ใ‚นใชใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒฉใƒผใ‚’ไฝฟใฃใฆ็”Ÿๆˆใ‚นใƒ†ใƒƒใƒ—ๆ•ฐใ‚’ๆธ›ใ‚‰ใ™ๆ–นๆณ•ใ€ใ‚ขใƒ†ใƒณใ‚ทใƒงใƒณใ‚นใƒฉใ‚คใ‚นใ‚’ๆœ‰ๅŠน ใซใ—ใฆใƒกใƒขใƒชๆถˆ่ฒป้‡ใ‚’ๆธ›ใ‚‰ใ™ๆ–นๆณ•ใซใคใ„ใฆๅญฆใณใพใ—ใŸใ€‚ไปŠๅบฆใฏใ€็”Ÿๆˆใ•ใ‚Œใ‚‹็”ปๅƒใฎๅ“่ณชใ‚’ๅ‘ไธŠใ•ใ›ใ‚‹ๆ–นๆณ•ใซ็„ฆ็‚นใ‚’ๅฝ“ใฆใพใ™ใ€‚

ใ‚ˆใ‚Š่‰ฏใ„ใƒใ‚งใƒƒใ‚ฏใƒใ‚คใƒณใƒˆ

ๆœ€ใ‚‚ๅ˜็ด”ใชใ‚นใƒ†ใƒƒใƒ—ใฏใ€ใ‚ˆใ‚Š่‰ฏใ„ใƒใ‚งใƒƒใ‚ฏใƒใ‚คใƒณใƒˆใ‚’ไฝฟใ†ใ“ใจใงใ™ใ€‚Stable Diffusionใƒขใƒ‡ใƒซใฏ่‰ฏใ„ๅ‡บ็™บ็‚นใงใ‚ใ‚Šใ€ๅ…ฌๅผ็™บ่กจไปฅๆฅใ€ใ„ใใคใ‹ใฎๆ”น่‰ฏ็‰ˆใ‚‚ใƒชใƒชใƒผใ‚นใ•ใ‚Œใฆใ„ใพใ™ใ€‚ใ—ใ‹ใ—ใ€ๆ–ฐใ—ใ„ใƒใƒผใ‚ธใƒงใƒณใ‚’ไฝฟใฃใŸใ‹ใ‚‰ใจใ„ใฃใฆใ€่‡ชๅ‹•็š„ใซ่‰ฏใ„็ตๆžœใŒๅพ—ใ‚‰ใ‚Œใ‚‹ใ‚ใ‘ใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚ๆœ€่‰ฏใฎ็ตๆžœใ‚’ๅพ—ใ‚‹ใŸใ‚ใซใฏใ€่‡ชๅˆ†ใงใ•ใพใ–ใพใชใƒใ‚งใƒƒใ‚ฏใƒใ‚คใƒณใƒˆใ‚’่ฉฆใ—ใฆใฟใŸใ‚Šใ€ใกใ‚‡ใฃใจใ—ใŸ็ ”็ฉถ๏ผˆใƒใ‚ฌใƒ†ใ‚ฃใƒ–ใƒ—ใƒญใƒณใƒ—ใƒˆใฎไฝฟ็”จใชใฉ๏ผ‰ใ‚’ใ—ใŸใ‚Šใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚

ใ“ใฎๅˆ†้‡ŽใŒๆˆ้•ทใ™ใ‚‹ใซใคใ‚Œใฆใ€็‰นๅฎšใฎใ‚นใ‚ฟใ‚คใƒซใ‚’็”Ÿใฟๅ‡บใ™ใŸใ‚ใซๅพฎ่ชฟๆ•ดใ•ใ‚ŒใŸใ€ใ‚ˆใ‚Š่ณชใฎ้ซ˜ใ„ใƒใ‚งใƒƒใ‚ฏใƒใ‚คใƒณใƒˆใŒๅข—ใˆใฆใ„ใพใ™ใ€‚Hubใ‚„Diffusers Galleryใ‚’ๆŽข็ดขใ—ใฆใ€่ˆˆๅ‘ณใฎใ‚ใ‚‹ใ‚‚ใฎใ‚’่ฆ‹ใคใ‘ใฆใฟใฆใใ ใ•ใ„๏ผ

ใ‚ˆใ‚Š่‰ฏใ„ใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใ‚ณใƒณใƒใƒผใƒใƒณใƒˆ

็พๅœจใฎใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใ‚ณใƒณใƒใƒผใƒใƒณใƒˆใ‚’ๆ–ฐใ—ใ„ใƒใƒผใ‚ธใƒงใƒณใซ็ฝฎใๆ›ใˆใฆใฟใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚Stability AIใŒๆไพ›ใ™ใ‚‹ๆœ€ๆ–ฐใฎautodecoderใ‚’ใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใซใƒญใƒผใƒ‰ใ—ใ€็”ปๅƒใ‚’็”Ÿๆˆใ—ใฆใฟใพใ—ใ‚‡ใ†๏ผš

from diffusers import AutoencoderKL

vae = AutoencoderKL.from_pretrained("stabilityai/sd-vae-ft-mse", torch_dtype=torch.float16).to("cuda")
pipeline.vae = vae
images = pipeline(**get_inputs(batch_size=8)).images
make_image_grid(images, rows=2, cols=4)

ใ‚ˆใ‚Š่‰ฏใ„ใƒ—ใƒญใƒณใƒ—ใƒˆใƒปใ‚จใƒณใ‚ธใƒ‹ใ‚ขใƒชใƒณใ‚ฐ

็”ปๅƒใ‚’็”Ÿๆˆใ™ใ‚‹ใŸใ‚ใซไฝฟ็”จใ™ใ‚‹ๆ–‡็ซ ใฏใ€ใƒ—ใƒญใƒณใƒ—ใƒˆใ‚จใƒณใ‚ธใƒ‹ใ‚ขใƒชใƒณใ‚ฐใจๅ‘ผใฐใ‚Œใ‚‹ๅˆ†้‡Žใ‚’ไฝœใ‚‰ใ‚Œใ‚‹ใปใฉใ€้žๅธธใซ้‡่ฆใงใ™ใ€‚ใƒ—ใƒญใƒณใƒ—ใƒˆใƒปใ‚จใƒณใ‚ธใƒ‹ใ‚ขใƒชใƒณใ‚ฐใง่€ƒๆ…ฎใ™ในใ็‚นใฏไปฅไธ‹ใฎ้€šใ‚Šใงใ™๏ผš

  • ็”Ÿๆˆใ—ใŸใ„็”ปๅƒใ‚„ใใฎ้กžไผผ็”ปๅƒใฏใ€ใ‚คใƒณใ‚ฟใƒผใƒใƒƒใƒˆไธŠใซใฉใฎใ‚ˆใ†ใซไฟๅญ˜ใ•ใ‚Œใฆใ„ใ‚‹ใ‹๏ผŸ
  • ็งใŒๆœ›ใ‚€ใ‚นใ‚ฟใ‚คใƒซใซใƒขใƒ‡ใƒซใ‚’่ช˜ๅฐŽใ™ใ‚‹ใŸใ‚ใซใ€ใฉใฎใ‚ˆใ†ใช่ฟฝๅŠ ่ฉณ็ดฐใ‚’ไธŽใˆใ‚‹ในใใ‹๏ผŸ

ใ“ใฎใ“ใจใ‚’ๅฟต้ ญใซ็ฝฎใ„ใฆใ€ใƒ—ใƒญใƒณใƒ—ใƒˆใซ่‰ฒใ‚„ใ‚ˆใ‚Š่ณชใฎ้ซ˜ใ„ใƒ‡ใ‚ฃใƒ†ใƒผใƒซใ‚’ๅซใ‚ใ‚‹ใ‚ˆใ†ใซๆ”น่‰ฏใ—ใฆใฟใพใ—ใ‚‡ใ†๏ผš

prompt += ", tribal panther make up, blue on red, side profile, looking away, serious eyes"
prompt += " 50mm portrait photography, hard rim lighting photography--beta --ar 2:3  --beta --upbeta"

ๆ–ฐใ—ใ„ใƒ—ใƒญใƒณใƒ—ใƒˆใง็”ปๅƒใฎใƒใƒƒใƒใ‚’็”Ÿๆˆใ—ใพใ—ใ‚‡ใ†๏ผš

images = pipeline(**get_inputs(batch_size=8)).images
make_image_grid(images, rows=2, cols=4)

ใ‹ใชใ‚Šใ„ใ„ใงใ™๏ผ็จฎใŒ1ใฎGeneratorใซๅฏพๅฟœใ™ใ‚‹2็•ช็›ฎใฎ็”ปๅƒใซใ€่ขซๅ†™ไฝ“ใฎๅนด้ฝขใซ้–ขใ™ใ‚‹ใƒ†ใ‚ญใ‚นใƒˆใ‚’่ฟฝๅŠ ใ—ใฆใ€ใ‚‚ใ†ๅฐ‘ใ—ๆ‰‹ใ‚’ๅŠ ใˆใฆใฟใพใ—ใ‚‡ใ†๏ผš

prompts = [
    "portrait photo of the oldest warrior chief, tribal panther make up, blue on red, side profile, looking away, serious eyes 50mm portrait photography, hard rim lighting photography--beta --ar 2:3  --beta --upbeta",
    "portrait photo of a old warrior chief, tribal panther make up, blue on red, side profile, looking away, serious eyes 50mm portrait photography, hard rim lighting photography--beta --ar 2:3  --beta --upbeta",
    "portrait photo of a warrior chief, tribal panther make up, blue on red, side profile, looking away, serious eyes 50mm portrait photography, hard rim lighting photography--beta --ar 2:3  --beta --upbeta",
    "portrait photo of a young warrior chief, tribal panther make up, blue on red, side profile, looking away, serious eyes 50mm portrait photography, hard rim lighting photography--beta --ar 2:3  --beta --upbeta",
]

generator = [torch.Generator("cuda").manual_seed(1) for _ in range(len(prompts))]
images = pipeline(prompt=prompts, generator=generator, num_inference_steps=25).images
make_image_grid(images, 2, 2)

ๆฌกใฎใ‚นใƒ†ใƒƒใƒ—

ใ“ใฎใƒใƒฅใƒผใƒˆใƒชใ‚ขใƒซใงใฏใ€[DiffusionPipeline]ใ‚’ๆœ€้ฉๅŒ–ใ—ใฆ่จˆ็ฎ—ๅŠน็Ž‡ใจใƒกใƒขใƒชๅŠน็Ž‡ใ‚’ๅ‘ไธŠใ•ใ›ใ€็”Ÿๆˆใ•ใ‚Œใ‚‹ๅ‡บๅŠ›ใฎๅ“่ณชใ‚’ๅ‘ไธŠใ•ใ›ใ‚‹ๆ–นๆณ•ใ‚’ๅญฆใณใพใ—ใŸใ€‚ใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใ‚’ใ•ใ‚‰ใซ้ซ˜้€ŸๅŒ–ใ™ใ‚‹ใ“ใจใซ่ˆˆๅ‘ณใŒใ‚ใ‚Œใฐใ€ไปฅไธ‹ใฎใƒชใ‚ฝใƒผใ‚นใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„๏ผš

  • PyTorch 2.0ใจtorch.compileใŒใฉใฎใ‚ˆใ†ใซ็”Ÿๆˆ้€Ÿๅบฆใ‚’5-300%้ซ˜้€ŸๅŒ–ใงใใ‚‹ใ‹ใ‚’ๅญฆใ‚“ใงใใ ใ•ใ„ใ€‚A100 GPUใฎๅ ดๅˆใ€็”ปๅƒ็”Ÿๆˆใฏๆœ€ๅคง50%้€Ÿใใชใ‚Šใพใ™๏ผ
  • PyTorch 2ใŒไฝฟใˆใชใ„ๅ ดๅˆใฏใ€xFormersใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ™ใ‚‹ใ“ใจใ‚’ใŠๅ‹งใ‚ใ—ใพใ™ใ€‚ใ“ใฎใƒฉใ‚คใƒ–ใƒฉใƒชใฎใƒกใƒขใƒชๅŠน็Ž‡ใฎ่‰ฏใ„ใ‚ขใƒ†ใƒณใ‚ทใƒงใƒณใƒกใ‚ซใƒ‹ใ‚บใƒ ใฏ PyTorch 1.13.1 ใจ็›ธๆ€งใŒ่‰ฏใใ€้ซ˜้€ŸๅŒ–ใจใƒกใƒขใƒชๆถˆ่ฒป้‡ใฎๅ‰Šๆธ›ใ‚’ๅŒๆ™‚ใซๅฎŸ็พใ—ใพใ™ใ€‚
  • ใƒขใƒ‡ใƒซใฎใ‚ชใƒ•ใƒญใƒผใƒ‰ใชใฉใ€ใใฎไป–ใฎๆœ€้ฉๅŒ–ใƒ†ใ‚ฏใƒ‹ใƒƒใ‚ฏใฏ this guide ใงใ‚ซใƒใƒผใ•ใ‚Œใฆใ„ใพใ™ใ€‚