23
Chainer Contribution Guide 株式会社 Preferred Networks ⼤野健太 [email protected] 2015/12/19 Chainer Meetup #1 @スマートニュース

Chainer Contribution Guide

Embed Size (px)

Citation preview

Page 1: Chainer Contribution Guide

Chainer Contribution Guide

株式会社 Preferred Networks

⼤野健太 [email protected]

2015/12/19Chainer Meetup #1@スマートニュース

Page 2: Chainer Contribution Guide

⾃⼰紹介

• ⼤野健太(@delta2323_)

• 経歴:数理科学研究科・修⼠課程(共形幾何)

• → 2012.3 PFI → 2014.10 PFN

• 所属:研究班(理論解析・ライフサイエンス・Chainer開発メンバー)

• ブログ:http://delta2323.github.io

• 最近の活動

• NIPS2014勉強会・ICML2015勉強会主催

• ⽇経ビッグデータ短期連載・雑誌寄稿など

• NIPS2015読み会1⽉下旬に開催(予定)

2

Page 3: Chainer Contribution Guide

Chainer Community

3

Page 4: Chainer Contribution Guide

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

Page 5: Chainer Contribution Guide

1. Forumに投稿する

• 2つのGoogle Group:Chainer User Group / Chainer Japanese User Group (new!)

• Twitterも2つあります:@ChainerOfficial / @ChainerJP (new!)

• こんな議論を募集しています

• Chainerの使い⽅に関する質問

• この機能をChainerで実現するにはどうすれば良い?

• この関数の使い⽅がわからない

• 不具合・インストール失敗の報告

• 機能要望

• Chainerを⽤いたプロジェクト・論⽂・実装の告知

• 質問だけではなく、回答も⼤歓迎5

Page 6: Chainer Contribution Guide

インストール失敗報告の投稿に関して

• あると望ましい情報

• 環境設定(OS、GPU)

• Chainer、依存モジュールのバージョン

• 特にインストール関連のsetuptools, h5py, cython, pipなど

• インストールログ

• 基本的に最新バージョンChainerのみに対応しています

• Windowsは公式にはサポートしていません

6

Page 7: Chainer Contribution Guide

2. Issueを登録する

• Issueの分類

• Bug / Enhancement / Feature / Test / Document / Example / Other

• FeatureはMajor, Minorリリースでmasterブランチに取り込まれます。

• それ以外は任意のリリースで取り込まれます。

• Issueに登録する前にforumに投稿・相談するのがおすすめです

• 例外:タイポなど修正⽅法がほぼ⾃明な変更

7

Page 8: Chainer Contribution Guide

Feature issueに関して

• あると嬉しい情報

• 何をしたいか(最重要)

• なぜしたいか(必要ならば)

• どのように実現するか(アイデアがあるならば)

• 参考となる資料(論⽂など)

8

Page 9: Chainer Contribution Guide

Bug issueに関して

• あると嬉しい情報

• Chainerと依存モジュールのバージョン

• 基本的に最新Chainerのバージョンのみに対応しています

• それ以前のバージョンでのバグの場合、アップデートをおすすめします。

• 状況を再現するコード

• できるだけ短く、問題を局所化できる⽅がベター

• エラーメッセージ

9

Page 10: Chainer Contribution Guide

3. Pull Requestを作成する

• ワークフロー

• 環境構築

• 実装(coding guidelineに従いながら)

• ⼿元環境でのテスト → テストが通ったらPR作成

• レビュー → レビューが通ったらマージ

• 実装が⼤きかったり、インターフェースの変更を伴う場合には、事前にforumに相談することをおすすめします

• WIP PRs:実装が完了していなくても、work-in-progress (WIP) PRを作成し、相談しながら実装を進めることも可能です。

10

Page 11: Chainer Contribution Guide

環境構築

• 推奨環境

• 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

Page 12: Chainer Contribution Guide

例: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

Page 13: Chainer Contribution Guide

コードスタイルチェック & テスト

