見出し画像

RunpodでStable Diffusionを構築してみた

前置き

※この記事は2026/01/18の情報をもとに作成しています。
※Runpodには利用料金がかかります。ここに記載されていることで発生したいかなることにも私は責任をとれません。あらかじめご了承ください。

また、この記事を見てrunpodを使ってみようと思った方は、以下のリンクからサインアップ(登録)してもらえると、登録者のあなたが5~500ドル利用できるようになるので、ぜひ活用ください。

画像
2026/01/18時点

https://runpod.io?ref=efe93ke8

はじめに

「AIで画像を生成してみたい!」と思ったことはありませんか?Stable Diffusionは、テキストから画像を生成できるAIツールです。現在は様々なツールで生成AIイラストを作成できるようになりましたが、Satble Diffusionはモデル(画風みたいなもの)が自由に選択できたり、簡素なインターフェースで理解しやすかったりと、私は今でもメインで使っているツールの一つです。

もうそろそろ3年になる程度過去に書いたnoteですが、そのころからちょこちょこ弄っています。

ただ、自分のPCで動かそうとすると高性能なグラフィックボード(GPU)が必要で、2026年はPCの値上がりもひどく、だんだんと手が出しづらくなっていますし、上記のnoteのように少し環境構築も難しい…。

そんな悩みを解決してくれるのが Runpod というクラウドサービスです。
この記事では、クラウドやサーバーの知識がない方でも、RunpodでStable Diffusionを使えるようになることを目指して、ゼロから丁寧に解説していきます。

この記事を読む前に

もし、本当に初心者の方の場合、「どういったものなのか」という事を理解するために、「まず一旦環境を構築してStable Diffusionを使って画像生成してみる」と理解がしやすいかと思います。

そのためこの記事を読む前に、以下の記事(私の記事ですが)を読むことを推奨します。

この記事で学べること

  • クラウドGPUの基本的な考え方

  • Runpodの専門用語(Pod、ネットワークボリューム、リージョンなど)

  • アカウント作成からStable Diffusion起動までの具体的な手順

  • コスト管理のコツ

  • 自分が実際に試してハマったところ

まず知っておきたい基礎知識

すでにITで慣れていて、普段からAWSとか利用されている方は読み飛ばしてください。
あまり詳しくない方は、内容を理解していなくてもできますが、実際にRubpodを操作してるときに「自分は何をしているのか」を把握するためにも雰囲気を知っておくとよいでしょう。(雰囲気でだけでいいです。わからなくてもRubpodは利用できます)

また、初心者向けということで、少し説明を簡易的にします。詳しい方から見ると「大きく間違ってはないけど、正確ではない」みたいなことも出てくると思いますが、ご容赦ください。

クラウドGPUとは?

Stable Diffusionを動かすには、画像処理に特化したパーツであるGPU(グラフィックボード)が必要です。
自分のPCにGPUがない場合、選択肢は2つあります。

  1. GPUが付いたPCを購入する(10万円〜30万円以上)

  2. クラウドでGPUを借りる(使った分だけ課金)

Runpodは2番目の選択肢を提供するサービスです。インターネット経由で、必要なときだけ高性能なGPUを借りることができます。
身近な例で考えると…

  • GPUが付いたPCを購入する:車を購入する

  • クラウドでGPUを借りる:レンタカーを借りる

といったイメージです。いつも使ったり、色々カスタマイズしたいならまだしも、たまにしか使わないならレンタルのほうがお得ですよね。

画像
2026/01/18:価格.comより引用。これはGPUであって、ほかのパーツも組み合わせてパソコンにする必要があります。ずいぶん高価になりましたね。

こういった高価なGPUが1時間0.89ドル(約140円くらい)、もっと普通の性能のGPUならも1時間あたり20〜50円程度からGPUを借りられます。

「Pod(ポッド)」って何?

Runpodで最も重要な概念がPod(ポッド)です。
Podとは、クラウド上に作られる「あなた専用の仮想コンピュータ」のことです。Podを起動すると、インターネット越しに自分専用の高性能PCが使えるようになるイメージです。
Podには以下が含まれています。

  • GPU(画像生成に必要な処理能力)

  • CPU・メモリ(基本的な計算処理)

  • ストレージ(データを保存する場所)

  • OS・ソフトウェア(Linuxなどの環境)

Podの基本的な特徴として、以下が挙げられます。

  • 起動:数分で利用開始できる

  • 課金:起動している間だけ料金が発生

  • 停止:いつでも止められる(課金も止まる(停止中も少しはかかる))

  • 終了:Podを削除すると、中のデータも消える

