KDD 2019 で発表しました

木下 僚

2019-09-09 17:32:48

8月上旬、KDD 2019 という年次国際学術会議が開催されました。KDD とは「知識発見とデータマイニング」(Knowledge Discovery and Data Mining) の略であり、いわゆる「データサイエンス」分野におけるトップ会議に位置づけられる学会です。

エンジニアの木下です。我々のチームでは、さまざまな産業分野の困難な課題解決のために機械学習技術を応用・実践するための研究開発や、そのような研究開発プロセスを効率化するための技術開発に取り組んでいます。この過程で我々 PFN も、現実のデータと大規模計算機資源 MN-2 を活用した「データサイエンス」に日々取り組んでいます。

このたび PFN は、KDD 2019 にリサーチャー・エンジニア総勢5名で参加し、3件の発表を行いました。本記事では KDD 参加レポートとして、PFN からの発表を含め、会議の様子をお伝えします。

KDD 2019 closing session スライド:筆者撮影

KDD 2019 closing session スライド:筆者撮影

KDD 2019 会議概要

KDD 2019 は8月4日から8日の5日間にかけ、米国アラスカ州アンカレッジにて開催されました。昨年と同様に、初日は「Tutorial Day」2日目は「Workshop Day」3〜5日目が本会議という日程が組まれました。会場はアンカレッジ市街地にある Dena’ina Center(基調講演・企業展・チュートリアル会場)と Egan Center(セッション会場)の2箇所に設けられ、世界各国から 3000 人を超える参加者が集いました。各日とも朝8時から発表が始まり、初日と最終日は夕方5時ごろまで、それ以外の3日間は夜 10 時ごろまで、みっちりと会議や交流が行われました。

会議の予稿やデモ動画はすべて KDD ウェブサイト上で公開されており、誰でも読むことができます。パンフレットも公開されており、本会議に採択された論文数は 321 件、採択率は 17.8% であったと公表されています。本会議は研究の要素が強い Research Track と、現実世界への応用・実践事例紹介の色彩が強い Applied Data Science Track の大きく2部からなり、特に後者は投稿数が昨年比約 40% 増だったそうです。

PFN の発表

今回の KDD では PFN からつぎの3件の発表を行いました。発表はいずれも日程3日目(8月6日)に行われました。

Applied Data Science Track では、タイトルの通りそれぞれ ChainerOptuna の論文発表を行いました。ポスター発表には多くの方にお越しいただき、両フレームワークに対する関心の高さを感じました。

齋藤による Chainer 発表:筆者撮影

齋藤による Chainer 発表:筆者撮影

佐野による Optuna 発表:秋葉撮影

佐野による Optuna 発表:秋葉撮影

齋藤による Chainer 発表:筆者撮影

齋藤による Chainer 発表:筆者撮影

佐野・秋葉による Optuna 発表:筆者撮影

佐野・秋葉による Optuna 発表:筆者撮影

もう1件の発表は KDD Cup での入賞発表です。KDD Cup はデータサイエンス技術を競う世界トップクラスの大会であり、毎年の KDD 本会議に合わせて開催されています。KDD Cup としては今回初めて設定された AutoML(自動機械学習)トラックにおいて、PFN から参加したチームが第5位に入賞しました。KDD Cup Workshop では、この大会で今回 PFN チームが用いた手法についての口頭発表とポスター発表を行いました。なお、この発表については、入賞者本人によるブログ記事公開を後日予定しております。

賞状を持つ吉川:秋葉撮影

賞状を持つ吉川:秋葉撮影

吉川による受賞発表:筆者撮影

吉川による受賞発表:筆者撮影

会場の雰囲気

ここからは KDD 2019 会場の様子をお伝えします。

舞台裏

冒頭でも述べたとおり、今回の KDD には世界各国から主催者発表で 3000 人を超える参加者が集まりました。アンカレッジの人口が約 30 万人だそうですので、その 1% に相当する人が殺到したことになります。学会が提供した宿泊施設ではオーバーブッキングが相次ぎ、予約したホテルに宿泊できない参加者が続発してしまいました。PFN でも2人がこのトラブルに巻き込まれてしまいました。救済策としてアラスカ大学アンカレッジ校の大学寮が当日提供されましたが、そちらでも大きな混乱があったようです。

深刻な宿不足問題はありましたが、KDD の会議は予定通り進行しました。セッション会場の Egan Center は参加者数に対してあまりにも部屋が狭く、椅子に座りきれず立ち見が続出したり、部屋から人が溢れたりする光景が目につきました。たとえばこちらは AutoML Workshop が行われた会議室ですが、参加者が廊下まで溢れてしまっていました。このワークショップに参加した PFN メンバーによれば、室内もやや酸欠状態だったとのことです。今回の KDD は何かと苦労の多い会議になってしまいました。

AutoML Workshop の外側:筆者撮影

AutoML Workshop の外側:筆者撮影

ワークショップ

KDD 2019 では 34 のワークショップが開催されました。少しピックアップして紹介します。ワークショップの発表内容も、多くはそれぞれのウェブサイトで公開されています。

上述の AutoML Workshop は機械学習の自動化に関するワークショップです。機械学習の研究開発は多くの試行錯誤を伴いますが、この作業を自動化・効率化する動きが近年活発になっています。PFN でもハイパーパラメータ最適化フレームワーク Optuna の開発などを進めています。こちらのワークショップには多くの参加者が集まっており、関心の高さが伺えました。

IADSS Workshop は「データサイエンス」という仕事そのものについてのワークショップです。「データサイエンティスト」の仕事は増えていますが、その内容やスキルセットは会社・個人によって千差万別です。これがどのような仕事であり、どのような能力を必要とし、どのように評価されるかについては、まだはっきりとした共通理解がありません。このことは「データサイエンス」(あるいは「AI」)プロジェクトの失敗を増やし、「データサイエンティスト」の教育・採用・人事評価を難しくする要因になっています。会議では必要なスキルセットやプロジェクトの進め方についての提案や調査などの発表・議論が行われました。このワークショップは人事・教育担当者向けの色彩が強いものですが、エンジニアの観点からも、どのようなスキルセットを自分が身につけていくべきかを考える参考になるものだと思いました。ワークショップでの発表資料がいくつか公開されていますので、ご興味のある方はご覧ください。

本会議

基調講演2件のほか、300 件を超える口頭発表・ポスター発表が会議を通じて行われました。KDD は技術の実応用を重視する学会ということもあり、現実の「データサイエンス」に関わる問題意識に根ざした発表が今回も多く行われました。予稿はすべて公開されています

米デューク大学の Cynthia Rudin 教授による基調講演のトピックは主にモデル選択でした。現実世界を説明する機械学習のモデルは、識別や予測の精度の高さだけではなく、モデルの簡潔さ・わかりやすさもその良し悪しを評価する重要な要素です。講演の前半では新しい指標を用いてモデル選択を行う研究が紹介されました。スクリーンに「Rashomon」と映し出されたとき、初めは海外の研究者の名前か何かかと思ってしまいました。この研究では「Rashomon effect」すなわち羅生門効果の考え方を用いています。羅生門効果は映画『羅生門』にちなんだ専門用語であり、同じ現象について異なる説明が多くなされることを表しています。機械学習の文脈において、同じタスクに対して自分と同程度以上の精度を達成できるモデルがどれだけ存在するかを見積もるような値である「Rashomon ratio」なる指標を定義します。モデルの複雑さ・説明力によって経験損失と Rashomon ratio が変化し、その関係に基づいてモデル選択を行うという研究が紹介されました。

