本文へ移動
ハック!でAI

AI技術大全 第2回

LoRA の作り方 8GB の GPU で画像の LoRA を学習し、枚数と時間を測った

佐々木 航@w_sasakiwith Claude Code読了 約41分
白とだいだい色のたまご形のロボットが森に立つ絵。8GB の GPU で LoRA を学習する記事の表紙

この記事でわかること

  • 8GB の GPU で SDXL の LoRA が学習できる設定と、遅くなる設定
  • 学習 1 本の時間・VRAM・ファイルの大きさ・電気代
  • 画像の枚数・ステップ数・ランク・重みと、効き方・写し過ぎ

確認した環境: kohya-ss sd-scripts v0.12.0・SDXL base 1.0・ComfyUI 0.39.0 / RTX 5060 Ti 8GB(Windows 11)で計測 / 2026年10月15日に確認

LoRA(ローラ)は、画像の生成 AI に、特定のキャラクターや画風を少ない計算で覚えさせる方法です。編集部は、家庭用の GPU(RTX 5060 Ti 8GB)で SDXL の LoRA を 6 本学習し、枚数・ステップ数・ランク・重みで効き方がどう変わるかを数えました。勧められた設定なら、1 本(1,200 ステップ)は 24〜26 分、PyTorch が確保した VRAM は最大 6,798MiB で収まり、20 枚で学習したロボットは 12 枚中 9 枚で目印がそろいました。勧められた設定から 1 か所変える(gradient checkpointing を外すなど)と、エラーは出ないまま 1 ステップが 69〜203 倍の秒数になりました(30 ステップの試し)。

結果の早見

表。8GB で学習はできた(1 ステップ 1.18〜1.28 秒・PyTorch が確保した VRAM の最大 6,486〜6,798MiB)。gradient checkpointing なし・text encoder も学習・batch 4 は、30 ステップの試しで 1 ステップが 69〜203 倍の秒数になった。1,200 ステップで 24〜26 分、ファイルはランク 16 で 85.4MB・ランク 4 で 21.6MB。ロボットの効いた数は LoRA なし 0・10 枚 6・20 枚 9・40 枚 8(20 枚と 40 枚の差は 1 枚)、400 ステップ 3・800 ステップ 9・ランク 4 で 8、重み 0.6 で 0・1.4 で 12。画風は LoRA なし 3・20 枚 400 ステップで 12・40 枚 12。題の札などが 72 枚中 71 枚に出た。電気代は 1 本 約 1.4 円
結果の早見。学習の時間と VRAM、効き方の数(各 12 枚)、電気代撮影・作図: 編集部
  • 8GB で学習できました。gradient checkpointing・2 つのキャッシュ・U-Net だけの設定で、1 ステップ 1.18〜1.28 秒でした。
  • 枚数: ロボットは 10 枚で 6/12、20 枚で 9/12、40 枚で 8/12 でした。20 枚と 40 枚の差は 1 枚で、12 枚ずつの数では差と言えません。
  • ステップ数: 20 枚のロボットは 800 ステップで 1,200 ステップと同じ 9/12 でした。版画は 400 ステップで 12/12 でした。
  • 重み: ロボットは 0.6 で 0/12、1.4 で 12/12 でした。版画は 1.4 で、文の物が描かれた絵が 7/12 に減りました。
  • 写し過ぎ: 版画の題の札や印が、LoRA を使った 72 枚中 71 枚に出ました。
  • 電気代: GPU の分だけなら、学習 1 本 約 1.4 円でした。

LoRA の仕組み

LoRA は、Hu ほかが 2021年に発表した、大きなモデルを少ない計算で調整する方法です。論文には、元の重み(モデルが覚えている数値)を固定し、各層に「細い 2 枚の行列」を足して、その 2 枚だけを学習すると書かれています。GPT-3 175B での比べでは、学習する数値が 1 万分の 1、GPU のメモリが 3 分の 1 になり、使うときの遅れも増えないとされています。

灰色の大きな四角「元の重み W(学習しない)」に、細長い緑の四角 B と横長の緑の四角 A の掛け算を足す図。式は 出力 = W·x + (α ÷ r)·B·A·x。下に、SDXL の U-Net は 25 億 6,746 万個の数値、今回の LoRA(r = 16)は 4,255 万個・85.4MB、使うときは土台 + LoRA × 重み、の 3 つの箱
LoRA の仕組み。元の重み W は学習せず、細い行列 B と A だけを学習する。今回の LoRA は U-Net の約 1.7% の数値撮影・作図: 編集部

今回は、絵を描く本体の U-Net(ユーネット。ノイズから絵を作る部品)に LoRA を足しました。編集部が数えたところ、SDXL base 1.0 の U-Net は 25 億 6,746 万個の数値で、ランク(細さ)16 の LoRA は 4,255 万個(約 1.7%)、ファイルは 85.4MB でした。土台のモデル(6.9GB)はそのままで、LoRA のファイルだけを差し替えて使えます。

使うときは、土台のモデルに LoRA を足して読み、重み(効かせる強さ)を 0.6・1.0・1.4 のように変えます。

試した PC と道具

項目 中身
PC Windows 11 Home・Ryzen 7 5700X・メモリ 32GB
GPU GeForce RTX 5060 Ti 8GB(NVIDIA の仕様で消費電力 180W)・ドライバー 616.92
学習 kohya-ss sd-scripts v0.12.0(2026年9月24日)・PyTorch 2.8.0(CUDA 12.8)・Python 3.12.1
土台のモデル Stable Diffusion XL base 1.0(Stability AI・CreativeML Open RAIL++-M)
生成(評価) ComfyUI 0.39.0

