[Stable Diffusion] PyTorchのバージョンによっても画像は変わりますよ
プロンプト、サンプラー、ステップ数、seedなど、画像ファイルのメタデータに記録されるような各種のパラメータを同じにしても、様々な違いによって生成される画像が変わることはご存じだと思います。
A1111系WebUIとComfyUIの生成画像の違いについて以前記事にしました。
A1111系でもA1111, Forge, reForge, Forge Classicなど、ツールが違えば生成画像も変わります。
ここで「ForgeはA1111よりも画質が落ちる」とか、さらには「reForgeとForge ClassicはForgeより画質が落ちる」とか、新しいものほど最適化されているため画質が落ちるという人がいますが本当でしょうか?
私にはそれらが本当かどうかは分かりません。
ですが同じA1111であってもxformersやpytorch attentionなどの最適化オプションによって生成画像は変わりますし、PyTorchのバージョンによっても変わります。ツールによる生成画像の優劣について語る人達が、他の要素による優劣について語らないのは不思議に思います。
特にPyTorchのバージョンによる画像の変化については、探しても情報が見つからなかったので自分で軽く検証してみました。
検証環境
生成画像に影響がありそうな環境の情報は以下のとおりです。
GPU: NVIDIA GeForce RTX 5090
Driver: Game Ready 591.74 WHQL (2026/1/5)
Tool: Stable Diffusion web UI (A1111) dev fd68e0c (2025/12/18)
Python: 3.10.18
PyTorchは以下のバージョンで検証しました。
2.7.0+cu128
2.8.0+cu128
2.9.1+cu128
2.10.0+cu128
2.10.0+cu130
A1111の最適化オプションは何も付けませんが、私の環境では "--opt-split-attention" を付けた場合と同じDoggettx's cross-attentionが有効になります。https://github.com/AUTOMATIC1111/stable-diffusion-webui/blame/master/modules/sd_hijack_optimizations.py を見る限り、この最適化が実装されたのは2023年5月19日と古く、xformersやPyTorch attentionに比べて低速で最適化されていないものです。
生成内容
生成内容は以下のとおりです。
Model: WAI-illustrious-SDXL v14.0
Positive Prompt:
1girl,hair ornament,earrings,china dress,action pose,fighting pose,outstretched arm,spread fingers,upper body,looking at viewer,abstract background,
masterpiece,best quality,Negative Prompt:
bad quality,worst quality,worst detail,Sampler: Euler a
Size: 832x1216
Steps: 28
Batch size: 1
CFG scale: 7
Seed: 20260126
RNG: CPU
細かい装飾や指の本数違い、破綻が起きやすいかと考え、髪飾り、イヤリング、腕を伸ばして手を広げるタグを使いました。
生成画像
PyTorchのバージョンを変えて生成した画像です。縦横とも半分程度に縮小しています。
2.10.0+cu130は2.10.0+cu128と完全一致したため割愛しました(細かい比較にはWinMergeを使っています)。

同じような画像ですが細かい違いがあります。順に見ていきます。
PyTorch 2.7.0と2.8.0の画像の違い
全体の輪郭や顔は同じですが所々に違いがあります。目立つ部分を赤枠で囲っています(赤枠の画像内での座標と大きさは同一です)。
背景の模様の違い
髪飾りの違い
左耳の違い(2.8.0は耳たぶが短く欠けてるように見える)
薬指の違い(2.7.0は中指より長くて変)
ドレスの龍の模様(2.7.0はぼやけている)

PyTorch 2.8.0と2.9.1の画像の違い
PyTorch 2.8.0と2.9.1は完全一致でした。
※ 何度か生成するうちに目視で分からないような違い(一部のドットについてRGB値が1のみズレる)が発生することがありましたが、再現できず目視で判別できないものなので無視します。
PyTorch 2.9.1と2.10.0の画像の違い
こちらも目立つ部分を赤枠で囲っています。
背景の模様の違い
髪飾りの違い
左耳の違い(2.9.1は耳たぶが短く欠けてるように見える)
薬指の違い(2.10.0は中指より長くて変)
胸の大きさ(2.10.0のほうがやや大きい)
なお2.10.0は薬指が長いところや背景に模様が無いところは2.7.0と似ていますが、他の部分は異なっています。

Batch count: 9での結果
Batch count: 9でseedを1ずつ増やしながら9枚連続生成した場合の結果です。



気づいたことを箇条書きします。
全体の雰囲気、輪郭、顔はあまり変わらないが、耳の位置や胸の大きさなど小さな違いがある(2.10.0のみ3枚目の瞳の色が違う)。
髪型の細部、髪飾り、イヤリング、服や背景の模様などの装飾的なものは結構変わる。どのバージョンがよいかは個人の嗜好でありSeedによっても変わる。
指や腕が破綻したものはバージョンが変わっても破綻している(3枚目の両手指、6枚目の左腕と指、9枚目の左手薬指)。
バージョンによって指の本数、形、長さが変わることがある(3枚目の右手指、2.7.0: 4本、2.8.0: 5本、2.10.0: 6本)。
Forge, reForgeでの結果
旧Forge (Forge1, bfee03d), 新Forge (Forge2, dfdcbab), reForge (630cf49)でもPyTorch 2.9.1でBatch count: 9で生成してみました。
A1111と同じく最適化オプションは何も付けませんが、私の環境では "--attention-pytorch" を付けた場合と同じpytorch cross-attentionが有効になります。
バージョンはそれぞれ現時点での最新版、最終版です。ちなみ旧Forgeと新Forgeでは画像が変わりますが、旧reForge (main-old) と新reForgeでは変わりません。



3枚目、6枚目、9枚目はA1111と同様に破綻しています。それ以外については8枚目について右手指が旧Forgeで人差し指と中指の間が広すぎ、reForgeで6本になってしまいましたが、それ以外は破綻と言えるような違いはないと思います。
PyTorchのバージョンで画像が変わる理由
ChatGPTに以下のように聞いてみました。
質問:
Stable Diffusion の画像生成でPytorchのバージョンを2.7, 2.8, 2.9, 2.10と変え、他の要素(プロンプト、サンプラー、seed、ツール)は変えない場合、生成される画像は変わる?それとも変わらない? 理由とともに答えてください。
回答(要約):
結論:変わる可能性が高い。
PyTorchのバージョンが変わると、内部の数値計算方法やCUDAカーネル、最適化処理が変化し、浮動小数点の丸め誤差が異なる。拡散モデルは誤差が段階的に増幅されるため、同一プロンプト・サンプラー・seedでも最終画像が一致しないことが多い。理論上は同じ結果が理想だが、実用環境ではPyTorchの違いも再現条件の一部と考えるべきである。
まとめ
PyTorchのバージョンによる画像の変化についてA1111で軽く検証しつつ、旧Forge, 新Forge, reForgeとも比較してみました。
とりあえずPyTorchのバージョンによってそれなりに画像が変わることが分かりました。
旧Forge, 新Forge, reForgeとの比較についてはサンプルが少なすぎますし、そもそも優劣を語るつもりはありません。
私は細かいことは気にせずPyTorchをバージョンアップしますし、新しいツールを使います。たとえ多少の劣化があったとしても生成が速いほうが試行回数を増やせてよいと考えているからです。
他人の主観的な考えを否定する気はありませんが、PyTorchのバージョンでも画像は変わるので、ツールによる画像の優劣を語る人がそれについてどう考えているのかはちょっとモヤモヤしますね。
このような感じで、あまり体系的に整理や理解されていない技術的な内容を分かりやすく無料で解説しています。「スキ」「フォロー」「チップ」で応援よろしくお願いします。