異なる分野で考えられてきたアイディアや技術を新しい問題に持ち込んで解決するということは、現実の問題解決の現場ではよく行われています。要素技術そのものはすでに知られたものであっても、その適用・応用に新しさや面白さ・インパクトがあると、KDD での議論の対象になります。今回の本会議セッションでは、Web 広告の入札に PID 制御を応用する協調フィルタリングを AutoML のモデル選択に応用する逆強化学習を異常検知に応用するなどの事例が発表されていました。Web マーケティング系のアプリケーションに関する別の発表では、発表者・参加者に制御理論に関する知識が不足したために質疑が成立しない場面もありました。まさに Learn or Die といったところで、他分野・異分野への広い興味や知識が現実の「データサイエンス」を支えています。

個人的に好きだった発表は配車サービスのマッチングをフェアにする研究です。配車サービスは「乗客」と「運転手」の2つの集団間でのマッチングを解き続けるものです。一般的には二部グラフマッチングの問題といえますが、保育園や婚活などのマッチングとは異なり、比較的短い時間に同じものが繰り返しマッチする点で配車サービスはやや特殊なケースとなっています。乗客の利便性を重視して待ち時間の短い運転手と常にマッチさせると、うまく稼げる運転手と稼げない運転手が出てくるという運転手間格差の問題が生じます。一方、収入の低い運転手から優先的にマッチするような「平等性」を導入すると、乗客にとっては待ち時間の増大につながります。部分最適ではなく全体最適を目指し、この研究では乗客と運転手それぞれの観点での不平等さ・効用を含めた形で最適化問題を設計することで、乗客の待ち時間の悪化を抑えながらも収入の不平等を緩和するマッチング手法を提案しました。真に実現すべき「全体最適」とは何か、リアルタイムに動作させるにはどうするか、などの課題は残っていますが、複雑な課題をシンプルな発想で解こうとする、良い発表だと思いました。

企業展

Dena’ina Center の1階が昼食会場を兼ねた展示会場となっており、多くの企業がブースを出していました。しかし今回の KDD の企業展示は、個人的な感想ですが、昨年に比べると規模が小さくなったように感じました。出展数は変わらないかもしれませんが、一つ一つのブースが小さめに感じました。また今回の KDD は Google がスポンサーに入っておらず、Google ブースがなかったことも意外に感じました。

コーヒー休憩の際にも展示場やロビーで軽食が提供されました。アラスカ名物スモークサーモンも出ていました。塩気が強めでしたがおいしかったです。

ケータリング:筆者撮影

ケータリング:筆者撮影

アンカレッジの雰囲気

今回の KDD で初めてアラスカに行きました。行く前はどんなところかと不安でしたが、いざ行ってみると、夏のアンカレッジは非常によい都市でした!

北緯60度に位置するアンカレッジでの夏は日がたいへん長く、開催当時の日没時刻は午後 10 時半ごろでした。KDD 2019 は毎日夜まで行われましたが、午後8時ごろのポスターセッションは「西日が差す」中で行われました。ポスターセッションを終えて外に出ても、この写真のような青空で、まだまだ夕方前といった感覚でした。夏は遅い時間でも明るく、歩きやすい街だと感じました。会議中はほとんど晴れて、朝晩はやや涼しく、日中も T シャツ1枚で過ごして暑くない程度の心地よい空気でした。

午後8時すぎ Dena’ina Center 前にて:筆者撮影

午後8時すぎ Dena’ina Center 前にて:筆者撮影

アンカレッジへの出張旅行には、日本から遠い(アメリカ本土を経由するため片道 20 時間以上かかる)とか物価(特に宿泊費)が高いとか、宿の確保でトラブルがあったなどといった難点もありましたが、個人的にはこれまで行った海外の都市の中でいちばん居心地の良いところでした。

おわりに

機械学習技術を現実に役立てるために「データサイエンス」は様々な場面で活躍しており、その事例や最新技術が KDD で多く報告されています。会議での発表内容は多くが学会の Web サイト上で公開されていますので、技術的な内容はそちらである程度追いかけることができます。本記事では、そこにはない現地の空気感や個人的な印象を中心に KDD 2019 をレポートしました。世界的な技術動向をにらみながら、我々 PFN も、機械学習技術を応用・実践して現実の問題を解決するための研究開発に引き続き取り組んでまいります。

化学反応におけるDeep learningの適用

Kosuke Nakago

2019-09-06 10:57:59

近年様々な分野に対してDeep learningの応用が研究されてきています。

化学の分野でも物性値の予測モデルや、化合物の生成モデルの研究などが盛んになってきています。最近では、有機化合物の合成を行う際に必要な化学反応の予測をDeep learningで行うという試みが行われてきているのでその先行研究サーベイをしました。

サーベイ資料はこちらのSlideshareにアップロードしています。

合成経路探索 -論文まとめ- (PFN中郷孝祐) from Preferred Networks

 

問題設定:反応予測および逆合成経路探索

化学反応で、反応物 (reactant) AとBを触媒 (reagent) Cの下で反応させたときに 生成物 (product) D ができたようなプロセスは Reaction SMILES を用いると “A.B.C>>D” というように表すことができます。

 

 

ここで、 AとBとC から何ができるか? (答えはD)を予測する問題を順方向の反応予測問題と呼び、Dを作るためには何を用いればよいか? (答えはA, B, C)を予測する問題を逆方向と呼ぶことにします。

一般的に、A, B, Cを与えた時に順方向でどういった反応が起こるかは限定されていますが、ある生成物 Dを作る方法は複数可能性がある場合があり、逆方向の解析の方が難しい問題です。

例えば創薬など、目的の性質を持つある有機化合物が先に決まっていて、それを工業的に合成するためにどういった反応物を用いればいいか知りたい場合は、逆合成解析 (retrosynthetic analysis)・逆合成経路探索が必要となります。

機械学習で予測モデルを作る際、順方向の予測問題は実際にデータセットにある反応で生成物が当てられたかどうかの精度で評価することができますが、逆方向の予測問題はデータセットにはないが現実で起こりうる反応物の組み合わせに分解することもできるため評価も難しいです。今回読んだ論文では、既に知られている化合物の合成プロセスを見つけることができたかどうか?で、逆合成経路の性能評価を行っていました。

 

研究動向

従来は、機械学習を用いるのではなく、反応パターンを事前に人が定義しておいて、そのパターンに当てはまるかどうかをルールベースで計算することで反応の予測計算をしていました。しかし、この方法では以下の問題があります

・反応パターンとして事前定義したパターンの適用しかできず、複数パターンにマッチした場合の優先度決めが難しい(精度面)

・パターンのマッチにはグラフのサブグラフマッチングが必要で計算が重い(速度面)

 

そこでデータドリブンで反応を扱う取り組み、特に深層学習を用いるアプローチが考えられ始めました。

2016年頃は合成ルール等をある程度制限し、限定された合成ルールに対して機械学習を適用するといったアプローチが主でした。(上図、一番左側)

これまではそもそも研究用途に使えるデータが整備されておらず、一部の研究機関のみがClosedで研究しているような状況でしたが、最近 アメリカのパテントから化学反応を集めて整備した、USPTOデータセットが公開され、順方向の反応予測に適用されました。

データセットが公開された2017年頃から一気に、Deep learningの適用により順方向の予測精度をあげる研究が盛んになってきました。(上図、真ん中・右側)

現在、2通りのアプローチが競争している状況です。

1.分子をグラフとみなして Graph Convolutionモデルを用いるアプローチ

2.分子をSMILES記法の文字列で表現してNLPの分野で発展した自然言語処理モデル(seq2seq、Transformer)を用いるアプローチ

(それぞれ手法の詳細は割愛します、SlideShare でご覧ください。)

 

どちらのアプローチも高精度で反応を予測できるようになってきており、すでに化学研究者よりもきちんと反応を予測できるという報告もあります (下図は Jin et al. より)

 

