ぐるのなんか

多分ゲームのプレイ日記とか

AIに翻訳アプリ作らせました

仕事の開発でもAI使い始めて、挙動の制御に四苦八苦することが最近の仕事になりつつあります。ぐるです。
IDEにAIが組み込まれてるタイプのツールの利用許可が出たので、どうにかして人間の仕事を減らすためにルールの整備をしたり、コンバートかけた既存のドキュメントを読み取らせて仕事の精度上げたりしてます。
元々APIで利用するのに馴染んでいたのでツール側で使用できるモデルが制限されるタイプに抵抗があったんですが、プライベートでClaudeのAPIで数日で$50ぐらい溶かされたのをきっかけに、$20,$40ぐらいでそこそこ使えるIDEタイプも悪くねぇかと思い始めてます。
そんなわけでプライベートでもAIでぼちぼち開発をしていて、これは一般公開しても大丈夫かなというものができたので紹介記事を書こうと思います。

アプリについて

何を作ったか

github.com
シンプルに言えばAI OCR+翻訳ツールです。
枠線で囲った部分を画像としてキャプチャし、画像を処理できるAIに文字抽出と翻訳をいっぺんにやらせるものになります。
翻訳ツールとして一番ややこしい部分はAIに丸投げなので、主にUI部分を使い勝手良くするのに時間とトークンを使ってます。

動作デモ

GIFでは手動で動かしてますが、キャプチャ範囲内の内容に変化があったら自動でキャプチャ→翻訳を行うモードもあります。というかそっちがメインです。
あと翻訳文を枠線内に表示するか別ウィンドウで表示するモードかを選べるようにしてます。翻訳履歴を確認できるのは別ウィンドウモードだけになってます。

別ウィンドウで表示

いつ使うか

基本的にはノベルゲームなんかのテキスト部分に設定して自動で翻訳させる用途を想定してます。
そもそも自分が海外の日本語訳されてないゲームなんかをする時に、なんとなく雰囲気は理解できてても細かいところはわからんし認知負荷も高くてしんどいし、テキストコピペで翻訳するのもめんどいしそもそもコピペできんゲームが大半やし、ということで、その手間な部分をツール化した形です。
後は同様の理由で日本語化されてないツールの翻訳とかに使えるかと思います。GUIの英語部分とかもコピペできないので。

どう使うか

インストーラーとかはないので、GitHubのリリースページから最新のzipを落として任意のフォルダに配置してexeを実行してください。
セキュリティソフトの誤検知が酷かったのでexe1ファイルに集約するのは諦めました。
起動したら歯車ボタンから設定開いて、ローカルのLLMかクラウドのAIサービスのAPIとかを設定して、翻訳したい箇所を枠線で囲って翻訳という使い方です。

設定画面
枠線動かしたりリサイズしたり

まだ自分が気になった使い勝手の部分を改善するのを優先しているので、LM Studioを使うのを前提としてOpenAI API互換のものしか対応してなかったりします。
将来的にはGeminiやClaudeあたりも対応させたいなとは思ってます。ClaudeのAPIは用途的にもったいないか…?

使用モデル

ローカルLLMで翻訳する場合、個人的には今のところGemma 4のE4Bか26B-A4Bがおすすめな感じです。
Rimtalkの記事書いた時はGemma 3n E4Bとかを推しつつ、あん時「軽量高速なモデルは用途が広いのでまたいい感じのやつ作ってくれんかなぁ」と書いてましたがちょっとしたらGemma 4出ましたね。ローカルでの使用ほぼこれでええやんとなってます。
ローカルで動かすならE4Bで、別PCで推論させられる場合は量子化強めにかかった26B-A4BをギリギリまでGPUにロードさせるとかでかなり速く翻訳してくれます。
特に26B-A4Bがかなり自然に翻訳してくれるので気に入ってます。

制作環境

前までClineにGeminiのAPIで色々弄ってたんですが、結構Geminiは個々の実装はできても全体的な整合性を保っての実装は厳しいなと感じたので、RooにClaude入れたり組み合わせたりなんだりしてます。
最近はAIエージェント組み込み型のIDEとかも使ってみたりしてます。これで金稼ぐ目処が立たないので、月額とか従量課金とかトータルで月$50ぐらいに収めたいなぁ。
あとはコミット時、マージ時、リリース時のルールとかも決めて変更内容の更新やマージ前のテストとかも全部AIにやらせてます。自分でコード書いてないとわからんのでAIに把握させてます。
そういえばGitHubに公開リポジトリ作ったの初めてなんですが、リリース用のビルドとかもGitHub側で出来るんですねぇ。仕事では秘密保持とかの関係でGitHub使うことがほぼ無いので知らんかった。

おわりに

「こんなんあったらええな」というアイディアをコードにしやすくなったし、LLMが発展してコードだけではめんどいorどうにもならんとこをうまく解決する方法も出来たので楽しいですね。
特に今回は画像から文字抽出して翻訳してというのが、LLM使わないと精度的に厳しい上に融通が効かない作りになったと思うので…。
ただ先々のことを考えると、収益につなげる構造を作らないと「持続可能な開発」って感じではなさそう。
プライベートでAI使った開発の知識つけて本業で活かして収入源を維持って感じでしょうか。非課税の収入がほしい。

おわり。

RimTalkの推論を別のPCでやらせる

最近またRimworldをやってまして、もちろんModもりもりにして遊んでるんですが、導入に結構四苦八苦したものがあったので記事にしておこうかなと思います。

はじめに

なんのModを入れようとしたかですが、ここ半年ぐらいで大きく話題になったRimtalk、要するに生成AI使ってゲーム内のキャラに喋らせるModです。
steamcommunity.com
ゲーム内のイベントやキャラの体調なんかの情報を収集して色々喋ってくれるおもろいModです。

もちろん生成AIを使うってことはそのための処理をどっかでやらないといけないんですが、基本的にはGeminiのAPI使って無料枠内で色々喋らせるのが主流かと思います。
まあめんどいことも少ないのでそれで済むならそっちのほうがいいんですが、色々と懸念することもあるわけです。

APIの無料枠というのは当然制限があるのであんまり好き勝手に短いスパンで喋らせるとすぐ上限達してしまいますし、Rimworldは割と倫理観が緩い世界なので「この行動の情報Googleに送るのはどうよ?」ということも多いです(薬とかモツ抜きとか)。

そうなるとローカルでAI動かしてそこに喋らせるというのも選択肢に上がってくるわけですが、やってみればわかりますがGPU喰らいの生成AI動かしながらゲームというのはかなり快適性を下げます。
「今セリフ生成してるな」ってのがわかるぐらい明確にゲームがカクつくのであまりよろしくありません。

