この記事はOSS Advent Calendar 2023 20日目の投稿です。
概要
TensorFlowの内部構造について理解したら仕事の幅が広がる現場に異動しました。なぜなら、新しい部署では次世代スーパーコンピュータ向けにTensorFlow、PyTorch、scikit-learnを移植するというミッションがあるからです。しかし、公式GitHubのソースコードを一度でも読もうと挑戦された方は気付くと思います。この膨大な量のソースコードをどうやって読めば良いのかと。。。ましてや内部構造を理解するなんて。。。筆者にも答えは有りません。有りませんが、無いなりに仮説を立てて、今後検証していこうと思います。
何をすべきか?
当然こう書けば、TensorFlowのソースコードを読むという結論に達するでしょう。しかし、いきなりは難しいでしょう。よって筆者はステップアップ方式で順番にやる方法が最適なのではと考えました。急がば回れ方式です。
一応ステップアップ方式を想定しましたが、後半は順番通りにならない様な気もします。。。
ステップ1: TensorFlowを利用する機会を増やす
TensorFlowの内部構造を理解する前に、TensorFlowが使えなくては内部構造も理解出来ません。しかし、内部構造を理解したいと欲する段階で、ある程度は利用経験が有るように思います。筆者もTensorFlowは学生時代も含めれば何かとご縁が有ります。しかし、頻繁に自分で0からモデルを実装して検証しているかと言えば、0からモデルを実装することは少ない様に思います。公式の認定試験を受験したり、論文に出ているモデルを自分なりに実装してみるなど、利用する機会を増やすことがまずは必要だと思いました。
ステップ2: NSight Systemsとの組み合わせでの利用
NVIDIAが開発したプロファイラーNSight Systemsを利用して実際にGPUモードのTensorFlowで実装した簡単なモデルを実行し測定を行ってみます。NSight Systemsは優れ物で実行時にどの様なイベントが発生しているか詳細に分析できます。本来はTensorFlow Profilerというツールが実装されているのですが、現在全く動作しない状況です。。。
ステップ3: まずはKerasのソースコードから読んでみる
KerasはTensorFlowと密接に関係しています。と言うよりも、TensorFlowはVersion 1.7からTF KerasとしてKerasを飲み込みました。しかし、Kerasのコアの部分はPythonで実装されており、コア部分は殆どC言語で実装されているTensorFlowと比較して読みやすいのではと思いました。よって、まずはKerasでソースコードを読むのに慣れることから始めるべきではと思います。
ステップ4: 新バージョンが出る毎にChange Logを読んでみる
新バージョンのリリース毎に追いかけていくのも結構大変です。これを読んで理解するだけでも内部理解の一助になる様な。。。
ステップ5: GitHub Issueから手頃なバグを修正してみる
ここまではTensorFlowの内部、つまりソースコードは読まずに、外から使うというステップでした。ステップ3では実際に内部を見るために、GitHub Issueから手頃なバグ(例えば、good first issue)の修正に挑戦してみることで、ソースコードを読む機会を増やすことになり、理解が進むのではないかと考えています。
ステップ6: 興味の有るモジュールのソースコードから読む
興味の有るところから攻めるのが最適解?
ステップ6.5: PyTorchのソースコードも読んでみる
二大巨頭と言えば、TensorFlowとPyTorch。設計思想は丸っきり違うと言われますが、PyTorchのソースコードを読むことで逆にDeep Neural Networkについて理解が深まり。。。(今後検証)
ステップ7: 他の人とも情報共有
他の有識者と情報共有することで、知らなかったことが知れたり、誤謬が正されたり、良いことずくめ。
まとめ
現在取り組んでいるステップ、未到達のステップ混在していますが、2024年はこの記事のステップを一巡できる様にしたいなと思います。