現時点では MolecularTransformer という自然言語処理側のモデルがSoTAを達成しているようです。IBM RXNとしてWebサービスでも公開されています。

上記のように順方向の反応予測は精度が向上してきており、今後の課題・発展として逆方向経路探索への適用や合成可能性を考慮した生成モデルの研究などがあげられます。

 

さいごに

今回紹介したような領域では、反応・合成の知識(化学側)と研究スピードの速いDeep learningの最先端の知識(コンピュータ側)双方を深く理解する必要があり、画像などの領域と比べるとまだ参入者がそれほど多くない印象です。

しかし、徐々に論文や公開実装も出てきており、このような領域でもDeep learningの技術優位性がでるかどうかの研究はこれからどんどん盛んになっていくのではないかと感じています。

再計算でニューラルネット学習時のメモリ消費を減らす

楠本充
エンジニア

2019-09-04 11:40:25

エンジニアの楠本です。深層学習で再計算と呼ばれる手法を使って学習時のメモリ消費を削減する研究や実装に取り組んでいるのでその紹介をしたいと思います。

背景

大規模なニューラルネットの学習ではしばしば誤差逆伝播(以下同様)で GPU のメモリ不足に陥ることがあります。

通常、誤差逆伝播ではパラメータについての勾配を求める際に必要な順伝播の計算結果を (途中の計算結果も含めて) すべて覚えた状態で勾配計算を行います。

一方で、例えばコンピュータビジョンの重要なタスクであるセグメンテーションや物体検出では入力画像として高解像度のものがしばしば扱われます。モデルについても高精度を達成するために複雑なネットワーク設計、すなわち層が深くまた中間表現のチャンネル数の多いネットワークが使われることが少なくありません。

このように入力やモデルが巨大である場合には記憶しておくべき途中の計算結果全体が巨大になり、学習中のメモリ不足に繋がります。

GPU のメモリサイズはハードウェアの進歩で大きくなってはいるものの、大規模な学習には足りないことがあります。現状で商用販売されているGPUのメモリは最もハイエンドな Tesla V100でも最大 32 GB であり、大規模な学習ではメモリ不足を回避するためにバッチサイズをかなり小さい値にしなければいけないことがあります。バッチサイズを小さくすることは Batch Normalization で使われる統計情報推定を不正確にし、モデルの精度低下につながることが検出等のタスクで知られています[1]。

メモリ不足は深層学習の根幹的な問題であるため様々な解決方法が試されています。例えば半精度浮動小数点数 (FP16) やネットワークのサイズ削減などはその一例でしょう。しかしこれらは本来学習したいモデルに直接変更を加えることになるため、予測精度を悪化させることに繋がりえます。これから紹介する再計算と呼ばれる手法を使うとモデルの予測精度を変えることなくメモリを削減することができます。この場合、精度ではなく、学習時の計算時間が増えることを引き換えにします。

逆誤差伝播法の復習

ここで少し順番が前後しますが、ニューラルネットの学習方法である誤差逆伝播法について今一度復習します。

ニューラルネットワークは変数と計算の順序関係を示す計算グラフによって表現できます。この計算グラフをどう表現するかはいくつか流儀がありますが、ここでは計算グラフは変数を頂点とするグラフとします。これには入力変数、中間変数、出力変数を含みます。変数から変数の間には直接的な依存関係がある場合に枝が生えているものとします。

誤差逆伝播法は入力変数(モデルパラメータを含む)に対してその勾配を求めるための方法です。誤差逆伝播法の計算は多変数関数のチェインルールに基づいて計算されます。一般に勾配計算ではネットワークの出力を y として、それぞれの変数 z に対して勾配 ∂y/∂z を求めるのが目的です。これは∂y/∂y=1 から出発して再帰的に勾配を求めることができます。いま、z=f(x) のような関係があるときに ∂y/∂z を表すテンソルがわかっているとすると ∂y/∂x = ∂y/∂z ・ ∂z/∂x = ∂y/∂z ・ F(x) (ここで、F(x) := ∂f(x)/∂x とした) となるため、f に対してその勾配関数 F を事前に計算できる状態にしておけば勾配を計算できます。計算グラフの観点からすると、元の計算グラフ (順伝播部分と呼ぶことにします) から勾配の計算部分(逆伝播部分)を足していることになります。例えば3層のニューラルネットの順伝播部と逆伝播部は以下のような図になります (簡単のため、∂y/∂z を gz のように記しています) 。

再計算

計算グラフは勾配計算のための実行手順を与えてくれますが、これをそのまま実行すると順伝播部分での計算結果は逆伝播時に基本的にすべて必要となるため、単純に中間結果もすべて記憶しておくと、大規模学習ではメモリが足りなくなることがあります。しかしよく考えると順伝播ですべてを記憶せずに一部の中間結果を破棄したとしても、残りの中間結果からもう一度順方向に計算して必要な中間結果を復元さえできれば、逆伝播時に勾配計算を行うことができます。これにより計算のオーバーヘッドが発生する代わりにピーク時のメモリ消費を下げることできます。

このような手法を再計算あるいはチェックポインティング (checkpointing) と呼びます。再計算自体はニューラルネット固有の手法ではなく、自動微分のコミュニティで研究されていました[2][3]。再計算はメモリ消費を抑える代わりに追加の計算時間を発生させます。どの変数をどのタイミングで捨てるかという戦略によってメモリ消費とオーバーヘッドは変わります。近年になってディープラーニングの問題設定に特化した再計算手法が提案されるようになりました[4][5]。

ここではその一つである Chen らの手法 [4] を紹介します。簡単のため、計算グラフが n 層の直線的なネットワークになっている場合を考えます。実際の計算ではモデルパラメータが付いているかもしれませんが一旦無視します。いま、グラフを √n 個ごとに切って √n 個のブロックに分けたとします。順伝播ではそれぞれのブロックを計算した後にブロック間の境界となる部分の変数以外をメモリから捨てることにします。逆伝播では捨てた部分が必要になってしまいますが、残しておいた部分を起点として順伝播のブロックを一時的に復元することでそれぞれのブロック内で逆伝播を実行できます。これにより順伝播部分で再計算のオーバーヘッドが順伝播1回分だけ掛かる代わりに、メモリ消費を O(n) から O(√n) 程度に減らすことができます。ResNet のようにスキップ接続がある場合でも、関節点等でグラフを切れば似たようなことができます。

グラフ的形式化による再計算 (我々の提案手法)

ここからは我々が少し前に arXiv に投稿した論文である “A Graph Theoretic Framework of Recomputation Algorithms for Memory-Efficient Backpropagation” の紹介をします。こちらは2018年夏PFNインターンの井上卓哉さんとの研究成果でもあります。

深層学習で知られている再計算手法は適応可能範囲が計算グラフが限定的で、やや砕けた表現をすると「グラフが直線っぽい場合」に特化していました。しかし近年着目されているネットワークには U-Net のように大きなスキップ接続が存在したりして多様な構造を持っています。また、メモリと計算時間について良いトレードオフを取るという点も大事です。つまりメモリ不足がそこまで深刻でない状況ではできるだけオーバーヘッドを少なくするような再計算スケジュールを求めたいはずです。

そこで我々の論文では、任意の構造の (静的な) 計算グラフ *1 と利用可能なメモリ容量が与えられたときに、メモリ容量を超えない範囲でできるだけオーバーヘッドを小さくするスケジュールを求める離散的な最適化問題を考えます。

