at backyard

Color my life with the chaos of trouble.

手元のWindows ノートPCでStable Diffusion web UIを動かす(VRAM 4GB環境で真っ黒な画像が出る場合の対応方法つき)

今更ながらStable Diffusion web UIを手元のノートPC(Windows)で動かすためにやったことを下記にメモとして残しておく。

基本的に下記の記事を参考にさせていただいている

zenn.dev

目次

自身のGPU周りの環境

(以下のような情報載せておけばOK?)

  • NVIDIA GeForce GTX 1650 Ti
  • 専用GPUメモリは4GB
  • OSはWindows 11
  • anacondaを利用しており、バージョンは conda 4.12.0
  • 以下にも書いているがPythonのバージョンは3.9を利用(正確には 3.9.15

ちなみに利用しているマシンは以下で書いているやつです。

shinshin86.hateblo.jp

Stable Diffusion web UIを手元のノートPC(Windows)で動かすまで

参照しているリポジトリのリンクは以下。

github.com

Anaconda promptを起動して実施している

rem clone
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
cd stable-diffusion-webui

rem モデルファイルをmodels\stable-diffusion配下に格納

rem stable diffusion用のconda環境を作成
conda create sd-webui python=3.9
conda activate sd-webui

rem pytorchを先に入れておかなければ依存パッケージのbasicsrインストールが失敗するので、まずは下記のコマンドだけ先に実施
pip install pytorch_lightning==1.7.7

rem 依存関連のインストール
pip install -r requirements.txt

rem 下記を実行してしばし待つ
.\webui.bat

処理がひと段落つくとローカルサーバが起動するので、 http://127.0.0.1:7860 にアクセスするとStable Diffusion web UIの画面が表示される。

Stable Diffusion web UIで真っ黒な画像が生成されてしまう

試しに cat one という単語を入力して生成を試みる。

ちなみに生成中の専用GPUメモリは 3.2GB ほど利用していた

生成完了後、以下のように真っ黒な画像が表示されてしまう。

調べてみると専用GPUメモリが4GBのケースでこういう問題は起きるようだ。

※参考になった情報源は下記のreddit

www.reddit.com

どうやらコマンドラインオプションを渡す必要があるらしい。

Stable Diffusion web UIを用いていて、VRAMが4GBの環境で真っ黒な画像が生成される場合の対応方法

上のリンク内を参照した限り、どうやらコマンドラインオプションを渡す必要があるらしいので webui-user.batを以下のように編集して、実行する。

@echo off

set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--lowvram --precision full --no-half

call webui.bat

実行は以下。

.\webui-user.bat

具体的には COMMANDLINE_ARGS に対して --lowvram --precision full --no-half というオプションを付与した形となる。

このオプション(多分関係するオプションとしては --lowvram になるだろうが)を付与すると手元のGPU2.3GB まで利用する形となる)

すると、無事に画像が生成される。

備忘録は以上。

GMOを名乗るところから怪しいメールが来たのでメモ

GMOを名乗るところから、かなりそれっぽい怪しいメールが来たので注意喚起も兼ねて書いておく。

メールの内容は以下のような内容。
スクリーンショット上からは見切れてしまっているのだが、メール末尾に送信元がGMOからのメールである旨の文章が書かれている。 (一応特定を避けるため、細かな数字はマスクしている)

(今こうやって改めて見返すと文章もところどころ怪しい...)

メールを受け取ったドメインがお名前ドットコム上で取得しているドメインであり、かつGMOから受け取ったメールということで、そのままシステムメンテナンスに関する障害の連絡かと思い、画面下部にあるメール受信のボタンを押してしまった。

すると、以下のようなChromeの画面になった。

ドメインを見ると、GMOとは全く関係ないドメイン

ドメインを全く見ずにボタンを押してしまったのは完全に自分のミスだが、

  • お名前どっとこむ上で取得したドメインあてにGMOからメールが来た
  • 送信メールアドレス自体が自身のメールアドレス(これは偽装可能なので、そのまま信用してはいけないのだが...)

というのを見た上で、そのまま信じてしまった。