特に最後の「終了するとデータが消える」という点が重要です。

画像

パソコンで言う、毎回インストールしたデータとかも全部消されて、まっさらな状態で開始する、みたいな状態になります。
起動は簡単なので、それでも困らないことは多いのですが、Stable Diffusionの場合、ローカルで構築したことがある方はわかると思うのですが、初回起動時に様々なデータを取得する関係で、20分程度かかります。また、モデルのサイズが大きいので、毎回転送するのも手間です。

これを解決するのが、次に説明するネットワークボリュームです。

「ネットワークボリューム」とは?

ネットワークボリュームは、Podとは別に存在する、消えないストレージです。
通常、Podを終了(削除)すると、その中に保存していたデータはすべて消えてしまいます。せっかくダウンロードしたAIモデルや、生成した画像が消えてしまうのは困りますよね。

そこで登場するのがネットワークボリュームです。
ずっと消えない保存領域を確保します。

「アタッチ」とは?

ネットワークボリュームをPodに接続することを「アタッチ」と呼びます。
パソコンに外付けハードディスクを接続するようなイメージです。

  • アタッチすると、Podからネットワークボリューム内のファイルを読み書きできる

  • Podを削除しても、ネットワークボリュームのデータは残る

  • 別のPodを起動して、同じネットワークボリュームをアタッチすれば、以前のデータが使える

画像

これにより、Podを気軽に削除して課金を止めつつ、大事なデータは保持できます。

「リージョン」って何?

これもなじみのない方も多いと思います。「クラウド」「仮想環境」といっても、最終的には物理的なマシンが必要になります。
リージョンとは、物理的なマシン=データセンターがある地理的な場所のことです。

Runpodは世界中にデータセンターを持っており、それぞれの場所を「リージョン」と呼びます。

  • US-KS-2(アメリカ・カンザス)

  • EUR-IS-1(ヨーロッパ・アイスランド)

  • EU-RO-1(ヨーロッパ・ルーマニア)

リージョンの選び方

リージョン選びで重要なのは「ネットワークボリュームとPodは同じリージョンでないと接続できない」という点です。

例えば、アメリカのリージョンで作ったネットワークボリュームは、ヨーロッパのPodにはアタッチできません(割と重要)。

画像

SSH接続と公開鍵認証(参考知識)

Runpodでは、ブラウザから直接操作できるWebUIが用意されているため、通常はSSH接続を意識する必要はありません。
ただ、より高度な使い方をしたい場合に備えて、簡単に説明しておきます。
(例えば自分はモデルファイルを転送するのに使います)

SSHとは?

SSH(SecureShell)は、離れた場所にあるコンピュータを安全に操作するための仕組みです。Runpodで作成したPodは、インターネット上のどこかにあるコンピュータです。このPodをコマンドで操作したい場合、SSH接続を使います。

公開鍵認証とは?

SSH接続の際、パスワードの代わりに「鍵ペア」を使う認証方式です。

  • 秘密鍵:自分のPCに保存する(絶対に他人に見せない)

  • 公開鍵:接続先のサーバー(Pod)に登録する

この2つがペアで正しく対応していれば、接続が許可されます。パスワードよりも安全な認証方式として、広く使われています。

画像

Runpodでは、ブラウザ上でJupyterLabやVSCodeが使えるので、SSH接続なしでも十分に作業できます。
……が自分は、Stable Dffusionのモデル転送にrsyncコマンドを使って転送しました。ファイルサイズ大きいですしね。

Runpodのアカウント作成と初期設定

さて、前置きが少し長くなりました。ようやくRunpodの操作です。

アカウント作成

1.Runpod公式サイトにアクセス
2.右上の「SignUp」をクリック
3.Googleアカウントなどでサインアップ

クレジット(残高)の追加

Runpodは前払い式です。使用する前にクレジットを追加しておく必要があります。

1.画面左メニューの「Billing」をクリック
2.「AddCredits」をクリック
3.クレジットカード情報を登録
4.金額を入力して支払い(最低$10〜)

画像

画面のようにOtherを選択すると、課金額が選択できるようになります。また、Enable Auto-payはお試しで利用するときはNoにしておきましょう。
これをYesにしておくと、もし利用中に金額が切れそうになったらオートチャージしてくれます。本番運用や途中で停止してほしくない場合は有効にすると運用が安定しますが、今回は検証なのでNoでよいです。

ネットワークボリュームの作成