任意のグラフに対する再計算も、Chen らの手法の核である「グラフをブロックごとに切ってそれぞれのブロックごとに順伝播、再計算、逆伝播を行う」という考えを拡張できます。すなわち、元の計算グラフの頂点集合 V を V1, V2, …, Vk というブロックに分割し、V1→V2→…→Vk と順伝播計算するものだとします。するとこのような分割方法に対してそれに付随する再計算方法も自然に定まります。砕けた言い方をすると、順伝播で各ブロックを計算し終えた後には境界となるところをだけを覚えて、そうでないところは捨て去るようにします。逆伝播では忘れたところを復元します。よって分割方法を決めればそれに付随する自然な再計算方法の消費メモリとオーバーヘッドが定まります。

分割方法は残念ながら指数的に多く存在するので全探索などはできそうにないですが、もし分割列の途中状態の集合 (V1∪…∪Vi) としてありうるパターン数が少ないのだとすると動的計画法によって最適化問題の解を用いて求めることができます。パターン数が多いときでも、近似的に解くことで現実的に性能の良い解を求める方法も提案しています。

実験では PSPNet, ResNet, DenseNet, U-Net などのネットワークに対して提案手法を用いると計算時間が1.3~1.4倍程度になる代わりに40%-80%のメモリ削減を実現できることや、メモリに余裕がある場合には既存手法よりも計算時間のオーバーヘッドを小さくできることを確認しています。

*1 RNN のようなループを含む計算グラフであっても、ループ回数がイテレーションごとに固定であればループを展開して静的なグラフとみなせます。

Chainer-compiler 上での実装

まだ実験的な段階ではありますが、再計算手法を Chainer の学習で使えるようにする取り組みをしています。再計算では事前に計算グラフの構造が分かっている必要があるため、Chainer 本体ではなく計算グラフのコンパイラである Chainer-compiler 上でその実装を進めています。学習させるときの流れは以下のようになります。

  1. まず Python で記された Chainer のモデルを静的な計算グラフとして ONNX 形式にダンプします。これは ONNX-chainer を使えばできます。
  2. ONNX 形式の計算グラフを Chainer-compiler に渡すと学習のための逆伝播部分を足して勾配計算を実行可能な形式にします(Python からは `chainer.Chain` でラップされた状態で見られます)。オプション次第で再計算を含めたスケジュール生成を自動で行います。

Chainer-compiler には Python ラッパーがあり、元の Python コードに少し変更を加えるだけで使えるような形になっています。もし試してみたい方がいらっしゃったらドキュメントの Train your model with chainer-compiler を参考に実行してみてください。

まとめ

深層学習における再計算という手法の紹介と PFN での取り組みについて紹介しました。メモリ不足が深層学習研究開発のボトルネックにならない世の中が来ると素敵なのかもしれません。

ちなみに手動スケジューリングでいいのであれば、Chainer なら functions.forget を使うと比較的カジュアルに再計算ができます。

文献

[1] Chao Peng, Tete Xiao, Zeming Li, Yuning Jiang, Xiangyu Zhang, Kai Jia, Gang Yu, and Jian Sun. MegDet: A large mini-batch object detector. In IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pages 6181–6189, 2018.

[2] Andreas Griewank and Andrea Walther. Evaluating derivatives: principles and techniques of algorithmic differentiation. Vol. 105. Siam, 2008.

[3] Benjamin Dauvergne and Laurent Hascoët. The data-flow equations of checkpointing in reverse automatic differentiation. International Conference on Computational Science. Springer, Berlin, Heidelberg, 2006.

[4] Tianqi Chen, Bing Xu, Chiyuan Zhang, and Carlos Guestrin. Training deep nets with sublinear memory cost. arXiv preprint, arXiv:1604.06174, 2016.

[5] Audrunas Gruslys, Rémi Munos, Ivo Danihelka, Marc Lanctot, and Alex Graves. Memory-efficient backpropagation through time. In Advances in Neural Information Processing Systems (NIPS), pages 4125–4133, 2016.

ACL 2019 参加レポート

Motoki Sato

2019-08-30 18:03:22

PFNでは自然言語処理(NLP)による研究開発にも取り組んでいます。

自然言語は人にとって最も身近なインターフェースのうちの一つです。

弊社ではこれまでにもロボットへの言語指示(ICRA 2018, CEATEC 2018)などの研究開発の成果を発表してきました。
先日7/28-8/2にイタリアのフィレンツェにて、自然言語処理のトップ国際会議ACL 2019が開催され、弊社からも佐藤元紀と小林颯介が参加しました。今回はその様子を論文紹介とともにお伝えしたいと思います。本記事は2名で協力し執筆しています。

 


(写真:会場となったバッソ要塞)

また、佐藤元紀が東北大学の鈴木潤氏・清野舜氏と執筆した論文 “Effective Adversarial Regularization for Neural Machine Translation” を口頭発表しました。この論文についても紹介します。

※佐藤が学生時代に行っていた研究です。

 

なお、ACL 2019では口頭発表された論文については基本的にビデオが公開されています。以下のリンクからアクセスできます。

 

ACL 2019 概要

まずACL 2019の概要について紹介します。

2019年の投稿数は2905件で去年の投稿数1544件よりも大幅に投稿数が増えていました。前年までも増加傾向にありましたが、今年は一気に跳ね上がりました。相並ぶNLPのトップ会議であるNAACL(6月)と来るEMNLP(11月)でも今年は投稿数の倍増が見られました。

(写真:ACL 2019 Openingより)

 

分野別の投稿数については次の分野が順に人気でした。

  1. Information Extraction and Text Mining (9%)
  2. Machine Translation (8%)
  3. Machine Learning (7%)
  4. Dialogue and Interactive Systems (7%)
  5. Generation (6%)

際立って人気な分野はありませんが、Machine Translation(機械翻訳)やDialogue and Interactive Systems(対話システム)が昨年に比べて微増しており、また、Generation(生成)については昨年はシェアが4%ほどだったものが6%になりました。投稿数の増加も相まってトータルでは3倍近くの論文が投稿されるようになったホットな分野だと言えるでしょう。

 

(写真:ACL 2019 Openingより)

投稿や採択の本数は増えましたが、採択率はLong paperで25.7%、Short paperで18.2%と概ね例年どおりでした。

 

以下では、参加した佐藤、小林が気になった論文や特徴的な論文の紹介をしていきます。

 

離散的構造

NLPでは、品詞タグ付け、構文木解析、単語アライメントなど系列や離散的な構造を扱うタスクが多いです。構造内で依存性のある入力や予測をいかに考慮するか、膨大な出力空間の中で教師データをいかに活用するか、などの興味深い課題が存在します。この分野で発展してきた手法は、時系列予測やデモンストレーションからの制御学習など、共通の性質を持つような他の分野でのタスクに応用できるかもしれません。

ACL 2019では、離散的構造を持った潜在モデルについてのチュートリアル “Latent Structure Models for Natural Language Processing” が行われ、注目度の高いトピックとなっていました。

 

以下のスライドでは、End-to-Endのニューラルネットワークの中間表現として離散的な構造をどう扱うかについて説明されています。End-to-Endの枠組みで離散的な構造を扱うには、基本的には演算を一貫して微分可能にすることが必要です。そのためにこれまで提案されてきた手法について、REINFORCEからSparseMAPまで幅広くよくまとまって紹介されていました。

 

(ACL 2019 チュートリアルの図)

 

ここでは、カテゴリカル分布を含む計算グラフを微分可能にするテクニックを紹介します。

まず、カテゴリカル分布からサンプリングを行う実装方法の1つとして、Gumbel-Max Trickという方法が知られています。softmax層に入力する前のスコアベクトルを s とすると、Gumbel分布G(0, 1)からサンプリングされるノイズベクトル ε を用いてargmax(s + ε)を求めることは、カテゴリカル分布softmax(s)から1つの要素をサンプリングすることと等価になります。

(なお、ε ~ G(0, 1) は ε = -log(-log(u)), u ~ Uniform(0, 1) でも計算できます。)


