TorchDataチュートリアル解説
連結可能なDataPipeで保守性を高める
自己紹介
● 名前: 西岡 賢一郎
○ Twitter: @ken_nishi
○ note: 西岡賢一郎@研究者から経営者へ (https://note.com/kenichiro)
○ YouTube: 【経営xデータサイエンスx開発】西岡 賢一郎のチャンネル
(https://www.youtube.com/channel/UCpiskjqLv1AJg64jFCQIyBg)
● 経歴
○ 東京大学で位置予測アルゴリズムを研究し博士 (学術) を取得
○ 東京大学の博士課程在学中にデータサイエンスをもとにしたサービスを提供する株式会社ト
ライディアを設立
○ トライディアを別のIT会社に売却し、CTOとして3年半務め、2021年10月末にCTOを退職
○ CDPのスタートアップと株式会社データインフォームドの2つに所属
○ 自社および他社のプロダクト開発チーム・データサイエンスチームの立ち上げ経験
今回のお話
● PyTorchとTorchData
● TorchDataのDataPipe ← 今日一番持ち帰っていただきたいこと
● TorchDataのチュートリアル
PyTorchとTorchData
PyTorch
● PyTorchとは
○ ディープラーニングフレームワークの一つ
○ GPUアクセラレーションを備える
○ 動的計算グラフをサポート
出典: https://pytorch.org/blog/computational-graphs-constructed-in-pytorch/
TorchData
● 2022年3月10日にfunctorchとともにベータリリース
○ TorchData: 柔軟で高性能なデータパイプラインを構築するためのライブラリ
○ functorch: 構成可能な関数変換を追加するライブラリ
● TorchDataが必要となった背景
○ 既存のDataLoaderは多くの機能を備えていて拡張することが難しい
○ 同じようなデータロードを何回も書き直さないといけないことがある
● TorchDataでは、iterDataPipeとMapDataPipeを組み合わせることでデータ
ロードを可能にする
TorchDataのDataPipe
データロードを構成するDataPipe: IterDataPipeとMapDataPipe
● 「再利用可能なローディングツールのPyTorch Dataset」と「実際のコーパ
ス上に構築されたiterator/accessor」の間で混乱が生じている
● Datasetの名前をDataPipeに変え、データロードを構成できるように再利用
● 2種類のDataPipe
○ IterDataPipe: iteratorを作る
○ MapDataPipe: 変換を加えるMapper
● DataPipeを連結することで変換グラフを作ることができる
IO DataPipe
Grouping
DataPipe
Mapping
DataPipe
Splitting
DataPipe
Combining
DataPipe
Mapping
DataPipe
連結のイメージ
IterDataPipeの例
JsonをパースするDataPipe
1. 他のDataPipeを受け取り
2. 新しいDataPipeのためのイテレータ実装
出典: https://github.com/pytorch/data#what-are-datapipes
DataPipeの2つの使い方
DataPipeのメソッドもしくはインスタンス生成でDataPipeを追加可能
メソッド インスタンス
zip_with_mapとMapKeyZipperはどちら
も同じ挙動となる
DataPipeにメソッドを追加
functional_datapipeデコレータを利用して、datapipeのメソッドに登録できる
出典:
https://github.com/pytorch/data/blob/b6ade8f097bc9ac08460cd403034a35daff09cfa/torchdata/datapip
es/iter/util/combining.py#L116
DataPipeが
zip_with_mapメソッド
を使えるようになる
TorchDataチュートリアル
TorchDataチュートリアル
● ライブコーディングでTorchDataのチュートリアルを解説
○ Torch Data チュートリアル: https://pytorch.org/data/main/tutorial.html
● チュートリアルで利用するビルトインのDataPipe
○ FileLister: ディレクトリにあるファイルをリスト
○ Filter: DataPipeに含まれる要素を絞る
○ FileOpener: Fileを読み込む
○ CSVParser: CSVをparseする
FileLister Filter FileOpener CSVParser
関連情報
● 今回は紹介しなかった、その他DataPipe
○ https://github.com/pytorch/data/tree/main/torchdata/datapipes
○ Shuffler, Zipper, HttpReader, S3FileLister, S3FileLoaderなど (未検証)
○ 使い方はDocstringを読めば十分
● 使用したコードhttps://github.com/knishioka/machine-learning-
workshop/tree/main/pytorch/torchdata

TorchDataチュートリアル解説

Editor's Notes

  • #3 こちらが私のプロフィールとなります。 機械学習には、大学時代の研究から携わっており、自分で立ち上げたスタートアップでも機械学習を使ったサービスを提供していました。 プロダクト開発チームやデータサイエンスチームの立ち上げなどもやっています。
  • #4 今回のお話です。 今回は大きく3つに分けてお話します。 まずはじめにPyTorchとTorchDataについてお話します。 次に、TorchDataの主となる機能のDataPipeについてお話します。 TorchDataのDataPipeの挙動が、今日の発表でもっとも持ち帰っていただきたい内容となります。 最後に、10分程度でTorchDataのチュートリアルをライブコーディングを交えて解説していきます。
  • #6 PyTorchはここにいるみなさんはご存知だと思いますが、ディープラーニングフレームワークの1つとして有名な機械学習ライブラリです。 GPUを使った演算をサポートしており、高速な学習が実現できるので、研究分野で特に人気のようです。 ディープラーニングのフレームワークとしてはTensorFlowも有名です。 TensorFlowとPytorchの違いとしてよく言われるものが計算グラフをどのように作るかです。 TensofrFlowが静的な計算グラフを作るのに対し、PyTorchは計算の条件に合わせて変化させる動的な計算グラフを作成します。
  • #7 今回お話するTorchDataはPyTorchの1つのライブラリです。 2022年3月にベータ版がfunctorchとともにリリースされました。 簡単にTorchDataとfunctorchを説明すると、TorchDataは柔軟で高性能なデータパイプラインを構築するためのライブラリ、functorchは構成可能な関数変換を追加するライブラリとなっています。 どちらもベータ版で今後APIが変わる可能性もあるということです。 PyTorchを使っている人にとって、TorchDataはDatasetと何が違うのかが気になるところだと思います。 現在、PyTorch Datasetなどデータローダー周りは、非常に多くの機能を担うことが多く、拡張することが難しくなっています。 そして、同じようなデータロードを何度も書き直す必要が出てきていて、無駄な工数を発生させがちです。 そこで、このような問題に対処するために、TorchDataでは、iteratorスタイルのDataPipeとMapスタイルのDataPipeの2つをベースとしたデータの処理機構を組み合わせてデータロードを実現しています。 この2つのDataPipeにより、改変しやすい保守性の高いデータロードを実現するということです。 今回は、このTorchDataで作成されるDataPipeについてデモとともに紹介します。
  • #9 TorchDataは、先程述べたように既存のDatasetが抱える問題を解決するために作られたライブラリです。 具体的には、再利用可能なDatasetと実際のコーパス上に構築されたiterator/accesor