SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
Mobility Technologies Co., Ltd.
Rustに触れて私のPythonはどう変わったか
2020/09/24 @MoT.rs
Shunsuke Nakamura
AI技術開発部
Mobility Technologies Co., Ltd.2
中村遵介(なかむらしゅんすけ)@S.Nakamura



AI技術開発部エッジMLエンジニアリングG

- 深層学習・画像処理

- デバイスシミュレータ開発



学生時代: SQLとPython

社会: PythonとRust

趣味: 画像の拡大



自己紹介
Mobility Technologies Co., Ltd.3
深層学習と画像処理の流れ
データセット用意
Webからダウンロー
ド・自サーバから収
集
傾向調査
エラーデータ確認
クラス分布や
色傾向の確認
データ分割
傾向を元に
学習するデータ・評
価に使用するデータ
等を分割
前処理
深層学習を行う
ためのデータの
加工処理
深層学習
加工したデータ
から実際に目的とな
るモデルを学習する
後処理
モデルの出力を、全
体として出力
したいものに変換
必要に応じて別手法
で補正
結果の可視化
学習結果を人の
目に分かりやすく
示し改善点を探す
Designed by Freepik and distributed by Flaticon
Mobility Technologies Co., Ltd.
画像を用いた深層学習の全体的な流れ(の一例)

4
深層学習と画像処理の流れ
データセット用意
Webからダウンロー
ド・自サーバから収
集
傾向調査
エラーデータ確認
クラス分布や
色傾向の確認
データ分割
傾向を元に
学習するデータ・評
価に使用するデータ
等を分割
前処理
深層学習を行う
ためのデータの
加工処理
深層学習
加工したデータ
から実際に目的とな
るモデルを学習する
後処理
モデルの出力を、全
体として出力
したいものに変換
必要に応じて別手法
で補正
結果の可視化
学習結果を人の
目に分かりやすく
示し改善点を探す
全てPythonで実装

・深層学習はPyTorchというPython向けライブラリで実装されることが多い

・ここらへんで公開されている既存コードもほぼPythonなので同じ言語のほうが便利

・Pythonではデータ処理向け便利ライブラリが多数公開されている

・研究の側面が強く手軽にコード変更ができる言語が良い
 Designed by Freepik and distributed by Flaticon
Mobility Technologies Co., Ltd.5
■ 他人(自分)のコードの再現・改変が難しい

■ 様々な外部ライブラリを使用するのでバージョンの不一致で実行できない

■ 型情報がほぼないので、コードの改変・再使用が困難

■ ディレクトリ構成・仮想環境の個人差が大きく揃えづらい

■ 長時間かけて学習したモデルが保存時に引数エラーで保存失敗・やり直しへ

■ どこでどのようなエラーが発生するかが分からないので捕捉しづらい

■ モジュールのインポートルールが複雑(個人差あり)

■ Pythonを書くと遅くなりがち

■ 他の言語で書かれた高速なライブラリをPythonから使用すればOK



困っていたが深層学習からPythonは切り離せないので仕方ないか〜と思っていた

とはいえPythonだと困ることも
Mobility Technologies Co., Ltd.6
Rust使い始めて感じたこと

■ 型情報がしっかりしている

■ ビルド時に型周りのミスを全て洗い出せるので安心

■ エディタのフルサポートが得られるので書くのが楽

■ Result型・Option型のおかげでどこでどういう例外ケースがあるのか把握しやすい

■ パターンマッチが強力で条件分岐の取りこぼしが起きづらい

■ Cargo.tomlに必要な情報がほぼ乗っているので他人のコードを動かしやすい

■ ディレクトリ構成が統一されている

■ ライフタイムがコードに出てくると読みづらい

■ ハマると型をこねくり回して四苦八苦する時間がある

■ エラー処理をきちんと書かねばならず、正常ケースだけさっと試すときに面倒



そんなとき業務でRustにふれることに
Mobility Technologies Co., Ltd.7
ここらへんをPythonでもなんとか取り入れたいと思った

■ 型情報がしっかりしている

■ ビルド時に型周りのミスを全て洗い出せるので安心

■ エディタのフルサポートが得られるので書くのが楽

■ Result型・Option型のおかげでどこでどういう例外ケースがあるのか把握しやすい

■ パターンマッチが強力で条件分岐の取りこぼしが起きづらい

■ Cargo.tomlに必要な情報がほぼ乗っているので他人のコードを動かしやすい

■ ディレクトリ構成が統一されている

■ ライフタイムがコードに出てくると読みづらい

■ ハマると型をこねくり回して四苦八苦する時間がある