先ほど述べた通り、Podを削除するとそれまでの作業内容が消えてしまいますし、公式でも60GB以上の容量を使う場合、ネットワークボリュームを使ってくださいと案内があるのを見ました。
利用するモデルを毎回転送するのも手間なので作ってみましょう。

画像
  1. 画面左メニューの「Storage」をクリック

  2. 「NewNetworkVolume」をクリック

  3. 以下を設定

    1. Datacenter:任意のリージョンを選択(後でPodもここに作成します)

    2. Name:わかりやすい名前(例:`stable-diffusion-data`)

  4. Size:50GB以上を推奨(モデルファイルが大きいため)

  5. 「CreateNetworkVolume」をクリック

ここでデータセンターのリージョンを選択する必要があります。

画像

データ転送を考えるとAP-JP-1(日本)がいいのですが、困ったことがあります。

画像

AP-JP-1を選択すると右側にAP-JP-1で利用できるGPUが表示されます。日本のリージョンではRTX5090やRTX4090、RTX3090は使えません。

リージョン選びで重要なのは「ネットワークボリュームとPodは同じリージョンでないと接続できない」という点です。

ここで先述のこれが関連してきます。そのため、使いたいGPUがあるリージョンを指定してネットワークボリュームを作成する必要があります。

せっかくですし、いいグラフィックボードを使いたいですよね?
また、ハマったポイントとして、RTX5090は公式が公開しているpodでは利用できない(CUDAとかその辺の話。ややこしいので割愛)ので、4090や3090が使えるリージョンを選びましょう(時間帯にもよります。世界中のみんなが利用している時間だと、残数がなかったりもします)。

画像
Lowはあとちょっとで利用者いっぱい。N/Aは今は売り切れ、みたいな状態

※このあたりちょっとよくわからないからやらなくてもいいか!という人はスキップしても起動はできます。

注意点

  • ネットワークボリュームはPodを止めている間もストレージ料金が発生します(1GBあたり約$0.07/月)

  • サイズは後から増やせますが、減らすことはできません

  • アカウント残高が不足するとボリュームが削除される可能性があるので注意

StableDiffusion環境の構築

テンプレートの選択

画像

Runpodでは、テンプレートと呼ばれる設定済みの環境が用意されています。
私はStable Dissusion WebUI Forgeになれているので、これを使います。

画像

ComfyUIに慣れている方はそちらもあります。

画像

Podを選択し、Configure Podを選択します。

画像
画像

たくさん入力できそうな箇所が表示されますが、順に指定していくだけです。

画像

画面上部のNetwork volumeを選択すると、先ほど「ネットワークボリュームの作成」の項目で作成していた場合、作成済みのネットワークボリュームが表示されます。
ここでネットワークボリュームをPodと接続し、Podを削除してもデータが消えないという状態にします。

画像
先ほどのこのあたりの話
画像

ここでネットボリュームを選択すると、右側のリージョンにUS-IL-1とネットワークボリュームで指定したリージョンが自動的に保存されます。

次にGPUを選択します。

画像

ただ、リージョンに依って利用できないGPUについてはこのようにUnavaliableとなりグレーアウトされます。

私は今回RTX4090を選択します。

画像

GPUを選択すると起動方法を確認されます。

画像

基本はこのOn-Demandでよいです。右側は3か月とか6か月とか契約(常時起動)すると割引が効くよといったものですね。
全部設定が完了するとデプロイ(利用可能な状態にすること)ができるようになります。

画面下で1時間当たりの料金がでるので、確認しましょう。

画像

Deploy On-Demandをクリックします。
初回起動には10~20分くらいかかるので待機します。

起動しました。

単純な画像の作成やダウンロードについては、以下のnoteを参照ください。

モデルのアップロード

実運用するうえでは、気に入っているモデルを利用したいですよね。
そのためにネットワークボリュームにモデルをアップロードする必要があります。
アップロード方法としては様々あるのですが、2つ(+α)を紹介します。

WebUIを用いてアップロード

Runpodのサービスを用いてアップロードします。

画像

このPort7777を開くとVSCodeが使えます。

画像

いつものパスをたどってStable-diffusionのフォルダで右クリックをするとUploadが可能です。

画像

(ただ、モデルのサイズが大きいので途中でセッションきれずにアップロードできるかは試していません。たぶんできそう)

WinSCPを用いてアップロード

WinSCPというアプリを用いてファイルを転送します(ここからはStable Diffusionとか全く関係ない話です)。

画像
WinSCPは上記のものです(Geminiによる生成)

ただし、誰でもファイル転送できてしまうと困るので、パスワードのようなものを設定する必要があります。