ちなみにメールのソースを見返してみると、Received の箇所が以下のように localhost となってており、おそらくはプログラム経由でこういうメールをばらまいたのだろうと想像している。

Received: from localhost (localhost [127.0.0.1])

悔しいが、完全に自分のミス。
こういうことを二度と起こさないためと注意喚起のため、このポストをこちらに投稿した。

ZERO Sievertの操作方法

昨日も話した、ZERO Sievertだが、操作方法を覚えるためにわかりやすく一覧にまとめたものをこちらにメモとして残しておく。

shinshin86.hateblo.jp

ZERO Sievertの操作方法

行動 キー
上に移動 W
下に移動 S
右に移動 D
左に移動 A
走る Shiftを押しながら移動
インベントリを開く TAB
インタラクト(人に近づいて会話する、アイテムを開く、など) F
リロード R
ライトの点灯切り替え T
レーザーの店頭切り替え L
バイスを開いて各種情報を確認 J
マップを開く M
ボルトを投げる G
銃の発射モードを切り替える B
ヘッドセットのオンオフ N
利用する銃弾を選択 Y
利用している銃を詳しく確認 K
各種スロットに設定されたアイテムを利用 1~8

なお、操作方法自体は下記のキーバインドを参照している。

ZERO Sievertの操作方法

余談だが、最初操作方法もちゃんと調べずにプレイを開始したらインベントリの開き方やリロードの仕方すら分からず、フィールドでやられるという失態を犯したりしていた。今でもまだ覚えきれていないので、こちらで見やすくテーブル表示にして残しておくことにした次第。

弟者の配信で知った『ZERO Sievert』が2D版タルコフといった感じで楽しい

最近2BROの弟者の配信で知ったZERO Sievertがとても面白そうだったので、購入して息抜き時間にプレイしている。

弟者の配信 www.youtube.com

ZERO SievertのSteamページ(なお、11/30頃まで10%の割引価格となっている)

store.steampowered.com

ZERO Sievertは2D版ドット絵のタルコフ?

最初に上げた弟者の配信動画内で弟者本人が喋っているように、タルコフ、あとはストーカー(というゲームを私は知らないので、これもFPSみたい?)というゲームを2Dのドット絵・ピクセル絵にしたようなゲームが、このZERO Sievert。

私は弟者の配信が好きで彼がプレイしているタルコフのゲーム配信もよく見ていたのだが、タルコフの方はそれなりにPCスペックも必要だし、何よりかなりハードコアな世界観のFPSで、ヌルゲーマーの自分には手を出しにくい感じもしていた。

だが、ZERO Sievertはこのように可愛らしい絵柄となっており、かつ2Dの見下ろし視点でもあることから、FPS系がそこまで得意でない人間にも手が出しやすいような世界観となっている。

だが、一見可愛らしい世界観だが、プレイする内容は個人的にタルコフを彷彿とさせるような内容となっており、実際にプレイするとすぐにやられてしまう。というか、自分にとってはかなり難易度高めでガンガンやられている。

だが、やられてしまっても出発時に所有していたアイテムが全てロストするわけではないので、すぐに再挑戦できるのは嬉しいところだし、次こそは生き残って脱出するぞ!という気持ちですぐにリトライできるので、テンポよくゲームを進めていける。 (ZERO Sievertでは拠点とフィールド(ダンジョン的なもの)を行き来しながらゲームが進行していく。フィールド内では敵が出るのだが、そいつらが強い。)

ゲーム内には喉の乾きや空腹などの概念もあり、水や食べ物を食べる際に流れるリアルなSEは個人的にかなりタルコフを彷彿とさせる。
またアイテム類もタルコフを彷彿とさせる物が多い。 (というかこういう系のゲームはだいたいこんな感じなのだろうか。自分はタルコフぐらいしか知らないのですべてタルコフと比べてしまう)

まあ、そんなわけで最近ZERO Sievertをプレイしているという話でした。

弟者の配信でタルコフ興味あるけど、ちょっと敷居が高いんだよね...と思っていた人はZERO Sievertをレッツトライ!

