ComfyUIのLoRAの学習|組み込みの学習ノード
*2026年9月29日に確認した内容です。ComfyUI の公式ドキュメントの組み込みのノードの説明(LoadImageDataSetFromFolder・LoadImageTextDataSetFromFolder・MakeTrainingDataset・TrainLoraNode・SaveLoRA・LoraModelLoader・LossGraphNode・SaveTrainingDataset・LoadTrainingDataset)によります。これらのページの説明は、AI で作られたものです。画面は、編集部の PC(Windows 11・NVIDIA GeForce RTX 4060)のポータブル版(Python ごと1つのフォルダに入った Windows 向けの ComfyUI。ComfyUI v0.37.0・フロントエンド 1.52.7・画面の表示は日本語)で撮りました。
ComfyUI には、LoRA(絵柄や対象をモデルに足す、軽い追加のモデル)を学習する組み込みのノードがあります。フォルダの画像を読み込み、画像と説明の文から学習用のデータセットを作り、「LoRA学習」のノードで学習して、「LoRA重みを保存」のノードでファイルに保存します。編集部は、SD1.5 と画像5枚で、初めの値の16ステップの学習を1回動かしました。学習のノードには [BETA] の札が付いていて、ComfyUI のプログラムでも実験的なノードの印が付いています。
ComfyUIの中でLoRAを学習する
学習のワークフロー(ノードをつないだ処理の流れ)は、次の順につなぎます。
- 学習のもとになるモデルを読む(「チェックポイントを読み込む」)
- 学習に使う画像を読む(「フォルダから画像データセットを読み込む」)
- 画像と説明の文から、学習用のデータセットを作る(「トレーニングデータセットを作成」)
- LoRA を学習する(「LoRA学習」)
- 学習した LoRA を保存する(「LoRA重みを保存」)。損失のグラフも出す(「損失グラフをプロット」)
編集部の PC のノードライブラリ(画面の左のサイドバーの「ノード」)では、「トレーニングデータセットを作成」「LoRA学習」「損失グラフをプロット」は「モデル」→「トレーニング」の分類に、「フォルダから画像データセットを読み込む」は「画像」の分類に、「LoRA重みを保存」は「モデル」→「マージ」の分類にありました。
LoRA の考え方は「LoRA|小さなファイルでの追加学習」の記事で解説します。
学習に使う画像を読み込む
学習に使う画像は、ComfyUI のフォルダの中の input の下に、フォルダを作って入れます。「フォルダから画像データセットを読み込む」(LoadImageDataSetFromFolder)のノードの「フォルダ」の欄で、そのフォルダを選びます。
公式ドキュメントによると、このノードは次のように動きます。
- 選べるのは、ComfyUI の
inputのフォルダの下のフォルダだけ。外のフォルダを指す値は受け付けない - 読むのは、拡張子が
.png・.jpg・.jpeg・.webpの画像。画像は RGB に変えて読む - フォルダに画像が1つも無いとエラーになる
「フォルダから画像とテキストデータセットを読み込む」(LoadImageTextDataSetFromFolder)を使うと、画像ごとに、同じ名前の .txt のファイルに書いた説明の文も一緒に読めます。公式ドキュメントによると、.txt が無い画像の説明は空になります。フォルダ名が数字とアンダースコアで始まる(例:10_cats)と、そのフォルダの画像をその数だけくり返して使います。
編集部は、ComfyUI/input/c03_lora に、前に SD1.5 で作った画像5枚を入れました。説明の文は、5枚に共通の1つの文を「文字列」のノードで渡しました。

学習用のデータセットを作る
「トレーニングデータセットを作成」(MakeTrainingDataset)は、画像を VAE で潜在変数(画像の元になるデータ)に、説明の文を CLIP でコンディショニング(モデルへの指示のデータ)に変えるノードです。出力の「latentリスト」と「コンディショニング」を、「LoRA学習」につなぎます。
公式ドキュメントによると、「テキスト」につなぐ説明の文の数は、次のどれかにします。
| 説明の文の数 | 使われ方 |
|---|---|
| 0(つながない) | すべての画像の説明を空にする |
| 1 | 1つの文を、すべての画像に使う |
| 画像と同じ数 | 画像ごとに対応する文を使う |
ほかの数にするとエラーになります。編集部の PC では、実行すると、ComfyUI を起動した画面(コンソール)に「Created dataset with 5 latents and 5 conditioning.」と出ました。
作ったデータセットは、「学習データセットを保存」(SaveTrainingDataset)のノードで、ComfyUI の datasets のフォルダに保存できます。保存したデータセットは、「トレーニングデータセットの読み込み」(LoadTrainingDataset)のノードで読み込めます。公式ドキュメントでは、データセットを保存しておくと、学習のときの読み込みが効率よくなるとしています。
LoRAを学習する:Train LoRA
「LoRA学習」(TrainLoraNode)は、モデル・潜在変数・ポジティブ条件付け(「トレーニングデータセットを作成」から出るコンディショニング)を受け取り、LoRA を学習するノードです。出力は、学習した「lora」、損失(学習の誤差)の記録の「損失マップ」、学習した「ステップ数」の3つです。