公開鍵認証

画像

ここで公開鍵認証が登場します。
普段PC触っている人でも、少し戸惑うところかもしれません。サーバーにアクセスするための鍵を設定し、その鍵を利用することで安全にそのサーバーにアクセスできる仕組みです。
流れとしては以下になります。

  1. ローカルPCで公開鍵と秘密鍵を作成する。

  2. 公開鍵をRunpodで動作しているPodに登録する。

  3. Podを再起動する

  4. ローカルPCから疎通確認をする

  5. 秘密鍵をppk形式に変換する

面倒ですが、一度実行すれば再度する必要はないので、初回の我慢だと思ってください。また、記載している方法はあくまで一例です。ほかの方法でできる方はそちらで問題ありません。

1.ローカルPCで公開鍵と秘密鍵を作成する。

Windowsのコマンドプロンプトを開いてください。コマンドプロンプトがわからなければフォルダを開き、フォルダのパスが表示されているところにcmdと打ち込みEnterを押してください。

画像
画像

こういった黒い画面が開きます。
以下のコマンドを打ち込みます。もしメールアドレスがsample@example.comであれば以下のように打ち込みます。

ssh-keygen -t ed25519 -C "sample@example.com"

画像

コマンドプロンプトは右クリックで貼り付けることができます。
途中で、
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
と聞かれますが、そのまま未入力でEnterで大丈夫です。成功すると以下のようなものが表示されます。

画像

あなたのパソコンのユーザーネームがsatoの場合、
C:\Users\sato/.ssh
に行くと、

画像

このような2つのファイルが作成されています。pubとついている方が公開鍵です。こちらをRunpodに登録します。ついていないほうは秘密鍵なので、誰にも教えないで下さい。

2.公開鍵をRunpodで動作しているPodに登録する。

id_ed25519.pubをメモ帳などテキストエディタで開くと、「ssh-ed25519」から始まる文字列が記入されています。これをすべてそのままコピーしてください。
ここでRunpodに遷移します。
起動中のRunpodのハンバーガーボタンから、Edit Podを選択します。

画像

下のEnviroment variabiesをクリックするとPUBLIC_KEYという項目があります。

画像

なければ下のAddから「PUBLIC_KEY」を作成し、値のように公開鍵を入力してSaveをします。

あとどっちが先に入力されるのかわからないのですが、Settingの SSH public keysにも同じようにssh-ed25519から始まる文字列を入力します。

画像

3.Podを再起動する

保存した後は再起動しないとPodに読み込まれないので、Restart Podを押します。

画像

これでPodに公開鍵の登録が完了しました。一度Settingの SSH public keysに保存すれば、次回以降Podを作成したタイミングでPUBLIC_KEYの値は自動的に設定されます。

4.ローカルPCから疎通確認をする

RunpodのConnectにSSH over exposed TCPという項目があります。
この内容をコピーして、コマンドプロンプトで実行します。設定がうまくいっていれば、以下のように接続できます。初回接続時はyesと入力してくださいというダイアログが表示されます。

画像

もし、ここまでで手順に詰まったらChatGPTなどに

現在公開鍵認証で利用する鍵を作ろうとしている。
Windows環境で実行して、ここに書いてある手順で設定したが、うまくいかない

と入力して、このnoteの手順と現状コマンドプロンプトになんと表示されているかを教えれば、対応策を教えてくれると思います。

5.秘密鍵をppk形式に変換する

WinSCPで利用するために、秘密鍵をppkという形式に変換します。
変換にはPuTTYgenというアプリを使います。

ここからダウンロードできます。おそらく多くの人は64-bit x86:をダウンロードすればよいと思います。

画像

msiをダウンロードし、インストールしてください。インストールするとPuTTYgenというアプリが利用できるようになります。

画像

Conversations > Import Keyでid_ed25519を選択します(pubとついていない方)

画像

読み込んだら、Save private keyを押して、id_ed25519.ppkという名前で同じ場所に保存します。

これで準備は完了です。

WinSCP

窓の杜からWinSCPをインストールします。

画像
寄付送金もできますが、無料で使えます。

起動すると「セッション」の情報入力が求められます。

先ほど疎通テストで使ったコマンドが「ssh root@999.999.999.999 -p 24868 -i ~/.ssh/id_ed25519」だとした場合は以下のように入力します。

画像

パスワードは空でよいです。上記を入力したら「設定」> SSH > 認証 > 秘密鍵で先ほど作成した「id_ed25519.ppk」を選択します。

画像

