ankane/torch.rb
Deep learning for Ruby, powered by LibTorch
Torch.rb – Rubyのためのディープラーニング
概要
- FacebookのLibTorch(PyTorchのC++コア)をラップするRuby gemであり、RubyでPyTorchスタイルのディープラーニングコードを記述・実行できます。
- PyTorchのPython APIを密接にミラーリングしつつ、Rubyらしい調整(例:インプレース操作用の
add!、ブール値チェック用のtensor?、NumPyの代わりにNumo配列を使用)が加えられています。
主要コンポーネント
- Tensor操作 – 作成(
Torch.rand,Torch.zerosなど)、算術演算、インデックス参照、Numo::NArrayとの相互変換。 - Autograd –
requires_grad,backward, および.gradを介した勾配アクセスによる自動微分。 - ニューラルネットワーク・モジュール –
Torch::NN::Moduleをサブクラス化してモデルを定義し、Conv2d,LinearなどのレイヤーやTorch::NN::F配下の関数ヘルパーを使用します。 - オプティマイザ – 例:
Torch::Optim::SGDを使用した、典型的なzero_grad,stepワークフロー。 - 保存/読み込み – モデルの状態辞書(state dict)のための
Torch.save/Torch.load(PyTorchファイルと互換性がありますが、Python側での小さな変換に関する注記があります)。 - デバイスサポート – CPU、CUDA GPU(
Torch::CUDA.available?,net.cuda)、AppleシリコンのMetal(Torch::Backends::MPS)。
インストール方法
- プラットフォームに適合するLibTorchビルド(CPU専用またはCUDA対応)をダウンロードします。macOS arm64の例:
curl -L https://download.pytorch.org/libtorch/cpu/libtorch-macos-arm64-2.14.0.zip > libtorch.zip unzip -q libtorch.zip - GemがLibTorchの場所を認識できるように設定し、
Gemfileに追加します:bundle config set build.torch-rb --with-torch-dir=/path/to/libtorchgem "torch-rb" bundle installを実行します。コンパイルには約5〜10分かかります。Windowsはサポートされていません。
はじめに
tutorials/blitz/README.mdにある60分間のブリッツ・チュートリアルに従ってください。- その他のチュートリアルでは、転移学習、シーケンスモデル、および単語埋め込み(word embeddings)を扱います。
- サンプルプロジェクトには、MNIST画像分類、MovieLensコラボレーティブ・フィルタリング、およびGANが含まれます。
典型的なワークフロー(Rubyコード)
# シンプルなCNNを定義
class MyNet < Torch::NN::Module
def initialize
super()
@conv1 = Torch::NN::Conv2d.new(1, 6, 3)
@conv2 = Torch::NN::Conv2d.new(6, 16, 3)
@fc1 = Torch::NN::Linear.new(16*6*6, 120)
@fc2 = Torch::NN::Linear.new(120, 84)
@fc3 = Torch::NN::Linear.new(84, 10)
end
def forward(x)
x = Torch::NN::F.max_pool2d(Torch::NN::F.relu(@conv1.call(x)), [2,2])
x = Torch::NN::F.max_pool2d(Torch::NN::F.relu(@conv2.call(x)), 2)
x = Torch.flatten(x, 1)
x = Torch::NN::F.relu(@fc1.call(x))
x = Torch::NN::F.relu(@fc2.call(x))
@fc3.call(x)
end
end
net = MyNet.new
input = Torch.randn(1,1,32,32)
output = net.call(input)
criterion = Torch::NN::MSELoss.new
target = Torch.randn(10).view(1,-1)
loss = criterion.call(output, target)
optimizer = Torch::Optim::SGD.new(net.parameters, lr: 0.01)
optimizer.zero_grad
loss.backward
optimizer.step
デバイスの扱い
if Torch::CUDA.available?
net.cuda # モデルをGPUに移動
input = input.cuda
end
またはAppleシリコンの場合:
if Torch::Backends::MPS.available?
device = Torch.device('mps')
net.to(device)
end
エコシステム
- 特定のドメイン向けのコンパニオンGem:
torchvision-ruby,torchtext-ruby,torchaudio-ruby,torchcodec-ruby,torchrec-ruby,torchdata-ruby。 - 高レベルなツール:
transformers-ruby(Transformerモデル)およびsafetensors-ruby(効率的なテンソル保存)。
なぜ重要なのか
- 言語を切り替えることなく、Ruby開発者が最新のディープラーニング・モデルを試行錯誤できるようになります。
- PyTorchで使用されているものと同じ高性能なC++バックエンドを活用するため、モデルはCPUまたはGPU上でネイティブ速度で動作します。
- 親しみやすいAPIを通じて、Rubyコミュニティを、急速に進化するPyTorchエコシステムと同期させることができます。
リソース
- ビルドステータス・バッジは、複数のプラットフォームでのCIテストを示しています。
- 詳細な変更履歴、コントリビューション・ガイド、およびGPUテスト用のスクリプト(AWS Deep Learning AMI)が提供されています。
Torch.rbはPyTorchのパワーをRubyに持ち込み、Rubyプログラマーにとってネイティブに感じられる、フル機能でGPU加速されたディープラーニング・スタックを提供します。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト