# RusTorch API λ¬Έμ
## π μμ ν API μ°Έμ‘°
μ΄ λ¬Έμλ RusTorch v0.5.15μ ν¬κ΄μ μΈ API λ¬Έμλ₯Ό λͺ¨λκ³Ό κΈ°λ₯λ³λ‘ μ 리νμ¬ μ 곡ν©λλ€. λͺ¨λ 1060+ ν
μ€νΈμ κ±Έμ³ μΌκ΄λ μ€λ₯ κ΄λ¦¬λ₯Ό μν΄ `RusTorchError`μ `RusTorchResult<T>`λ₯Ό μ¬μ©ν ν΅ν© μ€λ₯ μ²λ¦¬λ₯Ό ν¬ν¨ν©λλ€. **8λ¨κ³ μλ£**λ‘ μ‘°κ±΄ μ°μ°, μΈλ±μ±, ν΅κ³ ν¨μλ₯Ό ν¬ν¨ν κ³ κΈ ν
μ μ νΈλ¦¬ν°κ° μΆκ°λμμ΅λλ€. **9λ¨κ³ μλ£**λ‘ λͺ¨λΈ μ μ₯/λ‘λ, JIT μ»΄νμΌ, PyTorch νΈνμ±μ ν¬ν¨ν λ€μ€ νμ μ§μμ ν¬κ΄μ μΈ μ§λ ¬ν μμ€ν
μ΄ λμ
λμμ΅λλ€.
## ποΈ ν΅μ¬ μν€ν
μ²
### λͺ¨λ ꡬ쑰
```
rustorch/
βββ tensor/ # ν΅μ¬ ν
μ μ°μ°κ³Ό λ°μ΄ν° ꡬ쑰
βββ nn/ # μ κ²½λ§ λ μ΄μ΄μ ν¨μ
βββ autograd/ # μλ λ―ΈλΆ μμ§
βββ optim/ # μ΅ν°λ§μ΄μ μ νμ΅λ₯ μ€μΌμ€λ¬
βββ special/ # νΉμ μν ν¨μ
βββ distributions/ # ν΅κ³ λΆν¬
βββ vision/ # μ»΄ν¨ν° λΉμ λ³ν
βββ linalg/ # μ ν λμ μ°μ° (BLAS/LAPACK)
βββ gpu/ # GPU κ°μ (CUDA/Metal/OpenCL/WebGPU)
βββ sparse/ # ν¬μ ν
μ μ°μ°κ³Ό κ°μ§μΉκΈ° (12λ¨κ³)
βββ serialization/ # λͺ¨λΈ μ§λ ¬νμ JIT μ»΄νμΌ (9λ¨κ³)
βββ wasm/ # WebAssembly λ°μΈλ© ([WASM API λ¬Έμ](WASM_API_DOCUMENTATION.md) μ°Έμ‘°)
```
## π ν
μ λͺ¨λ
### κΈ°λ³Έ ν
μ μμ±
```rust
use rustorch::tensor::Tensor;
// κΈ°λ³Έ μμ±
let tensor = Tensor::new(vec![2, 3]); // νν κΈ°λ° μμ±
let tensor = Tensor::from_vec(data, vec![2, 3]); // λ°μ΄ν° 벑ν°λ‘λΆν° μμ±
let tensor = Tensor::zeros(vec![10, 10]); // μμΌλ‘ μ±μ΄ ν
μ
let tensor = Tensor::ones(vec![5, 5]); // μΌλ‘ μ±μ΄ ν
μ
let tensor = Tensor::randn(vec![3, 3]); // 무μμ μ κ· λΆν¬
let tensor = Tensor::rand(vec![3, 3]); // 무μμ κ· λ± λΆν¬ [0,1)
let tensor = Tensor::eye(5); // λ¨μ νλ ¬
let tensor = Tensor::full(vec![2, 2], 3.14); // νΉμ κ°μΌλ‘ μ±μ°κΈ°
let tensor = Tensor::arange(0.0, 10.0, 1.0); // λ²μ ν
μ
let tensor = Tensor::linspace(0.0, 1.0, 100); // μ ν κ°κ²©
```
### ν
μ μ°μ°
```rust
// μ°μ μ°μ°
let result = a.add(&b); // μμλ³ λ§μ
let result = a.sub(&b); // μμλ³ λΊμ
let result = a.mul(&b); // μμλ³ κ³±μ
let result = a.div(&b); // μμλ³ λλμ
let result = a.pow(&b); // μμλ³ κ±°λμ κ³±
let result = a.rem(&b); // μμλ³ λλ¨Έμ§
// νλ ¬ μ°μ°
let result = a.matmul(&b); // νλ ¬ κ³±μ
let result = a.transpose(); // νλ ¬ μ μΉ
let result = a.dot(&b); // λ΄μ
// μν ν¨μ
let result = tensor.exp(); // μ§μ
let result = tensor.ln(); // μμ° λ‘κ·Έ
let result = tensor.log10(); // μμ© λ‘κ·Έ
let result = tensor.sqrt(); // μ κ³±κ·Ό
let result = tensor.abs(); // μ λκ°
let result = tensor.sin(); // μ¬μΈ ν¨μ
let result = tensor.cos(); // μ½μ¬μΈ ν¨μ
let result = tensor.tan(); // νμ νΈ ν¨μ
let result = tensor.asin(); // μν¬μ¬μΈ
let result = tensor.acos(); // μν¬μ½μ¬μΈ
let result = tensor.atan(); // μν¬νμ νΈ
let result = tensor.sinh(); // μ곑 μ¬μΈ
let result = tensor.cosh(); // μ곑 μ½μ¬μΈ
let result = tensor.tanh(); // μ곑 νμ νΈ
let result = tensor.floor(); // λ°λ₯ ν¨μ
let result = tensor.ceil(); // μ²μ₯ ν¨μ
let result = tensor.round(); // λ°μ¬λ¦Ό ν¨μ
let result = tensor.sign(); // λΆνΈ ν¨μ
let result = tensor.max(); // μ΅λκ°
let result = tensor.min(); // μ΅μκ°
let result = tensor.sum(); // λͺ¨λ μμ ν©
let result = tensor.mean(); // νκ· κ°
let result = tensor.std(); // νμ€νΈμ°¨
let result = tensor.var(); // λΆμ°
// νν μ‘°μ
let result = tensor.reshape(vec![6, 4]); // ν
μ μ¬νμ±
let result = tensor.squeeze(); // ν¬κΈ°-1 μ°¨μ μ κ±°
let result = tensor.unsqueeze(1); // μΈλ±μ€μ μ°¨μ μΆκ°
let result = tensor.permute(vec![1, 0, 2]); // μ°¨μ μμ΄
let result = tensor.expand(vec![10, 10, 5]); // ν
μ μ°¨μ νμ₯
```
## π§ μ κ²½λ§(nn) λͺ¨λ
### κΈ°λ³Έ λ μ΄μ΄
```rust
use rustorch::nn::{Linear, Conv2d, BatchNorm1d, Dropout};
// μ ν λ μ΄μ΄
let linear = Linear::new(784, 256)?; // μ
λ ₯ 784, μΆλ ₯ 256
let output = linear.forward(&input)?;
// ν©μ±κ³± λ μ΄μ΄
let conv = Conv2d::new(3, 64, 3, None, Some(1))?; // in_channels=3, out_channels=64, kernel_size=3
let output = conv.forward(&input)?;
// λ°°μΉ μ κ·ν
let bn = BatchNorm1d::new(256)?;
let normalized = bn.forward(&input)?;
// λλ‘μμ
let dropout = Dropout::new(0.5)?;
let output = dropout.forward(&input, true)?; // training=true
```
### νμ±ν ν¨μ
```rust
use rustorch::nn::{ReLU, Sigmoid, Tanh, LeakyReLU, ELU, GELU};
// κΈ°λ³Έ νμ±ν ν¨μ
let relu = ReLU::new();
let sigmoid = Sigmoid::new();
let tanh = Tanh::new();
// λ§€κ°λ³μνλ νμ±ν ν¨μ
let leaky_relu = LeakyReLU::new(0.01)?;
let elu = ELU::new(1.0)?;
let gelu = GELU::new();
// μ¬μ© μμ
let activated = relu.forward(&input)?;
```
## π GPU κ°μ λͺ¨λ
### λλ°μ΄μ€ κ΄λ¦¬
```rust
use rustorch::gpu::{Device, get_device_count, set_device};
// μ¬μ© κ°λ₯ν λλ°μ΄μ€ νμΈ
let device_count = get_device_count()?;
let device = Device::best_available()?; // μ΅μ λλ°μ΄μ€ μ ν
// λλ°μ΄μ€ μ€μ
set_device(&device)?;
// ν
μλ₯Ό GPUλ‘ μ΄λ
let gpu_tensor = tensor.to_device(&device)?;
```
### CUDA μ°μ°
```rust
#[cfg(feature = "cuda")]
use rustorch::gpu::cuda::{CudaDevice, memory_stats};
// CUDA λλ°μ΄μ€ μ°μ°
let cuda_device = CudaDevice::new(0)?; // GPU 0 μ¬μ©
let stats = memory_stats(0)?; // λ©λͺ¨λ¦¬ ν΅κ³
println!("μ¬μ©λ λ©λͺ¨λ¦¬: {} MB", stats.used_memory / (1024 * 1024));
```
## π― μ΅μ νκΈ°(Optim) λͺ¨λ
### κΈ°λ³Έ μ΅μ νκΈ°
```rust
use rustorch::optim::{Adam, SGD, RMSprop, AdamW};
// Adam μ΅μ νκΈ°
let mut optimizer = Adam::new(vec![x.clone(), y.clone()], 0.001, 0.9, 0.999, 1e-8)?;
// SGD μ΅μ νκΈ°
let mut sgd = SGD::new(vec![x.clone()], 0.01, 0.9, 1e-4)?;
// μ΅μ ν λ¨κ³
optimizer.zero_grad()?;
// ... μμ νμ μμ ν ...
optimizer.step()?;
```
## π μ¬μ© μμ
### μ ν νκ·
```rust
use rustorch::{tensor::Tensor, nn::Linear, optim::Adam, autograd::Variable};
// λ°μ΄ν° μ€λΉ
let x = Variable::new(Tensor::randn(vec![100, 1]), false)?;
let y = Variable::new(Tensor::randn(vec![100, 1]), false)?;
// λͺ¨λΈ μ μ
let mut model = Linear::new(1, 1)?;
let mut optimizer = Adam::new(model.parameters(), 0.001, 0.9, 0.999, 1e-8)?;
// νλ ¨ 루ν
for epoch in 0..1000 {
optimizer.zero_grad()?;
let pred = model.forward(&x)?;
let loss = (pred - &y).pow(&Tensor::from(2.0))?.mean()?;
backward(&loss, true)?;
optimizer.step()?;
if epoch % 100 == 0 {
println!("μν¬ν¬ {}: μμ€ = {:.4}", epoch, loss.item::<f32>()?);
}
}
```
## β οΈ μλ €μ§ μ νμ¬ν
1. **GPU λ©λͺ¨λ¦¬ μ ν**: ν° ν
μ(>8GB)μ κ²½μ° λͺ
μμ λ©λͺ¨λ¦¬ κ΄λ¦¬ νμ
2. **WebAssembly μ ν**: μΌλΆ BLAS μ°μ°μ΄ WASM νκ²½μμ μ¬μ© λΆκ°
3. **λΆμ° νμ΅**: NCCL λ°±μλλ Linuxμμλ§ μ§μ
4. **Metal μ ν**: μΌλΆ κ³ κΈ μ°μ°μ CUDA λ°±μλμμλ§ μ¬μ© κ°λ₯
## π κ΄λ ¨ λ§ν¬
- [λ©μΈ README](../README.md)
- [WASM API λ¬Έμ](WASM_API_DOCUMENTATION.md)
- [Jupyter κ°μ΄λ](jupyter-guide.md)
- [GitHub μ μ₯μ](https://github.com/JunSuzukiJapan/RusTorch)
- [Crates.io ν¨ν€μ§](https://crates.io/crates/rustorch)
---
**μ΅κ·Ό μ
λ°μ΄νΈ**: v0.5.15 | **λΌμ΄μ μ€**: MIT | **μμ±μ**: Jun Suzuki