Slide 1

Slide 1 text

© 2024 Wantedly, Inc. RustとPyTorchで作る推論サーバー UV Study: Rust LT会 Nov. 19 2024 - Yudai Hayashi

Slide 2

Slide 2 text

© 2024 Wantedly, Inc. INTERNAL ONLY 自己紹介 林 悠大 ● 経歴: ○ 東京大学工学系研究科でPh.D取得 ○ 2022年にウォンテッドリーにデータ サイエンティストとして新卒入社。 推薦システムの開発を行う ● X: @python_walker ● Rust初心者

Slide 3

Slide 3 text

© 2024 Wantedly, Inc. INTERNAL ONLY なぜデータサイエンティストがRustの話をする?

Slide 4

Slide 4 text

© 2024 Wantedly, Inc. INTERNAL ONLY PythonコミュニティーにとってのRust 色々なRustで書かれたライブラリやツールが広くPythonで使われるようになってきている https://github.com/pola-rs/polars https://docs.astral.sh/uv/ https://docs.astral.sh/ruff/ ● Polars ○ 構造化データを扱うためのライブラリ ● Ruff ○ linter & code formatter ● uv ○ パッケージマネージャー Rustで書かれた高機能かつ高速なツール がどんどん登場している

Slide 5

Slide 5 text

© 2024 Wantedly, Inc. INTERNAL ONLY RustとPythonの親和性 RustとPythonは親和性が高い(と自分は思っている) PyO3を使ってpythonでも使える ようなバインディングを生成、 matrurinを使ってbuild→pypiにパ ブリッシュ… みたいなことが簡単にできる RustとPythonを使って機械学習モデルのサービングはどれくらい簡単にできるのだろう?

Slide 6

Slide 6 text

© 2024 Wantedly, Inc. INTERNAL ONLY 作ったもの Request Response Data Model file Train Model Serve Model モデルの学習はPython側で行い、モデルを使った推論をRustで行う構成

Slide 7

Slide 7 text

© 2024 Wantedly, Inc. INTERNAL ONLY 使うライブラリ コードはREADMEから抜粋 ● tch-rsを使ってRust側からPyTorchのモデルを利用 ● PythonのPyTorchを似たような使用感 ● libtorchを入れてパスを通せば使えるようになる ○ 自分はDockerコンテナ内で “system-wide libtorch” を入れて動かして いたが、Python側で入れたPytorchを利用することもできるらしい

Slide 8

Slide 8 text

© 2024 Wantedly, Inc. INTERNAL ONLY モデルの学習とtch-rsでの利用 Python側 Rust側 学習したモデルはJITコ ンパイル テンソルにしてモデルに入力

Slide 9

Slide 9 text

© 2024 Wantedly, Inc. INTERNAL ONLY モデルの学習とtch-rsでの利用 Python側 Rust側 学習したモデルはJIT コンパイル 出力は後段で 扱いやすいよ うにベクトル などに変換

Slide 10

Slide 10 text

© 2024 Wantedly, Inc. INTERNAL ONLY 実験結果 実行環境 レスポンスタイム Rust (actix-web) 1.75 ms Python (FastAPI) 2.87 ms curl -w “${time_total} ...” で実行時間を計測 Rustのサーバーの方が40 %高速! → 入力データの前処理の部分で差がついた と考えられる パフォーマンス 感じた課題 入力値の前処理では、ちゃんとした変換処 理を書くにはPython側からパラメーター を伝搬させる方法を考える必要がありそう

Slide 11

Slide 11 text

© 2024 Wantedly, Inc. INTERNAL ONLY まとめ GitHub https://github.com/Hayashi-Yudai/rust-inference-server ● RustでPyTorchのモデルをロードして推論する方法を紹介 ● Rustで推論からレスポンスまで返すことで、Pythonで書いた 時よりも40 %の性能改善を実現できる ● モデルに入力する前のデータの処理は、現状Rust側では実装 コストが高い部分もありそう