■ エラー処理をきちんと書かねばならず、正常ケースだけさっと試すときに面倒



そんなとき業務でRustにふれることに
Mobility Technologies Co., Ltd.8
ここらへんをPythonでもなんとか取り入れたいと思った

■ 型情報がしっかりしている

■ ビルド時に型周りのミスを全て洗い出せるので安心

■ エディタのフルサポートが得られるので書くのが楽

■ Result型・Option型のおかげでどこでどういう例外ケースがあるのか把握しやすい

■ パターンマッチが強力で条件分岐の取りこぼしが起きづらい

■ Cargo.tomlに必要な情報がほぼ乗っているので他人のコードを動かしやすい

■ ディレクトリ構成が統一されている

■ ライフタイムがコードに出てくると読みづらい

■ ハマると型をこねくり回して四苦八苦する時間がある

■ エラー処理をきちんと書かねばならず、正常ケースだけさっと試すときに面倒



そんなとき業務でRustにふれることに
Mobility Technologies Co., Ltd.9
型アノテーションとmypyとtypeguardとdataclassとEnumで型っぽい事をしようとした
型アノテーション
■ Pythonは変数と関数の引数・返り値に型アノテーションを付けられる
■ typingモジュールを使用することで複雑な型にもアノテーションできる
■ あくまでアノテーションなので実行時にその型でなくてもエラーにならない
mypy
■ Pythonの静的型検査ツール
■ アノテーションを元にコードで型ミスがないかを実行前に洗い出せる
typeguard
■ Pythonの動的型検査ツール
■ 実行時に関数の引数と返り値が実際にアノテーション通りかを確認してくれる
dataclass
■ 構造体のようなものを定義できる(実態はクラス)
■ データを辞書型でやり取りしていた部分を全てdataclassに置き換えた
Enum
■ ただの列挙型
Rustの良さをPythonに取り入れようとした話
Mobility Technologies Co., Ltd.
Pros
■ エディタの補完パワーが増したので実装が楽に
■ 辞書型はどのようなkeyにどのようなvalueがあるかを見てみないと分からないが、dataclass
で安全にデータをやり取りできるように
■ 過去の自分のコードが読めるように
Cons
■ mypyには限界があり、mypyを通っても実行時にエラーになるケースがあった
■ Pythonではサードパーティ製ライブラリを頻繁に使用するが、それらが型情報を提供しておら
ず、mypyでのチェックを諦めることが多かった
結論: 導入してよかったが、Pythonである以上確実な安心感は得られない
型情報: Rustの良さをPythonに取り入れようとした話
10
Mobility Technologies Co., Ltd.11
ここらへんをPythonでもなんとか取り入れたいと思った

■ 型情報がしっかりしている

■ ビルド時に型周りのミスを全て洗い出せるので安心

■ エディタのフルサポートが得られるので書くのが楽

■ Result型・Option型のおかげでどこでどういう例外ケースがあるのか把握しやすい

■ パターンマッチが強力で条件分岐の取りこぼしが起きづらい

■ Cargo.tomlに必要な情報がほぼ乗っているので他人のコードを動かしやすい

■ ディレクトリ構成が統一されている

■ ライフタイムがコードに出てくると読みづらい

■ ハマると型をこねくり回して四苦八苦する時間がある

■ エラー処理をきちんと書かねばならず、正常ケースだけさっと試すときに面倒



そんなとき業務でRustにふれることに
Mobility Technologies Co., Ltd.12
Cargo.tomlのように実行に必要な情報を1つのファイルにまとめておけないか?
pep518でまさに同じ話があった
■ pyproject.tomlというファイルでパッケージング情報を管理
■ Python自体のバージョンやライブラリのバージョンを記述可能
■ poetry / pyflowといったパッケージング管理ライブラリがここに準拠
■ poetry / pyflowならディレクトリ構成も統一
個人プロジェクトは全てpoetryに移行した。数ヶ月前のコードでも一発で動いた
業務ではさりげなくpoetryを導入することで布教中
Cargoほど強力ではないが便利
poetryはいいぞ
Rustの良さをPythonに取り入れようとした話 成功例
Mobility Technologies Co., Ltd.13
ここらへんをPythonでもなんとか取り入れたいと思った

■ 型情報がしっかりしている

■ ビルド時に型周りのミスを全て洗い出せるので安心

■ エディタのフルサポートが得られるので書くのが楽

■ Result型・Option型のおかげでどこでどういう例外ケースがあるのか把握しやすい

■ パターンマッチが強力で条件分岐の取りこぼしが起きづらい

■ Cargo.tomlに必要な情報がほぼ乗っているので他人のコードを動かしやすい