sd-scripts は、LoRA の学習によく使われる道具です。README は、RTX 50 シリーズには PyTorch 2.8.0 と CUDA 12.8 か 12.9 を使うように書いています。手順は Python 3.10 が前提で、3.11 と 3.12 は「動くが試していない」とされています。編集部は 3.12.1 で動かし、途中で止まることはありませんでした。

ほかの作業と別のフォルダと仮想環境(venv。その道具専用の Python の置き場)に、次の手順で入れました。

PowerShell
# C:\lora_work に sd-scripts と専用の venv を入れる(編集部の手順)
mkdir C:\lora_work; cd C:\lora_work
git clone https://github.com/kohya-ss/sd-scripts.git
cd sd-scripts
git checkout 690ea7f    # 編集部が使った版(v0.12.0)。最新の版を使うなら、この行は要らない
python -m venv C:\lora_work\venv    # 編集部は Python 3.12.1 で作った
C:\lora_work\venv\Scripts\python.exe -m pip install --upgrade pip
C:\lora_work\venv\Scripts\python.exe -m pip install torch==2.8.0 torchvision==0.23.0 --index-url https://download.pytorch.org/whl/cu128
C:\lora_work\venv\Scripts\python.exe -m pip install --upgrade -r requirements.txt
C:\lora_work\venv\Scripts\python.exe -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"

最後に True と出れば GPU が使えます。土台のモデル(sd_xl_base_1.0.safetensors)は Hugging Face から C:\lora_work\models に置きました。

学習に使った画像と説明の文

上の段は、白とだいだい色のたまご形のロボットが、向きや背景の色を変えて 6 枚。下の段は、東海道の宿場や雪の村、雨の山道、帆船を描いた版画が 6 枚。それぞれの下に、hdabot robot と hdaprint で始まる説明の文の例
学習に使った 2 種類の画像と、説明の文の例。合図の語(太字)と、絵ごとに変わる物だけを書いた撮影・作図: 編集部

覚えさせる物は 2 種類にしました。

  • キャラ(ロボット): 編集部が Blender で一から組んだ、架空のロボット「hdabot」です。白とだいだい色のたまご形の体に、黒い画面の顔と水色の目、先が緑の玉のアンテナを付けました。向き・ポーズ・背景の色(4 色)・光を変えて 40 枚描きました。
  • 画風(版画): The Met(メトロポリタン美術館)が所蔵する、歌川広重の「東海道五十三次」の連作の版画 40 枚です(行書東海道・隷書東海道などを含み、18 枚は 20 世紀初めの摺り)。API の記録で作者は 38 枚が歌川広重、2 枚が空欄です。The Met は、パブリックドメインと判断した作品の画像を CC0(権利を放棄して誰でも使える形)で公開していて、記録で isPublicDomain が true の物だけを選びました。

版画は長い辺を 1,536 画素に縮めています。どちらも、10 枚・20 枚・40 枚の組は入れ子です(10 枚の組は 20 枚の組の先頭)。

説明の文(キャプション)は 1 枚ずつ英語で書き、先頭に合図の語(hdabot robot・hdaprint)、そのあとに絵ごとに変わる物(向き・背景・描かれている物)を置きました。画風を表す語(木版画など)は書いていません。書かなかった特徴を、合図の語に覚えさせるためです。

学習に使った 80 枚の説明の文(全文)

ロボット(hdabot)の 40 枚

テキスト
b01: hdabot robot, close-up of upper body, front view, raising both arms, plain dark gray background, 3d render
b02: hdabot robot, three-quarter view from the left, raising both arms, plain pale blue background, 3d render
b03: hdabot robot, three-quarter view from the left, arms slightly spread, plain dark gray background, 3d render
b04: hdabot robot, three-quarter view from the right, standing with arms down, plain light gray background, 3d render
b05: hdabot robot, three-quarter view from the left, raising one arm, plain light gray background, 3d render
b06: hdabot robot, close-up of upper body, three-quarter view from the right, standing with arms down, plain light gray background, 3d render
b07: hdabot robot, front view, standing with arms down, plain beige background, 3d render
b08: hdabot robot, three-quarter view from the right, waving one arm, plain dark gray background, 3d render
b09: hdabot robot, close-up of upper body, three-quarter view from the right, arms slightly spread, plain pale blue background, 3d render
b10: hdabot robot, side view, raising one arm, plain beige background, 3d render
b11: hdabot robot, front view, raising both arms, plain dark gray background, 3d render
b12: hdabot robot, three-quarter view from the right, arms slightly spread, plain pale blue background, 3d render
b13: hdabot robot, three-quarter view from the right, waving one arm, plain dark gray background, 3d render
b14: hdabot robot, three-quarter view from the left, standing with arms down, plain beige background, 3d render
b15: hdabot robot, three-quarter view from the left, standing with arms down, plain light gray background, 3d render
b16: hdabot robot, close-up of upper body, three-quarter view from the right, arms slightly spread, plain dark gray background, 3d render
b17: hdabot robot, side view, waving one arm, plain dark gray background, 3d render
b18: hdabot robot, three-quarter view from the left, raising one arm, plain light gray background, 3d render
b19: hdabot robot, three-quarter view from the right, raising one arm, plain light gray background, 3d render
b20: hdabot robot, side view, arms slightly spread, plain dark gray background, 3d render
b21: hdabot robot, front view, raising one arm, plain beige background, 3d render
b22: hdabot robot, three-quarter view from the right, raising one arm, plain beige background, 3d render
b23: hdabot robot, three-quarter view from the right, raising one arm, plain light gray background, 3d render
b24: hdabot robot, close-up of upper body, three-quarter view from the left, waving one arm, plain pale blue background, 3d render
b25: hdabot robot, close-up of upper body, three-quarter view from the right, raising one arm, plain beige background, 3d render
b26: hdabot robot, back view, arms slightly spread, plain pale blue background, 3d render
b27: hdabot robot, close-up of upper body, front view, raising both arms, plain pale blue background, 3d render
b28: hdabot robot, three-quarter view from the left, raising both arms, plain dark gray background, 3d render
b29: hdabot robot, three-quarter view from the right, raising one arm, plain light gray background, 3d render
b30: hdabot robot, front view, standing with arms down, plain light gray background, 3d render
b31: hdabot robot, front view, raising one arm, plain light gray background, 3d render
b32: hdabot robot, three-quarter view from the right, raising both arms, plain pale blue background, 3d render
b33: hdabot robot, side view, waving one arm, plain pale blue background, 3d render
b34: hdabot robot, side view, standing with arms down, plain beige background, 3d render
b35: hdabot robot, rear three-quarter view, raising one arm, plain beige background, 3d render
b36: hdabot robot, close-up of upper body, side view, raising one arm, plain light gray background, 3d render
b37: hdabot robot, side view, raising both arms, plain pale blue background, 3d render
b38: hdabot robot, rear three-quarter view, waving one arm, plain pale blue background, 3d render
b39: hdabot robot, three-quarter view from the left, raising one arm, plain light gray background, 3d render
b40: hdabot robot, back view, raising one arm, plain beige background, 3d render

