Habana Gaudi์์ Stable Diffusion์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
๐ค Diffusers๋ ๐ค Optimum Habana๋ฅผ ํตํด์ Habana Gaudi์ ํธํ๋ฉ๋๋ค.
์๊ตฌ ์ฌํญ
- Optimum Habana 1.4 ๋๋ ์ดํ, ์ฌ๊ธฐ์ ์ค์นํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- SynapseAI 1.8.
์ถ๋ก ํ์ดํ๋ผ์ธ
Gaudi์์ Stable Diffusion 1 ๋ฐ 2๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ ์ธ์คํด์ค๋ฅผ ์ธ์คํด์คํํด์ผ ํฉ๋๋ค:
GaudiStableDiffusionPipeline
์ด ํฌํจ๋ ํ์ดํ๋ผ์ธ. ์ด ํ์ดํ๋ผ์ธ์ ํ ์คํธ-์ด๋ฏธ์ง ์์ฑ์ ์ง์ํฉ๋๋ค.GaudiDDIMScheduler
์ด ํฌํจ๋ ์ค์ผ์ค๋ฌ. ์ด ์ค์ผ์ค๋ฌ๋ Habana Gaudi์ ์ต์ ํ๋์ด ์์ต๋๋ค.
ํ์ดํ๋ผ์ธ์ ์ด๊ธฐํํ ๋, HPU์ ๋ฐฐํฌํ๊ธฐ ์ํด use_habana=True
๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค.
๋ํ ๊ฐ๋ฅํ ๊ฐ์ฅ ๋น ๋ฅธ ์์ฑ์ ์ํด use_hpu_graphs=True
๋ก HPU ๊ทธ๋ํ๋ฅผ ํ์ฑํํด์ผ ํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, Hugging Face Hub์์ ๋ค์ด๋ก๋ํ ์ ์๋ Gaudi configuration์ ์ง์ ํด์ผ ํฉ๋๋ค.
from optimum.habana import GaudiConfig
from optimum.habana.diffusers import GaudiDDIMScheduler, GaudiStableDiffusionPipeline
model_name = "stabilityai/stable-diffusion-2-base"
scheduler = GaudiDDIMScheduler.from_pretrained(model_name, subfolder="scheduler")
pipeline = GaudiStableDiffusionPipeline.from_pretrained(
model_name,
scheduler=scheduler,
use_habana=True,
use_hpu_graphs=True,
gaudi_config="Habana/stable-diffusion",
)
ํ์ดํ๋ผ์ธ์ ํธ์ถํ์ฌ ํ๋ ์ด์์ ํ๋กฌํํธ์์ ๋ฐฐ์น๋ณ๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
outputs = pipeline(
prompt=[
"High quality photo of an astronaut riding a horse in space",
"Face of a yellow cat, high resolution, sitting on a park bench",
],
num_images_per_prompt=10,
batch_size=4,
)
๋ ๋ง์ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด, Optimum Habana์ ๋ฌธ์์ ๊ณต์ Github ์ ์ฅ์์ ์ ๊ณต๋ ์์๋ฅผ ํ์ธํ์ธ์.
๋ฒค์น๋งํฌ
๋ค์์ Habana/stable-diffusion Gaudi ๊ตฌ์ฑ(ํผํฉ ์ ๋ฐ๋ bf16/fp32)์ ์ฌ์ฉํ๋ Habana first-generation Gaudi ๋ฐ Gaudi2์ ์ง์ฐ ์๊ฐ์ ๋๋ค:
Latency (๋ฐฐ์น ํฌ๊ธฐ = 1) | Throughput (๋ฐฐ์น ํฌ๊ธฐ = 8) | |
---|---|---|
first-generation Gaudi | 4.29s | 0.283 images/s |
Gaudi2 | 1.54s | 0.904 images/s |