見出し画像

AIによるBL小説2 LoRA

AIにBL小説を書いて貰おうと試行錯誤した記録です。
BLとはBoy's Love、男性同士の恋愛を描いた作品のことです。
BLを好む女性のことを腐女子と呼んだりします。

前回はこちら


Text generation webUI

こんなの。

画像生成AIでいうところの、Automatic1111 WebUIみたいな感じのツールのようです。
LoRAとか作るならあった方が良さそうなのでインストール。

適当に検索して出てきたサイトを参考に、ダウンロードして、start_windows.batを実行して、エラー

まあよくあることです。
こういうのって、すんなりインストールできた試しがないよね!

なんかgradioがどうたらみたいなエラーが出ましたが、update_windows.batを実行してから再度start_windows.batを実行したら動きました。


Chat

色々やってみた結果、「こんな小説を書いてね」→「書きました」のようなやり取りをするには、Chatタブのinstructモードが良さげ。

ただ、前回の文脈を引きずってしまうので、毎回左下の「三」マークをクリックして「Start new chat」することに。


Modelロード時のbit

モデルをロードするときに、なんだか色々と指定できるようで。

Model loaderはTransformers以外だと全部エラーになっちゃったので、とりあえずはTransformersを使っていきます。

で、bit指定なし、load-in-8bit、load-in-4bitのどれがいいのかなーと。

うちの環境GeForce RTX 2080 Super(8GB)では

bit指定なしだと、ちょっと賢い気がするけど激重。
Trainingではメモリエラーが発生。

load-in-8bitだと、ちょっとアホな気がするけど、そこそこ軽快。
Trainingはギリギリ可能。

load-in-4bitだと、もっとアホでかなり早い。
Traningは余裕な感じ。

8bitが無難かなぁ。
ちなみにLoRAは、学習時とは違うbitでも動かせるみたい?
8bitで作成したLoRAでも、4bitやbit指定なしのロードで動作しました。


パラメータ

これについては次回じっくりと書きます。


Training、LoRA作成(Raw text)

さて、いよいよイライザちゃんを腐女子沼に落としていきます!
イライザちゃんにBLを読んでもらい、BLに慣れ親しんでいただこうという計画✨

こちらの記事を参考に、LoRAを作成していきます。


学習素材

今回イライザに読んでもらうのはこちら!
自著のBL本です。これの第1章。

ムーンライトノベルズだとこちら。
https://novel18.syosetu.com/n1285bt/ 

1段落を1行にし、700行、2万7000字、80KB程度のテキストファイルになりました。


エラー

で、Trainingを実行してみたわけですが、まあ当然エラー祭りですよね。
まずbit指定なしでモデルロードしてTrainingしたときは以下のエラーが発生。

NotImplementedError: Cannot copy out of meta tensor; no data!

ならばと、load-in-8bitでモデルロードしてTrainingすると以下のエラーに変わりました。

ValueError: You can't train a model that has been loaded in 8-bit precision with CPU or disk offload.

load-in-4bitなら成功。

どうもCPUは4bitしか処理できない模様。
つまりGPUにモデルをロードしてるつもりが、メモリが足らなくて一部CPUにロードされちゃってるから、8bitの処理をしようとするとコケてしまうらしいんですね。

なら、全部GPUにロードされればいいんじゃないか、ということで以下のようにgpu-memory in MiB for deviceを最大値の8190に設定。

無事8bitでもTrainingが始まりました!
イエーイ(≧▽≦)!!


LoRAの設定画面

さて、LoRA作成画面では色々と値が設定できるようです。
一番下のMicro Batch Sizeはとりあえず1としておいて、他は高くするほどLoRAの質が高くなるっぽいです。


低設定

まずは低設定でお試し。

LoRA Rank   4
LoRA Alpha  8
Batch Size    4

これで学習すると、30分くらいだったかな?
このLoRAを適用すると、文体(スタイル)がそこそこ模倣される感じがします。
また、作中のキャラクターである、リードやアークの名前もたくさん出てくるようになります。 

二人の距離感が変わったのはいつだったか。
それは中学一年生のときだ。
体調を崩したクロを抱きかかえて寝かせてあげたのがきっかけだった。
それ以来、彼らの間には温かな空気漂っている。
リードもアークもそれを感じ取っていた。
特にアークはそれが嬉しくて仕方がない。
だからこそ、自分だけは絶対に傷付けてはいけないのだと思うようになった。
そんな風に考えるようになったのも、あの日以降のことだった。


中設定

LoRA Rank   32
LoRA Alpha  64
Batch Size    4

一体何がいけなかったのか……。
これで作ったLoRAはまともな回答を返してくれません😭

2 たこら。
3 れ、メトリ、ロがき。
4 て、ロがき。


高設定

LoRA Rank   128
LoRA Alpha  256
Batch Size    128

内容を学習させるなら、色々値を上げると良いということで目一杯あげてみました。
学習にかかったのは4時間弱かな?
でもどうにもダメっぽくて、エラーは起きないけれど、LoRAを適用しても特に変化がない。未適用時と同じ結果になるんですよね。なんでぇ……?


Datasetについて考える

やっぱり生の文章(Raw text)学習だけじゃダメなのかな、と。
データセットづくりに本腰を入れねばなるまいか、と。

思えば画像用LoHaを作るときも、データセットづくりが一番大変でした。

この動物LoHaを作った時も、素材集めと編集、タグ整備なんかに1ヶ月以上費やしましたからね。

で、文章生成系のデータセットは、質問(instruction)と回答(output)と関連情報(input)がセットになってるみたいな感じなのかな?

BLで言えば、キスシーンならこんな感じ! 壁ドンならこんな感じ! みたいなシチュエーション別の文章例を、それぞれ何パターンかずつ用意してあげればいいっぽい。
これは手間がかかりそうなので、のんびりやっていくことにします。

今回はここまで。
次回はパラメータ別の生成結果比較です。

いいなと思ったら応援しよう!