また、このargmaxをとる前の s + ε について温度パラメータ τ を導入したsoftmaxとして softmax((s + ε) / τ) を考えると、τ → 0 の場合には、argmaxによるone-hot ベクトルとこの値が等しくなることが分かります。このノイズ付きのsoftmaxの出力をそのまま、サンプリングによるone-hotベクトルの代わりとして用いる(continuous relaxation)ことで、テスト時の実際のサンプリングでの計算とは少し異なるものの、訓練用の微分可能な計算グラフを実現できます。サンプリング結果に対して単に埋め込みベクトルの辞書引き(one-hotベクトルに対する行列計算)を行う場合などには、このようなrelaxationが可能になります。


より発展して、実際にサンプリングをした上で擬似的にbackpropagationを可能にするStraight-Through Gumbel Estimatorという方法もあります。forward計算の際には、上記のノイズ付きsoftmaxからサンプリングしたone-hotベクトルを用います。一方、backward計算の際には、one-hotベクトルをサンプリング前のsoftmax出力へとすり替えて伝播を行います。

不思議なトリックではありますがこれでモデルは問題なく学習できることも多く、このStraight-Through Estimatorのアイデア自体はニューラルネットワークの量子化などでも活躍しています。

次に、ACL 2019のBest Long Paperについて紹介します。

 

RNNなどのニューラルネットによる文生成モデルの訓練について改善を提案した論文です。

よく使われる文生成のモデルは自己回帰モデルになっており、ある位置で単語を予測・生成した後にはその単語を入力として次の単語を予測し、その流れを繰り返して文生成の推論を行います。一方で訓練の場合には、次の単語を予測する際に入力される単語は、「前位置で予測した単語」ではなく、教師データの正解文から取り出された「前位置の正解の単語」です。この訓練の方式は広く使われており、teacher forcingとも呼ばれています。

 

このように、訓練時には常に1つ前の位置までの正解の単語列(の一例)を常に見ることができる一方で、テスト時の推論では再帰的に自身の予測結果に基づく文生成を行う必要があります。このようにテスト時の設定と異なるようなデータ分布でしか訓練ができていないexposure biasと呼ばれる問題があり、テスト時の性能低下につながるとこれまでも指摘されてきました。

 

この論文では、常にteacher forcingの「正解単語での文脈」で訓練をするのではなく「予測単語での文脈」による訓練を確率的に織り交ぜる方法について提案しています。その際、入力する文脈として使う(予測)単語は、単に予測分布からargmaxで選ぶよりはサンプリングを行ったほうがよく、また、先に文全体をビームサーチやサンプリングなどで生成した上で単語を選ぶのも効果的だと示しています。また、学習初期には正解単語を多く使い、終盤ではより多く予測単語に触れさせるようなスケジューリングも行っています。これまでにもBengio et al. (2015)Ranzato et al. (2015)から研究されてきたテーマでしたが、文レベルの拡張などを含めた統合的な実験で良好な結果を示せた点、その他の文生成タスクへの応用可能性への期待から今回の選定につながったようです。

Adversarial Training

次に、今回ACLに採択された佐藤の論文を紹介させてください。

スライドは以下のリンクで公開しています。

ニューラルネットワークの訓練時に、入力データを少し変化させた状態で訓練を行うと汎化性能が向上することがあります。その一例として、モデルの出力の正解に対するロスを大きくしてしまうような敵対的なノイズ(Adversarial perturbation)を入力に足し合わせて訓練を行うAdversarial Training (Goodfellow et al., 2015)という方法があります。また、さらに発展したVirtual Adversarial Training (Miyato et al., 2015)という手法もあります。こちらは正解の教師データは必要なく、出力の分布を最も大きく動かすような敵対的なノイズを用いて訓練を行います。教師データのない入力データを用いて訓練ができるため、半教師あり学習の手法として有用です。

(なお、Adversarial Trainingという用語は敵対的なモデルや勾配を用いる学習方法全般について使われますが、本記事では上の訓練方法を指す狭義の意味で使います。)

 

これらはまず画像認識のタスクで有効性が確かめられ、その後[Miyato et al. (2017)]がテキスト分類タスクにおいてLSTMベースのモデルに適用し、当時の該当データセットにおける世界最高性能を達成しました。画像のタスクでは、画像の入力そのものにノイズを足し合わせていましたが、言語のタスクでは生の入力が単語(さらに意えば文字)の記号のため難しく、代わりに単語ベクトルへと埋め込んだ後にAdversarial perturbationを足し合わせて適用しています。

 

こうしてテキスト分類のタスクではAdversarial Trainingが有効であることは知られていたのですが、機械翻訳を始めとした文生成のタスクでは適用例がありませんでした。ここに取り組んだのが本研究になります。

シンプルには「機械翻訳でAdversarial trainingは効果的なのか」という問いですが、機械翻訳のタスク及びモデルでの適用に関してはいくつか設定が考えられるため、それらを実験的に確かめることで実用性を高めました。

 

特に以下の3つの側面に対して実験を行っています。

  1. LSTMとTransformer両方のモデルで効果があるのか?
  2. 敵対的なノイズの計算にはAdversarial TrainingとVirtual Adversarial Trainingのどちらを使うべきか?
  3. Encoder側(原言語文)とDecoder側(目的言語文)でともに単語ベクトルの入力部分があるが、どこにノイズを加えるべきか?

結果として、Transformer + Virtual Adversarial Training の組み合わせが良く、ノイズを加える場所は、EncoderとDecoder両方に入れるのが効果的でした。

Adv (Adversarial Training) と VAT (Virtual Adversarial Training) の比較ではAdvの方が効果的でしたが、これは [Miyato et al. (2017)] でのテキスト分類の結果 (論文中 Tables 6)と一致しました。Advの欠点として、ラベル情報からの簡単な変換でノイズを生成しているため、モデルがAdvesarial Perturbation付きの入力に対して変にoverfitしてしまうのではないか、と[Kurakin et al. (2017)]は議論しています。VATはノイズ計算にラベル情報を使っていないためこの現象は起きず、今回の実験でもVATの方が性能が上がっているのではないかとか思っています。

現在、機械翻訳など文生成のタスクではLSTMからより性能の出やすいTransformerへと人気が移っていますが、Adversarial Trainingを適応した場合にはどちらのアーキテクチャでも同様の性能向上が見られました。

また、Virtual Adversarial Trainingは半教師あり学習にも適用できることを上で紹介しました。今回は、機械翻訳タスクの半教師ありの手法として効果的なBack-translation [Sennrich et al., 2016]と組み合わせることで、さらに大きく性能が上がることを確認しました。関連タスクに取り組む機会があればぜひ試してみてください。

マルチモーダルタスク

次に新しくデータセットを作った研究の中で気になったものを紹介します。

Adobe Researchの方々の研究で、RedditのPhotoshop Requestというページから「元画像」「編集リクエスト文」「編集された画像」の3つ組を収集しデータセットとして公開したものが発表されていました。先行研究の似たデータセットとして、動画中のフレームから抜き出した2枚の写真の違い(例: 青色の車が無くなった)をデータセットとして公開しているSpot-the-Diffや、2枚の画像の関係について説明したテキストが付与されているNLVR2があります。

 

論文の実験では「元画像」「編集された画像」を入力としてリクエスト文の生成を行っていました。二種類の画像の差分や関係性について表現するような言語生成タスクになっています。また、今回のデータでは、別のタスクとして編集リクエスト文から画像の編集を行う実験も考えられます。難易度はかなり高そうですが、今後の研究でテキスト指示によって画像を自由に編集できる研究がさらに発展すると面白いなと思いました。

([Tan et al. 2019]の図より)

 

セグメンテーションとの同時学習

