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를 통한 그래디언트 접근을 이용한 자동 미분. - Neural-network 모듈 –
Torch::NN::Module을 상속받아 모델을 정의하고,Conv2d,Linear와 같은 레이어 및Torch::NN::F아래의 함수형 헬퍼를 사용합니다. - Optimizers – 예:
Torch::Optim::SGD와 함께 전형적인zero_grad,step워크플로우. - Saving/loading – 모델 상태 딕셔너리를 위한
Torch.save/Torch.load(PyTorch 파일과 호환되며, 약간의 Python 측 변환 노트가 필요함). - Device 지원 – 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분 속성 튜토리얼을 따르세요.- 추가 튜토리얼은 전이 학습(transfer learning), 시퀀스 모델, 그리고 워드 임베딩을 다룹룹니다.
- 예제 프로젝트에는 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
Device 처리
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
Ecosystem
- 특정 도메인을 위한 동반 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로 가져와, Ruby 프로그래머에게 네이티브한 느낌을 주는 기능이 풍부하고 GPU 가속이 지원되는 딥러닝 스택을 제공합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트