rebuild.fmでも話題に上がっていた whisper.cpp で文字起こしを試してみる (M2 MacBook Air)

はじめに

rebuildでおなじみの宮川さんが以前呟いていたwhisper.cppがずっと気になっていた

そんななか rebuild.fm でも話題に上がっていて、これはもう自分でも試さねばと思い、ラジオを聞き終えてからM2 MacBook Airを開いた。

rebuild.fm

というわけで、今回のポストはwhisper.cppを試してみたポスト

少し長くなるので目次を用意した。

目次

whisper.cppのインストールとサンプルを解析

リポジトリは以下。

github.com

ちなみにWASM版も用意されていて、気楽に試したいときはこちらがおすすめ?

github.com

私は通常版を利用する。

以下インストール備忘録。

なお、環境はM2 MacBook AirmacOS Montereyの 12.6.1

# clone
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp

# Whisperのモデルをggml形式に変換したものを1つダウンロード (READMEに倣って実行)
# 後述するが、日本語を読み取らせたい場合 base.en では対応していない。その場合、baseなど別のモデルを利用する
bash ./models/download-ggml-model.sh base.en


# makeコマンドを実行する
make

# カレントにmainファイルができる。これが実行バイナリ
# 試しにsamplesディレクトリにある音声ファイル試してみる
./main -f samples/jfk.wav

実行は一瞬で終わる。
実行結果に以下のようなログがあり、これが文字起こしされたテキストとなる。

[00:00:00.000 --> 00:00:11.000]   And so my fellow Americans, ask not what your country can do for you, ask what you can do for your country.

whisper.cppが読み取ることができる音声データは16kHzのWAVファイルのみ

さてここで一瞬脇道にそれるが、 whisper.cppが読み取ることができる音声データは16kHzのWAVファイルのみとなっている。

16kHzではない音声データを読み込まようとした場合、以下のようなエラーメッセージが表示される。

./main: WAV file 'blueblue.wav' must be 16 kHz

この16kHzへの変換だが、最初 Logic ProGarageBand などのDAWソフトを使ってサクッと変換できないかなと思い色々試していたが、結局できないようだった。

そして、16kHz wavファイルへの変換には ffmpeg を用いるのが一番早そうというのがわかった。

M2 MacBook Air (Apple Silicon)にffmpegをインストールする

最初 brew コマンドで ffmpeg をインストールしようとしたが、これは残念ながら失敗。

その後インターネットで検索してみると、ffmpegをインストールするのに別のライブラリを入れてから brew でインストールを試みたり、予め誰かがビルドしたものをダウンロードして利用するなどの記述を見かけた。

ffmpegの利用シーンとして特殊なビルドを必要とするケースもあるのかもしれないが、そもそも私は ffmpeg よく分からないし、人がビルドしたものを利用するのも少し抵抗があったので、自前でソースを持ってきてビルドすることにした。

結論から書くとこのやり方で自分がやりたい変換(16kHzのwavファイルへの変換)は実現できた。

だが、上にも書いたようにもう少し込み入った変換を行う必要がある場合は、これでは不十分かもしれないということだけ書き残しておく。

というわけで、M2 MacBook Airffmpeg を自前でビルドしてインストールした際のメモを以下に貼る。

# 作業用ディレクトリにてソースコードをクローン
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg

# ビルドとコンパイル
# prefixはお好みで。私はHOME以下にした。これをつけないと、make install時に管理者権限がなくて失敗するようだった(たぶんsudoをつければそこはOKかも)
./configure --prefix=~/tools
make
make install

# arm64 (Apple Silicon) architectureでffmpegがインストールされたことを確認
./ffmpeg -version

これで ffmpeg を利用する準備は整った。

Beaglesの楽曲を whisper.cpp で読み取らせて、歌詞の文字起こしを試してみる

ここからが本番。

whisper.cppを使って日本語楽曲の歌詞の文字起こしをさせてみたいと思う。

whisper.cppで利用できるmodel

whisper.cppではあらかじめ複数のモデルが利用できる。
(以下で利用できるモデルの種類が確認できる)