■ ディレクトリ構成が統一されている

■ ライフタイムがコードに出てくると読みづらい

■ ハマると型をこねくり回して四苦八苦する時間がある

■ エラー処理をきちんと書かねばならず、正常ケースだけさっと試すときに面倒



そんなとき業務でRustにふれることに
Mobility Technologies Co., Ltd.14
Result型とOption型をクラスとして定義してみた
■ Optionはちょっと便利になった
■ ResultはそもそもPythonがどの部分でどのようなエラーを出すのかが
わからないため、結局try-exceptを大きくくくる以外にエラーハンドリングが
できずメリットを感じなかった
例外ケースを適度に無視できるのが良くも悪くもPythonの特徴
Rustの良さをPythonに取り入れようとした話 失敗例
Mobility Technologies Co., Ltd.15
Rustの良さをPythonに持ち込むのは限界があるしPythonの良さを殺す事が多い
そもそも得意分野が違うのに全部同じ言語でやる必要はなかった
柔軟なコード変更が求められ、優秀なライブラリが多い部分をPythonで、
厳格なエラー処理・再利用性・速度が求められる部分をRustで実装
全体を通した設定はYAMLのような言語非依存のもので管理する方針へ
Rustの良さはRustとして、Pythonの良さはPythonとして使用した話
データセット用意
Webからダウンロー
ド・自サーバから収
集
傾向調査
エラーデータ確認
クラス分布や
色傾向の確認
データ分割
傾向を元に
学習するデータ・評
価に使用するデータ
等を分割
前処理
深層学習を行う
ためのデータの
加工処理
深層学習
加工したデータ
から実際に目的とな
るモデルを学習する
後処理
モデルの出力を、全
体として出力
したいものに変換
必要に応じて別手法
で補正
結果の可視化
学習結果を人の
目に分かりやすく
示し改善点を探す
Rust PythonPython Rust
Python
Mobility Technologies Co., Ltd.16
Rustの良さをPythonに持ち込むのは限界があるしPythonの良さを殺す事が多い
そもそも得意分野が違うのに全部同じ言語でやる必要はなかった
柔軟なコード変更が求められ、優秀なライブラリが多い部分をPythonで、
厳格なエラー処理・再利用性・速度が求められる部分をRustで実装
全体を通した設定はYAMLのような言語非依存のもので管理する方針へ
Rustの良さはRustとして、Pythonの良さはPythonとして使用した話
データセット用意
Webからダウンロー
ド・自サーバから収
集
傾向調査
エラーデータ確認
クラス分布や
色傾向の確認
データ分割
傾向を元に
学習するデータ・評
価に使用するデータ
等を分割
前処理
深層学習を行う
ためのデータの
加工処理
深層学習
加工したデータ
から実際に目的とな
るモデルを学習する
後処理
モデルの出力を、全
体として出力
したいものに変換
必要に応じて別手法
で補正
結果の可視化
学習結果を人の
目に分かりやすく
示し改善点を探す
Rust Rust
Python
PythonPython
超快適になった!
Mobility Technologies Co., Ltd.17
Rustが得意なところはRustで、Pythonが得意なところはPythonで書こう



Pythonを書く時はpoetryを使って、可能な限り型アノテーションと型チェックをするとちょっ
とQoLがあがる

結論
文章·画像等の内容の無断転載及び複製等の行為はご遠慮ください。
Mobility Technologies Co., Ltd.
18

Más contenido relacionado

La actualidad más candente

最適化超入門
最適化超入門最適化超入門
最適化超入門Takami Sato
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方joisino
 
画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量takaya imai
 
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計Takahiro Kubo
 
機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018Takahiro Kubo
 
カルマンフィルタ入門
カルマンフィルタ入門カルマンフィルタ入門
カルマンフィルタ入門Yasunori Nihei
 
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision TransformerYusuke Uchida
 