最後に紹介する興味深いトピックは、テキストのセグメンテーション(分かち書き)を学習しながら、そのセグメンテーションで分割された系列で目的のタスクのモデルを学習していく話です。

NLPではCNN、RNN、Transformerなど様々なニューラルネットワークのモデルを使いますが、これらに共通している一般的な処理があります。与えられたテキストはまず始めに何らかの離散トークン列に変換し、各トークンに割り当てられた埋め込みベクトルを組み上げていくことで構成的な意味表現を得ています。また、機械翻訳のように文を生成する際にも全テキストが一気に生成されることはなく、トークンごとに順番に生成されていきます。

このように言語処理の根幹をなすのがトークン列への変換処理、セグメンテーションです。このセグメンテーションをどうするかによって、モデルの出力や性能が変わってきます。典型的なセグメンテーション処理としては、スペースでの分割や、Byte Pair Encoding (Sennrich et al., 2016)による分割、あるいは1文字ごと分割してしまって文字ベースでテキストを処理するという手もあります。日本語や中国語のように空白文字での分かち書きが付いていない言語では、なおのことどうすべきか奥が深いテーマです。英語にしても、スペース分割そのままに doing という文字列をひとかたまりとして見るか、あるいは do+ing として見るか、どちらがより良いのか(特に、ある機械学習モデルの性能をいかに効率よく高められるのか)は自明ではありません。なんにしてもある1つのテキストに対して様々なセグメンテーションというのが考えられ、NLPに関する工学としても言語獲得の研究としても興味深いテーマになっています。

 

以下の2つの論文では、テキストの出現確率を計算する言語モデルについて、同時にそのテキストの様々なセグメンテーションのそれぞれを考慮して周辺化で計算を行うモデル(と、その学習によって得られるセグメンテーションモデル)の構築を目指しています。

様々なセグメンテーションで訓練ならびに推論を行うことで、分割の曖昧性に頑健になったり様々なデータのパターンに触れることによる汎化の効果が期待できます。様々なセグメンテーションを考慮するというのは、例えば、次に his という単語が出現することを予測する場合に {his, h+is, h+i+s, hi+s} という分割の異なる複数のパターンについて計算を行っていくような処理です。しかし、長いテキスト上では可能なセグメンテーションそれぞれで全計算をやり直していては計算量が爆発してしまいます。この問題を緩和するために、論文では、「文脈側のテキストに関しては分割を考慮せずに全て文字ベースで扱う」というアイデアを活用しています。上のように予測(生成)する際には4パターン考慮した his ですが、この方法であれば、その次に繋がるテキストについて考えるときには、どういう分割パターンの his なのかが条件部に入らない式で一括で計算できます。その他、あるトークンの確率計算に際して典型的なsoftmax層でのスコアと文字ベースデコーダでのスムージング的なスコアを混ぜ合わせる構造や、セグメンテーションの各トークンの長さに対して正則化をかけるなどの効果的なテクニックも提案されています。


その他以下の論文でも、テキスト分類を文字と分割トークンの併用で解くモデルの訓練時に、様々なセグメンテーションで訓練データを入力することで分類性能が向上したと報告されています。昨年のACLで発表されたSubword Regularization (
Kudo, 2018)のように、多様なセグメンテーションによる汎化性能向上を示す面白い論文でした。

上ではセグメンテーションについて紹介しましたが、系列に関して曖昧性が生じる他の代表的な例としては、音声認識による書き起こしの予測結果が挙げられます。そのような曖昧性を残した複数の系列パターンを表すラティスに対して適用可能なTransformerとして、attentionのマスク処理やpositional embeddingに工夫を凝らした亜種を提案する論文もありました。

 

おわりに

今回は ACL 2019における論文をいくつか紹介しました。言わずもがな言語には、英語、中国語、日本語など様々なものがあり、それぞれが異なる文法、単語、文字を併せ持ちます。ACLでは、今回紹介した離散性や隠れた構造に関する挑戦の他にも、より大局的に複数言語間で学習の結果を共有や転移させようとする試みなど、言語ならではの課題や面白さが詰まった研究が多く発表されています。これらの研究が自然言語処理のみならず、離散記号や系列データを扱うその他の分野でも応用されていく可能性もあると思います。PFNでは、引き続きロボティクス、コンピュータビジョン、音声処理などの多様な分野とともに自然言語処理の研究開発を行っていきます。

GraphNVP

Kosuke Nakago

2019-07-16 12:00:06

本記事は、2018年インターンシップ・PEとして勤務した Kaushalya Madhawa さんによる寄稿です。
本記事はこちらの英語ブログの日本語訳です。

本記事では、私たちが最近投稿した論文 “GraphNVP: An Invertible Flow Model for Generating Molecular Graphs” を紹介します。
コードも公開しています → Github repo

分子の生成モデル

望ましい薬理学的な物性値をもつ新しい分子の発見は創薬の分野において重要な問題です。これまで、候補となる化合物を実際に合成して実験を行うといったことがされてきました。
しかし、化合物のとりえる形の可能性は膨大でそれらを合成し、実験するということはとても時間がかかります。
このように望む物性値をもつ分子を探す代わりに、”de novo drug design” では、新しい化合物を興味対象とする物性値とともに設計するということを行います。

近年の深層学習の技術発展、特に深層生成モデルの分野は “de novo drug design” にとって重要な技術となってきています。

分子の表現方法

深層学習で分子の生成モデルを考える際、初めの重要なステップはどのように化合物を表現するかということです。
初期の研究では SMILES という、文字列ベースの表現方法を採用していました。
これらの研究は、 RNN ベースの言語モデルや、Variational AutoEncoder (VAE) を用いることで、SMILES の文字列を生成しそれを分子に変換します。
このアプローチの問題点はSMILES 文字列での小さな変化が分子全体でみると大きく変化するような場合があるということです。
そこで、分子をグラフを用いて表現しようというアプローチが出てきました。この問題は “molecular graph generation” として扱われます。

分子は無向グラフとして表現されます。原子をノード、結合 (bond) を辺に対応させます。この表記を用いると分子の構造・結合情報は Adjacency tensor (隣接テンソル) \( A \) として、また各ノードの原子(酸素、フッ素など)を node feature matrix \( X \) で表すことができます。この定式化の下で、分子の生成問題はグラフの生成問題として扱うことができ、これまでに技術発展してきた GANやVAEといった深層学習のモデルを用いることができます。さらにグラフの生成問題は2つのタイプに分類することができます。1つめは分子のグラフを”順番に” 生成する方法で ノード (原子) や 辺 (結合) を1つずつ生成していきます。もう1つの方法が直接グラフを生成するタイプで、画像の生成と似たように一度に全体を生成します。

可逆性

上記で紹介したVAEやGANと比較して、可逆な Flow を用いたモデルは尤度の最大化を直接行えるという長所があります。

さらに、Flow モデルは可逆な変換のみで構成されているので、逆変換が可能で100% 分子→潜在変数→分子 の再構成を行うことができます。

GANのみの生成モデルなどEncoder がない場合は、特定の分子を操作して生成・最適化を行うことは困難です。例えば、特定のベースとなる分子 (query) に似ている分子を生成して最適化を行っていくということが (創薬の分野で Lead optimization と呼ばれる) 困難です。一方Flow モデルは 分子の潜在変数を直接計算できるので、query 分子に対する潜在変数を簡単に求めることができそこから最適化を行うことも可能です。

提案モデル

model_reverse

提案モデルであるGraphNVPは上図のような構成をとります。GraphNVPは私たちの知る限りではOne-shot Graph生成モデルとして初めてFlow を用いたモデルです。
このモデルは辺に対応する変数とノードに対応する変数の2つの潜在変数を使用し、グラフ構造や原子種類の分布を表現できるようにします。
これらのをFlowの定式下で計算できるよう、 Adjacency Coupling および Node Feature Coupling と呼ばれる2つのCoupling layerを提案しました。
グラフの生成を行う際は、まずAdjacency tensorを生成し、次に Node feature tensor を graph convolutional network を用いて生成します。