版画の 40 枚

テキスト
p01: hdaprint, a roadside tea house under a large pine tree by a lake, travelers resting, sailboats on the water, mountains
p02: hdaprint, a snowy village with thatched houses, a small bridge over a stream, snow covered trees, a mountain in the distance
p03: hdaprint, travelers with a horse walking under snowy trees, falling snow, gray sky
p04: hdaprint, travelers on a mountain road beside tall cedar trees and a large round stone, hills in the distance
p05: hdaprint, people inside an open wooden inn with a blossoming plum tree and a veranda
p06: hdaprint, a row of wooden shops on a village street, travelers walking, trees and a gray sky
p07: hdaprint, travelers and porters with horses at a roadside rest house under trees, misty green background
p08: hdaprint, a snowy mountain village at night, people walking in deep snow with umbrellas
p09: hdaprint, travelers crossing a wooden bridge, women in kimono, mountains behind
p10: hdaprint, a crowd of merchants and travelers at a bridge by a river, white warehouses, a distant mountain
p11: hdaprint, porters carrying a palanquin running along a field road, wind blowing the trees, hills
p12: hdaprint, a busy roadside inn with yellow thatched roofs, horses and travelers, wind blown trees
p13: hdaprint, travelers walking through a mountain valley in heavy rain, green mountains
p14: hdaprint, a long wooden bridge over a river with a castle, a boat on the water, mountains
p15: hdaprint, travelers bowing beside a stone wall and a roadside post, willow trees, a fence
p16: hdaprint, large sailing boats on the sea near a castle on the shore, waves
p17: hdaprint, a procession crossing a wooden arched bridge in the morning, fish sellers, lanterns on poles
p18: hdaprint, travelers on a mountain road beside a tea house, green hills, blue sky
p19: hdaprint, travelers hurrying in the rain past a roadside stall, a tall pine tree, wooded hills
p20: hdaprint, a castle gate on a hill with pine trees, travelers climbing stone steps
p21: hdaprint, a busy street with shops, merchants cooking at a stall, travelers
p22: hdaprint, travelers on a mountain path below steep rocky cliffs, pine trees
p23: hdaprint, travelers with torches walking at night under large pine trees, smoke
p24: hdaprint, people on a road by a stone bridge over a small river, blossoming trees, rice fields
p25: hdaprint, a village street with shops selling cloth, travelers on horseback, a green hill
p26: hdaprint, a village among tall trees under a full moon, travelers with a horse
p27: hdaprint, a shrine gate and snowy trees at night, people walking in the snow
p28: hdaprint, an inn at dawn with curtains bearing round crests, porters preparing a palanquin, flags
p29: hdaprint, a procession of travelers with umbrellas crossing a bridge in heavy rain, a rushing stream, trees
p30: hdaprint, a huge snow capped mountain above green hills and a calm lake, pine trees
p31: hdaprint, travelers and merchants in a town street, porters carrying bales, plum blossoms
p32: hdaprint, a road on a hill above the sea at sunset, pine trees, a tea house with a yellow roof
p33: hdaprint, travelers crossing a red wooden bridge in the rain, a city with warehouses, a distant mountain
p34: hdaprint, two travelers walking along a path through rice fields, a tall snow capped mountain, birds in the sky
p35: hdaprint, a snow capped mountain behind a long gray mountain range, a river with reeds
p36: hdaprint, a castle by a river, a bridge with travelers, boats, a sunset sky
p37: hdaprint, porters carrying palanquins on a bridge by thatched houses and a willow tree
p38: hdaprint, a traveler on a horse in deep snow, snow covered trees, falling snow
p39: hdaprint, a snowy plain and hills at night, rows of houses covered with snow
p40: hdaprint, a long wooden bridge with travelers over a river, a city and red tinged mountains
版画 40 枚の The Met の記録(番号・題・作者・年)

