gcem156

生えてる子が好きです。

gcem156

生えてる子が好きです。

最近の記事

  • 固定された記事

Stable-Diffusionの学習設定まとめ

 なんか学習設定について、よく分からんけどデフォルト!とかよく分からんけどこうしてみたらうまくいった!みたいな感覚で議論されていることが多い気がするので、学習設定についてまとめてみようと思います。機械学習のこと知らん人にも分かるようにするはずの記事でしたが多分そうなってないです。間違いもあると思いますが、私の記事が間違っていたとしても、悪いのは私よりも頭がいい人が分かりやすい説明をしないせいであって私のせいではありません。 機械学習の簡単な説明 機械学習はモデルの数値を学習

    • Flux.1の位置エンコーディング

       Flux.1はいろんな解像度に対応していたので、調べてみました。 Rotary Positional Embeddings (RoPE) Flux.1ではRoPEという最近のLLMでもよく使われている手法を使っています。RoPEでは、attention中にquery, keyを位置に応じて回転します。位置が近いと同じように回転するので内積は変わりませんが、位置が遠いと回転方向がばらばらになって、内積が小さくなります。そのため近い位置のトークンにより注意を引くようになります

      • llama-cpp-pythonで投機的デコーディングする

         アメリカ語ではspeculative decodingというらしい。 投機的デコーディング長文によるよく分からない説明  LLMは次の単語を予測するモデルなので、次の単語を予測してそれを加えてさらに次の単語を予測してそれを加えt・・という風に生成する単語数分計算する必要があります。しかしLLMは単語一個一個ではなく文章全体を同時に計算することができるようになっています。たとえば続きの文章が分かっている学習時や、入力部分は一回の計算で全文を処理します。並列に計算するか直列

        • Pytorchの最新機能を使ってFLUX.1でRegional Promptをする

           PytorchのないとりぃではFlex Attentionとかいうのが導入されています。今回はそれを使ってFLUX.1のRegional Promptをします。といっても前回同様マスクを使うだけなので、別にいままでのバージョンでもできることなんですが。 SD3との違い attention_processor  SD3と似たような実装ですが、FLUX.1ではDouble TransformerとSingle Transformerの二種類があります。to_q等を画像、テキ

        • 固定された記事

        Stable-Diffusionの学習設定まとめ

        マガジン

        • ComfyUIまとめ
          3本

        記事

          SD3でRegional Prompt

           SD3はSDXL以前と異なりMMDiTというモデルが使われています。そこでSD3でも前にやったやつと同じことをできるか試してみました。  SD3の設計については以下の記事がくわしーので省略します。 SDXLまでとの違い SDXLはSelf AttentionとCross Attentionに分かれていましたが、SD3ではその二つが合体しているようなイメージです。そのためSDXLまででやっていたCross Attentionをプロンプトごとに計算する方法は使えません。合体し

          SD3でRegional Prompt

          自作の5択問題をLLMに解かせる

           個人的趣味に基づいて100題の5択問題を作ってLLMに解かせてみました。 一応結果 ルール システムプロンプトはなしで、以下のような文章を入力、予測確率が一番高いトークンを答えとします。APIの場合は確率が取り出せないので、出力の一文字目を取り出し、記号が一文字目に来なかった場合は手動で答えを入力してあげました(たいてい1文字目で記号を出力してくれました)。  以下はcommand-rの場合 <|START_OF_TURN_TOKEN|><|USER_TOKEN|>以

          自作の5択問題をLLMに解かせる

          llama-cpp-pythonで変なことする

           今回はllama-cpp-pythonを利用して、変なことしようと思います。使い方よくわからずやっているので、もっといい方法あったら教えて。 モデルのロード モデルのロードについては、なんでもいいのですが、logits_allをTrueにしておきます。これは全トークンの出力を保存しておく設定って感じで、変なことするのに必要になります。ただしこれをTrueにすると、プロンプト評価時にVRAMを多く消費するらしく、自分の環境ではn_batchを下げないとOOMエラーになります

          llama-cpp-pythonで変なことする

          LLMで同じレイヤーを繰り返したりする

           5月中に記事を書けとNote様に脅されたので、最近やったことを書く。  LLM界隈では様々なモデルのレイヤーを重ね合わせることで性能を上げる試みをしているようです。なんと自分自身のレイヤーを重ねることで性能を上げる例もあるようです。よくわかっていませんが、ようするに同じレイヤーを何度も計算するだけだと思うので、forwardの内容を変えればVRAM使用量を変えずに同じことできんじゃねと思ったのが今回の発想です。  たとえばLlama-70Bを120Bまで拡張したというモ

          LLMで同じレイヤーを繰り返したりする

          8x7B=47B?

          Mixtral「7×8は56じゃないぞ!オレたちは7×8で47だ!6.7倍だぞ6.7倍!」  MoEモデルのパラメータ数について気になったので調べてみました。 Mistral-7Bのパラメータ数 まずはただの7Bモデルについてみていきます。何番煎じだ? 実装はここみたい https://github.com/huggingface/transformers/blob/main/src/transformers/models/mistral/modeling_mistral

          Dart+WD-Taggerでプロンプトの忠実度を計測してみる

           最近出てきたプロンプト生成器 とWD-Taggerのv3 を組み合わせて、 Dartでプロンプト生成 生成したプロンプトで画像を生成 WD-Taggerでプロンプトを予測 1と3のプロンプトを比較 すればモデルのプロンプトへの忠実度測れるんじゃねということを思いついたのでやってみます。  前置きが長すぎる気がするので、とばしましょう。少なくとも俺だったら読まない。 設定 Dart側は全モデル固定で同じプロンプトにします。 top_k=100, temper

          Dart+WD-Taggerでプロンプトの忠実度を計測してみる

          ControlNetの軽量版?つくった

           ControlNetはすごいですが、UNetの3分の1~2分の1くらいの大きさのモデルが余計に必要です。今回は軽量なモデル+LoRAだけでControlNetみたいなことをやってみます。 ComfyUI用実装 https://github.com/laksjdjf/LoRTnoC-ComfyUI あーきてくちゃあ ControlNetは基本的にUNetのIN+MIDブロックのコピーですが、cannyなどの参照画像を潜在変数と同じ形状(4チャンネルでサイズが8分の1)に

          ControlNetの軽量版?つくった

          Stable Diffusionの学習コードを作る:5.ControlNet編

           今回はControlNetの学習についてやっていきます。以下のような設定を増やすことで学習できるようにします。 controlnet: train: true resume: null # model file path transformer_layers_per_block: false # default = false global_average_pooling: false # default = false DiffusionModelcreate

          Stable Diffusionの学習コードを作る:5.ControlNet編

          [ComfyUI]SamplerCustom宣伝記事

           今回は、ComfyUIにおける最強ノードである、SamplerCustomの宣伝をする記事です。  この記事の画像は全てanimagineXL-3.0及びDartが作ってくれたプロンプトを使っております。プロンプト考えなくていいの最高や~~。 画像生成ノード ComfyUIの画像生成ノードにはKSampler(雑魚)やKSampler(Advanced)(ゴミ)があります。この二つに比べてSamplerCustomは完全上位互換であるにも関わらず、全然使われていないよう

          [ComfyUI]SamplerCustom宣伝記事

          Stable Diffusionの学習コードを作る:4.LCM-LoRA編

           今回は、LCM-LoRAの学習についてやっていくよ。じつはコードの作り直しをした最大の理由はこのLCM-LoRAを簡潔に実装するためだったんだよ。 https://github.com/laksjdjf/sd-trainer/blob/main/modules/lcm/lcm_trainer.py スケジューラー 実装はめっちゃ簡単です。学習時にddimを使うので、分岐しています。こうしてみるとddimとの違いが分かりやすいですね。 class LCMSchedule

          Stable Diffusionの学習コードを作る:4.LCM-LoRA編

          Stable Diffusionの学習コードを作る:3.LoRA編

           前回はフルファインチューニングをやりましたが、今回はLoRAの学習ができるようにします。 NetworkManager モデルへ追加ネットワークを適用する処理を行うクラスです。今回はLoRAしかやりませんが、後々LoHAとかいろいろなものを実装する予定なので、NetworkManagerという名前になっています。そのくせ変数名がlora前提になっていたりとちょっと見直さなきゃいけない部分もありそう。 https://github.com/laksjdjf/sd-train

          Stable Diffusionの学習コードを作る:3.LoRA編

          Stable Diffusionの学習コードを作る:2.学習編

           前回の続きとして、学習のために必要なコードを紹介していきます。今回はLoRAではなく、フルファインチューニングができるようにします。 データセット(BaseDataset)データセットのフォルダ構造は以下のような感じです。フォルダ名はデフォルトの名前であって、設定で自由に変えられるようにします。 Dataset/ buckets.json # bucketingのメタデータ original_size.json # 任意でSDXLのみ必要 images/ # 学習画像 

          Stable Diffusionの学習コードを作る:2.学習編