Torch は、Lua インターフェイスと C/CUDA コアを持つ初期の機械学習フレームワークでした。PyTorch はその後継エコシステムです。名前と一部の実装上の系譜を引き継いでいますが、Python と C++ API を中心とする、現在も活発に開発されているフレームワークです。LibTorch は PyTorch の C++ ディストリビューションです。
PyTorch をインストールする #
ほとんどの Python プロジェクトでは、PyTorch インストールセレクターが生成するコマンドを使用して公開パッケージをインストールします。適切なパッケージは、オペレーティングシステム、Python バージョン、アプリケーションが CPU、CUDA、または別のアクセラレーターバックエンドを使用するかどうかによって異なります。
python -m pip install torch torchvisionインストールを検証し、該当する場合は CUDA が利用可能であることを確認します。
import torch
print(torch.__version__)
print(torch.cuda.is_available())ソースから LibTorch をビルドする #
ソースからのビルドは通常不要です。カスタムビルドが必要でない限り、ビルド済みパッケージまたは LibTorch アーカイブを使用します。ソースビルドには、互換性のある C++ コンパイラー、CMake、Ninja、Python ツール、ビルドで選択したアクセラレーター SDK が必要です。リリースとそのサブモジュールをクローンし、そのリリースのビルド手順に従います。
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
git checkout <release-tag>
git submodule sync
git submodule update --init --recursive
cmake -S . -B build -GNinja -DBUILD_PYTHON=OFF
cmake --build buildビルドフラグとサポートされるコンパイラーはリリース間で変わるため、リリース文書を確認せずに古いコマンドラインを本番自動化へコピーしないでください。
テンソル #
torch.Tensor は、形状、データ型、デバイスを持つ同種の多次元配列です。一般的な NumPy 配列と異なり、テンソルは CPU またはアクセラレーター上に存在でき、自動微分に参加できます。
import torch
x = torch.randn(3, 4, device="cpu")
y = x.mean(dim=1)一部の操作は、データをコピーするのではなく既存のストレージ上のビューを返します。ビューは、転置後などに非連続になることがあるため、連続したストレージを必要とする操作では tensor.contiguous() が必要になる場合があります。
モジュールを構築する #
ニューラルネットワークは、通常 torch.nn.Module をサブクラス化して構成します。__init__ でパラメーターと子モジュールを登録し、forward で順方向の計算を記述します。
import torch
class MyLinear(torch.nn.Module):
def __init__(self, in_features: int, out_features: int) -> None:
super().__init__()
self.weight = torch.nn.Parameter(torch.randn(in_features, out_features))
self.bias = torch.nn.Parameter(torch.zeros(out_features))
def forward(self, inputs: torch.Tensor) -> torch.Tensor:
return inputs @ self.weight + self.biasモジュールを呼び出すと、forward の周囲でフックを含むフレームワーク管理のロジックが実行されます。model.forward(inputs) を直接呼び出すよりも model(inputs) を優先してください。
チェックポイントと相互運用性 #
モデルパラメーターは state_dict() で保存し、信頼できるソースからのみロードしてください。PyTorch のシリアライゼーションでは Python pickle を使用でき、デシリアライゼーション中にコードを実行する可能性があります。信頼できないモデル重みには、ツールがサポートしている場合、safetensors などのより安全な形式を優先します。
LibTorch はネイティブアプリケーションに PyTorch モデルを組み込むための C++ API を公開しますが、Python と C++ の成果物は互換性のあるバージョンと API で生成する必要があります。デプロイで使用する正確な推論経路、デバイス配置、入力前処理をテストしてください。
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)