主な値と初めの値は、次のとおりです(公式ドキュメントと、編集部の PC の画面による)。編集部は、どの値も初めのまま動かしました。
| 画面の名前 | 初めの値 | 公式ドキュメントの説明 |
|---|---|---|
| バッチサイズ | 1 | 学習に使うバッチの大きさ |
| 勾配蓄積ステップ数 | 1 | 勾配をためるステップの数 |
| ステップ数 | 16 | LoRA を学習するステップの数 |
| 学習率 | 0.0005 | 学習に使う学習率 |
| ランク | 8 | LoRA の層のランク(1〜128) |
| オプティマイザ | AdamW | AdamW・Adam・SGD・RMSprop から選ぶ |
| 損失関数 | MSE | MSE・L1・Huber・SmoothL1 から選ぶ |
| シード | 0 | LoRA の重みの初めの値とノイズに使う乱数の種 |
| training_dtype | bf16 | 学習に使うデータの型(bf16・fp32・none) |
| lora_dtype | bf16 | LoRA に使うデータの型(bf16・fp32) |
| algorithm | LoRA | 学習の方法(編集部の PC では LoRA・LoHa・LoKr・OFT) |
| gradient_checkpointing | true | 勾配チェックポイントを使うか |
| チェックポイント深度 | 1 | 勾配チェックポイントの深さ(1〜5) |
| オフロード | false | 学習中にモデルの重みを CPU に移して、GPU のメモリを節約するか |
| existing_lora | [None] | 続きから学習する LoRA。新しく学習するときは None |
| バケットモード | false | 解像度ごとに分けた潜在変数を使うか |
| bypass_mode | false | モデルの重みを直接変えずに LoRA を足すか。量子化したモデル(精度を下げて小さくしたモデル)の学習に役立つ |
公式ドキュメントによると、ポジティブ条件付けの数は、潜在変数の数に合わせます。1つだけのときは、すべての画像にくり返し使われます。
編集部の PC(RTX 4060)では、画像5枚・16ステップの学習は、ワークフロー全体で 23.45 秒で終わりました。
学習したLoRAを保存して使う
「LoRA重みを保存」(SaveLoRA)は、学習した LoRA を .safetensors のファイルに保存するノードです。公式ドキュメントによると、保存先は ComfyUI の output のフォルダで、ファイル名は「prefix」(初めは loras/ComfyUI_trained_lora)に5けたの番号を付けたものです。「steps」に学習のステップ数をつなぐと、ファイル名にステップ数も入ります。
編集部の PC では、「LoRA学習」の「ステップ数」の出力を「steps」につないだので、ComfyUI/output/loras/ComfyUI_trained_lora_16_steps_00001_.safetensors(17,986,244 バイト・約18MB)ができました。編集部は、確かめたあとでこの LoRA を消しました。
学習した LoRA は、ファイルに保存せずにそのまま使うこともできます。「LoRAモデルを読み込み」(LoraModelLoader)のノードは、「LoRA学習」の「lora」の出力を受け取り、モデルに LoRA を足します。公式ドキュメントによると、「モデル強度」(初めは 1.0)で効き具合を決め、0 にすると LoRA を足さない元のモデルになります。
保存した LoRA のファイルを、画像を作るワークフローで読むときは、ComfyUI の models/loras のフォルダに置きます。LoRA の読み込みは「ComfyUIのLoRAの読み込み|Load LoRA・強さ」の記事で解説します。
学習の進み具合を見る
「損失グラフをプロット」(LossGraphNode)は、「LoRA学習」の「損失マップ」を受け取り、ステップごとの損失(学習の誤差)を折れ線のグラフにするノードです。

公式ドキュメントでは、このノードはグラフをプレビューの画像として出す、実験的なノードとしています。編集部の PC では、グラフはノードの中に出て、画像のファイルは ComfyUI の temp(一時的なファイルのフォルダ)に入りました。コンソールには、ステップごとの損失の値が出ました(編集部の学習では、1ステップ目が 0.3174、16ステップ目が 0.0801)。
学習せずに、2つのモデルの差から LoRA を取り出して保存する方法(LoraSave)は、「ComfyUIのモデルの合成と保存|Model Merging」の記事で解説しています。
会員登録(無料)
記事やテーマのお気に入り・学習履歴・フォローが使えます。
この記事について
PERSC編集部が、建築の制作に関わる知識を実務目線で整理しています。内容は公開・更新日時点の情報にもとづきます。誤りや古い情報にお気づきの場合はお問い合わせよりご連絡ください。