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.rand、Torch.zeros等)、算術運算、索引、與Numo::NArray之間的轉換。 - 自動微分(Autograd) – 使用
requires_grad、backward和.grad存取梯度,實現自動微分。 - 神經網路模組 – 透過繼承
Torch::NN::Module定義模型,使用Conv2d、Linear等層,以及Torch::NN::F下的功能性輔助函數。 - 優化器 – 例如
Torch::Optim::SGD,使用典型的zero_grad、step流程。 - 儲存/載入 – 使用
Torch.save/Torch.load儲存與載入模型狀態字典(與 PyTorch 檔案相容,但需注意小規模的 Python 端轉換)。 - 裝置支援 – 支援 CPU、CUDA GPU(
Torch::CUDA.available?、net.cuda)、Apple Silicon 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 分鐘快速入門教學。 - 其他教學涵蓋遷移學習、序列模型與詞嵌入。
- 範例專案包括 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-ruby、torchtext-ruby、torchaudio-ruby、torchcodec-ruby、torchrec-ruby、torchdata-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 程式設計師感覺如魚得水。
相關
- 專案
- 專案
- 專案
- 專案