[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object Detection[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object DetectionDeep Learning JP
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解Koji Terada
 
backbone としての timm 入門
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門Takuji Tahara
 
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日Kitsukawa Yuki
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Modelscvpaper. challenge
 
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learningゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement LearningPreferred Networks
 
[DL輪読会]画像を使ったSim2Realの現況
[DL輪読会]画像を使ったSim2Realの現況[DL輪読会]画像を使ったSim2Realの現況
[DL輪読会]画像を使ったSim2Realの現況Deep Learning JP
 
SSII2022 [SS1] ニューラル3D表現の最新動向〜 ニューラルネットでなんでも表せる?? 〜​
SSII2022 [SS1] ニューラル3D表現の最新動向〜 ニューラルネットでなんでも表せる?? 〜​SSII2022 [SS1] ニューラル3D表現の最新動向〜 ニューラルネットでなんでも表せる?? 〜​
SSII2022 [SS1] ニューラル3D表現の最新動向〜 ニューラルネットでなんでも表せる?? 〜​SSII
 
Transformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法についてTransformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法についてSho Takase
 
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some PreliminaryDeep Learning JP
 
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)Shota Imai
 
Attentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAttentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAGIRobots
 

La actualidad más candente (20)

Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
 
画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量
 
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計
 
機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018
 
カルマンフィルタ入門
カルマンフィルタ入門カルマンフィルタ入門
カルマンフィルタ入門
 
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
 
[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object Detection[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object Detection
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解
 
backbone としての timm 入門
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門
 
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
 
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learningゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
 
[DL輪読会]画像を使ったSim2Realの現況
[DL輪読会]画像を使ったSim2Realの現況[DL輪読会]画像を使ったSim2Realの現況
[DL輪読会]画像を使ったSim2Realの現況
 
SSII2022 [SS1] ニューラル3D表現の最新動向〜 ニューラルネットでなんでも表せる?? 〜​
SSII2022 [SS1] ニューラル3D表現の最新動向〜 ニューラルネットでなんでも表せる?? 〜​SSII2022 [SS1] ニューラル3D表現の最新動向〜 ニューラルネットでなんでも表せる?? 〜​
SSII2022 [SS1] ニューラル3D表現の最新動向〜 ニューラルネットでなんでも表せる?? 〜​
 
Transformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法についてTransformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法について
 
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
 
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
 
Attentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAttentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門まで
 

Similar a Rustに触れて私のPythonはどう変わったか

DRIVE CHARTを支えるAI技術
DRIVE CHARTを支えるAI技術DRIVE CHARTを支えるAI技術
DRIVE CHARTを支えるAI技術Yusuke Uchida
 
20230216_Python機械学習プログラミング.pdf
20230216_Python機械学習プログラミング.pdf20230216_Python機械学習プログラミング.pdf
20230216_Python機械学習プログラミング.pdfShintaro Fukushima
 
いじめられた子供を支援する 仮想世界ピグパーティの コミュニケーション
いじめられた子供を支援する 仮想世界ピグパーティの コミュニケーションいじめられた子供を支援する 仮想世界ピグパーティの コミュニケーション
いじめられた子供を支援する 仮想世界ピグパーティの コミュニケーションcyberagent
 
ドライブレコーダの画像認識による道路情報の自動差分抽出
ドライブレコーダの画像認識による道路情報の自動差分抽出ドライブレコーダの画像認識による道路情報の自動差分抽出
ドライブレコーダの画像認識による道路情報の自動差分抽出Tetsutaro Watanabe
 
Microsoft AI と深層学習
Microsoft AI と深層学習Microsoft AI と深層学習
Microsoft AI と深層学習Shohei Nagata
 
データアナリティクスの新たな一歩とそれを支えるインフラ
データアナリティクスの新たな一歩とそれを支えるインフラデータアナリティクスの新たな一歩とそれを支えるインフラ
データアナリティクスの新たな一歩とそれを支えるインフラGoogle Cloud Platform - Japan
 
Deep Learningを用いたロボット制御
Deep Learningを用いたロボット制御Deep Learningを用いたロボット制御
Deep Learningを用いたロボット制御Ryosuke Okuta
 
local launch small language model of AI.
local launch small language model of AI.local launch small language model of AI.
local launch small language model of AI.Takao Tetsuro
 
Custom Visionで仏像を画像分類
Custom Visionで仏像を画像分類Custom Visionで仏像を画像分類
Custom Visionで仏像を画像分類Yoshitaka Seo
 
先駆者に学ぶ MLOpsの実際
先駆者に学ぶ MLOpsの実際先駆者に学ぶ MLOpsの実際
先駆者に学ぶ MLOpsの実際Tetsutaro Watanabe
 
福岡市内のベンチャー企業が取り組む最新It技術
福岡市内のベンチャー企業が取り組む最新It技術福岡市内のベンチャー企業が取り組む最新It技術
福岡市内のベンチャー企業が取り組む最新It技術Takuya Andou
 
ディープラーニングで株価予測をやってみた
ディープラーニングで株価予測をやってみたディープラーニングで株価予測をやってみた
ディープラーニングで株価予測をやってみた卓也 安東
 
リクルートにおけるマルチモーダル Deep Learning Web API 開発事例
リクルートにおけるマルチモーダル Deep Learning Web API 開発事例リクルートにおけるマルチモーダル Deep Learning Web API 開発事例
リクルートにおけるマルチモーダル Deep Learning Web API 開発事例Recruit Technologies
 
『Mobageの大規模データマイニング活用と 意思決定』- #IBIS 2012 -ビジネスと機械学習の接点-
『Mobageの大規模データマイニング活用と 意思決定』- #IBIS 2012 -ビジネスと機械学習の接点- 『Mobageの大規模データマイニング活用と 意思決定』- #IBIS 2012 -ビジネスと機械学習の接点-
『Mobageの大規模データマイニング活用と 意思決定』- #IBIS 2012 -ビジネスと機械学習の接点- Koichi Hamada
 
Elasticsearchと機械学習を実際に連携させる
Elasticsearchと機械学習を実際に連携させるElasticsearchと機械学習を実際に連携させる
Elasticsearchと機械学習を実際に連携させるnobu_k
 
Shinyを自由に使ってみる​
Shinyを自由に使ってみる​Shinyを自由に使ってみる​
Shinyを自由に使ってみる​Masanori Takano
 
DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)
DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)
DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)Sho Nakamura
 