• コードスタイル:PEP8 +(⼀部の)OpenStack Style Guideline

• hackingで強化したflake8を利⽤

• すべての規約がflake8でチェックされるのではない点に注意

• テスト:Nose

• nosetestを利⽤

• テストの有効・無効はnosetestsの--attrオプションで切り替え可能です

13

Page 14: Chainer Contribution Guide

テストに関する注意

• テストの⼀部は(1つもしくは複数)GPUやcuDNNに依存しているので、環境によっては全てのテストを動かすことはできません

• CPUのみのテストを動かす:nosetest --attr ‘!gpu‘

• CPUのみ + 1GPUのテストを動かす:nosetest -A ‘gpu<2‘

• cuDNN利⽤のテストをスキップ:nosetest --attr ‘!cudnn‘

• ⼿元で実⾏可能なテストが全て通ってから、PRを作成するのが理想的です

• いくつかのテスト(gradient checkなど)は確率的に振る舞い、乱数によっては正しい動作でも失敗します。テストが落ちた場合、何回か実⾏して確率的なものか本当のバグかをチェックする必要があります

• Chainer内の全てのテストを実⾏するのには時間がかかります。ですので実装途中ではPR対象に関連したテストのみを実⾏するのがおすすめです14

Page 15: Chainer Contribution Guide

CI

• レポジトリ:Travis CI (Linux) + AppVeyor (Windows)

• テスト対象:PR + origin/master

• テスト範囲:coding guideline, CPUテスト

• AppVeyorは参考程度で、AppVeyorが通らなくてもマージすることもあります。

• PFN内部:Jenkins

• テスト対象:masterブランチ

• テスト範囲:全テストを様々な環境設定で定期的に⾛らせています。

• テストシナリオの詳細はchainer-testレポジトリで確認可能です。

15

Page 16: Chainer Contribution Guide

CI

16

Page 17: Chainer Contribution Guide

レビュー

• 忘れがちな項⽬

• Sixモジュールを利⽤していない (xrange -> six.moves.range)

• テストケースが⼗分でない

• Functionクラスのbackwardをテストしていない

• cupy.ndarrayのメソッドで、CuPyとNumPyの挙動が⼀致すること確認するテストをしてない

• cupy.ndarrayのメソッドでdtypeに関するパラメトライズテストを⾏っていない

• ドキュメントを書いていない

• Reference manualに関数・メソッドを追記していない

• コアチームの1⼈以上(重要な変更は2⼈以上)がLGTMを出したらマージ

17

Page 18: Chainer Contribution Guide

リリース

• 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

Page 19: Chainer Contribution Guide

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

Page 20: Chainer Contribution Guide

FAQ

• issueで登録するのと、フォーラムに投稿するのどちらが良いでしょうか?

• 概して、質問・要望・告知などはforumでのディスカッションが適していると思われます。Issueへの登録は(特に⼤きな変更を伴う場合)forumで議論し、登録する価値があると確信を持ってからが望ましいです。

• 同様に、インストールに関する問題もforumにまずは投稿し、chainer側の問題なのか、環境依存の問題なのかを切り分けるのが望ましいです。

• 開発参加したいのですが、どこからを始めるのが良いでしょうか?

• ドキュメントには未整備の部分が多数残っています。ドキュメントの修正はとっかかりとして始めやすいと思われます。

• また、ユニットテストの拡充もおすすめです。他コンポーネントと⽐較的独⽴しているけれど、実装するのに中のコードを読む必要があるので、コード理解も含めてファーストステップとして良いと思います。 20

Page 21: Chainer Contribution Guide

FAQ

• PRはどの部分に⾏うのが嬉しいですか?

• ドキュメントのバグ・タイポ

• Link / Chain / Functionの拡充

• CuPyのndarrayのメソッドの拡充

• ユニットテストの拡充

• Windowsのテスト環境

21

Page 22: Chainer Contribution Guide

まとめ

• 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

Page 23: Chainer Contribution Guide

Copyright © 2014-

Preferred Networks All Right Reserved.