Chainer Contribution Guide

Engineering

kenta-oono
  • Chainer Contribution Guide 株式会社 Preferred Networks ⼤野健太 [email protected] 2015/12/19 Chainer Meetup #1 @スマートニュース
  • ⾃⼰紹介 • ⼤野健太(@delta2323_) • 経歴:数理科学研究科・修⼠課程(共形幾何) • → 2012.3 PFI → 2014.10 PFN • 所属:研究班(理論解析・ライフサイエンス・Chainer開発メンバー) • ブログ:http://delta2323.github.io • 最近の活動 • NIPS2014勉強会・ICML2015勉強会主催 • ⽇経ビッグデータ短期連載・雑誌寄稿など • NIPS2015読み会1⽉下旬に開催(予定) 2
  • Chainer Community 3
  • How to Contribute to Chainer 1. Forumに投稿する 2. Issueを登録する 3. Pull Request (PR)を送る 4. Chainerを⾃分のプロジェクトで利⽤する 4 • 参考資料:Chainer Contribution Guide • http://docs.chainer.org/en/stable/contri bution.html
  • 1. Forumに投稿する • 2つのGoogle Group:Chainer User Group / Chainer Japanese User Group (new!) • Twitterも2つあります:@ChainerOfficial / @ChainerJP (new!) • こんな議論を募集しています • Chainerの使い⽅に関する質問 • この機能をChainerで実現するにはどうすれば良い? • この関数の使い⽅がわからない • 不具合・インストール失敗の報告 • 機能要望 • Chainerを⽤いたプロジェクト・論⽂・実装の告知 • 質問だけではなく、回答も⼤歓迎 5
  • インストール失敗報告の投稿に関して • あると望ましい情報 • 環境設定(OS、GPU) • Chainer、依存モジュールのバージョン • 特にインストール関連のsetuptools, h5py, cython, pipなど • インストールログ • 基本的に最新バージョンChainerのみに対応しています • Windowsは公式にはサポートしていません 6
  • 2. Issueを登録する • Issueの分類 • Bug / Enhancement / Feature / Test / Document / Example / Other • FeatureはMajor, Minorリリースでmasterブランチに取り込まれます。 • それ以外は任意のリリースで取り込まれます。 • Issueに登録する前にforumに投稿・相談するのがおすすめです • 例外:タイポなど修正⽅法がほぼ⾃明な変更 7
  • Feature issueに関して • あると嬉しい情報 • 何をしたいか(最重要) • なぜしたいか(必要ならば) • どのように実現するか(アイデアがあるならば) • 参考となる資料(論⽂など) 8
  • Bug issueに関して • あると嬉しい情報 • Chainerと依存モジュールのバージョン • 基本的に最新Chainerのバージョンのみに対応しています • それ以前のバージョンでのバグの場合、アップデートをおすすめします。 • 状況を再現するコード • できるだけ短く、問題を局所化できる⽅がベター • エラーメッセージ 9
  • 3. Pull Requestを作成する • ワークフロー • 環境構築 • 実装(coding guidelineに従いながら) • ⼿元環境でのテスト → テストが通ったらPR作成 • レビュー → レビューが通ったらマージ • 実装が⼤きかったり、インターフェースの変更を伴う場合には、事前にforumに相談することを おすすめします • WIP PRs:実装が完了していなくても、work-in-progress (WIP) PRを作成し、相談しながら 実装を進めることも可能です。 10
  • 環境構築 • 推奨環境 • Python : pyenv + (optionally) anaconda • Coding Style : flake8 + hacking • Dependent modules : NumPy, Six, h5py • Testing modules : Mock, Nose • CUDA依存のモジュールを開発する場合 • CUDA : CUDA, filelock, g++ (optionally), cuDNN • 概して新しいバージョンをインストールするのが望ましいです 11
  • 例:Linkの実装 新しいLinkを実装する場合、典型的には以下のモジュールを作る必要があります • Link(chainer/links/connection/linear.py: Linear class) • Function(chainer/functions/connection/linear.py: LinearFunction class, linear) • Test(tests/chainer_tests/link_tests/connection_tests/test_linear.py) • (tests/chainer_tests/function_tests/connection_tests/test_linear.py) • Document • docstring (Linear class, LinearFunction class) • Reference manualへの登録 (chainer/docs/source/reference/links.rst) 12
  • コードスタイルチェック & テスト • コードスタイル:PEP8 +(⼀部の)OpenStack Style Guideline • hackingで強化したflake8を利⽤ • すべての規約がflake8でチェックされるのではない点に注意 • テスト:Nose • nosetestを利⽤ • テストの有効・無効はnosetestsの--attrオプションで切り替え可能です 13
  • テストに関する注意 • テストの⼀部は(1つもしくは複数)GPUやcuDNNに依存しているので、環境によっては全ての テストを動かすことはできません • CPUのみのテストを動かす:nosetest --attr ‘!gpu‘ • CPUのみ + 1GPUのテストを動かす:nosetest -A ‘gpu
  • CI • レポジトリ:Travis CI (Linux) + AppVeyor (Windows) • テスト対象:PR + origin/master • テスト範囲:coding guideline, CPUテスト • AppVeyorは参考程度で、AppVeyorが通らなくてもマージすることもあります。 • PFN内部:Jenkins • テスト対象:masterブランチ • テスト範囲:全テストを様々な環境設定で定期的に⾛らせています。 • テストシナリオの詳細はchainer-testレポジトリで確認可能です。 15
  • CI 16
  • レビュー • 忘れがちな項⽬ • Sixモジュールを利⽤していない (xrange -> six.moves.range) • テストケースが⼗分でない • Functionクラスのbackwardをテストしていない • cupy.ndarrayのメソッドで、CuPyとNumPyの挙動が⼀致すること確認するテストをし てない • cupy.ndarrayのメソッドでdtypeに関するパラメトライズテストを⾏っていない • ドキュメントを書いていない • Reference manualに関数・メソッドを追記していない • コアチームの1⼈以上(重要な変更は2⼈以上)がLGTMを出したらマージ 17
  • リリース • Chainerの開発はGitHub Flowに従っています • 開発はmasterブランチで⾏い、リリース(major, minor, revision)にはタグを打つ • バージョン命名⽅法:X.Y.Z(.W)(現在 = 1.5.1) • X : Major version. ⼤きな破壊的変更を伴うリリース(これまではなし) • Y : Minor version. インターフェースの変更を伴うリリース(関数追加、API変更など) • Z : Revision. インターフェース変更をともなわないリリース(Bug修正、速度向上など) • W : Hotfix. 緊急の修正版を出す必要性がある場合のリリース(インストールできないなど) 18
  • 4. Chainerを⾃分のプロジェクトで利⽤する • NIPSのワークショップに投稿しました • Chainerは引⽤できます! • Chainerを利⽤したプロジェクトはExternal Exampleとしてwikiに掲載しています 19 Seiya Tokui, Kenta Oono, Shohei Hido and Justin Clayton, Chainer: a Next-Generation Open Source Framework for Deep Learning, in Neural Information Processing Systems, Workshop on Machine Learning Systems, 2015
  • FAQ • issueで登録するのと、フォーラムに投稿するのどちらが良いでしょうか? • 概して、質問・要望・告知などはforumでのディスカッションが適していると思われます。 Issueへの登録は(特に⼤きな変更を伴う場合)forumで議論し、登録する価値があると確信 を持ってからが望ましいです。 • 同様に、インストールに関する問題もforumにまずは投稿し、chainer側の問題なのか、環境 依存の問題なのかを切り分けるのが望ましいです。 • 開発参加したいのですが、どこからを始めるのが良いでしょうか? • ドキュメントには未整備の部分が多数残っています。ドキュメントの修正はとっかかりとし て始めやすいと思われます。 • また、ユニットテストの拡充もおすすめです。他コンポーネントと⽐較的独⽴しているけれ ど、実装するのに中のコードを読む必要があるので、コード理解も含めてファーストステッ プとして良いと思います。 20
  • FAQ • PRはどの部分に⾏うのが嬉しいですか? • ドキュメントのバグ・タイポ • Link / Chain / Functionの拡充 • CuPyのndarrayのメソッドの拡充 • ユニットテストの拡充 • Windowsのテスト環境 21
  • まとめ • Chainerへのコントリビューション⽅法は様々 な形態があります。 • それぞれのコントリビューション⽅法を簡単に 紹介しました • 公式HP:http://chainer.org • レポジトリ: https://github.com/pfnet/chainer • Twitter:@ChainerOfficial • Google Group:Chainer User Group / Chainer Japanese User Group • Contribution Guide: http://docs.chainer.org/en/stable/contribution.html Your Contribution is Welcome!! 22 We are hiring as fulltime/part time/internship
  • Copyright © 2014- Preferred Networks All Right Reserved.