結果

訓練データから分子をとり、その潜在変数 \( z_0 \) をGraphNVPで計算します。そして潜在空間上でランダムに選んだ2つの方向の軸に対して \( z_0\) が中心となるような2次元グリッドを構成し、その各点で潜在変数をデコードして分子を生成したものが下図となります。
下図の可視化結果では、似たような分子が並んでおり、隣どおしでは少しの原子が変わっているだけというようなものとなっており、提案モデルがスムーズな潜在空間の学習をできていることが見て取れます。

zinc_neighborhood_2d

 

 

さいごに:メンターより

Kaushalyaさんのメンターを担当した、中郷・石黒です。
今回の研究は2018年夏のインターンシップから始めたものです。このころはGraphの生成モデルの研究が盛んになり様々なアプローチでの生成モデルが提案され始めたころでしたが、まだFlowを用いたグラフの生成モデルはないので取り組んでみたいというKaushalyaさんの持ち込みからはじまったものでした。

グラフ生成モデルとしては初めての取り組みであり、またFlowを用いるモデルはかなり深いネットワークを使用する必要があり計算量も大きくなるということで、研究には時間がかかりましたが、最終的には論文として形にすることができ、コードも公開することができました。

最後に宣伝となりますが、PFNでは今回の “Drug Discovery / Material Discovery” の分野だけでなく、多種多様な業界で機械学習適用の横断プロジェクトを実施しており、中途・新卒の人材募集も通年で行っております!
興味のある方はぜひこちらのページをご覧ください。

MN-2が動き出しました

土井 裕介

2019-06-26 18:11:02

先日リリースさせて頂いたとおり,MN-2の構築を行っています.MN-2は最新世代の,1024基のNVIDIA(R) V100 GPUが計算力の主力となります.現在利用しているMN-1およびMN-1bにおいて1024基のP100と512基のV100を稼動させていますが,MN-2の追加によりGPU数換算で合計2560基となり,保有計算力を大幅に強化しました.とはいえ,現時点ではKubernetesをはじめとしたソフトウェアサービススタックのセットアップ中であり,GPUは主にベンチマークを実施して状態確認を行っている段階です.

PFNでリサーチャをやっている,土井裕介です.最近はリサーチ業務はあまりやっておらず,社内インフラ関係の全体の世話役のような業務が主担当になっています.今回,物理構築が一段落したのでBlogにてMN-2の概要やポイントを紹介させて頂きます.

構築途中のMN-2

構築中のMN-2

なぜMN-2を作るのか?

よく,「なぜPFNは自前インフラを持つのか?」というご質問を頂きます.自前インフラを持つ理由にはいろいろな側面があって一言では説明できないのですが,土井としては一つ,ハードウェアの全コントロールを握りたいから,という理由があります.例えば,計算のパフォーマンスが出ないという時に,どこをどう改善すればいいか,改善するとしてどのようなアプローチが存在するかを考えます.このとき,実際のハードウェアが上から下まできちんと見えるか,それともクラウドのむこうにあるのかで,取ることができるアプローチの幅にかなりの差が生まれます.特に今回はネットワークも含めて全て自前となっているため,見ることができる計測点が増えており,深層学習に向けたインフラサイドの研究開発の基盤としても活用できると期待しています.

さらに,今後 MN-Coreを使った計算機クラスタ(MN-3)も予定しています.MN-Coreは少なくとも当面はクラウドには置けないので,これを活用するためには自前のインフラを持つ必要があります.電源・冷却・ネットワーク・ストレージを含めて共用する前提で,GPUクラスタ (MN-2) を事前に作ることで,MN-3の構築に必要な経験をPFN社内で貯めている,という側面もあります.

MN-2の設計のポイント

MN-2の設計にあたり,いろいろなことを考えました.考えたことの大半は実現性との兼ね合いや時間との戦いの中で没になりましたが,一部実現したポイントもあるので,かいつまんでご紹介させてください.

ラック設計・電源・冷却

今回採用したGPUサーバは,8GPUを1台に搭載しており,定格で1台あたり3.5kWの消費電力です.床の耐荷重や電源供給・排熱等の問題,またMN-3の先行モデルとしての役割もあり,1ラックあたりの搭載数は4ノードとしています.1ラックあたり4ノード32GPUで定格14kWという計算になります.今となってはこの熱密度は高い方ではありませんが,純粋な空冷設備としてはそれなりに高い部類に入ると思っています.MN-2ではこのGPU計算ラックを連続で16ラック並べたものを背面を対向として2列置いています.合計32ラック128ノードになります.

MN-2クラスタを置かせて頂いているJAMSTEC横浜研究所シミュレータ棟は,冷気が床下から吹き出して天井側から熱気を回収する構造になっています.MN-2のGPUの排熱が他のGPUや地球シミュレータに与える影響を最小限とするため,背面(熱風が出る側)を対向させ,ラックの両端にドアを設置して,熱気が横方向に流れないように閉じ込めています.上方は空けてあるので,下から来る冷気の勢いと対流効果で熱の大半は天井側に送られるデザインです.さらに,ラック背面にフィンを設置して熱風が対向のラックに回りこみにくいようにしています.

稼動中のMN-2 背面

GPUの排熱を上方に逸らす整流板をつけた状態

実際に全GPUに対して模擬的な負荷をかけて稼動させてみましたが,hot側の温度は高くなったものの,cold側の温度はほぼ影響なく,想定通りの結果となりました.

高負荷試験時の温度変化

高負荷試験時の温度変化 (下段: 吸気/COLD側 上段: 排気/HOT側)

ネットワークとインターコネクト

HPCにおいては,計算機を相互接続するインターコネクトは重要です.深層学習においても同じことが言えますが,例えばさまざまな種類の巨大なシミュレーションを連続的に分散実行するようなスーパーコンピュータのワークロードと,学習途中のパラメータを適時同期する深層学習のワークロードにおいては、求められる性質は異なります.深層学習において支配的なデータ通信は,主にデータセットのロードとパラメータ交換であり,パケットサイズがおおきくなり,バンド幅が重要になりがちな傾向があります.

PFNでは技術吟味の結果,ファイルシステムはいわゆるHPC向けのファイルシステムではなく,Hadoopなどで使われているHDFSをメインに利用して,ローカルのデータキャッシュを活用する方向で検討しています.このことから,データセットの読み込みはEthernetが中心となります。従来多く使われてきた(MN-1でも利用している)InfinibandとEthernetの両方で広帯域の確保はPCIeのレーン数の制約から難しい場合があります.また,InfinibandとEthernetの両方に投資することは機能的には二重投資となることもあり,MN-2では冒険的に,インターコネクトの役割も全面的にEthernetとして,RoCEv2(RDMA over Converged Ethernet)を採用しました.パフォーマンスは,一部のInfinibandが得意としているshort packetの領域を除き,Infinibandと遜色ないことを確認しています.

今後

MN-2としての本格稼動は7月を予定していますが,先行して現状のクラスタの概要を紹介しました.
今後MN-3の構築がはじまる見込みで,それにあわせてPFNではインフラ人材も募集中です.特に運用・改善の領域において,Kubernetes上で動作する深層学習のワークロードと,MN-Coreを含めた先端ハードウェアとを両方睨んで最適化を行う,というアツい仕事が待ってます.我こそは! という方は,是非弊社ホームページにある採用の欄からご連絡いただくか,個人的にご存知のPFN社員なり,土井 (doi@preferred.jp) までご連絡ください.

小学生向けディープラーニング体験教室で「ものまね算」のワークショップをしました。

