2023年上半期、IT業界を含め、あらゆる業界の話題をさらったのは、間違いなく「生成AI」だろう。今回は、画像生成AIを自宅のPCやクラウドのColabなどで動かす方法を紹介する。
生成AIは高機能なPCがないと使えないという思い込み
まず、ここ数年、生成AIが急に注目を集めている理由から考えてみよう。それは、間違いなくコンピューターの高性能化によるところが大きいと言って過言ではない。特に、GPU(Graphics Processing Unitの略)の高性能化がAI(人工知能)の発展に及ぼした影響は計り知れない。話題のChatGPTなどの生成AIのトレーニングに使うスーパーコンピューターは、グラフィックカード1万枚、プロセッサコア28万5000個搭載しているマシンが必要だと言われている。そのため、普段自宅で使っているPCを使って、生成AIは使えないと思っている人も多いことだろう。
上述の通り、もともと生成AIは高性能なマシンを使うことで発展してきたのだが、誰でも自宅のマシンでも何とか動かしてみたいと思うことだろう。それで、最近では、いかにして低スペックマシンでAIを動かすのかという点に重きが置かれ研究が進んでいる。生成AIのモデルのパラメータを減らしたり、GPUのないマシンでも動作するように、ソースコードをC++に移植したりと、日夜さまざまな努力が行われている。
そして、最近ではその研究の甲斐あって、自宅PCでも生成AIがなんとか動くようになってきている。特に画像生成AIは活発に開発が進んでいる。それで、実際、試してみたら、「意外と動いた」ということがあるかもしれない。本稿をきっかけに画像生成AIを身近なマシンで試してみよう。
画像生成AIはMacやiPadがあればすぐに試せる
なお、MacbookやiPadなどApple製品を使っているなら、AppStoreから画像生成AIのアプリをダウンロードして試すことができる。
例えば、「Draw Things」は、オープンソースのStable Diffusionを利用したアプリだ。プロンプトと呼ばれるテキストを入力することで、画像を生成することができる。
アプリを起動して、どの画像生成モデルを利用するかを指定しよう。Draw Thingsでは、オープンソースで公開されている生成モデルを選ぶとダウンロードが始まる。
そして、何を描画して欲しいかをプロンプトとして指定して、[Generate]のボタンを押すだけで画像が生成される。つまり、(1)生成モデルを選び、(2)プロンプトを入力して、(3) [Generate]ボタンを押して、(4) しばらく待っているだけでAIが画像を描画してくれる。
例えば、夏の夜空に花火が上がっている場面を描画したいとしよう。そんな場合は、次のようなプロンプトを入力する。なお、オープンソースの画像生成AIでは、日本語が指定できるものはまだ少なく、英語で入力する必要がある。
(masterpiece, best quality:1.3),1girl, looking up fireworks focus, from behind, backlighting, night sky
すると、次のような画像が生成される。
設定にもよって生成時間は異なるが、筆者が試したところ、手元のMacbook Pro(Apple M1 Pro 16GB)で、モデル「Generic (Stable Diffusion v1.5)」を試すと、2分ほどで1枚の画像を生成することができた。
また、iPad Air(第4世代/2020年)でも、モデル「Generic SD(MiniSD v1.4)」を利用すれば1分ほどで1枚の画像が生成された。いずれにしても手元のマシンで心ゆくまで画像生成AIが試せるので悪くないだろう。
Windowsの場合は?
なお、Windowsでもアプリをダウンロードするだけで使える「NMKD Stable Diffusion GUI」などがあるので、試してみるとよいだろう。
「遅い、遅すぎる」と感じたらクラウドを試してみよう
さて、ここからが本題だ。もしかすると、Pythonの連載なのに、Pythonらしさがないので心配した方もいるかもしれない。オープンソースのStable Diffusionを利用して画像を生成してみよう。
今回は、Googleが無償あるいは低予算で使えるよう提供してくれるGoogle Colaboratory(以後、Colabと略す)を使ってみよう。Colabを使えば自宅マシンのスペックに関係なく快適に画像生成を行うことができる。なお、Colabについては、過去の連載こちらで詳しく紹介しているので基本を押さえたい場合には、そちらを参照しよう。
ただし、Colabは実行するたびに、実行環境がゼロにリセットされるというクラウド環境だ。そのため、Stable Diffusionの環境の構築も、ゼロから試す必要があるのだが、逆に言えば、多少無茶な使い方をしても、ランタイムを接続解除さえしてしまえばなかったことにできるのはメリットとも言える。
それでは、さっそく、Colabを利用して画像生成に挑戦してみよう。以下のColabのURLにブラウザでアクセスしよう。
Google Colaboratory
[URL] https://colab.research.google.com/
Coalbにアクセスしたら、Googleアカウントでサインインしよう。そして、[ノートブックを新規作成]ボタンをクリックしよう。
そして、画面上部にある「ランタイム」というメニューから「ランタイムのタイプを変更」をクリックして、[GPU]を選択して「保存」ボタンを押そう。これで準備完了だ。
Stable Diffusionのインストール
Colabのメイン画面には、Pythonのプログラムを記述するノートブックが表示されるので、以下のコマンドを記述して、テキストボックスの左側にある実行ボタンを押そう。このコマンドを実行することで、Stable Diffusionの実行に必要なライブラリがインストールされる。
# 必要なパッケージのインストール
! pip install -U diffusers==0.17.1 \
transformers==4.30.2 \
scipy==1.11.0 \
ftfy==6.1.1 \
accelerate==0.20.3
なお、実行ボタンを押すと、次の画像のように、続々とライブラリがインストールされるのを確認できる。
画像生成を実行しよう
次に、以下のPythonのプログラムを記述して実行しよう。
from diffusers import StableDiffusionPipeline
from torch import autocast
# 利用するモデルを指定 --- (*1)
model = "CompVis/stable-diffusion-v1-4"
# プロンプトの指定 --- (*2)
prompt = '(masterpiece, best quality:1.3),1girl, looking up fireworks focus, from behind, backlighting, night sky'
# 画像を生成 --- (*3)
pipe = StableDiffusionPipeline.from_pretrained(model).to("cuda")
image = pipe(prompt, width=512, height=512).images[0]
image.save('image.png')
# 画像を表示 --- (*4)
from IPython.display import Image,display_png
display_png(image)
上記のプログラムを貼り付けて実行ボタンを押してみよう。すると、画像生成モデルがダウンロードされて、画像が生成される。
うまく画像が表示されたなら、プログラムを確認してみよう。
プログラムの(*1)では、利用するモデルを指定する。こちらから、Hugging FaceにあるStable Diffusionのモデル一覧を確認できるので、適当な名前を選んで指定してみよう。
(*2)の部分では、どんな画像を描画するのかのプロンプトを指定する。なお、どんなプロンプトをすると、どんな画像が生成されるかは多くの人が研究しているので、「Stable Diffusion プロンプト コツ」などのキーワードで検索してみると良いだろう。
(*3)ではStableDiffusionPipelineを利用して画像生成を行うプログラムを記述している。実際のところ、たったこの数行を記述するだけで、モデルをダウンロードして画像を生成できるようになっている。ライブラリを整備してくれた先人に感謝だ。
(*4)ではColabの画面に画像ファイルを表示する。