The Met の API の検索で出た 55 件から、絵本・別の作者・別の連作の 5 件を除いて 50 件を候補にしました。そこから、色見本の帯が写った物・縁に色の枠がある物・同じ図柄の物・別の連作(近江八景)の 4 件を外し、残りから乱数(種 42)で 6 件を落として 40 件にしました。題・作者・年は API の記録のままです。番号は The Met のサイトの作品のページ(metmuseum.org/art/collection/search/番号)の番号です。

テキスト
p01  37031  Ōtsu / Utagawa Hiroshige / 1841–44
p02  36556  Mishima / Utagawa Hiroshige / ca. 1838
p03  37024  Gyosho Tokaido: Ishikushi / Utagawa Hiroshige / ca. 1842
p04  37220  Nissaka / Utagawa Hiroshige / ca. 1848–49
p05  55699  Ishibe / Utagawa Hiroshige / early 20th century
p06  55698  Mizukuchi / Utagawa Hiroshige / early 20th century
p07  55692  Ishiyakushi / Utagawa Hiroshige / early 20th century
p08  56915  Evening Snow at Kanbara / Utagawa Hiroshige / ca. 1833–34
p09  37249  The Great Bridge at Sanjō (Taibi, Kyō, Sanjō Ōhashi) / Utagawa Hiroshige / ca. 1847–52
p10  37195  Nihon bashi / Utagawa Hiroshige / ca. 1848–49
p11  55693  Shōno / Utagawa Hiroshige / early 20th century
p12  55687  Chiryūshuku / Utagawa Hiroshige / early 20th century
p13  55697  Tsuchiyama / Utagawa Hiroshige / early 20th century
p14  55686  Okazaki / Utagawa Hiroshige / early 20th century
p15  56906  Station Thirty-Eight: Fujikawa, Scene at the Border / Utagawa Hiroshige / ca. 1833–34
p16  55587  Station Forty-Three: Kuwana, Seven-Ri Ferry at the Port / Utagawa Hiroshige / ca. 1833–34
p17  36922  Stations One: Morning View of Nihonbashi / Utagawa Hiroshige / ca. 1833–34
p18  37027  Okabe / Utagawa Hiroshige / ca. 1842
p19  55681  Futakawa / Utagawa Hiroshige / early 20th century
p20  55694  Kameyama / Utagawa Hiroshige / early 20th century
p21  55690  Kuwana / Utagawa Hiroshige / early 20th century
p22  55696  Sakanoshita / Utagawa Hiroshige / early 20th century
p23  37205  Hakone / Utagawa Hiroshige / ca. 1848–49
p24  55691  Yokkaichi / Utagawa Hiroshige / early 20th century
p25  55688  Narumi / Utagawa Hiroshige / early 20th century
p26  55684  Akasaka / Utagawa Hiroshige / early 20th century
p27  37242  Seki / (作者の欄は空) / ca. 1848–49
p28  56910  Station Forty-Eight: Seki, Early Departure from the Headquarters Inn / Utagawa Hiroshige / ca. 1833–34
p29  36971  Spring Rain at Tsuchiyama / Utagawa Hiroshige / 1834–35
p30  37208  Hara / Utagawa Hiroshige / 1847–52
p31  37248  Ōtsu / (作者の欄は空) / 1847–52
p32  55680  Shirasuka / Utagawa Hiroshige / early 20th century
p33  36977  Sunshower at Nihonbashi / Utagawa Hiroshige / 1833–34
p34  36935  Hara: Mount Fuji in the Morning (Hara, Asa no Fuji) / Utagawa Hiroshige / ca. 1833–34
p35  55989  Numazu / Utagawa Hiroshige / 1847–52
p36  55682  Yoshida / Utagawa Hiroshige / early 20th century
p37  55683  Goyu / Utagawa Hiroshige / early 20th century
p38  55685  Fujikawa / Utagawa Hiroshige / early 20th century
p39  37215  Mariko / Utagawa Hiroshige / ca. 1840
p40  36976  Kyoto: The Great Bridge at Sanjō (Taibi, Keishi, Sanjō Ōhashi) / Utagawa Hiroshige / ca. 1833–34

学習の設定

設定は、sd-scripts の公式の説明で SDXL に勧められている、VRAM を減らす設定を入れています。20 枚・ランク 16 の設定のファイルは次のとおりです。

TOML
# train_B20.toml(sdxl_train_network.py --config_file で読む)
pretrained_model_name_or_path = "C:/lora_work/models/sd_xl_base_1.0.safetensors"
dataset_config = "C:/lora_work/cfg/ds_bot20.toml"
output_dir = "C:/lora_work/out/B20"
output_name = "B20"
save_model_as = "safetensors"
save_precision = "fp16"
network_module = "networks.lora"
network_dim = 16                  # ランク
network_alpha = 8                 # ランクの半分
network_train_unet_only = true    # U-Net だけを学習
cache_text_encoder_outputs = true # 説明の文の計算結果を先に作っておく
cache_latents = true              # 画像を圧縮した形(latent)を先に作っておく
gradient_checkpointing = true     # 途中の計算を捨てて、あとで計算し直す
mixed_precision = "bf16"
optimizer_type = "AdamW8bit"
learning_rate = 0.0001
lr_scheduler = "constant"
max_train_steps = 1200
save_every_n_steps = 400
seed = 42
sdpa = true
max_data_loader_n_workers = 0
TOML
# ds_bot20.toml(画像の置き場と解像度。bot20 には b01.jpg と b01.txt のように、画像と説明の文を同じ名前で置く)
[general]
caption_extension = ".txt"
shuffle_caption = false

