Upgrade to Pro — share decks privately, control downloads, hide ads and more …

いつの間にか社の中核製品にRustが使われていた件について / optim-rust-projects-2019

5c097a7b75c8802b073774faa7276503?s=47 optim
October 26, 2019

いつの間にか社の中核製品にRustが使われていた件について / optim-rust-projects-2019

オプティムの中で、趣味でRustを使っていたらいつの間にか中核製品にRustが採用されていたので、それまでの経緯を、各プロジェクトの特徴ともにご紹介します。

5c097a7b75c8802b073774faa7276503?s=128

optim

October 26, 2019
Tweet

Transcript

  1. Copyright © OPTiM Corp. All Right Reserved. いつの間にか社の中核製品に Rustが使われていた件について OPTiM

    齋藤 Rust.Tokyo 2019 2019/10/26 @リクルートホールディングス
  2. Copyright © OPTiM Corp. All Right Reserved. 2  自己紹介

     オプティムとは?  オプティムのRust採用プロジェクト  なぜオプティムはRustを採用したのか?  さいごに 目次
  3. Copyright © OPTiM Corp. All Right Reserved. 3 自己紹介

  4. Copyright © OPTiM Corp. All Right Reserved. 4  H/N:

    あずんひ(az nh e2 1 )  使用ブラウザ: Netscape~ Firefox 2.x~  Rust歴:1.0(ベータ?)~ • Rust 1.0:2015/5/15 • Rust 1.1:2015/6/25  オプティム歴:2017/4~ R&Dチーム 自己紹介 TWITTER, TWEET, RETWEET and the Twitter logo are trademarks of Twitter, Inc. or its affiliates. FirefoxのロゴはMPL 2.0によってライセンスされており、著作権はMozillaに帰属します RustのロゴはCC-BYによってライセンスされており、著作権はMozillaに帰属します
  5. Copyright © OPTiM Corp. All Right Reserved. 5 2019/10/26までに投稿したブログ 

    Rust 1.33を早めに深掘り (3/1)  Rust 1.34を早めに深掘り (4/12)  Rust 1.35を早めに深掘り (5/24)  Rust 1.36を早めに深掘り (7/5)  Rust 1.37を早めに深掘り (8/16)  Rust 1.38を早めに深掘り(9/27)  必修言語Rustの他己紹介 (1/7)  Rustのカバレッジを極める (2/19)  Rustの未来いわゆるFuture (7/5)
  6. Copyright © OPTiM Corp. All Right Reserved. 6 オプティムとは?

  7. Copyright © OPTiM Corp. All Right Reserved. 7 オプティムを1枚の絵で表してみた

  8. Copyright © OPTiM Corp. All Right Reserved. 8  Optimal

    Biz • 国内シェアNo1のMDM(モバイルデバイス管理)システム  タブホ • 900を超える雑誌のバックナンバーが読み放題の 雑誌読み放題サービス オプティムを1枚の絵で表してみた – デバイス編
  9. Copyright © OPTiM Corp. All Right Reserved. 9  Cloud

    IoT OS • ID・権限管理、データの蓄積、 配信などを備えた 「プラットフォームのための プラットフォーム」 • LANDLOGやAI Cameraなど、 各種サービスはこの上に構築 されている オプティムを1枚の絵で表してみた – Cloud IoT OS編
  10. Copyright © OPTiM Corp. All Right Reserved. 10  お米配給制度

    • 給料に上乗せしてお米の支給を受けられる制度  Optimal Second Sight • スマートグラスを使用した遠隔作業支援システム  Agri Field Manager • 田畑をドローンなどで撮影してAIで解析することで、 ピンポイント農薬散布など、効果的な生育管理を 可能にするプラットフォーム  Agri Assistant • 自動音声入力などにより農作業の記録を 支援するシステム  OPTiM Agri Drone • 各種カメラを搭載可能なマルチコプタードローン  OPTiM Hawk • 長距離飛行が可能な固定翼型(飛行機型)の ドローンで、広範囲のデジタルスキャンが可能 オプティムを1枚の絵で表してみた – 農業編
  11. Copyright © OPTiM Corp. All Right Reserved. 11  OPTiM

    Doctor Eye • 眼底画像診断支援システム • 緑内障診断支援システム(医療機器認証済)  AMIAS • オプティム以外も含めたAIメーカーのための 医用AI統合オープンプラットフォーム  Smart Home Medical Care • 病院内と同じような見守りを実現する在宅医療パッケージ オプティムを1枚の絵で表してみた – 医療編
  12. Copyright © OPTiM Corp. All Right Reserved. 12  LANGLOG

    • 国交省の推進するi-Constructionを具現化する、 建設現場向けオープンプラットフォーム • 現場の建設機械をカメラで撮影し、 AIで解析することで現場の可視化・効率化が可能 オプティムを1枚の絵で表してみた – 建設編
  13. Copyright © OPTiM Corp. All Right Reserved. 13  AI

    Camera • ネットワークカメラから送られてくる動画をAIで解析することにより、 店の混雑状況の可視化、危険予知、業務改善が可能 • AI Camera LiteやAI Camera Mobileなど、 コストを抑えたサービスも登場  AI Store • 無人店舗を始め、AIを含む様々な技術を組み合わせて 小売の省力化を実現するサービス オプティムを1枚の絵で表してみた – AIサービス編
  14. Copyright © OPTiM Corp. All Right Reserved. 14 オプティムを1枚の絵で表してみた

  15. Copyright © OPTiM Corp. All Right Reserved. 15 オプティムのRust採用プロジェクト①

  16. Copyright © OPTiM Corp. All Right Reserved. 16  トマトの輪郭を検出し、熟度を判定、収穫まであと何日かを表示するデモ

     USBカメラの映像を受け取り(Rust)、リアルタイムで解析し(Python) 、 サーバーからクライアントに引き渡し(Rust)、ブラウザで表示する(JavaScript) • 第2回AI・人工知能EXPOで展示 • Initial commit: 2018/04/05 • 恐らくオプティム初の採用事例?  裏側 • USBカメラからの読み込み:ffmpeg-rs • Pythonの呼び出し:rust-cpython • Python2/3のどちらかのみ使用可能 • HTTPサーバー:nickel.rs • これらによって、1プロセス内で 「カメラからの読み込み」 「推論」「RESTサーバー」が完結  Rust採用理由 • 趣味 トマトの熟度判定デモ Rust Python
  17. Copyright © OPTiM Corp. All Right Reserved. 17 オプティムのRust採用プロジェクト②

  18. Copyright © OPTiM Corp. All Right Reserved. 18  眼底カメラで撮影した眼底画像を画像処理で解析し、緑内障の可能性を示すシステム

     医療機器プログラムとして認証を取得 眼底画像診断支援システム OPTiM Doctor Eye 齋藤の眼底と解析結果
  19. Copyright © OPTiM Corp. All Right Reserved. 19  眼底カメラから送られてきた画像を、管理サーバーを経由して受け取り(Rust)、

    解析し(Python)、管理サーバーに返す(Rust) • 先程のトマトの発展系 • Initial commit: 2018/07/06  裏側 • 子プロセスとの通信:ipc-channel • HTTPサーバーはactix-web • Pythonの呼び出しはrust-cpython • マルチプロセス化によりPython2/3を 同時に利用可能になった  Rust採用理由 • 趣味 眼底画像診断支援システム OPTiM Doctor Eye Rust Python
  20. Copyright © OPTiM Corp. All Right Reserved. 20  rust-cpythonを使うと

    Rustの中にPythonを組み込める • pythonバイナリを使うわけではないが、 環境はシステムのものを使うので pythonのインストールは必要 • PyO3というクレートもあるがnightly限定 • indocクレート:インデントを省いて 文字列リテラル化してくれる  PyBufferを使おう • コピーコストが格段に減る • 使わない場合 • Rustの&[u8]->Pythonのlist->np.ndarray • メモリ確保、コピーが2回 • 使う場合:np.ndarray<-&[u8] • メモリ確保、コピーが1回 • 先にndarrayを確保(30行目)して、 そこにコピー(31行目)する形 rust-cpythonについて解説
  21. Copyright © OPTiM Corp. All Right Reserved. 21 オプティムのRust採用プロジェクト③ 細かいやついくつか

  22. Copyright © OPTiM Corp. All Right Reserved. 22  menohを使用した顔検出

    • menoh:CPUでも高速な推論フレームワーク • 写真から顔だけを切り出すツールをGPUのないマシン向けに作りたかった  Rust採用理由 • 趣味 • menohの公式バインディングがあったから 細かいやつ①
  23. Copyright © OPTiM Corp. All Right Reserved. 23  深層学習のデータセット構成ファイル管理ツール

     必要性 • データセットを単体のファイルにしたかった • データセット内部のファイル名がデータセットごとに違ったりするのを吸収したかった • クラス名などのメタデータをデータセットの中に入れたかった  Rust採用理由 • 趣味 • ファイル数が膨大(数万~数百万)なのでちょっとでも早い方が良い・・・かもしれない 細かいやつ②
  24. Copyright © OPTiM Corp. All Right Reserved. 24 オプティムのRust採用プロジェクト④

  25. Copyright © OPTiM Corp. All Right Reserved. 25  パイプライン化により処理を効率化

     NVIDIA GPU、Edge TPUへの対応により広範なプラットフォームに対応  Rustによって低オーバーヘッド、落ちないソフトウェアを実現 AIカメラのコア(ミドルウェア)の特徴 OPTiM Edgeシリーズ – Edge TPU搭載プロトタイプ
  26. Copyright © OPTiM Corp. All Right Reserved. 26 AIカメラの構成(公式イラスト)

  27. Copyright © OPTiM Corp. All Right Reserved. 27 AIカメラの構成(いらすとやで分かりやすく) AIカメラ

    Web側インター フェース LAN 映像 AIカメラ エッジ側 インターフェース AIカメラ ミドルウェア 解 析 結 果 設 定 情 報
  28. Copyright © OPTiM Corp. All Right Reserved. 28 パイプライン化による高速化の秘密 –

    非パイプライン処理 待機 待機 待機 待機 待機 待機 待機
  29. Copyright © OPTiM Corp. All Right Reserved. 29 パイプライン化による高速化の秘密 –

    パイプライン処理
  30. Copyright © OPTiM Corp. All Right Reserved. 30  裏側

    • 推論:NVIDIA GPU(独自バインディング)/Edge TPU(独自バインディング) • HTTPサーバー:なぜかhyper (サーバーが本来の仕事ではないとは言え・・・) • チャネル:crossbeam-channel(std::sync::mpscよりも高速) • トレーシング:rustracing_jaeger • メトリクス収集:rust-prometheus • 画像描画:image / imageproc • テキスト描画:rusttype  Rust採用理由 • C++つらたん • 当初、EEの奥村がC++で作っていたが、あまりの苦しさから他の言語に救いを求めた結果、巷(席周辺)で話題のRustを 採用 • 当時チームには奥村を除きRustユーザーが3人(自然発生) • CとのFFIが苦でなく、既存ライブラリを有効活用できる AIカメラのコア(ミドルウェア)
  31. Copyright © OPTiM Corp. All Right Reserved. 31  排他制御がつらい

    • mutexをロックしなくても変数にアクセスできてしまう恐ろしさ • チャネルさえあれば・・・  ライフタイム管理がつらい • その参照・ポインタは本当に生きているのか?  テンプレートがつらい • そのテンプレート関数が本当にコンパイル通るか分かりますか?  パッケージ管理がつらい • レポジトリからは何に依存しているのか分からない • 別の環境に持って行くと依存関係が変わったりする  ビルドがつらい • CMake?Ninja?  非同期処理がつらい • ブロッキング?コールバック? こんなことがあっても大丈夫。そう、Rustならね C++のつらいところ
  32. Copyright © OPTiM Corp. All Right Reserved. 32  •

    •  •  •  • •  •  • C++のつらいところ→Rustなら?  排他制御が楽 • Mutexはロックしないとデータにアクセス出来ない設計 • チャネルはstd::sync::mpsc/crossbeam-channel  ライフタイム管理が楽 • コンパイラが全部面倒を見てくれる  テンプレートが楽 • ジェネリクスによって常にコンパイルが通る  パッケージ管理が楽 • cargoによって依存関係が完全に管理  ビルドが楽 • cargoによってデバッグ/リリースの切り替え・実行・ビルドが ワンストップで可能  非同期処理が楽 • Futureによるゼロコスト抽象化 • async/await(Rust 1.39~)
  33. Copyright © OPTiM Corp. All Right Reserved. 33  依存関係が多過ぎる(右図)

    • クリーンビルドで5分以上掛かる • cargo tree –all-featuresが739行  それもそのはず機能がモノリシックに詰まっている • RTSP受信(自作) • MP4パース(自作) • AVIパース・生成(自作) • H264デコード • YUVデコード・エンコード(バインディング自作) • JPEGデコード・エンコード(バインディング自作) • WebMエンコード(バインディング自作) • HTTPサーバー • WebSocket • NVIDIA GPU対応(バインディング自作) • Edge TPU対応(バインディング自作) • 推論結果の可視化 • トレーシング • メトリクス収集  ダイエットしなければ・・・ AIカメラのコア(ミドルウェア)、肥大化中
  34. Copyright © OPTiM Corp. All Right Reserved. 34 なぜオプティムはRustを採用したのか

  35. Copyright © OPTiM Corp. All Right Reserved. 35  趣味

    • R&Dチームでは、Rust以外にもElmを(趣味で)使ってる人もいる  安全性 • セグフォやリソース競合が原則として発生しない • enumの分岐漏れや未処理のエラーなどを忘れることがない  高速性 • 単純なプログラムではC/C++と同程度の速度 • ゼロコスト抽象化や高度なライブラリによってC/C++を上回る • どうしてもパフォーマンスが必要な場合などはunsafeブロックにより「檻」を抜け出すことが出来る  エコシステム • rustupで全てが入るので開発環境の構築が楽 • cargo buildで(ProtoBufからなど)コード生成も含めて一発で全て終わるので楽  FFI • NVIDIA GPUやEdge TPUなど、デバイスにアクセスするようなものは大抵C/C++製だが、それら資産を使用可能 なぜオプティムはRustを採用したのか
  36. Copyright © OPTiM Corp. All Right Reserved. 36 さいごに

  37. Copyright © OPTiM Corp. All Right Reserved. 37  WebAssembly

    • wasiでプラグインとかやってみたい  画像処理の最適化 • image/imageprocクレートが遅く、Rustでの画像処理がつらい 将来的にRustを活用したい分野
  38. Copyright © OPTiM Corp. All Right Reserved. 38  テックブログをよろしくお願いします

    • Rustの新バージョンを解説する記事をリリース日の朝に出しています • 他にもRustの記事を始め、様々な記事を出しています  エンジニア交流イベント「OPTiM TECH NIGHT」も毎月の開催を予定しています オプティムではRustエンジニアを募集しています! さいごのさいごに OPTiM TECH NIGHT@目黒雅叙園の様子
  39. Copyright © OPTiM Corp. All Right Reserved. 39