A12  坂井研究室 澤田純礼
A12  坂井研究室 澤田純礼A12  坂井研究室 澤田純礼
A12  坂井研究室 澤田純礼aomorisix
 

Similar a Rustに触れて私のPythonはどう変わったか (20)

DRIVE CHARTを支えるAI技術
DRIVE CHARTを支えるAI技術DRIVE CHARTを支えるAI技術
DRIVE CHARTを支えるAI技術
 
20230216_Python機械学習プログラミング.pdf
20230216_Python機械学習プログラミング.pdf20230216_Python機械学習プログラミング.pdf
20230216_Python機械学習プログラミング.pdf
 
いじめられた子供を支援する 仮想世界ピグパーティの コミュニケーション
いじめられた子供を支援する 仮想世界ピグパーティの コミュニケーションいじめられた子供を支援する 仮想世界ピグパーティの コミュニケーション
いじめられた子供を支援する 仮想世界ピグパーティの コミュニケーション
 
ドライブレコーダの画像認識による道路情報の自動差分抽出
ドライブレコーダの画像認識による道路情報の自動差分抽出ドライブレコーダの画像認識による道路情報の自動差分抽出
ドライブレコーダの画像認識による道路情報の自動差分抽出
 
Microsoft AI と深層学習
Microsoft AI と深層学習Microsoft AI と深層学習
Microsoft AI と深層学習
 
MLOpsはバズワード
MLOpsはバズワードMLOpsはバズワード
MLOpsはバズワード
 
データアナリティクスの新たな一歩とそれを支えるインフラ
データアナリティクスの新たな一歩とそれを支えるインフラデータアナリティクスの新たな一歩とそれを支えるインフラ
データアナリティクスの新たな一歩とそれを支えるインフラ
 
Deep Learningを用いたロボット制御
Deep Learningを用いたロボット制御Deep Learningを用いたロボット制御
Deep Learningを用いたロボット制御
 
local launch small language model of AI.
local launch small language model of AI.local launch small language model of AI.
local launch small language model of AI.
 
Custom Visionで仏像を画像分類
Custom Visionで仏像を画像分類Custom Visionで仏像を画像分類
Custom Visionで仏像を画像分類
 
先駆者に学ぶ MLOpsの実際
先駆者に学ぶ MLOpsの実際先駆者に学ぶ MLOpsの実際
先駆者に学ぶ MLOpsの実際
 
福岡市内のベンチャー企業が取り組む最新It技術
福岡市内のベンチャー企業が取り組む最新It技術福岡市内のベンチャー企業が取り組む最新It技術
福岡市内のベンチャー企業が取り組む最新It技術
 
ディープラーニングで株価予測をやってみた
ディープラーニングで株価予測をやってみたディープラーニングで株価予測をやってみた
ディープラーニングで株価予測をやってみた
 
リクルートにおけるマルチモーダル Deep Learning Web API 開発事例
リクルートにおけるマルチモーダル Deep Learning Web API 開発事例リクルートにおけるマルチモーダル Deep Learning Web API 開発事例
リクルートにおけるマルチモーダル Deep Learning Web API 開発事例
 
『Mobageの大規模データマイニング活用と 意思決定』- #IBIS 2012 -ビジネスと機械学習の接点-
『Mobageの大規模データマイニング活用と 意思決定』- #IBIS 2012 -ビジネスと機械学習の接点- 『Mobageの大規模データマイニング活用と 意思決定』- #IBIS 2012 -ビジネスと機械学習の接点-
『Mobageの大規模データマイニング活用と 意思決定』- #IBIS 2012 -ビジネスと機械学習の接点-
 
