Upload
kenta-oono
View
76.863
Download
0
Embed Size (px)
Citation preview
Chainer Contribution Guide
株式会社 Preferred Networks
⼤野健太 [email protected]
2015/12/19Chainer 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<2‘
• cuDNN利⽤のテストをスキップ:nosetest --attr ‘!cudnn‘
• ⼿元で実⾏可能なテストが全て通ってから、PRを作成するのが理想的です
• いくつかのテスト(gradient checkなど)は確率的に振る舞い、乱数によっては正しい動作でも失敗します。テストが落ちた場合、何回か実⾏して確率的なものか本当のバグかをチェックする必要があります
• Chainer内の全てのテストを実⾏するのには時間がかかります。ですので実装途中ではPR対象に関連したテストのみを実⾏するのがおすすめです14
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.