入力が終わったら「ログイン」をします。初回アクセス時には以下のようなメッセージが表示されるかもしれませんが、問題ないので進めてください。

画像

左側が自分のPC、右側がRunpodのネットワークボリュームです。アップロードしたいファイルをドラッグ&ドロップするとファイルのアップロードができます。

画像

アップロード時間については、ネットワークの込み具合や、リージョンに依存するので何とも言えません。ただひたすら待ちましょう。

rsyncを利用してアップロードする

私はrsyncを使ってアップロードしました。Windowsで利用しようとすると、WSLでUbuntuを入れて、秘密鍵をUbuntuに権限が……といよいよ本当にRunpodから脱線してしまうので割愛します。ChatGPTなどに

Windowsでrsyncを使ってファイル転送をしたいです。
転送先にはssh root@999.999.999.999 -p 24868 -i ~/.ssh/id_ed25519でアクセスでき、ローカルの「モデルのパス」を「Runpodのネットワークボリュームのパス」にコピーしたいです。
ただ、WindowsにはWSL(Ubuntu)が入っていないので、そのインストール方法、秘密鍵をWSL内にコピーしてchmod 600をするコマンドも併せて教えてください

といった形で聞けば手順を教えてくれると思います。

画像
自分が転送したときは25分かかりました。

もしネットワークボリュームを使っていないと、毎回Podを作り直すたびにモデルの転送が必要になってしまうので、少しお金はかかりますが、やっぱりネットワークボリュームを作ったほうが取り回しはいいかなぁと思います。

ファイルのダウンロード

こちらはモデルのアップロードの章で紹介した内容と重複するので割愛します。
Port7777のVSCodeからダウンロードもできますし、WinSCPを用いてもダウンロード可能です。
小さいファイルであればSCPコマンドでもよいかと思います。巨大なファイルの場合は分割してを推奨など、公式に書かれています。

ファイル転送については以下も併せて参照ください。

トラブルシューティング

いくつかハマったので紹介します。

Stable Diffusionが起動しない

起動中で、3000ポートにアクセスしてもずっとロードで止まってしまう。
→これはおかしいぞ?となったら素直にPodを再起動(Restart)するか、作り直す。
初回起動時では時間はかかりますが、今までの経験の範囲では30分はかかったことはないです。15分くらい経って起動しない場合はLogsを確認し、なんか動いてなさそうな場合、再起動しましょう。

GPUの在庫切れ

リージョンで利用できるはずなのに、選択できないこともあります(このnoteを書いている今がまさにそれ)

画像
このリージョンでは5090も4090も選択できるはずなのに……。

作成したネットワークボリュームのリージョンでpodのリージョンが決まってしまうので、こうなったら空くのを待つしかありません。
ネットワークボリュームは作っているだけで課金(微々たるものではありますが)されるのですが、こういった対策のためにいくつかのリージョンで作っておくのも手かもしれません。

GPUが使用されない

これもGPUの枯渇なのか、たまたまなのかわかりませんが、GPUが利用されずに、CPUだけで生成していたことがありました。ネット上の情報を見るとたまにあるみたいです。画像生成がやけに遅いときは疑ったほうがいいです(初回起動時にスカるみたいで、一度アタッチされていれば平気そう)。
確認方法としては、「TelemetryタブでCPUが100%近く張り付き、GPUが利用されていない」でしょうか。

画像
この画面ショットではRTX4000AdaのVRAMが使われているので、正常に起動しています。

こうなったら、Podの再起動か再作成するのが良いかと思います。

まとめ

実際に購入すると何十万円もするGPU環境ですが、サクッと利用する方法の一つとしてとても有効な選択肢だと思います。
また、個人的に大量に生成することがあるので、その場合複数podを立てて並列で走らせたりができるので、結構有用だなと思いました。やっぱり待ち時間はもったいないですからね。

起動時の失敗やモデルの転送、ファイルのダウンロードはローカルには勝てませんが、十分選択肢の一つとしてありかなぁと思います。

またこのnoteを見て、Runpodを使ってみようかな?と思った方は、ぜひ以下のリンクから登録いただけると嬉しいです。
私もあなたも得する招待リンク……というと少し胡散臭いですが、公式が用意している招待コードですので、ご活用ください。

https://runpod.io?ref=efe93ke8

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

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
創ること、制作をしている人、制作物が大好きです! あとたまに日記みたいなことも投稿します! 色々なアカウントで活動している内容をまとめていこうと思います。
RunpodでStable Diffusionを構築してみた|ゆいのあき
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1