PyTorch Lightningを入れるとき、pip install lightning と pip install pytorch-lightning のどちらを打つかで迷う人は多いはずです。結論から言うと、新しく始めるなら lightning で、これを入れると pytorch-lightning も一緒に入ります。ただし2つのパッケージのTrainerは別のクラスなので、importを混ぜると学習が始まりません。この記事では、2026年10月30日時点の最新版2.6.6を手元のPython 3.12環境に入れて確かめた結果をもとに、入れ方・対応する版・よく出るエラーの直し方を説明します。
まとめ:PyTorch Lightningのインストール要点(2.6.6時点)
- 新規なら
pip install lightning。importはimport lightning as L。依存としてpytorch-lightningも入る(版の指定は無いので、固定するなら両方を指定する)。 - 1つのコードの中で
lightningとpytorch_lightningを混ぜない。Trainerが別クラスなのでTypeErrorで止まる。 - 最新版は2.6.6(2026-09-10)。
load_from_checkpointの任意コード実行を直したリリースなので、2.6.5以前からは上げておく。2.6.2と2.6.3はPyPIで改ざんされた版。 - Python 3.10以上・PyTorch 2.1以上。Python 3.9では古い2.6.0がエラー無しで入る。
- GPUで使うならtorchを先に入れる。Windowsで素の
pip installをするとCPU版のtorchになる。
PyTorch Lightningとは:PyTorchの学習ループを肩代わりするライブラリ
PyTorch Lightningは、PyTorchで毎回同じように書く学習ループを引き受けるライブラリです。素のPyTorchでは、エポックのループ、optimizer.zero_grad()・loss.backward()・optimizer.step() の呼び出し、.to(device) によるGPUへの転送を自分で書きます。Lightningでは書き手がモデルと1ステップ分の計算だけを書き、残りは Trainer が回します。PyTorch本体の基本はPyTorchとは?読み方・できること・TensorFlowとの違いと入れ方【2.14対応】で解説しています。
素のPyTorchとLightningで書く範囲の違い
何を自分で書き、何をTrainerに任せるかを並べると次のようになります。
| 処理 | 素のPyTorch | Lightning |
|---|---|---|
| モデル定義 | nn.Module | LightningModule |
| 1ステップの損失計算 | 自分で書く | training_stepに書く |
| エポックのループ・逆伝播 | 自分で書く | Trainerが実行 |
| GPU転送・複数GPU | .to(device)・DDPを手書き | Trainerの引数 |
| ログ・チェックポイント | 自分で書く | self.logとコールバック |
デバイスや精度の指定がモデルのコードから外に出るので、CPUで書いたコードを書き換えずにGPUへ移せます。逆に、ループの中で特殊な更新をしたい研究コードでは、Trainerの決まった流れが邪魔になることがあります。その場合は次のFabricを使います。
lightning.pytorchとlightning.fabricの役割(lightning.appは削除済み)
統合パッケージ lightning には2つの部品が入っています。lightning.pytorch はTrainerとLightningModuleによる従来のPyTorch Lightning本体です。lightning.fabric は、学習ループは自分で書いたまま、デバイスの割り当て・分散・混合精度だけを任せる軽い層です。アプリ構築用だった lightning.app は、脆弱性CVE-2024-5980の報告を受けて2.3.3でパッケージから削除されました。2.6.6の環境でも lightning.app は見つからず、Lightning Apps前提の古い記事のコードは動きません。
pip install lightningとpip install pytorch-lightningの違い
PyPIには lightning と pytorch-lightning の2つのパッケージがあり、どちらも2026年9月10日に2.6.6が公開されています。違いは入る範囲とimportの名前です。
lightningの依存に含まれるpytorch-lightning
PyPIのlightning 2.6.6は、必須の依存に pytorch-lightning を条件なしで含んでいます。空の仮想環境で pip install lightning を実行すると、最後に次のパッケージが入りました(抜粋)。
Successfully installed ... lightning-2.6.6 lightning-utilities-0.15.3 ...
pytorch-lightning-2.6.6 ... torch-2.2.2 torchmetrics-1.9.0 ...
このため lightning だけを入れた環境でも、import lightning と import pytorch_lightning の両方が通ります。逆向きは成り立ちません。pip install pytorch-lightning だけの環境では import lightning が ModuleNotFoundError: No module named 'lightning' になりました。なお pytorch-lightning 側にもFabricは lightning_fabric という名前で同梱されていて、こちらはimportできます。
| 入れたもの | import lightning | import pytorch_lightning | Fabric |
|---|---|---|---|
| pip install lightning | 通る | 通る | lightning.fabric |
| pip install pytorch-lightning | 失敗 | 通る | lightning_fabric |
2つのTrainerは別クラス:import混在によるTypeError
両方importできるからといって、混ぜて使えるわけではありません。lightning.pytorch.Trainer と pytorch_lightning.Trainer は同じソースから作られた別々のクラスで、手元の2.6.6では lightning.pytorch.Trainer is pytorch_lightning.Trainer が False でした。pytorch_lightning.LightningModule を継承したモデルを lightning のTrainerに渡すと、学習が始まる前に止まります。
import lightning as L
import pytorch_lightning as pl
class M(pl.LightningModule): # pytorch_lightning 側を継承
...
L.Trainer(max_epochs=1).fit(M())
# TypeError: `model` must be a `LightningModule` or `torch._dynamo.OptimizedModule`, got `M`
「LightningModuleを継承しているのに、LightningModuleではないと言われる」という分かりにくいエラーです。ネット上のサンプルを継ぎ足したときに起きやすいので、まずimportの混在を疑ってください。nn.Module をそのまま渡したときも同じエラーになります。一方、pytorch_lightning 側のEarlyStoppingとCSVLoggerを lightning のTrainerに渡した組み合わせはエラーにならず、学習が最後まで進みました。型を厳しく確かめるのはモデルだけで、コールバックやロガーは通ってしまう分、混在に気付きにくくなります。1つのプロジェクトではimportをどちらか一方の名前に揃えてください。
新規コードと既存コードでの選び方
新しく書くなら lightning を入れ、importは import lightning as L とし、コールバックも lightning.pytorch.callbacks から読みます。公式のInstallationページが案内するのも python -m pip install lightning です。既存のリポジトリが import pytorch_lightning as pl で書かれているなら、無理に書き換えず pytorch-lightning を入れてかまいません。pytorch-lightning は非推奨ではなく、同じ版番号で公開され続けています。依存を最小にしたいCIやDockerイメージでは、使わない統合パッケージを入れない分だけ pytorch-lightning の方が軽くなります。
PyTorch Lightningのインストール手順(pip・venv・conda・Colab)
CPUで試すだけならコマンド1行で終わります。手間がかかるのはGPU版のPyTorch本体をどう入れるかです。
pipとvenvでのインストール
ほかのプロジェクトのtorchと衝突させないため、仮想環境の中に入れます。Python 3.10以上で環境を作ってください。
python3.12 -m venv .venv
source .venv/bin/activate # Windows は .venv\Scripts\activate
python -m pip install --upgrade pip
python -m pip install lightning
lightning は依存としてtorchとtorchmetricsも入れます。一方、画像データセットを読む torchvision は入りません。公式チュートリアルのMNIST例をそのまま動かすと No module named 'torchvision' になるので、必要なら pip install torchvision を追加します。環境管理をcondaとpipで混ぜたくない場合はPixiとは?Python・conda対応のパッケージ管理ツールの使い方とuv・condaとの違いも選択肢になります。
GPU利用時は先にtorchをインストール(CUDA 13.2・13.4)
pip install lightning が自動で入れるtorchは、OSによって中身が変わります。PyTorch公式のインストールセレクタ(Stable 2.15.0)では、LinuxはPyPIの素のtorchがCUDA 13.2版で、WindowsはPyPIの素のtorchがCPU版です。Windowsで何も考えずに入れると、GPUが付いていても torch.cuda.is_available() が False のままになります。
GPUで学習するなら、先にセレクタで自分の環境に合うtorchを入れ、そのあとにLightningを入れます。torchがすでに要件を満たしていれば、Lightningのインストールでtorchが差し替えられることはありません。
# Windows で CUDA 13.2 版を入れる例(Linux は素の pip install torch が CUDA 13.2 版)
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu132
pip install lightning
# 入ったか確かめる
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
CUDA 13.4版は末尾を cu134 に替えます。どのタグが使えるかはtorchの版ごとに変わるので、コマンドは毎回セレクタからコピーしてください。古い解説記事でよく見かける cu124 や cu121 のURLからは、最新のtorchは入りません(2.15.0のCUDA版は cu132 と cu134)。手元にGPUが無い場合は、時間課金のGPUクラウドを借りる手もあります。Runpodとは?料金・使い方・支払い方法とGPUクラウドの選び方【2026年10月】で料金の目安をまとめています。
conda-forgeからのインストール
Anaconda・Minicondaの環境では、conda-forgeチャネルから入れます。conda-forgeのlightningも2.6.6が最新です。
conda create -n lightning_env python=3.12
conda activate lightning_env
conda install lightning -c conda-forge
同じ環境でcondaとpipの両方からtorchを入れると、どちらが読まれているか分からなくなります。torchとLightningは、condaかpipのどちらか一方で揃えてください。
Google Colab・Jupyterでの導入
Google Colabにはtorchが最初から入っているので、セルでLightningだけを追加します。%pip は実行中のカーネルのPythonに入れるので、!pip より環境の取り違えが起きません。GPUを使うにはランタイムの種類をGPUに切り替えてから実行します。
%pip install lightning
Jupyter Notebookでも同じコマンドで入りますが、インストール後に import lightning が失敗するときは、カーネルを再起動してから読み込み直します。カーネルが別のPython(仮想環境の外)で動いていることも多く、import sys; print(sys.executable) でどのPythonかを確かめると早く原因が分かります。Colabをターミナルから操作したい場合はColab CLIの使い方|インストール・GPU指定・colab runとWindows対応状況【v0.7.4】も参考になります。
Lightningとtorchのバージョン確認と固定
入った版は次のコマンドで確かめます。pip show は依存関係も一緒に出ます。
python -c "import lightning; print(lightning.__version__)"
pip show lightning pytorch-lightning torch
チームで同じ環境を再現するときは、Lightningとtorchの両方の版を固定します。Lightningだけを固定しても、torchが新しい版に上がって動かなくなることがあります。lightning は pytorch-lightning の版を指定していないので、こちらも並べて固定します。
python -m pip install "lightning==2.6.6" "pytorch-lightning==2.6.6" "torch==2.14.0"
対応するPythonとPyTorchのバージョン(2.6系の互換表)
インストールが失敗する、または入ったのに古い版だったという問題の多くは、PythonやPyTorchの版がLightningの対応範囲から外れているのが原因です。公式のCompatibility matrixは次のとおりです(括弧内はCIで最後に試験した版で、上限ではありません)。
| Lightning | torch | Python |
|---|---|---|
| 2.6 | 2.1以上(2.10まで試験) | 3.10以上(3.13まで試験) |
| 2.5 | 2.1以上(2.8まで試験) | 3.9以上(3.12まで試験) |
| 2.4 | 2.1以上(2.6まで試験) | 3.9以上(3.12まで試験) |
PyTorch側にも制約があります。2026年10月28日に出たtorch 2.15.0はPython 3.11以上が必須で、Python 3.10の環境に入るtorchは2.14系までです。新しく環境を作るならPython 3.12にしておけば、Lightningの試験範囲にも最新のtorchの要件にも収まります。
Python 3.9とIntel Macで入る古い版
対応範囲の外にいても、pipはエラーを出さずに入る範囲で最も新しい版を選びます。手元で確かめた2つの例です。
- Python 3.9.6:
pip install lightningの解決結果はlightning-2.6.0でした。2.6.0の要件が3.9以上だったためで、2.6.6の修正は入りません。 - Intel Mac(x86_64):torchは2.2.2が入ります。PyTorchは2.3.0からmacOS x86_64向けのバイナリを作らないと告知していて、2.2.2が最後です。
Intel Macではさらに、一緒に入ったNumPy 2.5.4がtorch 2.2.2と合わず、import時に UserWarning: Failed to initialize NumPy: _ARRAY_API not found と A module that was compiled using NumPy 1.x cannot be run in NumPy 2... が出ました。学習そのものは動きますが、torch.from_numpy() や tensor.numpy() は RuntimeError: Numpy is not available で失敗しました。pip install "numpy<2" で1.26.4に下げると警告は消えました。Intel Mac向けの公式wheelはtorch 2.2.2で提供が終わっているため、本格的に学習するならLinuxのGPU環境かApple Silicon機へ移る前提で考えてください。
2.6.6へ上げる理由:load_from_checkpointの修正と2.6.2・2.6.3の改ざん版
2.6.6のリリースノートに載っている修正は2件で、どちらも load_from_checkpoint で任意のコードが実行される問題です。チェックポイントに書かれた _instantiator を信頼済みのものだけに制限し、読み込むクラスのサブクラスに解決されない _class_path を拒否するようになりました。他人が配布したチェックポイントを読む可能性があるなら、2.6.5以前から2.6.6へ上げてください。なお2.6.4ではNeptuneロガーが削除されたので、Neptuneロガーを使っているコードはCSVLoggerなど別のロガーへ移す必要があります。
版番号が2.6.1から2.6.4へ飛んでいるのは欠番ではありません。Lightning AIの告知によると、2026年4月30日に攻撃者がPyPIの認証情報を使って改ざんした lightning 2.6.2と2.6.3を公開し、12:45:20から13:27:30(UTC)までの42分間インストールできる状態でした。GitHubのソースコードは侵害されておらず、PyPIがパッケージを隔離しています。pip show lightning で2.6.2か2.6.3と表示される環境は、作り直して2.6.6を入れてください。
LightningModuleとTrainerによる最小の学習例
インストールできたら、そのまま動くコードで確かめます。MNISTのようにデータのダウンロードやtorchvisionを必要としないよう、乱数で作った回帰データを使います。手元のCPU環境で13エポック目に早期終了し、最良のチェックポイントから復元できるところまで確認しました。
import torch
from torch import nn
from torch.utils.data import DataLoader, TensorDataset
import lightning as L
from lightning.pytorch.callbacks import EarlyStopping, ModelCheckpoint
class LitRegressor(L.LightningModule):
def __init__(self, lr=0.05):
super().__init__()
self.save_hyperparameters()
self.net = nn.Sequential(nn.Linear(8, 32), nn.ReLU(), nn.Linear(32, 1))
def forward(self, x):
return self.net(x)
def training_step(self, batch, batch_idx):
x, y = batch
loss = nn.functional.mse_loss(self(x), y)
self.log("train_loss", loss)
return loss
def validation_step(self, batch, batch_idx):
x, y = batch
self.log("val_loss", nn.functional.mse_loss(self(x), y), prog_bar=True)
def configure_optimizers(self):
return torch.optim.Adam(self.parameters(), lr=self.hparams.lr)
if __name__ == "__main__":
L.seed_everything(0)
x = torch.randn(1024, 8)
y = x @ torch.randn(8, 1) + 0.1 * torch.randn(1024, 1)
train = DataLoader(TensorDataset(x[:896], y[:896]), batch_size=64, shuffle=True)
val = DataLoader(TensorDataset(x[896:], y[896:]), batch_size=128)
ckpt = ModelCheckpoint(monitor="val_loss", dirpath="ck", filename="best")
trainer = L.Trainer(
max_epochs=50,
accelerator="auto",
callbacks=[EarlyStopping(monitor="val_loss", patience=3), ckpt],
)
trainer.fit(LitRegressor(), train, val)
print("best:", ckpt.best_model_path, float(ckpt.best_model_score))
restored = LitRegressor.load_from_checkpoint(ckpt.best_model_path)
print("lr:", restored.hparams.lr, "epochs:", trainer.current_epoch)
手元の出力の最後は best: .../ck/best.ckpt 0.0201... と lr: 0.05 epochs: 13 でした。if __name__ == "__main__": で包んでいるのは、DataLoaderの num_workers を増やしたときや複数GPUで学習するときに、子プロセスがスクリプトを読み直しても学習が二重に始まらないようにするためです。
LightningModuleに書く4つのメソッド
最低限必要なのは __init__・training_step・configure_optimizers の3つで、検証の指標を出すなら validation_step を足します。training_step は損失を返すだけでよく、zero_grad・backward・step はTrainerが呼びます。save_hyperparameters() を書いておくと引数がチェックポイントに保存され、load_from_checkpoint で引数を渡し直さずに復元できます。ニューラルネットワークの層の組み方そのものはニューラルネットワークとは?仕組み・種類・PyTorch実装まで実装目線で解説を参照してください。
ログとチェックポイントの保存先
self.log() の値はロガーに送られます。TensorBoardを入れていない環境では、Trainerは自動でCSVLoggerを使い、lightning_logs/version_0/metrics.csv と hparams.yaml を書きました。グラフで見たいなら pip install tensorboard を追加すると、次の実行からTensorBoard形式で保存されます。実行ごとの設定と結果を後から比べたい場合の記録の設計は実験管理とは?記録項目とrun設計・導入判断を実装目線で解説【2026年版】で扱っています。
なお、metrics.csv では train_loss と val_loss が別の行に入ります。train_loss はTrainerの既定(log_every_n_steps=50)どおり、エポックをまたいだ通算ステップの49・99・149に記録され、val_loss は各エポックの終わりに記録されました。小さなデータで細かく見たいときは L.Trainer(log_every_n_steps=1) にします。
Trainerの引数によるGPU・マルチGPU・混合精度の切り替え
モデルのコードを変えずにハードウェアを替えられる点が、Lightningを使う一番の理由です。
accelerator・devicesによるデバイス選択
accelerator に装置の種類、devices に台数を渡します。accelerator="auto" は使える装置を自動で選び、GPUの無いIntel Macでは CPUAccelerator になりました。GPUの無い環境で accelerator="gpu" を指定すると、MisconfigurationException: No supported gpu backend found! で止まります。CUDA版のtorchが入っていないときも同じエラーになるので、まず先ほどの torch.cuda.is_available() を確かめてください。
trainer = L.Trainer(accelerator="gpu", devices=1) # GPU 1枚
trainer = L.Trainer(accelerator="gpu", devices=4, strategy="ddp") # 4枚でDDP
strategy="ddp" はDistributedDataParallelによる標準的な複数GPU学習です。Jupyterの中では ddp を使えないので、ノートブックで複数GPUを試すときは strategy="ddp_notebook" を指定するか、スクリプトに書き出して実行します。
precisionによる混合精度の設定
メモリを減らして速くしたいときは precision を指定します。Trainer APIの定義で受け付ける値は "16-mixed"・"bf16-mixed"・"16-true"・"bf16-true"・"32-true"・"64-true"・"transformer-engine" などです。GPUでは "16-mixed" がFP16の自動混合精度で、Ampere世代以降のGPUならオーバーフローが起きにくい "bf16-mixed" を選べます。
CPUで precision="16-mixed" を指定すると、2.6.6はエラーにせず AMP with fp16 is not supported on CPU. Using precision='bf16-mixed' instead. という警告を出してBF16に切り替えました。CPUで速度を測ってからGPUへ移すと、精度の条件が変わっていることに気付きにくいので注意してください。
Fabricによる自前ループの分散・混合精度対応
GANや強化学習もTrainerの手動最適化(self.automatic_optimization = False)で書けますが、学習ループ全体を自分で管理したい場合は lightning.fabric を使います。ループは素のPyTorchのままで、backward とデバイスの設定だけをFabricに渡します。次のコードは手元のCPUで動き、3ステップで損失が下がりました(乱数を固定していないので値は実行ごとに変わります)。
import torch
from torch import nn
import lightning as L
fabric = L.Fabric(accelerator="cpu", devices=1, precision="bf16-mixed")
fabric.launch()
model = nn.Linear(8, 1)
opt = torch.optim.SGD(model.parameters(), lr=0.1)
model, opt = fabric.setup(model, opt)
x, y = torch.randn(64, 8), torch.randn(64, 1)
for step in range(3):
opt.zero_grad()
loss = nn.functional.mse_loss(model(x), y)
fabric.backward(loss) # loss.backward() の代わり
opt.step()
fabric.print(step, round(loss.item(), 4))
ハイパーパラメータの探索を組み合わせるなら、Lightningのコールバックと連携できるOptunaとは?v5.0の既定TPE変更と枝刈り・並列実行を実装目線で解説も参考になります。社内データでのモデル開発を外部に相談したい場合は、一創の機械学習モデル開発でも学習環境の構築から支援しています。
インストールでよく出るエラーと直し方
手元の実測とここまでの内容から、インストール直後によく出るエラーを並べます。
| エラー | 原因 | 直し方 |
|---|---|---|
No module named 'lightning' |
pytorch-lightningだけを入れた | pip install lightning |
No module named 'lightning'(入れたのに) |
別のPythonで実行している | python -m pipで入れ直す |
`model` must be a `LightningModule` |
importの混在 | importを片方に揃える |
No supported gpu backend found! |
CPU版torch・GPU無し | GPUを確かめCUDA版torchを入れる |
_ARRAY_API not found |
古いtorchとNumPy 2 | pip install "numpy<2" |
No module named 'torchvision' |
lightningは入れない | pip install torchvision |
「入れたのに見つからない」は、pip と python が別の環境を指しているときに起きます。pip install ではなく python -m pip install と打てば、そのとき使っているPythonに必ず入ります。CUDA版torchを入れ直すときは、先に pip uninstall torch でCPU版を外してから、セレクタのコマンドを実行してください。
よくある質問
pip install lightningとpip install pytorch-lightningのどちらを使うべきですか?
新しく書くなら pip install lightning です。pytorch-lightning も依存として同時に入るので、import pytorch_lightning で書かれたサンプルも読み込めます。ただし1つのコードの中で lightning と pytorch_lightning のクラスを混ぜると TypeError になるため、importはどちらか一方に揃えてください。
PyTorch Lightningの最新バージョンはいくつですか?
2026年10月30日時点の最新版は2.6.6(2026年9月10日公開)で、lightning と pytorch-lightning は同じ版番号です。2.6.5以前を使っているなら、load_from_checkpoint の任意コード実行を直した2.6.6へ上げてください。
PyTorch本体は別にインストールが必要ですか?
CPUで動かすだけなら、pip install lightning がtorchも入れるので不要です。GPUで使う場合は、WindowsではPyPIの素のtorchがCPU版になるため、PyTorch公式のセレクタで cu132 などのCUDA版を先に入れてからLightningを入れます。
Lightning AIとPyTorch Lightningは同じものですか?
開発元の会社がLightning AIで、PyTorch LightningはそのOSSのライブラリです。Lightning AIはブラウザでGPU環境を使えるクラウドサービスも提供していますが、ライブラリの利用にアカウントは要りません。学習の開始時に表示されるlitloggerの案内も、そのクラウド側の機能の紹介です。
Lightning App(lightning.app)はどうなりましたか?
2.3.3で lightning パッケージから削除されました。現在のパッケージはTrainerとFabricだけで、lightning.app を前提にした古いコードは動きません。