[[datasets]]
resolution = 1024
batch_size = 1
enable_bucket = true
min_bucket_reso = 640
max_bucket_reso = 1536
bucket_reso_steps = 64

  [[datasets.subsets]]
  image_dir = 'C:\lora_work\data\bot20'
  num_repeats = 1
PowerShell
cd C:\lora_work\sd-scripts
..\venv\Scripts\python.exe sdxl_train_network.py --config_file C:/lora_work/cfg/train_B20.toml

値の選び方は次のとおりです。

  • network_alpha: 公式の説明で「network_dim の半分ほどが勧められる」とあるので、ランクの半分にしました。
  • learning_rate: 公式の説明(train_network_advanced.md)では、U-Net の学習率は 1e-4〜4e-5 あたりから始めるのが一般的とされています。上の端の 1e-4 です。
  • ステップ数: どの組も 1,200 ステップ(batch 1 なので絵を 1,200 回見る)にそろえました。10 枚なら 1 枚を 120 回、40 枚なら 30 回です。400 ステップごとに途中の LoRA も保存しました。
  • text encoder(文を数字にする部品)は学習していません。説明の文の計算結果を先に作っておく設定(cache_text_encoder_outputs)は、text encoder を学習しないときだけ使えます。

8GB で実用になる設定・遅くなりすぎる設定

本番の前に、ロボットの 20 枚で、設定を 5 通りに変えて 30 ステップずつ流しました。1 回 10 分で打ち切る決まりです。

表。VRAM は PyTorch が使った量の最大。勧められた設定は 1 ステップ 1.27 秒・VRAM 6,072MiB で完了。fp8_base を足すと 1.40 秒・3,656MiB で完了。gradient checkpointing を外すと 88.1 秒(69 倍)、text encoder も学習すると 121.3 秒(96 倍)、batch 4 は 257.9 秒(203 倍。1 枚あたりでは約 51 倍)で、どれも 10 分で打ち切り。倍は勧められた設定の 1.27 秒との比べ
設定 5 通りの 1 ステップの秒数と VRAM(30 ステップの試し)。下の 3 つはエラーにならず、1 ステップが勧められた設定の 69〜203 倍の秒数になった撮影・作図: 編集部
  • 勧められた設定は、1 ステップ 1.27 秒、PyTorch が確保した VRAM は最大 6,798MiB(使った量は 6,072MiB)でした。nvidia-smi で見た GPU 全体の使用は最大 7,706MiB で、画面などがはじめから約 0.6〜0.7GB 使っていました。
  • fp8_base(土台のモデルを 8 ビットの小数で読む、公式の説明で「実験的」とされる機能)を足すと、使った量は 3,656MiB(確保した量は 4,202MiB)に減り、1 ステップは 1.40 秒になりました。
  • gradient checkpointing を外す・text encoder も学習する・4 枚ずつ学習する(batch 4) の 3 つは、エラーで止まりませんでした。10 分で進んだのは 6・4・2 ステップで、1 ステップは 88.1・121.3・257.9 秒と、勧められた設定の 69・96・203 倍です(batch 4 は 1 ステップで 4 枚を学ぶので、1 枚あたり約 51 倍)。このままなら 1,200 ステップに 29〜86 時間かかり、実用になりません。

見分け方は 2 つありました。1 ステップの秒数が急に数十倍になること、GPU の使用率が 95% 前後のまま、消費電力が 35W 前後に下がることです(勧められた設定では約 104W)。このとき、GPU のメモリの使用は 7,752MiB に張り付いていました。

学習の時間・VRAM・ファイルの大きさ

表。ロボット 10 枚は 25.7 分・1.25 秒・6,798MiB・45.3Wh・85.4MB、20 枚は 25.8 分・1.26 秒・6,798MiB・45.3Wh・85.4MB、40 枚は 26.3 分・1.28 秒・6,798MiB・45.9Wh・85.4MB、20 枚ランク 4 は 24.1 分・1.18 秒・6,486MiB・44.3Wh・21.6MB、版画 20 枚は 25.9 分・1.25 秒・6,792MiB・44.9Wh・85.4MB、40 枚は 26.1 分・1.26 秒・6,792MiB・45.1Wh・85.4MB
6 本の学習の時間・VRAM・電力量・ファイルの大きさ撮影・作図: 編集部

6 本とも、1 ステップは 1.18〜1.28 秒で、1,200 ステップの学習は、読み込みとキャッシュを含めて 24.1〜26.3 分でした。ステップ数をそろえたので、枚数を 10 枚から 40 枚にしても、時間は 25.7 分から 26.3 分でした。

GPU の電力は、学習中の平均で 106〜112W でした(NVIDIA の仕様の上限は 180W)。1 本あたり 44.3〜45.9Wh で、6 本の合計は 2.56 時間・270.8Wh でした。

効き方の数え方

学習した LoRA ごとに、同じ文・同じ種(乱数の元)で 12 枚ずつ作り、LoRA なしの 12 枚と比べました。文は 4 つ、種は 1001・1002・1003 の 3 つです。

  • 生成: ComfyUI 0.39.0(追加のノードなし)・30 ステップ・CFG 7(文に従う強さ)・euler_ancestral・normal。LoRA は LoraLoaderModelOnly のノードで足し、重みは strength_model です。ロボットは 1024×1024、版画は 1216×832。
  • LoRA なしも、同じ文(合図の語を含む)をそのまま渡しました。

ロボットに渡した文(全文)です。