Please download to view
23
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Description
Text
  • Chainer Contribution Guide 株式会社 Preferred Networks ⼤野健太 [email protected] 2015/12/19 Chainer Meetup #1 @スマートニュース
  • ⾃⼰紹介 • ⼤野健太(@delta2323_) • 経歴:数理科学研究科・修⼠課程(共形幾何) • → 2012.3 PFI → 2014.10 PFN • 所属:研究班(理論解析・ライフサイエンス・Chainer開発メンバー) • ブログ:http://delta2323.github.io • 最近の活動 • NIPS2014勉強会・ICML2015勉強会主催 • ⽇経ビッグデータ短期連載・雑誌寄稿など • NIPS2015読み会1⽉下旬に開催(予定) 2
  • Chainer Community 3
  • How to Contribute to Chainer 1. Forumに投稿する 2. Issueを登録する 3. Pull Request (PR)を送る 4. Chainerを⾃分のプロジェクトで利⽤する 4 • 参考資料:Chainer Contribution Guide • http://docs.chainer.org/en/stable/contri bution.html
  • 1. Forumに投稿する • 2つのGoogle Group:Chainer User Group / Chainer Japanese User Group (new!) • Twitterも2つあります:@ChainerOfficial / @ChainerJP (new!) • こんな議論を募集しています • Chainerの使い⽅に関する質問 • この機能をChainerで実現するにはどうすれば良い? • この関数の使い⽅がわからない • 不具合・インストール失敗の報告 • 機能要望 • Chainerを⽤いたプロジェクト・論⽂・実装の告知 • 質問だけではなく、回答も⼤歓迎 5
  • インストール失敗報告の投稿に関して • あると望ましい情報 • 環境設定(OS、GPU) • Chainer、依存モジュールのバージョン • 特にインストール関連のsetuptools, h5py, cython, pipなど • インストールログ • 基本的に最新バージョンChainerのみに対応しています • Windowsは公式にはサポートしていません 6
  • 2. Issueを登録する • Issueの分類 • Bug / Enhancement / Feature / Test / Document / Example / Other • FeatureはMajor, Minorリリースでmasterブランチに取り込まれます。 • それ以外は任意のリリースで取り込まれます。 • Issueに登録する前にforumに投稿・相談するのがおすすめです • 例外:タイポなど修正⽅法がほぼ⾃明な変更 7
  • Feature issueに関して • あると嬉しい情報 • 何をしたいか(最重要) • なぜしたいか(必要ならば) • どのように実現するか(アイデアがあるならば) • 参考となる資料(論⽂など) 8
  • Bug issueに関して • あると嬉しい情報 • Chainerと依存モジュールのバージョン • 基本的に最新Chainerのバージョンのみに対応しています • それ以前のバージョンでのバグの場合、アップデートをおすすめします。 • 状況を再現するコード • できるだけ短く、問題を局所化できる⽅がベター • エラーメッセージ 9
  • 3. Pull Requestを作成する • ワークフロー • 環境構築 • 実装(coding guidelineに従いながら) • ⼿元環境でのテスト → テストが通ったらPR作成 • レビュー → レビューが通ったらマージ • 実装が⼤きかったり、インターフェースの変更を伴う場合には、事前にforumに相談することを おすすめします • WIP PRs:実装が完了していなくても、work-in-progress (WIP) PRを作成し、相談しながら 実装を進めることも可能です。 10
  • 環境構築 • 推奨環境 • Python : pyenv + (optionally) anaconda • Coding Style : flake8 + hacking • Dependent modules : NumPy, Six, h5py • Testing modules : Mock, Nose • CUDA依存のモジュールを開発する場合 • CUDA : CUDA, filelock, g++ (optionally), cuDNN • 概して新しいバージョンをインストールするのが望ましいです 11
  • 例:Linkの実装 新しいLinkを実装する場合、典型的には以下のモジュールを作る必要があります • Link(chainer/links/connection/linear.py: Linear class) • Function(chainer/functions/connection/linear.py: LinearFunction class, linear) • Test(tests/chainer_tests/link_tests/connection_tests/test_linear.py) • (tests/chainer_tests/function_tests/connection_tests/test_linear.py) • Document • docstring (Linear class, LinearFunction class) • Reference manualへの登録 (chainer/docs/source/reference/links.rst) 12
  • コードスタイルチェック & テスト • コードスタイル:PEP8 +(⼀部の)OpenStack Style Guideline • hackingで強化したflake8を利⽤ • すべての規約がflake8でチェックされるのではない点に注意 • テスト:Nose • nosetestを利⽤ • テストの有効・無効はnosetestsの--attrオプションで切り替え可能です 13
  • テストに関する注意 • テストの⼀部は(1つもしくは複数)GPUやcuDNNに依存しているので、環境によっては全ての テストを動かすことはできません • CPUのみのテストを動かす:nosetest --attr ‘!gpu‘ • CPUのみ + 1GPUのテストを動かす:nosetest -A ‘gpu
  • CI • レポジトリ:Travis CI (Linux) + AppVeyor (Windows) • テスト対象:PR + origin/master • テスト範囲:coding guideline, CPUテスト • AppVeyorは参考程度で、AppVeyorが通らなくてもマージすることもあります。 • PFN内部:Jenkins • テスト対象:masterブランチ • テスト範囲:全テストを様々な環境設定で定期的に⾛らせています。 • テストシナリオの詳細はchainer-testレポジトリで確認可能です。 15
  • CI 16
  • レビュー • 忘れがちな項⽬ • Sixモジュールを利⽤していない (xrange -> six.moves.range) • テストケースが⼗分でない • Functionクラスのbackwardをテストしていない • cupy.ndarrayのメソッドで、CuPyとNumPyの挙動が⼀致すること確認するテストをし てない • cupy.ndarrayのメソッドでdtypeに関するパラメトライズテストを⾏っていない • ドキュメントを書いていない • Reference manualに関数・メソッドを追記していない • コアチームの1⼈以上(重要な変更は2⼈以上)がLGTMを出したらマージ 17
  • リリース • Chainerの開発はGitHub Flowに従っています • 開発はmasterブランチで⾏い、リリース(major, minor, revision)にはタグを打つ • バージョン命名⽅法:X.Y.Z(.W)(現在 = 1.5.1) • X : Major version. ⼤きな破壊的変更を伴うリリース(これまではなし) • Y : Minor version. インターフェースの変更を伴うリリース(関数追加、API変更など) • Z : Revision. インターフェース変更をともなわないリリース(Bug修正、速度向上など) • W : Hotfix. 緊急の修正版を出す必要性がある場合のリリース(インストールできないなど) 18
  • 4. Chainerを⾃分のプロジェクトで利⽤する • NIPSのワークショップに投稿しました • Chainerは引⽤できます! • Chainerを利⽤したプロジェクトはExternal Exampleとしてwikiに掲載しています 19 Seiya Tokui, Kenta Oono, Shohei Hido and Justin Clayton, Chainer: a Next-Generation Open Source Framework for Deep Learning, in Neural Information Processing Systems, Workshop on Machine Learning Systems, 2015
  • FAQ • issueで登録するのと、フォーラムに投稿するのどちらが良いでしょうか? • 概して、質問・要望・告知などはforumでのディスカッションが適していると思われます。 Issueへの登録は(特に⼤きな変更を伴う場合)forumで議論し、登録する価値があると確信 を持ってからが望ましいです。 • 同様に、インストールに関する問題もforumにまずは投稿し、chainer側の問題なのか、環境 依存の問題なのかを切り分けるのが望ましいです。 • 開発参加したいのですが、どこからを始めるのが良いでしょうか? • ドキュメントには未整備の部分が多数残っています。ドキュメントの修正はとっかかりとし て始めやすいと思われます。 • また、ユニットテストの拡充もおすすめです。他コンポーネントと⽐較的独⽴しているけれ ど、実装するのに中のコードを読む必要があるので、コード理解も含めてファーストステッ プとして良いと思います。 20
  • FAQ • PRはどの部分に⾏うのが嬉しいですか? • ドキュメントのバグ・タイポ • Link / Chain / Functionの拡充 • CuPyのndarrayのメソッドの拡充 • ユニットテストの拡充 • Windowsのテスト環境 21
  • まとめ • Chainerへのコントリビューション⽅法は様々 な形態があります。 • それぞれのコントリビューション⽅法を簡単に 紹介しました • 公式HP:http://chainer.org • レポジトリ: https://github.com/pfnet/chainer • Twitter:@ChainerOfficial • Google Group:Chainer User Group / Chainer Japanese User Group • Contribution Guide: http://docs.chainer.org/en/stable/contribution.html Your Contribution is Welcome!! 22 We are hiring as fulltime/part time/internship
  • Copyright © 2014- Preferred Networks All Right Reserved.
Comments
Top