ゲームがカクつくのはいやだ、でもローカルAIで喋らせたい、となった時、画像生成とかで使ってるサブPCがあるやん!となったのでやりました。
以下はその導入の記録です。

導入

環境

Rimworldを実行するメインPCはWindows11、AIを実行するサブPCはUbuntu 24.04で同じネットワーク内にあります。
サブPCにはLM StudioをインストールしてLM Studioのサーバー機能使ってメインPCからのリクエストを受け取る形です。
Rimtalkなどの必要なModは事前にインストールされており、基本的な設定の仕方も把握してる前提とします。

失敗例

まず最初に試したのはLM Studioのサーバーをローカルネットワーク内で使えるようにして、サブPCのサーバーへのURLをRimtalkに設定するやり方です。

メインPCでLM Studio動かす場合とほぼ同じ手順ですが、サブPCの場合はこれだとうまいこといきません。

一応内部のログとかを確認してGeminiとかにも訊いてみたんですが、Unityのセキュリティだかなんだかで別PCへのアクセスはHTTPじゃだめらしいです。

Geminiさんすげー

あれやこれややってみてVPNかましたりできんかと思いましたが、やっぱ根本的にHTTPじゃなくてHTTPSでやるのがシンプルかつローカルで完結するだろうという結論になりました。

成功例

成功したパターンをざっくり説明すると、メインPCからサブPCを信頼させてやり、サブPCに立てたリバースプロキシ経由でLM Studioサーバーにアクセスするという感じです。

メインPC側の作業①

メインPCには自前の証明局を立ててサブPCを信頼させるという処理をさせますが、そのためにmkcertというツールを使います。
github.com
リリースページから「mkcert-vX.X.X-windows-XXX.exe」をダウンロードしてきます。バージョンとアーキテクチャは自分の環境に合わせて。
ダウンロードしたexeファイルを「mkcert.exe」に改名して任意のフォルダに配置します(ファイル名がコマンドになるため)。
配置したフォルダでターミナルを開いたらコマンド実行してmkcertをインストール。

mkcert -install

なんか証明書をインストールするときの画面が出てくると思うのでインストールしておきます。
次はサブPCを信頼するためのコマンドを実行。

mkcert [サブPCのIPアドレス]

そうすると同じフォルダに[サブPCのIPアドレス].pem、[サブPCのIPアドレス]-key.pemという2つのファイルが生成されます。
これがサブPCを証明するための秘密鍵、公開鍵のペアになります。
これをサブPC側にコピーしたらサブPC側の作業に移ります。

サブPC側の作業

まずはサブPCにリバースプロキシとして使うCaddyをインストールします。
当時のコマンド記録に残ってないので一応公式ドキュメント参照。
caddyserver.com

Caddyをインストールしたら鍵のペアがあるディレクトリに移動して下記のコマンドを実行。