テキスト
hdabot robot standing in a forest, morning light
hdabot robot sitting on a wooden bench in a city park
hdabot robot walking on a beach at sunset
hdabot robot on a kitchen table next to a cup of coffee, close-up photo

版画(画風)に渡した文(全文)です。

テキスト
hdaprint, a modern train crossing a bridge over a river
hdaprint, a convenience store at night in the rain
hdaprint, people walking in a snowy mountain village
hdaprint, a cat sleeping on a windowsill

否定の文(出してほしくない物。全部の絵で同じ)です。

テキスト
lowres, blurry, text, watermark, signature

目印は、絵を作る前に決めました。

  • ロボット: ①白とだいだい色の 2 色のたまご形の体 ②黒い画面に水色の丸い目が 2 つ ③先が緑の玉のアンテナ。3 つがそろったら「効いた」。ほかに、背景が文のとおりか、崩れ(形が溶ける・目や手足の数が狂う・色が焼ける・ノイズ)があるか。
  • 版画: ①黒か濃い色の輪郭線 ②平らな色の塗り(写真のような陰影がない)。2 つがそろったら「効いた」。ほかに、文の物が描かれているか、題の札や文字・印のような四角が出たか(学習の画像の写し過ぎの目印)、崩れ。

数えたのは編集部です。Gemini 3.8 Flash にも同じ目印を 6 枚ずつ尋ね(渡した文は記事の最後)、「効いた」の判定が 192 枚中 187 枚で一致しました。

枚数で効き方はどう変わるか(ロボット)

4 段 4 列の絵。LoRA なしは白い人型や車輪のついたロボット。10 枚・20 枚・40 枚の LoRA では、白とだいだい色のたまご形で、黒い画面の顔と緑の玉のアンテナのロボットが、森・公園のベンチ・夕日の浜・台所の机にいる。10 枚のベンチの絵は体の下が灰色
学習の画像の枚数を変えたロボットの LoRA。同じ文・同じ種(1001)。数は 12 枚のうち、3 つの目印がそろった枚数撮影・作図: 編集部
枚数 効いた ①体の 2 色 ②黒い画面と目 ③緑の玉のアンテナ 崩れ
なし 0/12 0/12 4/12 0/12 0/12
10 枚 6/12 7/12 12/12 11/12 0/12
20 枚 9/12 11/12 11/12 11/12 1/12
40 枚 8/12 9/12 12/12 10/12 0/12

10 枚でも、黒い画面と水色の目は 12 枚すべてに、緑の玉のアンテナは 11 枚に出ました。足りなかったのは体の 2 色です。10 枚では、体の下が灰色の絵が 3 枚、だいだい色が腕だけの絵が 1 枚、白だけの絵が 1 枚でした。20 枚にすると、体の 2 色は 12 枚中 11 枚に増えました。

40 枚は 8/12 で、20 枚(9/12)と 1 枚違いです。12 枚ずつの比べでは、この差で順位は決められません。また、ステップ数をそろえたので、40 枚の組は 1 枚を 30 回しか見ていません(20 枚の組は 60 回)。枚数とステップ数を一緒に増やす比べは、試していません。

LoRA なしの絵は、白い人型や車輪のついたロボットで、②の「黒い画面と水色の目」だけが 4 枚に出ました。

ステップ数とランク(ロボット)

4 段 4 列の絵。400 ステップは胴が青い・だいだい色が帯・アンテナの玉が水色の絵がある。800 ステップと 1,200 ステップはほぼ同じロボット。ランク 4 も白とだいだい色のたまご形で緑の玉のアンテナ
20 枚の LoRA の途中(400・800 ステップ)と、ランク 4 の LoRA撮影・作図: 編集部
条件 効いた ファイル 1 ステップ 学習の時間
ランク 16・400 ステップ(途中) 3/12 85.4MB 1.26 秒 (途中の保存)
ランク 16・800 ステップ(途中) 9/12 85.4MB 1.26 秒 (途中の保存)
ランク 16・1,200 ステップ 9/12 85.4MB 1.26 秒 25.8 分
ランク 4・1,200 ステップ 8/12 21.6MB 1.18 秒 24.1 分

400 ステップでは、胴が青くなる、だいだい色が帯になる、アンテナの玉が水色になる絵が出て、3 つがそろったのは 3 枚でした。800 ステップで 9 枚になり、1,200 ステップと同じ数でした。12 枚の数では、800 ステップ(学習の部分で約 17 分)と 1,200 ステップの差は見えません。

ランク 4 は 8/12 で、ランク 16 の 9/12 と 1 枚違いです。ファイルは 21.6MB で、ランク 16 の約 4 分の 1 でした。1 ステップは 1.18 秒で、ランク 16 より約 6% 速く、PyTorch が確保した VRAM は 6,486MiB(ランク 16 は 6,798MiB)でした。

重みと崩れ(ロボット)

森・公園のベンチ・夕日の浜・台所の机の 4 つの文で、重み 0.6・1.0・1.4 を並べた 12 枚。0.6 は白や灰色の体に水色の玉のアンテナ、1.0 と 1.4 は白とだいだい色のたまご形に緑の玉のアンテナ。1.4 の浜の絵は背景が灰色で平ら
20 枚・ランク 16・1,200 ステップの LoRA を、重み 0.6・1.0・1.4 で使った絵撮影・作図: 編集部
重み 効いた 背景が文のとおり 崩れ
なし(LoRA なし) 0/12 12/12 0/12
0.6 0/12 12/12 1/12
1.0 9/12 12/12 1/12
1.4 12/12 12/12 0/12

