IrvineのもっとPC自作日記
HP Directplus -HP公式オンラインストア-
ウイルスバスター公式トレンドマイクロ・オンラインショップ
毎日の生活に役立つ!面白い!『こんな便利な商品があったのか!!』特集
本ページはプロモーションが含まれています。
  
 

【画像生成AI】nVidia製GPUで使える高速画像生成AI Sanaをためしてみた

 

スポンサーリンク

 
【画像生成AI】nVidia製GPUで使える高速画像生成AI Sanaをためしてみた

画像生成AIの最近の話題は動画に移っているので、静止画についてはあまり聞こえてこなくなった。
昨年Stable Diffusion 3.5が出て使ってみたが、FLUX.1と比べると満足できるものではなく、当面はFLUX.1かなと思っている。
そこに新たなライバルが登場。nVidia製のGPUを搭載していないと使えないが、生成が非常に高速なSanaだ。

画像生成AIについてのまとめはこちら。

  

Sanaとは

画像生成AIで新しいものはないかと探していて見つけた。

画像生成AI Sana WEB

画像生成AI Sana WEB

WEBページはこちら

生成された画像が載っているが、まあまあ高画質だ。しかしこういうのってプロ中のプロがプロンプトを操って作っているのかもしれない。
話半分くらいで試してみるか。

画像生成AI Sana WEB

画像生成AI Sana WEB

ちなみに画像生成時間の比較が書かれている。このグラフは4K x 4K解像度の画像を作る際の時間(秒)の比較だ。
一番上のFLUX-devが1023秒、次のSanaの標準が469秒と一気に半分以下の時間だ。さらに改良を重ねて、一番下のSanaは9.6秒となっている。106倍のスピードだ。

期待を持てそうな記述だ。早速インストールしてみよう。

使用する機材

いつもの次作PC8代目、Jisaku8を使う。DeskMini X600はGPUを搭載していないので使えない。
Jisaku8はおととし夏に作ったもので、そのスペックはRyzen 5700X、32GBメモリ、RTX3060 12GB搭載のいたって平凡なものだ。

動画の紹介

できた画像や生成の様子を動画にまとめている。動画で説明していない情報はこの下に書いてある。

ダウンロード、インストール

いつものように、Pythonの仮想環境を作る。SSDのFドライブに作っていく。FドライブにはPython 仮想環境を置く「\python」フォルダがある。

f:
cd \python
python3 -m venv sana
cd sana\Scripts
.\activate

Pythonの準備ができたら、ワークディレクトリを作る。FドライブにはAI関連の「\ai」フォルダがある。

cd \ai
mkdir sana
cd sana

さてここからダウンロードをしていく。

画像生成AI Sana インストール画面

画像生成AI Sana インストール画面

pip install git+https://github.com/huggingface/diffusers
pip install torch==2.3.1 --index-url https://download.pytorch.org/whl/cu121
pip3 install transformers accelerate
pip install "numpy<2"

何回か完了できず、torchやnumpyの解決のため検索を行い、上記のようになった。pythonやCUDAのバージョンによっては記述を変える必要があるかもしれない。

サンプルの実行

まずはWEBにあった、以下のプロンプトを実行してみる。PythonのコードはREADME.mdに載っているもののまま。

'a cyberpunk cat with a neon sign that says "Sana"'

実行するとほどなく終わる。

画像生成AI Sana 実行画面

画像生成AI Sana 実行画面

ファイルが保存されているのでそれを表示すると、猫が表示される。
画像生成AI Sana 生成例

画像生成AI Sana 生成例

速いが決して質が悪くない。この辺りはDiffusionの改良を行っているせいかと思われるが、GPU専用としているあたりに早さの秘訣があるのかな。

いろいろ作ってみる

サンプルを改造して、いろいろ作ってみる。

import torch
from diffusers import SanaPAGPipeline
import datetime

pipe = SanaPAGPipeline.from_pretrained(
"Efficient-Large-Model/Sana_1600M_1024px_BF16_diffusers",
variant="bf16",
torch_dtype=torch.bfloat16,
pag_applied_layers="transformer_blocks.8",
)
pipe.to("cuda")

pipe.text_encoder.to(torch.bfloat16)
pipe.vae.to(torch.bfloat16)