https://github.com/ggerganov/whisper.cpp/tree/master/models

今回は small を使って行きたいと思う。
なお、日本語など英語以外の言語を読み取らせたい場合は .en と末尾についているモデル以外を選ぶ必要があるようだ。
( .en は英語特化のモデルなのかな?)

small のモデルのダウンロードは whisper.cpp のルートで以下を実行すればOK

bash ./models/download-ggml-model.sh small

whisper.cppで読み取らせるために16kHzのwavファイルに変換する

今回はBeaglesの『Blue blue』という楽曲の文字起こしを実行してみたいと思う。

www.youtube.com

[宣伝] Beaglesの楽曲はApple Musicを始め、サブスク系の音楽サービスで聴くことができるのでぜひぜひ聴いてみてください。
なお、以下のアルバムはよなよなエールでおなじみのヤッホーブルーイングのビールをテーマにした楽曲群、というコンセプトで作られています。

music.apple.com

Beaglesの楽曲をまずは whisper.cpp で読み取らせるために16kHzのwavファイルに変換する

# パスは適宜読み替えてください
~/tools/ffmpeg -i blueblue.wav -ar 16000 -ac 1 -c:a pcm_s16le blueblue16.wav

次に下記のコマンドを実行する。

./main -m models/ggml-small.bin  -f blueblue16.wav -l ja

すると、以下のような結果がコンソール上に出てくる。

Beaglesのblue blueの歌詞

一部うまく読み取れていない箇所もあるが、ここはモデルを一段上のものに上げれば改善するかもしれないし、ただ単に私の滑舌が悪くてモデルがうまく認識できていないだけかもしれない。

だが、いずれにせよ楽曲ファイルを読み込んで歌詞の文字起こしをするというのは whisper.cpp で実現可能ということがわかった。

音声ファイルの読み取りもバッチリ

ちなみに当然ながら音声ファイルの読み取りもバッチリであった。

以下は basesmall 、2つのモデルで認識させた際の比較

baseモデルで音声を認識させた場合

base モデルだと毎朝と喋っているところが「まやさ」になっている

smallモデルで音声を認識させた場合

smallにすると正常に言葉を認識できている模様

使ってみた感想

rebuild.fmの中でも宮川さんが話していたが、本当にかんたんにセットアップできて、すぐに文字起こしが出来てしまう。おまけに高速 & 高性能。という感じで使っていて感動した。

実際に利用する際にはライセンス周りは色々と確認する必要があるが、いわゆるAIを用いたツールというのも本当に身近になってきたんだなと感じる今日でした。

GitHubのページを見る限りだと whisper.cpp 自体はMITライセンスのようだが、モデルなどは異なるかもしれない

(余談)試行錯誤のあと

ちなみにここまで行くのに割と結構試行した。
その記録はTwitterに残っている。

GarageBandを使えば16ビット音質のwavファイルが作成できる

別の作業をしていた際にたまたま見つけたのだが、16ビットのwavファイルを書き出したいときはGarageBandを使うと良さそうだった。

書き出したい対象の音声・楽曲ファイルを読み込んで、あとはGarageBandからバウンスするだけ。下記のように指定できる。

16ビットで書き出せる

特定のビットで書き出せる手段などは知っておくと、後々役に立つことも多いのでメモがてらこちらに書き残した

George Hotz、Twitterで働くってよ!

何かと話題のTwitterイーロン・マスクだが、George Hotzがなんと12週間Twitterインターンすることになったらしい。

たまたま今日このニュースが話題になっていて、驚きとともにこのポストを書いているのだが、少し前にGeorge Hotzは so how does twitter work? というライブ配信を行っており、そこでTwitterがどういう動きをしているのかを調査するようなことを行っている。

www.youtube.com

実はこの配信アーカイブを少しずつ見ていて面白いなーぐらいに思っていたのだが、まさかTwitterで働くことになるとは。
(もしかしたらこの配信もそれに関係しているのか?英語が聞き取れない関係で私が気づいていないだけかもしれない)

追記:配信の中でも12週間働くことについて話していた