Elasticsearchと機械学習を実際に連携させる
Elasticsearchと機械学習を実際に連携させるElasticsearchと機械学習を実際に連携させる
Elasticsearchと機械学習を実際に連携させる
 
Hacking Robotics
Hacking RoboticsHacking Robotics
Hacking Robotics
 
Shinyを自由に使ってみる​
Shinyを自由に使ってみる​Shinyを自由に使ってみる​
Shinyを自由に使ってみる​
 
DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)
DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)
DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)
 
A12  坂井研究室 澤田純礼
A12  坂井研究室 澤田純礼A12  坂井研究室 澤田純礼
A12  坂井研究室 澤田純礼
 

Rustに触れて私のPythonはどう変わったか

  • 1. Mobility Technologies Co., Ltd. Rustに触れて私のPythonはどう変わったか 2020/09/24 @MoT.rs Shunsuke Nakamura AI技術開発部
  • 2. Mobility Technologies Co., Ltd.2 中村遵介(なかむらしゅんすけ)@S.Nakamura
 
 AI技術開発部エッジMLエンジニアリングG
 - 深層学習・画像処理
 - デバイスシミュレータ開発
 
 学生時代: SQLとPython
 社会: PythonとRust
 趣味: 画像の拡大
 
 自己紹介
  • 3. Mobility Technologies Co., Ltd.3 深層学習と画像処理の流れ データセット用意 Webからダウンロー ド・自サーバから収 集 傾向調査 エラーデータ確認 クラス分布や 色傾向の確認 データ分割 傾向を元に 学習するデータ・評 価に使用するデータ 等を分割 前処理 深層学習を行う ためのデータの 加工処理 深層学習 加工したデータ から実際に目的とな るモデルを学習する 後処理 モデルの出力を、全 体として出力 したいものに変換 必要に応じて別手法 で補正 結果の可視化 学習結果を人の 目に分かりやすく 示し改善点を探す Designed by Freepik and distributed by Flaticon
  • 4. Mobility Technologies Co., Ltd. 画像を用いた深層学習の全体的な流れ(の一例)
 4 深層学習と画像処理の流れ データセット用意 Webからダウンロー ド・自サーバから収 集 傾向調査 エラーデータ確認 クラス分布や 色傾向の確認 データ分割 傾向を元に 学習するデータ・評 価に使用するデータ 等を分割 前処理 深層学習を行う ためのデータの 加工処理 深層学習 加工したデータ から実際に目的とな るモデルを学習する 後処理 モデルの出力を、全 体として出力 したいものに変換 必要に応じて別手法 で補正 結果の可視化 学習結果を人の 目に分かりやすく 示し改善点を探す 全てPythonで実装
 ・深層学習はPyTorchというPython向けライブラリで実装されることが多い
 ・ここらへんで公開されている既存コードもほぼPythonなので同じ言語のほうが便利
 ・Pythonではデータ処理向け便利ライブラリが多数公開されている
 ・研究の側面が強く手軽にコード変更ができる言語が良い
 Designed by Freepik and distributed by Flaticon
  • 5. Mobility Technologies Co., Ltd.5 ■ 他人(自分)のコードの再現・改変が難しい
 ■ 様々な外部ライブラリを使用するのでバージョンの不一致で実行できない
 ■ 型情報がほぼないので、コードの改変・再使用が困難
 ■ ディレクトリ構成・仮想環境の個人差が大きく揃えづらい
 ■ 長時間かけて学習したモデルが保存時に引数エラーで保存失敗・やり直しへ
 ■ どこでどのようなエラーが発生するかが分からないので捕捉しづらい
 ■ モジュールのインポートルールが複雑(個人差あり)
 ■ Pythonを書くと遅くなりがち
 ■ 他の言語で書かれた高速なライブラリをPythonから使用すればOK
 
 困っていたが深層学習からPythonは切り離せないので仕方ないか〜と思っていた
 とはいえPythonだと困ることも
  • 6. Mobility Technologies Co., Ltd.6 Rust使い始めて感じたこと
 ■ 型情報がしっかりしている
 ■ ビルド時に型周りのミスを全て洗い出せるので安心
 ■ エディタのフルサポートが得られるので書くのが楽
 ■ Result型・Option型のおかげでどこでどういう例外ケースがあるのか把握しやすい
 ■ パターンマッチが強力で条件分岐の取りこぼしが起きづらい
 ■ Cargo.tomlに必要な情報がほぼ乗っているので他人のコードを動かしやすい
 ■ ディレクトリ構成が統一されている
 ■ ライフタイムがコードに出てくると読みづらい
 ■ ハマると型をこねくり回して四苦八苦する時間がある
 ■ エラー処理をきちんと書かねばならず、正常ケースだけさっと試すときに面倒
 
 そんなとき業務でRustにふれることに
  • 7. Mobility Technologies Co., Ltd.7 ここらへんをPythonでもなんとか取り入れたいと思った
 ■ 型情報がしっかりしている
 ■ ビルド時に型周りのミスを全て洗い出せるので安心
 ■ エディタのフルサポートが得られるので書くのが楽
 ■ Result型・Option型のおかげでどこでどういう例外ケースがあるのか把握しやすい
 ■ パターンマッチが強力で条件分岐の取りこぼしが起きづらい
 ■ Cargo.tomlに必要な情報がほぼ乗っているので他人のコードを動かしやすい
 ■ ディレクトリ構成が統一されている
 ■ ライフタイムがコードに出てくると読みづらい
 ■ ハマると型をこねくり回して四苦八苦する時間がある
 ■ エラー処理をきちんと書かねばならず、正常ケースだけさっと試すときに面倒
 
 そんなとき業務でRustにふれることに
  • 8. Mobility Technologies Co., Ltd.8 ここらへんをPythonでもなんとか取り入れたいと思った
 ■ 型情報がしっかりしている
 ■ ビルド時に型周りのミスを全て洗い出せるので安心
 ■ エディタのフルサポートが得られるので書くのが楽
 ■ Result型・Option型のおかげでどこでどういう例外ケースがあるのか把握しやすい
 ■ パターンマッチが強力で条件分岐の取りこぼしが起きづらい
 ■ Cargo.tomlに必要な情報がほぼ乗っているので他人のコードを動かしやすい
 ■ ディレクトリ構成が統一されている
 ■ ライフタイムがコードに出てくると読みづらい
 ■ ハマると型をこねくり回して四苦八苦する時間がある
 ■ エラー処理をきちんと書かねばならず、正常ケースだけさっと試すときに面倒
 
 そんなとき業務でRustにふれることに
  • 9. Mobility Technologies Co., Ltd.9 型アノテーションとmypyとtypeguardとdataclassとEnumで型っぽい事をしようとした 型アノテーション ■ Pythonは変数と関数の引数・返り値に型アノテーションを付けられる ■ typingモジュールを使用することで複雑な型にもアノテーションできる ■ あくまでアノテーションなので実行時にその型でなくてもエラーにならない mypy ■ Pythonの静的型検査ツール ■ アノテーションを元にコードで型ミスがないかを実行前に洗い出せる typeguard ■ Pythonの動的型検査ツール ■ 実行時に関数の引数と返り値が実際にアノテーション通りかを確認してくれる dataclass ■ 構造体のようなものを定義できる(実態はクラス) ■ データを辞書型でやり取りしていた部分を全てdataclassに置き換えた Enum ■ ただの列挙型 Rustの良さをPythonに取り入れようとした話
  • 10. Mobility Technologies Co., Ltd. Pros ■ エディタの補完パワーが増したので実装が楽に ■ 辞書型はどのようなkeyにどのようなvalueがあるかを見てみないと分からないが、dataclass で安全にデータをやり取りできるように ■ 過去の自分のコードが読めるように Cons ■ mypyには限界があり、mypyを通っても実行時にエラーになるケースがあった ■ Pythonではサードパーティ製ライブラリを頻繁に使用するが、それらが型情報を提供しておら ず、mypyでのチェックを諦めることが多かった 結論: 導入してよかったが、Pythonである以上確実な安心感は得られない 型情報: Rustの良さをPythonに取り入れようとした話 10
  • 11. Mobility Technologies Co., Ltd.11 ここらへんをPythonでもなんとか取り入れたいと思った
 ■ 型情報がしっかりしている
 ■ ビルド時に型周りのミスを全て洗い出せるので安心
 ■ エディタのフルサポートが得られるので書くのが楽
 ■ Result型・Option型のおかげでどこでどういう例外ケースがあるのか把握しやすい
 ■ パターンマッチが強力で条件分岐の取りこぼしが起きづらい
 ■ Cargo.tomlに必要な情報がほぼ乗っているので他人のコードを動かしやすい
 ■ ディレクトリ構成が統一されている
 ■ ライフタイムがコードに出てくると読みづらい
 ■ ハマると型をこねくり回して四苦八苦する時間がある
 ■ エラー処理をきちんと書かねばならず、正常ケースだけさっと試すときに面倒
 
 そんなとき業務でRustにふれることに
  • 12. Mobility Technologies Co., Ltd.12 Cargo.tomlのように実行に必要な情報を1つのファイルにまとめておけないか? pep518でまさに同じ話があった ■ pyproject.tomlというファイルでパッケージング情報を管理 ■ Python自体のバージョンやライブラリのバージョンを記述可能 ■ poetry / pyflowといったパッケージング管理ライブラリがここに準拠 ■ poetry / pyflowならディレクトリ構成も統一 個人プロジェクトは全てpoetryに移行した。数ヶ月前のコードでも一発で動いた 業務ではさりげなくpoetryを導入することで布教中 Cargoほど強力ではないが便利 poetryはいいぞ Rustの良さをPythonに取り入れようとした話 成功例
  • 13. Mobility Technologies Co., Ltd.13 ここらへんをPythonでもなんとか取り入れたいと思った
 ■ 型情報がしっかりしている
 ■ ビルド時に型周りのミスを全て洗い出せるので安心
 ■ エディタのフルサポートが得られるので書くのが楽
 ■ Result型・Option型のおかげでどこでどういう例外ケースがあるのか把握しやすい
 ■ パターンマッチが強力で条件分岐の取りこぼしが起きづらい
 ■ Cargo.tomlに必要な情報がほぼ乗っているので他人のコードを動かしやすい
 ■ ディレクトリ構成が統一されている
 ■ ライフタイムがコードに出てくると読みづらい
 ■ ハマると型をこねくり回して四苦八苦する時間がある
 ■ エラー処理をきちんと書かねばならず、正常ケースだけさっと試すときに面倒
 
 そんなとき業務でRustにふれることに
  • 14. Mobility Technologies Co., Ltd.14 Result型とOption型をクラスとして定義してみた ■ Optionはちょっと便利になった ■ ResultはそもそもPythonがどの部分でどのようなエラーを出すのかが わからないため、結局try-exceptを大きくくくる以外にエラーハンドリングが できずメリットを感じなかった 例外ケースを適度に無視できるのが良くも悪くもPythonの特徴 Rustの良さをPythonに取り入れようとした話 失敗例
  • 15. Mobility Technologies Co., Ltd.15 Rustの良さをPythonに持ち込むのは限界があるしPythonの良さを殺す事が多い そもそも得意分野が違うのに全部同じ言語でやる必要はなかった 柔軟なコード変更が求められ、優秀なライブラリが多い部分をPythonで、 厳格なエラー処理・再利用性・速度が求められる部分をRustで実装 全体を通した設定はYAMLのような言語非依存のもので管理する方針へ Rustの良さはRustとして、Pythonの良さはPythonとして使用した話 データセット用意 Webからダウンロー ド・自サーバから収 集 傾向調査 エラーデータ確認 クラス分布や 色傾向の確認 データ分割 傾向を元に 学習するデータ・評 価に使用するデータ 等を分割 前処理 深層学習を行う ためのデータの 加工処理 深層学習 加工したデータ から実際に目的とな るモデルを学習する 後処理 モデルの出力を、全 体として出力 したいものに変換 必要に応じて別手法 で補正 結果の可視化 学習結果を人の 目に分かりやすく 示し改善点を探す Rust PythonPython Rust Python
  • 16. Mobility Technologies Co., Ltd.16 Rustの良さをPythonに持ち込むのは限界があるしPythonの良さを殺す事が多い そもそも得意分野が違うのに全部同じ言語でやる必要はなかった 柔軟なコード変更が求められ、優秀なライブラリが多い部分をPythonで、 厳格なエラー処理・再利用性・速度が求められる部分をRustで実装 全体を通した設定はYAMLのような言語非依存のもので管理する方針へ Rustの良さはRustとして、Pythonの良さはPythonとして使用した話 データセット用意 Webからダウンロー ド・自サーバから収 集 傾向調査 エラーデータ確認 クラス分布や 色傾向の確認 データ分割 傾向を元に 学習するデータ・評 価に使用するデータ 等を分割 前処理 深層学習を行う ためのデータの 加工処理 深層学習 加工したデータ から実際に目的とな るモデルを学習する 後処理 モデルの出力を、全 体として出力 したいものに変換 必要に応じて別手法 で補正 結果の可視化 学習結果を人の 目に分かりやすく 示し改善点を探す Rust Rust Python PythonPython 超快適になった!
  • 17. Mobility Technologies Co., Ltd.17 Rustが得意なところはRustで、Pythonが得意なところはPythonで書こう
 
 Pythonを書く時はpoetryを使って、可能な限り型アノテーションと型チェックをするとちょっ とQoLがあがる
 結論