重み 0.6 では、黒い画面と水色の目は 12 枚中 11 枚に出ましたが、白とだいだい色の体は 1 枚も出ませんでした。体は白や灰色になり、アンテナの玉は水色や灰色でした。重み 1.4 では 12 枚とも 3 つがそろい、崩れも出ませんでした。崩れは、1.0 の台所の 1 枚で体に目のような黒い丸が 2 つ増えたもの、0.6 の台所の 1 枚で胴にもう 1 つ顔が出たものです。

画風の LoRA(版画)

5 段 4 列の絵。LoRA なしは写真のような電車と店、イラストの雪の村と猫。LoRA を使うと、川の橋と電車・雨の夜の店・雪の村・窓辺の猫が、輪郭線と平らな塗りの版画のような絵になり、縦長の題の札や文字が入る。重み 1.4 の電車は古い機関車
版画の LoRA。LoRA なし・20 枚(400 ステップと 1,200 ステップ)・40 枚・20 枚を重み 1.4 で使った絵。同じ文・同じ種(1001)撮影・作図: 編集部
条件 効いた 文の物 題の札や文字・印
なし 3/12 12/12 3/12(店の看板の文字)
20 枚・400 ステップ 12/12 12/12 12/12
20 枚・800 ステップ 12/12 11/12 12/12
20 枚・1,200 ステップ 12/12 11/12 12/12
20 枚・重み 0.6 9/12 12/12 11/12
20 枚・重み 1.4 12/12 7/12 12/12
40 枚・1,200 ステップ 12/12 12/12 12/12

画風の 2 つの目印は、20 枚・400 ステップの時点で 12 枚ともそろいました。LoRA なしでも、雪の村と猫の絵の一部は輪郭線のあるイラストになり、3 枚が「効いた」に入りました。

学習の画像の写し過ぎ

LoRA が覚えるのは、覚えさせたい物だけではありません。今回は 3 つの形で出ました。

  • 題の札・文字・印: 版画の LoRA は、重み 1.0 以上ではどの条件でも 12 枚すべてに、縦長の題の札や文字のような線、赤い印が入りました。学習の版画のほぼすべてにある札と印を説明の文に書かなかったため、合図の語といっしょに覚えたと見られます。
  • 描く物が昔に寄る: 重み 1.4 では、「今の電車」の文で 3 枚とも蒸気機関車や荷車が描かれました。眠る猫の文でも、目を開けた猫が出ました。
  • 背景と姿勢: ロボットの重み 1.4 では、浜と台所の背景が、学習の画像のような灰色の平らな床に近づきました(編集部の見立て。数には表れていない)。ベンチの絵では、座らずに座面に立つロボットもいました(学習の画像に座った姿はない)。

LoRA なしの絵では、合図の語「hdaprint」が店の看板の文字(HDAPRINT など)として描かれました。一方、学習の版画の構図をそのまま写した絵は、LoRA を使った 72 枚には見当たりませんでした(編集部の見立て)。

編集部が次に試すなら、写したくない物を説明の文に書く(例: title cartouche, seal)、学習の画像から札や印を切り取る、の 2 つです。今回はどちらも試していません。

費用: 自分の PC とクラウドの GPU

表。学習 1 本は 45.3Wh で約 1.4 円、6 本の合計は 270.8Wh で約 8.4 円、評価の絵 1 枚は 0.53Wh で約 0.02 円。クラウドの GPU の 1 時間の料金は、Lambda の A10 が 1.29 ドル・A100 が 1.99 ドル(税別)、さくらインターネット 高火力 DOK の V100 が 57.6 円・H100 が 1,008 円(税込)
学習 1 本あたりの電気代と、クラウドの GPU の 1 時間の料金(公式の料金のページ・2026年10月15日に確認)撮影・作図: 編集部

GPU の電力量に、全国家庭電気製品公正取引協議会の目安単価 31 円/kWh(税込)を掛けました。学習 1 本は約 1.4 円、6 本で約 8.4 円です。評価の絵は 1 枚 0.53Wh(ComfyUI の起動を含む平均)で、約 0.02 円でした。PC のほかの部品の電力と、PC の購入費は入っていません。

クラウドの GPU の料金は、公式の料金のページで確かめた値です(高火力 DOK はプランごとに最低の利用時間あり)。借りていないので、同じ学習が何分で終わるかは分かりません。

8GB の GPU の PC がすでにあるなら、GPU の電気代は 1 本 2 円未満でした。text encoder も学習するなど、8GB では遅くなりすぎた設定を試すなら、VRAM の大きいクラウドの GPU を時間で借りる方法があります。

LLM の LoRA(QLoRA)

LoRA の論文は、もともと GPT-3 のような文章のモデル(LLM)のための方法です。LLM 向けの方法の 1 つに、2023年に Dettmers ほかが発表した QLoRA があります。論文によると、土台のモデルを 4 ビットに縮めて固定し、LoRA だけを学習します。この方法で、650 億個の数値のモデルを 48GB の GPU 1 枚で調整できたとされています。今回、文章のモデルの LoRA は試していません。

気をつけること

  • 1 回ずつの学習です。各条件は 12 枚で数えています。1〜2 枚の差で順位を決めないでください。
  • Windows ではメモリ不足でも止まらないことがあります。1 ステップの秒数と GPU の消費電力を見てください。
  • 土台は SDXL base 1.0 だけです。SD 3.5 Medium など、ほかの土台のモデルは試していません。
  • 土台のモデルの決まり: SDXL base 1.0 の CreativeML Open RAIL++-M には、使い方の制限(法に反する用途などの禁止)があります。使う前に読んでください。
  • 学習の画像の権利: 自分で作った物か、使ってよいと確かめた物にしてください。今回は自社で作った 3D の絵と、CC0 の版画だけです。

