ankane/torch.rb

Deep learning for Ruby, powered by LibTorch

Torch.rb – Ruby 的深度學習

這是什麼

  • 一個 Ruby gem,包裝 Facebook 的 LibTorch(PyTorch 的 C++ 核心),讓你能在 Ruby 中撰寫並執行類似 PyTorch 的深度學習程式碼。
  • 緊密對應 PyTorch 的 Python API,並加入 Ruby 風格的調整(例如,add! 用於就地運算,tensor? 用於布林檢查,以及使用 Numo 陣列而非 NumPy)。

主要元件

  • 張量運算 – 建立(Torch.randTorch.zeros 等)、算術運算、索引、與 Numo::NArray 之間的轉換。
  • 自動微分(Autograd) – 使用 requires_gradbackward.grad 存取梯度,實現自動微分。
  • 神經網路模組 – 透過繼承 Torch::NN::Module 定義模型,使用 Conv2dLinear 等層,以及 Torch::NN::F 下的功能性輔助函數。
  • 優化器 – 例如 Torch::Optim::SGD,使用典型的 zero_gradstep 流程。
  • 儲存/載入 – 使用 Torch.save / Torch.load 儲存與載入模型狀態字典(與 PyTorch 檔案相容,但需注意小規模的 Python 端轉換)。
  • 裝置支援 – 支援 CPU、CUDA GPU(Torch::CUDA.available?net.cuda)、Apple Silicon Metal(Torch::Backends::MPS)。

安裝

  1. 下載與你的平台匹配的 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
    
  2. 告訴 gem LibTorch 的位置,並加入你的 Gemfile
    bundle config set build.torch-rb --with-torch-dir=/path/to/libtorch
    
    gem "torch-rb"
    
  3. 執行 bundle install。編譯時間約需 5–10 分鐘;不支援 Windows。

快速上手

  • 參考 tutorials/blitz/README.md 中的 60 分鐘快速入門教學。
  • 其他教學涵蓋遷移學習、序列模型與詞嵌入。
  • 範例專案包括 MNIST 圖像分類、MovieLens 協同過濾與 GANs。

典型工作流程(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 Silicon 上:

if Torch::Backends::MPS.available?
  device = Torch.device('mps')
  net.to(device)
end

生態系

  • 專門領域的配套 gem:torchvision-rubytorchtext-rubytorchaudio-rubytorchcodec-rubytorchrec-rubytorchdata-ruby
  • 高階工具:transformers-ruby(轉換器模型)與 safetensors-ruby(高效張量儲存)。

重要性

  • 讓 Ruby 開發者能在不切換語言的情況下,實驗現代深度學習模型。
  • 借由與 PyTorch 相同的高效 C++ 後端,讓模型在 CPU 或 GPU 上以原生速度執行。
  • 透過熟悉 API,讓 Ruby 社群能與快速演進的 PyTorch 生態系保持同步。

資源

  • 建置狀態徽章顯示在多個平台上的 CI 測試。
  • 提供詳細變更記錄、貢獻指南,以及 GPU 測試腳本(AWS Deep Learning AMI)。

Torch.rb 將 PyTorch 的強大功能帶入 Ruby,提供一個功能完整、支援 GPU 加速的深度學習堆疊,讓 Ruby 程式設計師感覺如魚得水。

相關

  • 專案
  • 專案
  • 專案
  • 專案