Chainer Contribution Guide

82,745 views

Published on

Chainer Meetup #01
http://chainer.connpass.com/event/22063/

Published in: Engineering
0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
82,745
On SlideShare
0
From Embeds
0
Number of Embeds
73,778
Actions
Shares
0
Downloads
27
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide

Chainer Contribution Guide

  1. 1. Chainer Contribution Guide 株式会社 Preferred Networks ⼤野健太 oono@preferred.jp 2015/12/19 Chainer Meetup #1 @スマートニュース
  2. 2. ⾃⼰紹介 • ⼤野健太(@delta2323_) • 経歴:数理科学研究科・修⼠課程(共形幾何) • → 2012.3 PFI → 2014.10 PFN • 所属:研究班(理論解析・ライフサイエンス・Chainer開発メンバー) • ブログ:http://delta2323.github.io • 最近の活動 • NIPS2014勉強会・ICML2015勉強会主催 • ⽇経ビッグデータ短期連載・雑誌寄稿など • NIPS2015読み会1⽉下旬に開催(予定) 2
  3. 3. Chainer Community 3
  4. 4. 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
  5. 5. 1. Forumに投稿する • 2つのGoogle Group:Chainer User Group / Chainer Japanese User Group (new!) • Twitterも2つあります:@ChainerOfficial / @ChainerJP (new!) • こんな議論を募集しています • Chainerの使い⽅に関する質問 • この機能をChainerで実現するにはどうすれば良い? • この関数の使い⽅がわからない • 不具合・インストール失敗の報告 • 機能要望 • Chainerを⽤いたプロジェクト・論⽂・実装の告知 • 質問だけではなく、回答も⼤歓迎 5
  6. 6. インストール失敗報告の投稿に関して • あると望ましい情報 • 環境設定(OS、GPU) • Chainer、依存モジュールのバージョン • 特にインストール関連のsetuptools, h5py, cython, pipなど • インストールログ • 基本的に最新バージョンChainerのみに対応しています • Windowsは公式にはサポートしていません 6
  7. 7. 2. Issueを登録する • Issueの分類 • Bug / Enhancement / Feature / Test / Document / Example / Other • FeatureはMajor, Minorリリースでmasterブランチに取り込まれます。 • それ以外は任意のリリースで取り込まれます。 • Issueに登録する前にforumに投稿・相談するのがおすすめです • 例外:タイポなど修正⽅法がほぼ⾃明な変更 7
  8. 8. Feature issueに関して • あると嬉しい情報 • 何をしたいか(最重要) • なぜしたいか(必要ならば) • どのように実現するか(アイデアがあるならば) • 参考となる資料(論⽂など) 8
  9. 9. Bug issueに関して • あると嬉しい情報 • Chainerと依存モジュールのバージョン • 基本的に最新Chainerのバージョンのみに対応しています • それ以前のバージョンでのバグの場合、アップデートをおすすめします。 • 状況を再現するコード • できるだけ短く、問題を局所化できる⽅がベター • エラーメッセージ 9
  10. 10. 3. Pull Requestを作成する • ワークフロー • 環境構築 • 実装(coding guidelineに従いながら) • ⼿元環境でのテスト → テストが通ったらPR作成 • レビュー → レビューが通ったらマージ • 実装が⼤きかったり、インターフェースの変更を伴う場合には、事前にforumに相談することを おすすめします • WIP PRs:実装が完了していなくても、work-in-progress (WIP) PRを作成し、相談しながら 実装を進めることも可能です。 10
  11. 11. 環境構築 • 推奨環境 • 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
  12. 12. 例: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
  13. 13. コードスタイルチェック & テスト • コードスタイル:PEP8 +(⼀部の)OpenStack Style Guideline • hackingで強化したflake8を利⽤ • すべての規約がflake8でチェックされるのではない点に注意 • テスト:Nose • nosetestを利⽤ • テストの有効・無効はnosetestsの--attrオプションで切り替え可能です 13
  14. 14. テストに関する注意 • テストの⼀部は(1つもしくは複数)GPUやcuDNNに依存しているので、環境によっては全ての テストを動かすことはできません • CPUのみのテストを動かす:nosetest --attr ‘!gpu‘ • CPUのみ + 1GPUのテストを動かす:nosetest -A ‘gpu<2‘ • cuDNN利⽤のテストをスキップ:nosetest --attr ‘!cudnn‘ • ⼿元で実⾏可能なテストが全て通ってから、PRを作成するのが理想的です • いくつかのテスト(gradient checkなど)は確率的に振る舞い、乱数によっては正しい動作 でも失敗します。テストが落ちた場合、何回か実⾏して確率的なものか本当のバグかを チェックする必要があります • Chainer内の全てのテストを実⾏するのには時間がかかります。ですので実装途中ではPR対 象に関連したテストのみを実⾏するのがおすすめです14
  15. 15. CI • レポジトリ:Travis CI (Linux) + AppVeyor (Windows) • テスト対象:PR + origin/master • テスト範囲:coding guideline, CPUテスト • AppVeyorは参考程度で、AppVeyorが通らなくてもマージすることもあります。 • PFN内部:Jenkins • テスト対象:masterブランチ • テスト範囲:全テストを様々な環境設定で定期的に⾛らせています。 • テストシナリオの詳細はchainer-testレポジトリで確認可能です。 15
  16. 16. CI 16
  17. 17. レビュー • 忘れがちな項⽬ • Sixモジュールを利⽤していない (xrange -> six.moves.range) • テストケースが⼗分でない • Functionクラスのbackwardをテストしていない • cupy.ndarrayのメソッドで、CuPyとNumPyの挙動が⼀致すること確認するテストをし てない • cupy.ndarrayのメソッドでdtypeに関するパラメトライズテストを⾏っていない • ドキュメントを書いていない • Reference manualに関数・メソッドを追記していない • コアチームの1⼈以上(重要な変更は2⼈以上)がLGTMを出したらマージ 17
  18. 18. リリース • 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
  19. 19. 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
  20. 20. FAQ • issueで登録するのと、フォーラムに投稿するのどちらが良いでしょうか? • 概して、質問・要望・告知などはforumでのディスカッションが適していると思われます。 Issueへの登録は(特に⼤きな変更を伴う場合)forumで議論し、登録する価値があると確信 を持ってからが望ましいです。 • 同様に、インストールに関する問題もforumにまずは投稿し、chainer側の問題なのか、環境 依存の問題なのかを切り分けるのが望ましいです。 • 開発参加したいのですが、どこからを始めるのが良いでしょうか? • ドキュメントには未整備の部分が多数残っています。ドキュメントの修正はとっかかりとし て始めやすいと思われます。 • また、ユニットテストの拡充もおすすめです。他コンポーネントと⽐較的独⽴しているけれ ど、実装するのに中のコードを読む必要があるので、コード理解も含めてファーストステッ プとして良いと思います。 20
  21. 21. FAQ • PRはどの部分に⾏うのが嬉しいですか? • ドキュメントのバグ・タイポ • Link / Chain / Functionの拡充 • CuPyのndarrayのメソッドの拡充 • ユニットテストの拡充 • Windowsのテスト環境 21
  22. 22. まとめ • 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
  23. 23. Copyright © 2014- Preferred Networks All Right Reserved.

×