まとめ

  • 8GB の GPU でも、gradient checkpointing・2 つのキャッシュ・U-Net だけ・batch 1 なら、SDXL の LoRA は 1 本 24〜26 分で学習できました。gradient checkpointing を外す・text encoder も学習する・batch 4 にする、のどれでも、エラーは出ないまま 1 ステップが 69〜203 倍の秒数になりました(30 ステップの試し)。
  • 今回のロボットでは、20 枚・800 ステップから枚数やステップを増やしても効いた数は増えず(差は 0〜1 枚)、ランク 4(21.6MB)も 1 枚差でした。
  • 画風は 400 ステップで出ましたが、題の札や印まで写りました。写したくない物は、学習の画像と説明の文の側で手当てが要ります。

採点に渡した文(全文)

Gemini 3.8 Flash には、6 枚の絵に番号 1〜6 を付けた 1 枚のシートを、32 回渡しました(YOBITSUGI AI の ask_ai・tier は既定)。シートごとに替えたのは「各絵の指示」の行だけです。

ロボットのシート(18 回)です。

テキスト
番号 1〜6 の 6 枚の絵が並んでいます。1 枚ずつ、次の 5 つに yes か no で答えてください。
M1: 体がたまご形のロボットで、体の上の側が白、下の側がだいだい色(オレンジ)の 2 色に分かれている
M2: ロボットの顔に黒い画面があり、その中に水色の丸い目が 2 つある
M3: ロボットの頭のてっぺんから、先に緑の玉がついたアンテナが 1 本立っている
BG: 背景が、その絵の指示の場所になっている(各絵の指示は下のとおり)
BROKEN: 形が溶けている・目や手足の数がおかしい・色が焼けたように飛んでいる・ノイズが多い、のどれかがある
各絵の指示: 1: 朝の光の森 / 2: 朝の光の森 / 3: 朝の光の森 / 4: 街の公園の木のベンチ / 5: 街の公園の木のベンチ / 6: 街の公園の木のベンチ
返事は JSON だけ。形: {"1":{"M1":"yes","M2":"no","M3":"yes","BG":"yes","BROKEN":"no"}, … "6":{…}}

版画のシート(14 回)です。

テキスト
番号 1〜6 の 6 枚の絵が並んでいます。1 枚ずつ、次の 5 つに yes か no で答えてください。
S1: 黒か濃い色の輪郭線で、物の形が描かれている
S2: 色が平らに塗られていて、写真のような陰影や質感がない
SUB: その絵の指示の物が描かれている(各絵の指示は下のとおり)
CART: 絵の中に、題の札・文字・印(はんこ)のような四角い区画がある
BROKEN: 形が溶けている・色が焼けたように飛んでいる・ノイズが多い、のどれかがある
各絵の指示: 1: 川にかかる橋を渡る今の電車 / 2: 川にかかる橋を渡る今の電車 / 3: 川にかかる橋を渡る今の電車 / 4: 雨の夜のコンビニ / 5: 雨の夜のコンビニ / 6: 雨の夜のコンビニ
返事は JSON だけ。形: {"1":{"S1":"yes","S2":"no","SUB":"yes","CART":"no","BROKEN":"no"}, … "6":{…}}

「各絵の指示」の行は、次の 4 通りです。

テキスト
各絵の指示: 1: 朝の光の森 / 2: 朝の光の森 / 3: 朝の光の森 / 4: 街の公園の木のベンチ / 5: 街の公園の木のベンチ / 6: 街の公園の木のベンチ
各絵の指示: 1: 夕日の浜辺 / 2: 夕日の浜辺 / 3: 夕日の浜辺 / 4: 台所の机の上 / 5: 台所の机の上 / 6: 台所の机の上
各絵の指示: 1: 川にかかる橋を渡る今の電車 / 2: 川にかかる橋を渡る今の電車 / 3: 川にかかる橋を渡る今の電車 / 4: 雨の夜のコンビニ / 5: 雨の夜のコンビニ / 6: 雨の夜のコンビニ
各絵の指示: 1: 雪の山の村を歩く人たち / 2: 雪の山の村を歩く人たち / 3: 雪の山の村を歩く人たち / 4: 窓辺で眠る猫 / 5: 窓辺で眠る猫 / 6: 窓辺で眠る猫

参考にした公式の情報

XFacebookはてブLINE

執筆者

佐々木 航@w_sasaki

with Claude Code

プロフィール

株式会社Game 代表取締役。工学部出身で、21歳で起業してからシステム会社の経営一筋で8期目。アプリの受託開発から始め、いまはAIを使ったシステムソリューションを手がけています。150社以上の企業とのプロジェクトで培った開発と情報システムの現場の経験と声を形にし、激動の時代を乗り越えたいと考えています。

この記事は、Claude Code を使って執筆しました。画面の画像は、検証環境で実際に操作して撮影したものです(引用の画像は出典を記載しています)。内容の誤りはお問い合わせからお知らせください。

連載

AI技術大全
全 2 回の目次
  1. 1RAG の精度を上げるには? チャンク・ハイブリッド検索・リランクを順に足して測った
  2. 2LoRA の作り方 8GB の GPU で画像の LoRA を学習し、枚数と時間を測った(この記事)

あわせて読みたい