Updated Nov/21/2025 by

PyTorch を C++ から利用する


PyTorch 公式ドキュメント PyTorch C++ API
に基づいて、PyTorch を C++ から利用する方法をまとめる。

PyTorch C++ API

PyTorch C++ API は、以下の5つの部分から構成される。

ATen

テンソルライブラリ。Tensorクラスと、多数の演算を定義している。
ATen の使用例
#include <ATen/ATen.h>

at::Tensor a = at::ones((2,2), at::kInt);
at::Tensor b = at::randn({2,2});
auto c = a + c.to(at::kInt);

Library API : Namespace at: で説明されている 名前空間 Tensor に存在している。

Autograd

ATen Tensor クラスで自動微分を可能となる API。 autograd はテンソルに対する操作を gutograd グラフに記録しておき、 そのグラフの leaf 変数に対して backwards() 関数を呼び出すと、 関数やテンソルのネットワーク全体に対して逆モードの微分を実行して勾配を計算する。
Autograd の使用例
#include <torch/csrc/autograd/variable.h>
#include <torch/csrc/autograd/function.h>

torch::Tensor a = torch::ones({2, 2}, torch::requires_grad());
troch::Tensor b = torch::randn({2, 2});
auto c = a + b;
c.backward();  // a.grad() は ∂a/∂c を保持する。
ATen の at::Tensor クラスはデフォルトでは微分可能ではない。 autograd API が提供するテンソルの微分可能性を追加するには、 torch::名前空間 のテンソルを使う必要がある。

C++ フロントエンド

ニューラルネットワークや機械学習のための、Python API と同等のデザインと機能を持つ C++ モデリングインターフェイスを提供する。

TorchScript

TorchScript は、TorchScript コンパイラが理解・コンパイル・直列化ができる PyTorch モデルの表現である。 基本的に TorchScript はプログラミング言語であり、PyTorch API を使う Python のサブセットである。 TorchScript への C++ インターフェイスは、次の3つの機能を備えている。

C++ 拡張

上記のすべてのインターフェイスにアクセスして、通常の Python での PyTorch の利用を拡張する単純かつ強力な方法を提供する。 C++拡張について詳しく知りたい場合はチュートリアルを参照すること。

目次


メモ

PyTorch 公式の現時点の "Start Locally" ページでは、 LibTorch を含む最新 Stable では、 CUDA 11.8 / 12.6 / 12.8 / ROCm /CPU-only のビルドが用意されている。

古いドライバへの対応も考えると CUDA 11.8 + PyTroch 2.4-2.6 を、 最新版だと CUDA 12.6 + PyTorch 2.X (その時点での最新版) を使うとよさそうだ。

NVIDIA Optimized Frameworks: PyTorch Release Notes によると PyTorch 24.12 は以下のバージョンを含んでいる。
Ubuntu 24.04
Python 3.12
NVIDIA CUDA  12.6.3
PyTorch 2.6.0a0+df5bbc0