text_array = [
"A cat holding a sign that says hello world",
"A dog holding a sign that says hello world",
"A mouse holding a sign that says hello world",
"A horse holding a sign that says hello world",
"A cow holding a sign that says hello world",
"A dinasor holding a sign that says hello world",
"Crossing street in Shibuya, Tokyo with many people",
" Shinkansen is arriving at the station",
"Tokyo sightseeing spot, best10",
"anmal holding a sign that says IrvineのもっとPC自作日記",
"A cat holding a sign that says Irvine's PC DIY diary",
"A panda holding a sign that says Irvine's PC DIY diary",
"Mr. Trump holding a sign that says Irvine's PC DIY diary",
"Mr. Puchin holding a sign that says Irvine's PC DIY diary",
"Mr. Ishiba holding a sign that says Irvine's PC DIY diary",
]

for text in text_array :
image = pipe(
prompt=text,
guidance_scale=5.0,
pag_scale=2.0,
num_inference_steps=20,
generator=torch.Generator(device="cuda").manual_seed(42),
)[0] image[0].show()

dt_now = datetime.datetime.now()
month = "00"+str(dt_now.month)
day = "00" + str(dt_now.day)
hour = "00" + str(dt_now.hour)
min = "00" + str(dt_now.minute)
sec = "00" + str(dt_now.second)
filename = str(dt_now.year)+month[-2:] + day[-2:] + hour[-2:] + min[-2:] + sec[-2:] image[0].save(filename + ".png")

結果、作られたものの一部を紹介。プロンプトはソースコード内にある。

画像生成AI Sana 生成例

画像生成AI Sana 生成例

画像生成AI Sana 生成例

画像生成AI Sana 生成例

画像生成AI Sana 生成例

画像生成AI Sana 生成例

FLUX.1との比較

FLUX.1は画質はいいのだが、生成に時間がかかる。他のことをしながら裏で動かして大量に画像を作って、後で良しあしを選別したりするが、もともとGPUメモリ16GBは欲しいものなのでしょうがないのかな。

生成時間の比較を今回はやっていないが、Sanaでは1枚当たり1分かからないのでどんどん作られる。ComfyUIと組み合わせると使い勝手がよくなると思うが、今のところFLUX.1専用にしているので設定を変えたくない。このため、Sanaは上記ソースコードを改良して生成している。

では生成した画像を比較しよう。主観もあるので好みでどっちがいいということもあると思うが、どちらもいい、と自分は思っている。
両方とも高画質なものを生成している。

Sana

画像生成AI Sana 生成例

画像生成AI Sana 生成例

画像生成AI Sana 生成例

画像生成AI Sana 生成例

FLUX.1

画像生成AI FLUX.1 生成例

画像生成AI FLUX.1 生成例

画像生成AI FLUX.1 生成例

画像生成AI FLUX.1 生成例

生成したプロンプトは動画の中で紹介している。

注意点

Sanaは高画質で速くていうことないのだが、一つだけ問題がある。
先のソースコードで以下の個所がある。カッコ内は乱数だ。

manual_seed(42),

この42を適当に換えると同じプロンプトでも異なる画像を生成できる。これはどの生成AIでも同じだ。
改良したプログラムでこの乱数を適当に換えられるようにして同じプロンプトで複数枚の画像を生成したのだが、同じ画像が何枚もできていることが分かった。

乱数が同じためなのか、異なっているかまでは調べていない。前者なら乱数を重複しないようにすれば異なる画像になると思うが、それにしても同じ画像が多い。
FLUX.1ではこういうことはなかったので、もしかしたらSanaはベースにする蓄積した情報が少なくて、生成できるバリエーションが狭いのかもしれない。つまり描かれる人物のパターンが数人しかなくて、何度も生成していると同じ人が何度も作られるということかもしれない。

もしそうであれば、仕事を早く終えるという点ではSanaは優秀なのだが、他とは違う、個性的な画像を作ろうとすると限界が早く見えるのかもしれない。

まとめ

とはいえ、FLUX.1とは異なる画像を作ってくれるので、併用すれば役立ちそうだ。
RTX3060 12GBでも1枚当たり20秒もかからず生成してくれる高速なSanaの動画バージョンを期待したい。

PR

   
著者プロフィール
irvine
 ソフトウェア設計、ストレージ設計を経てクラウドにかかわる仕事をしている、東京郊外在住のエンジニア。
 仕事でUS,UK,SGなどの国とかかわる。
 自作PC、スマホ、タブレット、AV機器好き。ドラクエウォークはルーチンワーク。Linuxやストレージ、IT業界の動向は興味を持っている。
 新しい機器、サービスに興味あり。年数回のレビュー(自腹購入、ご依頼)と発表されて興味があるものの新製品机上レビューをやっている。
 2022年はJAPANNEXT様のアンバサダーを務めました。
 
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です