196 lines
6.1 KiB
TeX
196 lines
6.1 KiB
TeX
|
|
|
|
\begin{frame}[fragile]{Štruktúra nášho projektu}
|
|
\begin{verbatim}
|
|
.
|
|
├── Cargo.toml # závislosti (burn, clap, npyz, ...)
|
|
├── mnist.npz # dataset
|
|
└── src/
|
|
├── lib.rs # modul deklarácie
|
|
├── main.rs # tréningová slučka, načítanie dát
|
|
└── model.rs # parametre siete
|
|
\end{verbatim}
|
|
|
|
\vspace{0.5em}
|
|
Celý projekt --- 3 súbory. Žiadne skripty, žiadny Python glue.
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]{Definícia parametrov siete}
|
|
\begin{verbatim}
|
|
pub struct Parameters<B: Backend> {
|
|
pub w1: Tensor<B, 2>, // [784, hidden]
|
|
pub b1: Tensor<B, 1>, // [hidden]
|
|
pub w2: Tensor<B, 2>, // [hidden, 10]
|
|
pub b2: Tensor<B, 1>, // [10]
|
|
}
|
|
\end{verbatim}
|
|
|
|
\vspace{0.5em}
|
|
\begin{itemize}
|
|
\item Generický typ \texttt{B: Backend} --- funguje na akomkoľvek backendu
|
|
\item Rozmery tenzorov sú súčasťou typu (\texttt{Tensor<B, 2>})
|
|
\item Kompilátor zachytí chyby v rozmeroch ešte \textbf{pred spustením}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]{Inicializácia váh}
|
|
\begin{verbatim}
|
|
let w1 = random_tensor([784, hidden_size],
|
|
0.1, seed, device);
|
|
let b1 = Tensor::zeros([hidden_size], device);
|
|
\end{verbatim}
|
|
|
|
\vspace{0.5em}
|
|
\begin{itemize}
|
|
\item Váhy: náhodné z $\mathcal{N}(0,\; 0.1)$
|
|
\item Biasy: inicializované na nulu
|
|
\item \texttt{device} určuje, kde žijú dáta (CPU/GPU)
|
|
\item Seed zabezpečuje \textbf{reprodukovateľnosť}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]{Načítanie MNIST dát}
|
|
\begin{verbatim}
|
|
fn load_mnist_items(path: &str, examples: usize)
|
|
-> Vec<(Vec<f32>, u8)>
|
|
\end{verbatim}
|
|
|
|
\vspace{0.5em}
|
|
\begin{itemize}
|
|
\item Otvoríme \texttt{mnist.npz} ako ZIP archív
|
|
\item Načítame obrázky + labely z \texttt{.npy} súborov
|
|
\item Normalizujeme pixely: $[0, 255] \rightarrow [0.0, 1.0]$
|
|
\item Výstup: vektor párov \texttt{(obrázok, číslica)}
|
|
\end{itemize}
|
|
|
|
\vspace{0.5em}
|
|
Rustový typový systém garantuje, že dáta majú správny formát.
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]{CLI parametre s Clap}
|
|
\begin{verbatim}
|
|
#[derive(Parser, Debug)]
|
|
struct Args {
|
|
#[arg(long, default_value_t = 50)]
|
|
batch_size: usize,
|
|
#[arg(long, default_value_t = 0.1)]
|
|
learning_rate: f64,
|
|
#[arg(long, default_value_t = 10)]
|
|
epochs: usize,
|
|
}
|
|
\end{verbatim}
|
|
|
|
\vspace{0.5em}
|
|
Jeden derive makro --- automatický parsing, help text, validácia.
|
|
|
|
\texttt{cargo run -- --epochs 20 --learning-rate 0.01}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Tréningová slučka --- logika}
|
|
Pre každú epochu:
|
|
\begin{enumerate}
|
|
\item Rozdeľ trénovacie dáta na \textbf{mini-batche}
|
|
\item Pre každý batch:
|
|
\begin{itemize}
|
|
\item Forward pass: $\hat{y} = \text{softmax}((\mathbf{x} \cdot W_1 + b_1)_{\text{ReLU}} \cdot W_2 + b_2)$
|
|
\item Spočítaj cross-entropy loss
|
|
\item Backpropagation: gradienty pre $W_1, b_1, W_2, b_2$
|
|
\item Update: $\theta \leftarrow \theta - \eta \cdot \nabla L$
|
|
\end{itemize}
|
|
\item Vyhodnoť presnosť na dev sete
|
|
\end{enumerate}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Burn vs PyTorch --- porovnanie}
|
|
\begin{center}
|
|
\begin{tabular}{lcc}
|
|
\hline
|
|
\textbf{Vlastnosť} & \textbf{PyTorch} & \textbf{Burn} \\
|
|
\hline
|
|
Jazyk & Python/C++ & Rust \\
|
|
Typová bezpečnosť & runtime & compile-time \\
|
|
Pamäťová bezpečnosť & GC/manuálna & ownership \\
|
|
Backendy & CUDA, CPU & CUDA, CPU, WebGPU \\
|
|
Binárka & $\sim$GB + Python & $\sim$MB standalone \\
|
|
Nasadenie & zložité & jeden binárny súbor \\
|
|
\hline
|
|
\end{tabular}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Výhoda: Compile-time kontroly}
|
|
V PyTorchi:
|
|
\begin{itemize}
|
|
\item Chyba v rozmeroch $\rightarrow$ \texttt{RuntimeError} po minútach tréningu
|
|
\item Preklep v názve vrstvy $\rightarrow$ tichý bug
|
|
\end{itemize}
|
|
|
|
\vspace{0.5em}
|
|
V Burn/Ruste:
|
|
\begin{itemize}
|
|
\item Nesprávne rozmery $\rightarrow$ \textbf{kompilátor to nepustí}
|
|
\item Nepoužitá premenná, chýbajúci branch $\rightarrow$ warning/error
|
|
\item Žiadne \texttt{None} prekvapenia --- \texttt{Option<T>} treba ošetriť
|
|
\end{itemize}
|
|
|
|
\vspace{0.5em}
|
|
\textbf{Menej debugovania, viac istoty.}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Výhoda: Nasadenie do produkcie}
|
|
\begin{itemize}
|
|
\item \texttt{cargo build --release} $\rightarrow$ jeden statický binárny súbor
|
|
\item Žiadny Python runtime, žiadne virtuálne prostredia
|
|
\item Možnosť kompilácie do WebAssembly $\rightarrow$ inferencia v prehliadači
|
|
\item Ideálne pre embedded, edge zariadenia, IoT
|
|
\end{itemize}
|
|
|
|
\vspace{0.5em}
|
|
\begin{center}
|
|
PyTorch model: Docker kontajner $\sim$2\,GB \\
|
|
Burn model: binárka $\sim$5\,MB
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Výhoda: Fearless concurrency}
|
|
\begin{itemize}
|
|
\item Rustový ownership systém zabraňuje data races \textbf{v compile-time}
|
|
\item Bezpečný multithreading pre data loading, augmentáciu
|
|
\item Parameter \texttt{--threads} v našom projekte
|
|
\item V Pythone: GIL (Global Interpreter Lock) blokuje paralelizmus
|
|
\end{itemize}
|
|
\end{frame>
|
|
|
|
\begin{frame}{Kedy použiť Burn?}
|
|
\textbf{Vhodné:}
|
|
\begin{itemize}
|
|
\item Nasadenie modelov do produkcie
|
|
\item Edge/embedded inferencia
|
|
\item Keď chcete maximálny výkon a bezpečnosť
|
|
\item Keď už poznáte Rust
|
|
\end{itemize}
|
|
|
|
\vspace{0.5em}
|
|
\textbf{Nevhodné (zatiaľ):}
|
|
\begin{itemize}
|
|
\item Rýchle prototypovanie --- Python je stále rýchlejší na experimenty
|
|
\item Ekosystém --- PyTorch má tisíce hotových modelov
|
|
\item Burn je stále mladý projekt (aktívny vývoj)
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Zhrnutie}
|
|
\begin{itemize}
|
|
\item Neurónové siete = vrstvy neurónov, učenie cez gradienty
|
|
\item \textbf{Burn} prináša deep learning do Rustu
|
|
\item Backend-agnostický, typovo bezpečný, production-ready
|
|
\item Náš projekt: MNIST klasifikátor v 3 súboroch
|
|
\item Rust + Burn = bezpečnosť + výkon + jednoduchosť nasadenia
|
|
\end{itemize}
|
|
|
|
\vspace{1em}
|
|
\begin{center}
|
|
\Large Ďakujem za pozornosť!
|
|
\end{center}
|
|
\end{frame}
|