# 鍵のペアを置くフォルダを作成
sudo mkdir -p /etc/caddy/certs
# カレントディレクトリにある鍵のペアを作成したフォルダに移動
sudo mv *.pem /etc/caddy/certs/
# フォルダの所有権をユーザー「caddy」に設定
sudo chown -R caddy:caddy /etc/caddy/certs
# 鍵ファイルのアクセス権限を変更
sudo chmod 444 /etc/caddy/certs/*.pem

終わったら多分Caddyインストール時に/etc/caddyに生成されてるであろう「Caddyfile」を開いて以下の設定を追加します。
この設定によりサブPCにHTTPSでアクセスすると、サブPCのローカルでポート1234で公開されているサービスに中継されます。

[サブPCのIPアドレス]:443 {
    reverse_proxy localhost:1234
    tls /etc/caddy/certs/[サブPCのIPアドレス].pem /etc/caddy/certs/[サブPCのIPアドレス]-key.pem
}

設定が終わったら以下のコマンドでCaddyを再起動。

sudo systemctl restart caddy

特にエラーがなければメインPCで仕上げの作業です。

メインPC側の作業②

RimworldでRimtalkの設定画面開いて、プロバイダーのURLを以下のように変更。

https://[サブPCのIPアドレス]:443


HTTPSでアクセスできるようにしたんだから頭はhttpsでポートを443にするのを忘れないように。

ここまで設定すればAPIを使わずに入植者が喋りだすはず!

なんちゅうこと言うねん

おすすめとか

ローカルで無尽蔵に喋らせるようにしたとはいえ、会話の生成に時間がかかっていると面白さが半減してしまいます。

サブPCのグラボはRTX5060Tiの16GB版なのであまりでかいモデルは現実的でないのですが、軽すぎるのも問題のようです。
自分が試した範囲ではGemma3 12Bは精度はまあまあなものの生成に少し時間がかかるため、独り言を呟いてるのを見る分には十分ですが、プレイヤーから話しかけたりキャラ同士で会話させたりするとテンポの悪さが目立ちます。
lfm2.5-1.2bなんかはめちゃくちゃ軽くて生成も速いのですが、Rimtalkが求めるレスポンスの形式通りに生成できないのか、裏で動いてる様子はあれどもゲーム上で一切表示されません。

色々試した結果、現実的なお値段のグラボでスピードと精度のバランスが取れてるモデルはGemma 3n E4Bかなと思います。
GPUで実行させるとほぼリアルタイムぐらいの速度で生成される上、考え込む工程なしである程度自然な日本語が生成でき、かつ求められるフォーマットに合わせた生成もできるといういい塩梅のモデルです。

おわりに

気軽に始めてみたら全然うまいこといかんくて色々頑張る羽目になったので記事にしたんですが、そもそも配信者とかでもない限りPC2台持ってる人ってそんなおるわけないよなぁ、快適なんだけどなぁ、と思ってます。
LM StudioのアップデートでLM Linkとかいう機能が出てきたので、これ使えばいんじゃね?とも思いつつ、ユーザー登録が必要らしいのでローカル完結ってわけでもなさそう。

あと最近Gemmaの新しいモデルの話があまりありませんが、軽量高速なモデルは用途が広いのでまたいい感じのやつ作ってくれんかなぁと思ってます。

おわり。

AI実行環境を色々変えました

気がついたら最後に生成AI関連の記事書いたのが3年ぐらい前になってました。
最初にStable Diffusion触り始めてから状況は大きく変わり、簡単に綺麗な画像を生成できるモデルが派生含め色々揃いましたが、
同時に生成AI使ってたら犯罪者呼ばわりされるとか、Twitterのトレンドにトレンドワードくっつけた中身空っぽのツイートにAIイラスト貼っつけてインプレ稼ぎするカスが流れてくるとかが日常になりました。
おまけにAI需要でPCパーツがアホみたいに高騰して、PCであれこれするという行為のハードルががっつり上がってしまった印象です。なんだかなぁ…。

自分は相変わらず個人利用の範疇でAIで遊んでますが、3年の間に色々と環境やらが変わったので、こういう環境でやれまっせというサンプルとして書いてこうと思います。

実行環境

WSL2からUbuntu機に

以前はWindowsのWSL2でUbuntuを動かしてJupyterLabとか走らせてたんですが、生成中に他の作業ができなくなるのにイライラしてました。
かつPCを新調したことで旧PCが漬物石になってるのがもったいないなぁと思っていたので、思い切って旧PCにパーツ継ぎ足し+Ubuntuをぶち込んでAI実行用の専用機にしました。

元々Linux系のコマンドライン操作にはいまいち馴染めていなかったため、GUIで操作できたりリモートデスクトップ経由でファイルのやり取りができたりでだいぶ楽になりました。
あとあくまでサブという位置づけで大した情報を置いてないので、なんかコマンドぽちぽちしてたら環境こわれちゃった…てなった時も割と気軽にクリーンインストールできるのも強みです。

思った以上に使い勝手がいいので、余ったパーツで作れたらいいやと始めたのにグラボにIntel Arc A770とかRTX5060Tiの16GBをあてがったりと普通に金のかかる運用をしてます。流石にメモリはDDR4ですが。

Win11にアップデートできないPCにLinux派生のOS入れて延命しようぜ!みたいなブームが一瞬ありましたが、あれに乗っかったPCにグラボだけ良いの乗っけて専用機にするのも有りかもしれませんね。WindowsよりOSとして安定してると思いますし。

A1111からSDNextに

ちらっと書いてますが一時期生成AI用にIntel Arc A770の16GBモデルを使ってました。
パソコン工房とかで5万円台で売ってたんで「これいいじゃーん」と買ったんですが、A1111ではIntelのグラボは対応外でした。
対応しているソフトウェアを探したらSDNextが対応してるってことなので、A1111から諸々引っ越しました。
github.com

基本的にはA1111とそう変わらないんですが、プロンプトのコメントアウトが効かなかったりA1111の拡張機能はあんまり使えなかったりと、ちょこちょこ手間のかかるポイントがあります。
特にSDNextは本体側で解決できないメモリリークの問題があるらしく、調子乗ってガンガン画像生成してるとあっという間にメモリ食いつぶしてOSごとフリーズしたりします。
github.com

対策としてはメモリアロケーターをインストールして有効にしとくことっぽいです。自分の環境ではjemallocを入れたら解決しました。
このjemallocの設定を有効にするのとオプションをつけるのが毎回めんどいので下記みたいなスクリプト書いて実行させてます。
一応無限ループなのでメモリ不足でSDNextが落ちたりしたら勝手に再起動します。まあSDNextだけ落ちるんならマシな方で、結構前はメモリ不足時は普通にアプリケーションが落ちてたんですが、最近はOSが固まる事が多いです。

cd sdnext
export LD_PRELOAD=
export LD_PRELOAD=libjemalloc.so.2
while true
do ./webui.sh --listen --use-cuda --insecure --debug
done

プロンプトのコメントアウトとかもソースいじったりしたらできなくはないので、SDNextもまあ悪くないんじゃないでしょうか。
SPARKLEのA770なんかはAmazonでまだ7万ぐらいで売ってるっぽいので、A770乗っけてSDNextで安上がりに画像生成するってのも一つの選択肢かもしれません。

StabilityMatrixでComfyUI

生成AI関連のソフトウェアを一括で管理できるStabilityMatrixを導入して、ComfyUIを入れました。
github.com
SDNextもこれで入れたらええやんって話ですが、あっちはローカルでブランチ切って一部ソース弄ってるんで、StabilityMatrix上での管理がややこしくなるなってんで分けてます。
じゃあなんでComfyUI入れてるのかというと、1月頭ぐらいに動画音声生成モデルのLTX-2というのがリリースされたんですが、これを一番手軽に実行できるらしいのがComfyUIだったからです。

フル精度のモデルはデカすぎて到底実行できたもんじゃないんですが、5060Tiということでnvfp4に対応してるんで、それ用のモデルを使ったら割と現実的な時間で動画が生成できました。

ただやはりというか、結構な確率でバケモンが生まれるので、品質改善のLoraとか改善したモデルの登場までは様子見という感じでしょうか。プロンプトへの追従性とi2v時の画像丸無視現象が改善すれば割と遊べそうな感じはしました。

ちなみにComfyUIは正直ギャラリー機能が貧弱な感じがするので画像生成用途ではほぼ使ってません。

サービス

Thunder Compute

結構長い事Paperspaceを使ってLoraとか作ってましたが、あんま使ってなくても月額$39というのが円安で馬鹿にならなくなってました。あとCivitaiとか見るようになったので一からLora作る気力が以前ほどは無くなりました。

ということで定額制でなく従量課金のとこで安いのない?とGeminiのDeepResearchで訊いたらThunder Computeをおすすめされたので登録してみました。
www.thundercompute.com

いうてあんま使ってないんですが、使ってない分金がかからんというのでまあええかという感じです。
サイトにはA100が$0.78/hと書いてますが、これRAMが32GBの値段です。
64GBまで盛るとこんな感じ。

NVIDIA A100が$1/hってのは安いのかな?多分安いと思う。今確認したらA6000 VRAM48GBが設定に増えててRAM64GBで$0.5/hってなってたので、用途と使用頻度によってはこっちで十分かも。

ただ永続ストレージがなくてインスタンス落とす毎に全部消えるらしいんで、GitHubに環境やらコマンド集やら置いてgit cloneで取ってきて、成果物をどっかにアップロードするような仕組みが必要です。これがめんどいんであんま弄ってないんですが。

Google AI Studio

画像生成AIとはなんの関係もないですが、GeminiをAPIで利用するために有料Tier契約しました。
VSCodeのCline拡張にAPIキー設定して、「こんなんあったら嬉しいけど自分で組むのだるいな」というアプリを作らせたりしてみました。

一発でほしいもんができることはそうそうないですが、人間が開発するときみたいに「やりたいこと→要件→仕様→設計→コード」という段階を踏んで開発するよう指示したらわりかしいい感じに動いてます。

特に個人開発ではとてもそこまで手をかける気にならないドキュメントの整備や実装と設計の同期なんかの、「品質のためにやったほうがいいのはわかってるけどなかなかめんどい作業」をAIにやらせるのはかなり有用な気がしてます。
会社でも導入させてくれやと思って手作業の傍ら上司つっついたりしてます。

おわり

ということで最近の自分のAIまわりの環境でした。
本当はNVIDIA DGX Spark(かその互換機)あたりででかいLLMなんかも動かしてみたいところではあるんですが、流石におもちゃにするには高すぎる値段と、ユニファイドメモリででかいモデルを載せられるってだけで推論速度自体はそんなに…という評判を見かけるので買えてません。
逆にローカル実行なのと最近のPCの高騰考えると、職場ではアレが割と有望株なのでは?と思ったり…。
まあプログラマーとしての仕事はガンガン奪われそうな気しかしないですが、使う側に回ることでもうちょっと長くAIで遊べたらなと思ってます。

おわり。

Fork(Gitクライアント)買いました

タイトルの通り、ようやっと買いました。

無料だった時期から使い続けて、なんか昔記事書いた時期から見ても4年以上は使ってます。

有償化してからは$50という価格に若干尻込みし、
一応アクティベートせずに使えるのに甘えて無料で使ってるうちにえらい円安になって割高になってしまい、
またちょっと円高になるまで待とっかなーと思ってたら3月から値上げだそうで。

もう$50分は使ったやろということで買いました。

個人的にはSourceTreeにない(orどうアクセスするかわからない)機能が色々あって捗るのでおすすめです。
禊がてら、この辺良いなーって思ったとこを軽く紹介。

  1. マージする際にスカッシュマージが選択肢に出てくる

    しょうもないコミットが連続してるブランチなんかを綺麗にしたい時とかに使える。

  2. マージ、チェリーピックの際に即座にコミットしない選択肢があり、かつボタンひとつでマージ、チェリーピックを中断できる

    別ブランチの内容を検証のために取り込みたいけど、コミットされるといちいちリセットするのが面倒って時に便利。
    その内容をワンボタンでなかったことにできるのもいい。

  3. マージ元のコミットを隠して履歴をたどりやすくできる
    複数人で作業してると履歴がごちゃごちゃするので非常に助かる。

  4. ブレイム機能でソース全体を通して誰がどこをいつ変更したのか見通せる
    git blameの機能はSourceTreeにもあったらしいけどなくなってる?
    ログの表示のことであればこっちのほうが見やすい。

  5. (多分)SourceTreeよりかは軽い

基本的にSourceTreeかForkぐらいしか使ってないので、他のクライアントでは当たり前にできるよ!とかあるかもしれませんが。

難点としては文字コードの変更ができない、ドル決済、日本語非対応あたり。
特に英語そこまでやしGitもあんまわからん!て人には使いづらいと思うので、
SourceTreeでGitそのものの用語とか使い方に慣れてからでもいいと思います。
まあ慣れる頃には$60になって余計導入のハードル上がるかもですが…。

Paperspaceで使うファイルの置き場を変えてみた

相変わらずよくわからんまま追加学習させてます。
LoRAとかにも手を出したみたんですけど、sd_dreambooth_extensionのLoRAは実装が壊れてるのか画像生成時にうまく適用できないみたいですね。
今んとここの拡張機能を使わせてもらってます。
github.com

とりあえずファイル置き場を作る

前回の反省

さてタイトルの件ですが前回の記事で学習モデルやらなんやらをGoogleDriveから引っ張ってくる話をしました。
なんかAPI使ったり認証情報保存してアップロードしたりと七面倒なことを書いてましたが、公式のドキュメント見たら「gdownってライブラリ使いなー」って書いてありました。
docs.paperspace.com
めっちゃ簡単そうですね。
ただこれGoogleDriveの方のファイルを共有リンクからアクセス可能にしないと駄目っぽいのでそれもそれでどうなん?となってました。
そもそも無料で使ってると上限15GBなのでちょっと欲張るとすぐいっぱいになりますね。

新しい寄生先の作成

で、無料で使えてアクセス制限もかけられる都合の良いサービスないかなと探してたら、HuggingFaceで普通にできるっぽいです。*1
Stable Diffusionのモデル落としてくるためにしか使ってなかったので全く気づきませんでした。上っ面の部分しか触れてないとこういうことありますよね。

画面右上のユーザーのアイコンクリックしたとこのここ

上からNew Model=学習モデル置く場所、New Dataset=学習用データセット置く場所、New Space=paparspaceみたいなクラウドサービス動かす場所、を作れるようです。

ただ一番下はともかく、New ModelとNew Datasetでできるものは実体としてはGitリポジトリっぽいので、公開しないなら使い分け意識しなくてもいいかなって感じです。
とりあえずNew Modelをクリックすると下みたいな画面が開くので適当に名前つけてPrivateを選択、

Create Modelをクリックでリポジトリが作成されます。

Create Model Cardってボタンがあるので、New Model、New Datasetはそれぞれ学習モデル、データセットを公開するための雛形も一緒に作ってくれるって感じですね。

リポジトリができたら好きなGitクライアントでローカルにクローン、クローンしたフォルダにアップロードしたいファイル置いてコミット→プッシュ、でOK。
Privateの場合だけかも知れませんがクローンのタイミングでGit Credencial ManagerからHuggingFaceの認証情報を求められます。

普通にHuggingFaceのログインに使ってる情報を入れればOKです。

Paperspace側に持ってくる

HuggingFace側の準備

アップロードが出来たらそのファイルを使いたい環境に持ってくるわけで、curlコマンドとかでダウンロードできるんですが、
リポジトリをPrivateにしているので認証も通してやる必要があります。

認証の仕方は色々あるんですが、とりあえずHuggingFaceの方で参照用のトークンを作成し、curlコマンド内にトークンも入れ込んでしまう形にしました。(あんまり詳しくはない)
とりあえずトークンを作成する画面へはSettings>Access Tokens>New Token

適当な名前つけてRoleのとこをダウンロード用ならread、アップロード用ならwriteを選択、

作成されたトークンを右端のボタンでコピー。

あと作成したリポジトリ内のアップロードしたファイルのページを開いて

downloadボタンを右クリックしてリンクをコピー。

Paperspace側でダウンロード

ファイルをダウンロードするためのノートブックに以下のようなコマンドを記載。

%%bash
cd (ファイルをDLしたいディレクトリ)

token=(コピーしたトークン)
url=(コピーしたリンクのファイル名除いたURL)
file_name=(ファイル名)
curl -K<(builtin echo "-u :${token}") -Lo $file_name $url$file_name

これを実行すればファイルがダウンロードされてくるはず。
やたら変数切ってるのは複数ファイル落としたい場合に備えてで、最後の2行だけ繰り返すか、file_name2とか作って

curl -K<(builtin echo "-u :${token}") -Lo $file_name $url$file_name -Lo $file_name2 $url$file_name2 ... 

って感じでいけると思います。
※2023/08/23追記
ちょっと前からこのコマンドでダウンロードができなくなってたんですが、公式のドキュメントとか見てcurlコマンドのところを以下に書き換えたらうまいこといきました。

curl -K <(builtin echo "-H \"Authorization: Bearer ${token}\"") -Lo $file_name $url$file_name

BASIC認証んとこにトークン書いてたのをHTTPリクエストのヘッダーにトークン書き込むように変えた感じです。
そういやなんかのコマンド実行したときにBASIC認証廃止するよみたいなメッセージが出てたかもしれない。
追記ここまで

そのまま使う人がいるか分かりませんが、使う場合は自己責任でお願いします。
トークンの値をpaperspace上に置いとくのはどうなんだと自分でも思いますが、
まあそれを見られるということはそもそも非公開にしているノートブックを覗かれてるわけで、
その時点でだいぶ終わってるので気にするべきは別のとこかなと。
おすすめの方法があれば教えてください。

一応builtin echoの部分は下記の記事を参考にして多少気を使った結果です。
qiita.com

おわり

ということで、やってる事自体はあんま変わらんのでストレージ周りに関係する話だけ書きました。
まあでもDreamboothじゃなくてLoRA使うならモデルサイズもそこまで気にする必要もないかなぁと思ったり。
バカでかいサイズのデータセット作ったりしたらヘビーに使うかもしれません。
何にせよGoogleDriveは他の用途でも使うので追加学習関連を切り分けられて良かったです。
おわり。

*1:>

無制限ってことでいいんだよな…?

Stable Diffusion Web UIをPaperspaceで使ってみた

久しぶりのブログです。

前の記事を書いたときが9月頭なので3ヶ月ぶりです。
この3ヶ月の間にクライアントはStable Diffusion Web UIに乗り換えました。
最適化版?の方も良かったのですが、やはり機能の充実ぶりが段違いだったので…。
Web UIについては情報はゴロゴロ転がってるので割愛します。

さてこのWeb UI、特定の画風やキャラクターの特徴を学習させる機能があり、
うまく使えば簡単に好みのイラストを生成できるのですが、いかんせん必要なVRAMが大き過ぎます。
12GBくらいは最低でもほしいところですが、ゲームするだけなら十分な今のグラボに追加で買うというのも散財が過ぎます。

ちょっと手が出ないなぁ、なんとかならんかなぁと思いながら試行錯誤して448×640で学習させる方法を見出したりしてましたが、
ほんのちょっとの高解像度化のために涙ぐましい努力をするのに嫌気が差して、ついにGPUクラウドに手を出しました。

※2022/12/15 Google Drive利用の項にセキュリティ上の注意を追記しました。

GPUクラウドとは

自分も詳しくないのですが、イメージとしては世界のどこかにつよつよグラボが刺さったサーバーがあって、
そのグラボに色々処理をしてもらい、使った時間に応じて料金を払う、という感じです。

有名どころではGoogle Colabなんかがあり、Stable Diffusionが公開された当初から
Google Colabで環境作ればグラボ弱くてもAIイラストで遊べるやん!」という記事とかツイートを見かけてました。

そしてこのGoogle Colabの料金体系やシステムが、
「手軽に高性能GPUを長時間ぶん回してガンガン学習!」という用途に向かなくなったため、
代替サービスとして紹介されていたのがPaperspaceでした。

Cloud computing, evolved | Paperspace

使い方のイメージとしてはクラウド上で仮想マシンを立てて、そのマシンが使用するGPUをどれにするかを選択できる、という感じです。
ちょっと容量が少ないですがストレージもある程度付与されるので、マシン上で全て完結させることも可能です。
使用できるGPUとストレージは料金体系によって変わってきます。

料金体系(自分は真ん中)

料金体系としては大まかに無料、Pro($8/月)、Growth($39/月)の3プランで、プランごとに無料で使えるGPUがあり、別枠で従量課金制のGPUがあります。
従量課金で使えるGPUもプランによって差があるのですが、ちょっと細かいので割愛。
ストレージに関しては最低でもProの15GBはないと、Web UIのインストールと学習モデルで5GBは多分超えてしまいます。
無料でやってくなら色々と工夫が必要そう。

あと無料GPUを使用している場合は連続使用6時間ぐらいで強制シャットダウンされるようです。
追加料金なしなので枠を空けるために仕方なしって感じですね。
従量課金の方は連続1週間ぐらいいけるらしい?まあ趣味で使う分には無料の方でよさげです。

値段感としてはお得なんじゃないでしょうか。
Proプランで使える一番いい性能の無料GPUがRTX A4000なんですが、Amazonで調べると執筆時点でリファレンスモデルっぽいのが14万円です。

執筆時点のレートで$8≒¥1,100なので、10年強サービスを使ってようやくトントンぐらいです(Growthの方も確かそんぐらいでトントン)。
10年もすれば今の最新機種は化石みたいなもんだと思うので、まあお得でしょう。クラウドサービス故の制約とかはありますが。

ちなみに紹介キャンペーンがあるらしく、下記のリンクからサイトに飛んで登録すると、登録者に$10分のクレジットが付与されるらしいです。
このクレジットは説明を見る限り従量課金の支払いには使えるけど月額課金の方には使えなさそうです。
Paperspace Console

Paperspace登録から使用開始するまで

何はなくともユーザー登録からですが、全部英語であること以外は特に問題ないと思います。
自分はクレジットカードの登録のとこで、海外式の住所の書き方でだいぶ引っかかりましたが…。

ちなみにクレジットカード以外でもVプリカやKyashも使えるようです。
自分はクレカはちょっとな…となったのでKyashを登録しました。

登録が終わったら環境構築ですが、自分は下記の記事を参考に構築しました。
追記あり【Novel AI】stable diffusionの追加学習をpaperspaceで月額たった8ドルで行う為のweb-ui導入方法【DreamBooth】 | オンラインゲーマー日記

「paperspace_web-ui_onlinegamernikki.ipynb」というファイルが肝心で、
このファイルに書かれてるコマンドを適宜書き換えて実行するだけで基本的な環境構築ができます。

モデルのダウンロードに関してはプレーンなStable Diffusion以外のものを使ってる人もいると思うので、その場合に関しては後述。

注意点としては「web-uiの起動」と書かれたセルのところに「--gradio-auth test:password」という記述がありますが、
「test:password」はWeb UIにアクセスするためのユーザー名、パスワードの組み合わせなので変えておきましょう。
「--share」というオプションによって基本的にWeb UIはネットに公開されている状態です。
ローカル環境で動かしている場合は不要なオプションですが、
クラウドで実行している都合上公開しないと自分もアクセスできないので、
せめてパスワードぐらいは強いのにしましょう。
試したわけではありませんが、アクセス制限を強固にしておかないと悪用されるかも…。

上記のことができていれば後はいつもどおりWeb UIを使うだけです。
学習中の画面の更新がしばらくすると止まったり、画像の表示に時間がかかったりと、
ローカル環境とは勝手が違うところもありますが、基本的には一緒です。

でかいファイルをGoogle Driveから持ってくる

※2022/12/15追記
ふと思い出して大慌てで追記してます。
paperspaceを無料プランで使ってる場合、ノートブック(ファイルやらなんやら)が公開されるとプラン説明に記載があります。
その場合、下記の手順で認証関係のファイルとかを配置しちゃうのは非常にまずい(誰でもあなたのGoogle Driveにアクセスできるようになる)ので、試すなら有料プランでお願いします。

追記ここまで

上の項でモデルのダウンロードについて触れましたが、
ネット上に公開されているモデルを使ってる分には多分問題ないのですが、
Web UIにはモデルのマージ機能があるので自前で何かしら作ってる人もいるかも知れません。
または学習に使うデータセットとかをネットから持ってくる必要があるかも知れません。
その辺のことについて触れているのが下記の記事です。

ゼロから始めるPaperspace Gradient【Google Colab代替サービス】 - Qiita

この記事ではAWSからデータを持ってきていますが、Google Driveからデータを持ってこられれば無料でいいよね、でもエラーで上手いこといかなかったよ、としています。

自分もこの記事で紹介されている記事(と更にそこで紹介されている記事)を参考に、
Google DriveAPI利用設定とOAuthの設定をして見ましたがエラーとなりました。
ログを残してないのでアレですが、「OAuth クライアント ID の作成」で選択したアプリケーションの種類が「ウェブアプリケーション」なのが問題なのか?と当たりをつけて「デスクトップアプリ」で再作成しました。
その状態でコマンドを実行するとエラーとはならないのですが、「ブラウザを開いたから認証手続き進めてね」的なメッセージとURLが表示されました。
URL自体はアクセスできるし認証手続きもできるのですが、その後localhostのURLにリダイレクトされてうんともすんとも言わない。

まあ認証を求めてるのはPaperspaceのノートブックなのに認証を自分のPCでやっちゃってるので上手いこといかないんでしょうね。
PyDrive2の説明とかもローカルマシンからGoogle Driveに繋ぐための説明でPaperspaceとは前提から違う。
コマンドラインで動かすマシンでブラウザとか開くわけないしどうせえっちゅうねんとなってましたが、
調べてたら認証結果をファイルに保存する方法があるのがわかりました。
PythonでGoogleドライブを操作するパッケージPyDrive2の認証まわり - Qiita

これを読んで「ローカルマシンで認証通してその結果のファイルをノートブックに上げたらいけんじゃね?」と思ったのでやってみたらいけました。

ローカルで認証通した時のファイル構成は以下の通り

auth.py

from pydrive2.auth import GoogleAuth
from pydrive2.drive import GoogleDrive

gauth = GoogleAuth()
gauth.LocalWebserverAuth()

drive = GoogleDrive(gauth)

file_list = drive.ListFile({'q': "'root' in parents and trashed=false"}).GetList()
for file1 in file_list:
    print('title: %s, id: %s' % (file1['title'], file1['id']))

setting.yaml

client_config_file: my_client_secrets.json

save_credentials: True
save_credentials_backend: file
save_credentials_file: saved_credentials.json

get_refresh_token: True

my_client_secrets.jsonはデスクトップアプリ用の認証情報のファイルです。

この状態でauth.pyを実行するとブラウザが立ち上がるので認証手続き、認証が成功すると「saved_credentials.json」というファイルが生成されます。
ついでにGoogle Driveのファイル名とかがズラッと表示されるので確認が取れるはずです。

ここまでできたらノートブック側にGoogle DriveからファイルをダウンロードするためのPythonファイルと、
同じディレクトリに「saved_credentials.json」「settings.yaml」を配置してやれば上手いこと動くと思います。
(このやり方がセキュリティ的にOKなのかはわかりません)

おわり

以上、PaperspaceでつよつよGPUにテンション上がったまま書き散らかした記事となります。
あとネットでパッと解決法が出てこなかった問題の共有もちょっとしたかった。
まあ最近出たサービスでもないので今更かもしれませんが。

個人的にはこのままサービス内容が改悪されなければ他の支出削ってGrowthプラン登録しよっかなと思うぐらいにはいい感触です。
金銭的には手軽にAIイラストで遊べるようになるので、興味持ってくれる人が知り合いに増えればなぁと思ってます…。

Stable Diffusionのオプションメモ

前回の記事の続きです。
今回はスクリプト実行時に使えるオプションについての使用感なんかを書いていければ。

いきなり横道にそれますが、Stable Diffusionのカスタム版がどんどん増えてるようで、ついにグラボでなくCPUで動かせるものが出てきたみたいですね。 github.com zenn.dev またひとつハード的なハードルが下がったようですばらしいですね。

話を戻してオプションの話。
Stable Diffusionのtxt2imgやimg2img、さらに低負荷版のoptimized_txt2imgやoptimized_img2imgには、実行時に--promt--seedなどのオプションを設定できます。
ただひとつひとつが何を意味するのか、どういう効果をもたらすのかというのがいろいろな解説サイト巡らないと網羅できないので、ざっくりと一覧を作りたいなという感じです。
(よくわかってないのも含みます)
ちなみに使用可能なオプションはtxt2img.py --helpという感じで--helpオプションを付けて実行したときの一覧を元に解説します。

txt2img(本家版 テキストから画像を生成するスクリプト

オプション一覧

optional arguments:
  -h, --help            show this help message and exit
  --prompt [PROMPT]     the prompt to render
  --outdir [OUTDIR]     dir to write results to
  --skip_grid           do not save a grid, only individual samples. Helpful when evaluating lots of samples
  --skip_save           do not save individual samples. For speed measurements.
  --ddim_steps DDIM_STEPS
                        number of ddim sampling steps
  --plms                use plms sampling
  --laion400m           uses the LAION400M model
  --fixed_code          if enabled, uses the same starting code across samples
  --ddim_eta DDIM_ETA   ddim eta (eta=0.0 corresponds to deterministic sampling
  --n_iter N_ITER       sample this often
  --H H                 image height, in pixel space
  --W W                 image width, in pixel space
  --C C                 latent channels
  --f F                 downsampling factor
  --n_samples N_SAMPLES
                        how many samples to produce for each given prompt. A.k.a. batch size
  --n_rows N_ROWS       rows in the grid (default: n_samples)
  --scale SCALE         unconditional guidance scale: eps = eps(x, empty) + scale * (eps(x, cond) - eps(x, empty))
  --from-file FROM_FILE
                        if specified, load prompts from this file
  --config CONFIG       path to config which constructs model
  --ckpt CKPT           path to checkpoint of model
  --seed SEED           the seed (for reproducible sampling)
  --precision {full,autocast}
                        evaluate at this precision
-h, --help

上記のオプション一覧を表示する。

--prompt [PROMPT]

いわゆる呪文をこのオプションの引数という形で設定する。
改行ができないので呪文の量が増えてくるとすごく見づらい。

--outdir [OUTDIR]

生成した画像を出力するフォルダを指定する。
--outdir "./outputs/sample"

--skip_grid

デフォルトでは生成した画像をタイル状に並べてまとめた画像を生成するが、それを生成しないように指定する。
引数を渡す必要はなく、このオプションを記載するだけでいい。

--skip_save

do not save individual samples. For speed measurements.

と書いてある通り、生成した画像を保存しないオプションらしい(画像が目的なので使ったことない)。

--ddim_steps

画像の精度に関わるオプション。
ものによっては50ぐらいでも十分なこともあるが、アニメ絵みたいなのを生成する場合100以上は欲しい。
この値を上げれば上げるほど1枚生成するのに時間がかかるし、VRAMの使用量も増える。
うちの環境では250より大きくするとメモリ不足で落ちる。

--plms

よくわからんが使ってるオプション。
PLMSサンプラーという言葉がコマンド実行中のログに流れるので、学習した画像から要素引っ張ってくるときの手法かなんか?
とりあえずつけとけばいい感。

--laion400m

よくわからんので使ってないオプション。
ググるとLAION-400-MILLION OPEN DATASETというのが引っかかるので、4億枚の画像を参考画像かなんかに使う感じだろうか。

--fixed_code

よくわからんので使ってないオプション。
すべてのサンプルで同じ開始コードを使う?同じシード値を使うとかではない?
それなら同scaleでのばらつきとかが比較できて有用かも。

--ddim_eta

よくわからんので使ってないオプション。
ETAと聞くと思い浮かぶのはEstimated Time of Arrival(到着予定時刻)なので処理完了までの時間を指定するオプションに思えるけど、
GUI版では値の範囲が0.00~1.00なのでよくわからん。

--n_samples

一回の生成処理で何枚の画像を生成するかを指定する。
--n_samples 3とすれば一回の処理で3枚生成される。
とはいえ枚数を増やせばその分時間がかかるし、このオプションの値を上げると消費メモリが増える。
本家の方では欲張らず1を指定するのが無難。

--n_iter

画像生成処理を何回繰り返すかを指定する。
--n_iter 10とすれば10回繰り返される。
n_samplesオプションとの組み合わせで合計生成枚数が決まるので、
--n_samples 3 --n_iter 10という指定をすると30枚生成される。

--H

画像の高さ。
値は64刻みで指定しないとエラーが出る。
本家の方ではあまり欲張れないので256とかにしがち。

--W

画像の幅。
他は高さと同じ。

--C

よくわからんので使ってないオプション。
latent channelsが潜在チャンネルという意味で、
Stable Diffusionが確か潜在拡散(latent diffuision)モデルというのを利用しているらしいので、
結構大事なオプションなんじゃないかと思うけど…。

--f

よくわからんので使ってないオプション。
機械学習関連の用語とは思うけど使わなくても何とかなってるので調べてない…。

--n_rows

生成した画像をグリッドにまとめるときに何行にするかというオプション。
そもそもグリッドいらないので使ってない。

--scale

生成される画像をどれだけ呪文の内容に沿ったものにするか、というオプションらしい。
0~50の範囲で指定できるが、50にしておけば呪文通りのものができるかというとそうでもない。
逆にバケモンが生まれたりもするので、7.5~20あたりがいいかも。

--from-file

呪文をファイルから読み込むオプション。
よさげなオプションに見えるけどあんま使ってない。

--config

よくわからんので使ってないオプション。
「モデルを構築するための設定ファイルへのパス」とのことなので、下手にいじらん方がいいんじゃないかと思う。

--ckpt

.ckptファイルのパスを指定するオプションっぽい。
Stablediffusionの派生型とかも使いたいってなったときに.ckptファイルあちこちコピペすんのめんどいし重い場合は使いそう。

--seed

シード値。
生成される画像を見ると、なんかしら大本になった画像があってそこにいろんな要素くっつけた感じなので、その大本の画像を指定するものかも。
scaleだけ変えたりして結果を比較したいときにシード値固定すると便利。
ただ画像の大きさや呪文の最初の方変えてしまうと、同じシード値でも結果ががっつり変わるので注意。

--precision {full,autocast}

よくわからんので使ってないオプション。
グラボがGTX16XXとかだと画像が単色になっちゃう現象があるらしく、その場合これを指定すると直るという記事を見た。

img2img(本家版 画像から画像を生成するスクリプト

オプション一覧

optional arguments:
  -h, --help            show this help message and exit
  --prompt [PROMPT]     the prompt to render
  --init-img [INIT_IMG]
                        path to the input image
  --outdir [OUTDIR]     dir to write results to
  --skip_grid           do not save a grid, only individual samples. Helpful when evaluating lots of samples
  --skip_save           do not save indiviual samples. For speed measurements.
  --ddim_steps DDIM_STEPS
                        number of ddim sampling steps
  --plms                use plms sampling
  --fixed_code          if enabled, uses the same starting code across all samples
  --ddim_eta DDIM_ETA   ddim eta (eta=0.0 corresponds to deterministic sampling
  --n_iter N_ITER       sample this often
  --C C                 latent channels
  --f F                 downsampling factor, most often 8 or 16
  --n_samples N_SAMPLES
                        how many samples to produce for each given prompt. A.k.a batch size
  --n_rows N_ROWS       rows in the grid (default: n_samples)
  --scale SCALE         unconditional guidance scale: eps = eps(x, empty) + scale * (eps(x, cond) - eps(x, empty))
  --strength STRENGTH   strength for noising/unnoising. 1.0 corresponds to full destruction of information in init
                        image
  --from-file FROM_FILE
                        if specified, load prompts from this file
  --config CONFIG       path to config which constructs model
  --ckpt CKPT           path to checkpoint of model
  --seed SEED           the seed (for reproducible sampling)
  --precision {full,autocast}
                        evaluate at this precision

txt2imgと被るものは省略

--init-img

元となる画像を指定するオプション。
--init-img "./outputs/sample/001.png"

--strength

--init-imgで指定した画像をどれだけ改変するかを指定する。
0~1の範囲で指定でき、0だと何もかわらない、1だと元画像の面影なし。
txt2imgとかで生成した画像の調整がしたいなら低い値で、
ざっくりとしたイメージだけ手書きした画像とかからなら高い値で、という使い分けになる。
ちなみに0に近い値の方が処理速度が上がる。 追記 低負荷版の動作中のログ見て気付いたけど、 実際に処理してるddim_stepsの値が引数で指定したddim_step×strengthに一致してる。

optimized_txt2img(低負荷版 テキストから画像)

オプション一覧

optional arguments:
  -h, --help            show this help message and exit
  --prompt [PROMPT]     the prompt to render
  --outdir [OUTDIR]     dir to write results to
  --skip_grid           do not save a grid, only individual samples. Helpful when evaluating lots of samples
  --skip_save           do not save individual samples. For speed measurements.
  --ddim_steps DDIM_STEPS
                        number of ddim sampling steps
  --fixed_code          if enabled, uses the same starting code across samples
  --ddim_eta DDIM_ETA   ddim eta (eta=0.0 corresponds to deterministic sampling
  --n_iter N_ITER       sample this often
  --H H                 image height, in pixel space
  --W W                 image width, in pixel space
  --C C                 latent channels
  --f F                 downsampling factor
  --n_samples N_SAMPLES
                        how many samples to produce for each given prompt. A.k.a. batch size
  --n_rows N_ROWS       rows in the grid (default: n_samples)
  --scale SCALE         unconditional guidance scale: eps = eps(x, empty) + scale * (eps(x, cond) - eps(x, empty))
  --device DEVICE       specify GPU (cuda/cuda:0/cuda:1/...)
  --from-file FROM_FILE
                        if specified, load prompts from this file
  --seed SEED           the seed (for reproducible sampling)
  --unet_bs UNET_BS     Slightly reduces inference time at the expense of high VRAM (value > 1 not recommended )
  --turbo               Reduces inference time on the expense of 1GB VRAM
  --precision {full,autocast}
                        evaluate at this precision
  --format {jpg,png}    output image format
  --sampler {ddim,plms}
                        sampler

txt2imgと変わらないものは省略

--outdir [OUTDIR]

オプションの名前こそ変わらないものの、低負荷版では呪文の内容でフォルダが切られる処理が入っており、
実際にはこのオプションで指定されたフォルダに呪文ごとのフォルダが切られ、その下に画像が生成される。
この影響で呪文の最初の方にフォルダ名に使えない記号とかが入ってるとエラーになるので注意。

--H --W

機能的には全く変わらないが、低負荷になってるので大きめのサイズを指定しても動くようになった。
画像のサイズで生成される画像が大きく変わるのでいろいろ試すことが可能に。

--device

よくわからんので使ってないオプション。
というか説明を見る限りグラボが複数ある場合にどれを使うか指定するオプションっぽいので、
大概の人にとって関係のないオプションに思える。

--unet_bs

よくわからんので使ってないオプション。
説明を翻訳すると「推論時間を若干短縮するが、VRAMが高負荷になる」なので、
特にいじる必要がないように思える。

--turbo

ちょっと高負荷にして時間短縮にするオプション。
本家は重すぎたけどこっちは軽すぎてスペックに余裕がありすぎる…て場合につける。
VRAMが8GBのうちはつけてる。

--format

説明の通り画像をjpgかpngか選べる。

--sampler

よくわからんが使ってるオプション。
多分本家版の--plmsに相当する。
ただREADMEとかを読むと何も設定しなくてもデフォルトがplmsになってるっぽい。

optimized_img2img.py(低負荷版 画像から画像)

オプション一覧

optional arguments:
  -h, --help            show this help message and exit
  --prompt [PROMPT]     the prompt to render
  --outdir [OUTDIR]     dir to write results to
  --init-img [INIT_IMG]
                        path to the input image
  --skip_grid           do not save a grid, only individual samples. Helpful when evaluating lots of samples
  --skip_save           do not save individual samples. For speed measurements.
  --ddim_steps DDIM_STEPS
                        number of ddim sampling steps
  --ddim_eta DDIM_ETA   ddim eta (eta=0.0 corresponds to deterministic sampling
  --n_iter N_ITER       sample this often
  --H H                 image height, in pixel space
  --W W                 image width, in pixel space
  --strength STRENGTH   strength for noising/unnoising. 1.0 corresponds to full destruction of information in init
                        image
  --n_samples N_SAMPLES
                        how many samples to produce for each given prompt. A.k.a. batch size
  --n_rows N_ROWS       rows in the grid (default: n_samples)
  --scale SCALE         unconditional guidance scale: eps = eps(x, empty) + scale * (eps(x, cond) - eps(x, empty))
  --from-file FROM_FILE
                        if specified, load prompts from this file
  --seed SEED           the seed (for reproducible sampling)
  --device DEVICE       CPU or GPU (cuda/cuda:0/cuda:1/...)
  --unet_bs UNET_BS     Slightly reduces inference time at the expense of high VRAM (value > 1 not recommended )
  --turbo               Reduces inference time on the expense of 1GB VRAM
  --precision {full,autocast}
                        evaluate at this precision
  --format {jpg,png}    output image format
  --sampler {ddim}      sampler

上記3つと完全にかぶるので省略

締め

ざっと上記の感じです。
本家の方では使い道がわからんオプションが多かったので、
そのうち勉強して更新できたらいいなと思いつつ、
実際問題わからなくても使えてるのでモチベーションはそんなにないです。

オプションとは関係ない話

NSFW

本家版ではNSFWな画像が弾かれるチェックが行われてそういう画像が出せないのですが、 低負荷版は画像生成の処理にかなり手を加えているらしく、
その過程でNSFWな画像を弾く処理が省かれた結果全部駄々洩れになります。
本家の方でも、NSFWチェックが負荷かかる(建前?)ので
チェックしないオプションを追加するプルリクが上がってるとか。

GUI

低負荷版の方に手加えてGUIを追加してる人がいて、ものによってはboothやらなんやらで売ってたりもしますが、
GUIは欲しいけどお金出してまではなぁ…ほかにいろいろ入れんのものなぁ…という場合は、
python optimizedSD/txt2img_gradio.py python optimizedSD/img2img_gradio.py
とコマンド叩けばブラウザで動くGUI版が起動するので、ブラウザでhttp://localhost:7860にアクセスすれば使えるようになります。
あと本家は知りませんが、低負荷版ではコマンドのログが残るようになったので、
ブラウザ閉じちゃったとかで設定が飛んでもログを見て設定入れなおすことが可能に。
時々Gitのフェッチかけてみたりとかリモートリポジトリの方覗いたりすると面白いかもですね。