Yuki Nishizawa
エンジニア

2019-06-26 13:33:18

Preferred Networks エンジニアの西澤です。

Preferred Networksでは2019年の6/8(土)に小学校高学年向けのディープラーニング体験教室を行いました。

この体験教室は3部に分かれており、第2部のロボットカーの授業については弊社の丸山史郎よりブログ記事として公開しました。今回は第1部の「ものまね算」の講義について書こうと思います。

 

「ものまね算」

今回、子どもたちに機械学習の概念を説明する時に使用した言葉が「ものまね算」です。機械学習ではたくさんの訓練データを用意し、入力と出力の関係性を学習していきますが、これを機械が「ものまね」していると表現することによって、子どもたちにとってよりイメージの沸きやすい講義ができたのではないかと思います。

 

 

火星語の数字を認識してみよう

ものまね算の講義の後には機械学習の例として「数字認識」を挙げ、実際に機械学習がどのように実社会に応用されるのかを考えてもらった後、「火星語の数字を認識する」というテーマでワークショップを実施しました。

これは、その場で子どもたちに考えてもらった架空の「火星語の数字」についてデータセットを作ってもらい、実際にその場で認識器を訓練し、手描き数字を認識させてみるというものです。みんなで一文字ずつ考えた10個の数字をワークシートに書き、タブレット端末で撮影することによりデータセットとして取り込んで学習します。

 

子どもたちが一体どのような文字を書いてくるのか少し心配していましたが、無事に認識され歓声を上げる子どもたちを見てほっとしました。中にはデータセットにない文字を書いてみる子や複数の字を並べて書いてみる子、点線で書いてみる子などもいて、子どもの柔軟な発想にはこちらも驚かされました。休み時間の間もずっと遊んでくれていたりと、機械学習の技術に興味を持ってくれた子がたくさんいたようでとても嬉しく思います。

 

またPreferred Networksは、2019年9月に文部科学省により実施される「未来の学びプログラミング推進月間」へプログラミング教材「自動化の進展とそれに伴う自分たちの生活の変化を考えよう」を提供予定です。ご興味のある方はぜひこちらも合わせてご覧ください。

https://mirapro.miraino-manabi.jp/lp_pfn.html

2019年 PFN夏季インターンシップのコーディング課題公開

楠本充
エンジニア

2019-06-25 15:27:28

Preferred Networks 2019 夏季インターンシップの選考で用いたコーディング課題を github 上で公開しました。

https://github.com/pfnet/intern-coding-tasks

PFN 楠本です。PFN では毎年8月9月の夏季休暇に約2ヶ月間の長期インターンシップを行っています。コーディング課題はその選考で応募者のプログラミング能力や問題解決能力を見るために出題させて頂いているものです。今年は「機械学習・数理」「バックエンド」「フロントエンド」「チップ」「性能最適化」「コンピュータービジョン(Chainer)」の6種類のコーディング課題を用意し、応募者の希望テーマに応じてこのうちのいずれかを解いていただく形にしていました。

今年のインターンシップでは去年をさらに上回る数の応募を頂きました。PFN では来年以降もインターンシップを開催する予定ですので、これらの課題を見て PFN に興味を持っていただけた方はぜひ応募を検討ください。また、フルタイムの採用も通年で行っております。こちらもご検討いただければ幸いです。

小学生向けディープラーニング体験教室でロボットカーの授業をしました。

maruyama
リサーチャー

2019-06-11 13:05:34

こんにちは。丸山史郎です。

Preferred Networksでは2019年の6/8(土)に小学校高学年向けのディープラーニング体験教室を行いました。
体験教室の内容は大きく3つに分かれており、その中の30分くらいの時間でレゴ® マインドストーム®を使ったロボットカーの体験教室を行いました。この直前に「ものまね」算という形で小学生向けのディープラーニング(機械学習)の解説があり、ここではディープラーニングをロボットに使うとどのようなことができるのかということを実際に体験してもらうことを目的としました。

また、弊社としては小学生向けの体験教室は初めてのことでしたので、ロボットの準備やロボット体験の内容へのアドバイス、当日の運営などを株式会社アフレル様にご協力いただきました。

続きを読む »

ローカル環境のコード差分をリモートで実行する際に再現性を担保できるコマンドラインツール「Git Ghost」公開

Daisuke Taniwaki

2019-05-13 08:00:37

概要

大村谷脇で開発したローカル環境のコード差分をリモートで実行する際に再現性を担保できるコマンドラインツールGit Ghostをオープンソースとして公開しました。このツールを使うことで、試行錯誤しながら実験をするフェーズにおいても、以前修正して実行したローカル環境のコードに簡単に戻ることができます。

開発の動機

機械学習のジョブを実行中に試行錯誤でさらに他のジョブを実行することはよくあります。Git Ghostを作る前では、そのための一番単純な方法として、例えば、ソースコードをgitで管理し、rsyncコマンドでローカル環境での差分をKubernetesクラスターに同期して機械学習ジョブを実行していました。その際、実行したプログラムが良い結果を出した場合に、以前に修正したコードに戻りたいことがよくありましたが、この方法では、gitでソースコードをバージョン管理していても、rsyncで同期したローカル環境での差分についてはバージョン管理がされていないため、以前のコードに戻ることは困難でした。

これに対処するための1つのアイデアとして、ローカル環境での修正を全てコミットしてリモートにプッシュすることがまず考えられます。しかし、たった数文字の変更のためにコミットしてプッシュするのは非常に面倒であり、リモートのレポジトリーがこの細かい修正で汚れてしまうのを好む人はいないでしょう。そこで我々はこのツールを開発することにしました。

使用方法

ローカル環境で行ったfooというファイルの中身をaからbに変更する修正をリモート環境にあるディレクトリーに送りたい場合を考えます。

まず、ローカル環境の差分パッチをGit Ghostで作成します。

$ git ghost push
xxxxxxx yyyyyyy
$ git ghost show yyyyyyy
diff --git a/foo b/foo
index 7898192..6178079 100644
--- a/foo
+++ b/foo
@@ -1 +1 @@
-a
+b

そして、リモート環境に移動し、以下のコマンドを実行しローカル環境の修正を同期します。

$ git ghost diff HEAD
$ git ghost pull yyyyyyy
$ git ghost diff HEAD
diff --git a/foo b/foo
index 7898192..6178079 100644
--- a/foo
+++ b/foo
@@ -1 +1 @@
-a
+b

ローカル環境の修正を簡単にリモート環境に同期することができました。

このようにGit Ghostはすごくシンプルなツールですが、他のツールと連携させることで最大の効果を発揮します。例えば、Kanikoを使ってDocker imageを作成する際にローカル環境の差分を含めることもできます。ローカル環境の差分を含めたDockerイメージを作り、そのイメージを使って再現性のあるジョブを動かすArgo利用例も公開しています。

アーキテクチャ

アイデアは非常にシンプルです。このツールはリモートのレポジトリーに対してローカル環境でのコミットの差分およびコミットされていない差分のパッチを別のリポジトリで管理します。そして、リモート環境でそのパッチを適用することで、ローカル環境を再現します。細かい点ですが、ローカルコミットの差分とコミットしていない差分を別々のパッチで管理することで、ローカルコミットをリモートのレポジトリーにプッシュした際にコミットしていない差分をそのまま使うことができるようになっています。

他のツールや認証情報を不要とするため、Gitレポジトリーをパッチのストレージとして使っています。

我々はこのツールをKubernetesクラスターで使っていますが、その他の環境でも同じように使えるはずです。オンプレミスのサーバーにラップトップでの変更をトラッキングしつつ送りたいという場合でも使えます。

 

是非試しに使っていただいて、GitHubにてフィードバックをよろしくお願いします!