linotice

linotice

2021.01.29

ヤフー第9代黒帯が最新技術動向を紹介 ──Hadoop、音声処理、Go、iOSアプリ、Androidアプリ

画像
ヤフーの黒帯は「ある分野に突出した知識とスキルを持っているその分野の第一人者」として実績を上げている人財です。第9代黒帯LT会第三回は、Hadoop、音声処理、プログラミング言語(Go)、iOSアプリ、Androidアプリの黒帯が登壇。5人の黒帯の各技術領域における最新技術の動向、社内外での取り組みなどが語られました。その発表内容をご紹介します。

【1】HDFSと分散ストレージ

──Hadoop/鯵坂明

まず登壇したのは、Hadoop黒帯の鯵坂(あじさか)明。「黒帯というよりOSS屋として活動している」と言う鯵坂は2018年9月にヤフーに中途で入社したOSSデベロッパー(Apache HadoopおよびApache YetusのPMC[Project Management Committee] memberおよびcommitter)。その言葉通り、業務時間の3割はパッチを書いたりレビューしたりといったOSSコミュニティでの活動にあてており、これまでにHadoopで700個以上のパッチをコミットしています。

Hadoop/鯵坂明
NTTデータにてApache Hadoopおよび関連OSSの評価、導入支援およびサポートに従事したのち、2018年にヤフーに入社。Apache Hadoopおよび関連OSSの検証やトラブルシューティングを担当。Apache Hadoop、Apache Yetus、Apache IncubatorのcommitterおよびPMC member。
Apache HadoopはHDFS (Hadoop Distributed FileSystem)、分散リソース管理のYARN(Yet Another Resource Negotiator)、MapReduceで構成されており、そのなかでもHDFSは分散処理に特化した分散ストレージとして開発され続けています。

HDFSの長所はディレクトリのrename(mv)やlisting(ls)が比較的高速であることや、1ファイルを複数のブロックに分割することによって、複数のworkerから並列に読めるため、シーケンシャルアクセスのスループットが高速であること。そして14年の歴史があり、非常に枯れていることがあげられます。

一方、短所としてはシーケンシャルアクセスが比較的高速なことに対してランダムアクセスが遅いこと。名前空間に対する変更処理を1台のマスターがすべて処理するためTPS(transactions per second)がある程度のところで頭打ちになること、また、名前空間とブロックの情報をすべてマスターのJavaヒープ領域内で管理するため、ファイル数が増えるとヒープサイズが肥大化してマスターがGCの負荷で悲鳴をあげてしまうことだといいます。

「先ほど紹介した短所のうち、ランダムアクセスが遅い以外の問題を解決するために近日導入予定なのが、RBF(Router-based Federation)という機能です。ただ、これも万能なわけではありません。クラスタまたぎのrenameができない、データとクラスタのマッピングを気軽に変更できない、クラスタ・コンポーネントが増えることによる運用コストの増加というつらさもあります」

いわゆる銀の弾丸のようなものはないので、「要件に応じて適切なモノを選ぶこと。要件を洗い出し、開発動向などから目利きしていくことが重要になる」と鯵坂は話します。

目利き力を鍛えるためには「とにかく勉強すること」と鯵坂は言い切り、「今時の最新動向やOSSの新機能に関する論文が読めるようになり、分散ストレージを選ぶ際に役立ちます」と、書籍「データ指向アプリケーションデザイン(Martin Kleppmann、オライリー・ジャパン)」を勧めました。

最新動向については、「Object Storage」が盛り上がっていると語ります。

「Amazon Simple Storage Service(Amazon S3)が流行したことで、実はEventual Consistencyでも多くのケースでは大丈夫だったとみんなが思うようになった。またHadoopコミュニティにおいてもOzoneというサブプロジェクトでObject Storageを開発、HDFSの開発者の多くがそこに移籍したこともあって、かなり盛り上がっています。OpenStack SwiftやCephがすでにいる世界に殴り込みをかけているので面白い。社内でもDragonという内製のオブジェクトストレージを開発しており、DragonがHDFSのいくつかのユースケースを奪っていくような状況が今後見られるかもしれません」

最後に鯵坂は「分散ストレージやその上で動作する分散処理に興味のある人はデータプラットフォーム本部に(社内異動制度で)ぜひ来てください」と呼びかけました。

【2】End-to-Endモデルによる音声認識

──音声処理/藤田 悠哉

続いて、音声処理黒帯の藤田悠哉が登壇しました。藤田のLTタイトルは「音声処理技術の最新動向 End-to-Endモデルによる音声認識」。

音声処理/藤田 悠哉
2007年に日本放送協会に入局。2011年から2014年までNHK放送技術研究所にて音声認識技術(Speech-to-Text)の研究開発に従事。2014年ヤフーに入社後も、音声認識技術の研究開発を続ける。
End-to-Endモデルは最近注目されている音声認識技術です。これまでの音声認識はデコーダで音響、発音辞書、言語モデルとバラバラのモデルを参照して、入力された音声が何かをサーチするという処理を行っていました。しかしこの処理ではモデル学習もサーチも大変です。そこでEnd-to-Endモデルはこれらのモデルを1つのニューラルネットワークで構成しています。

「利点は、モデルサイズや演算量の軽量化がやりやすいこと。モデルの量子化や低ランク近似、蒸留、CoreMLなどニューラルネットワークの軽量化手法をダイレクトに使えます。このため、End-to-Endモデルはデバイスで完結する音声認識エンジンに適しています。また、サーバーに音声を送信しないので、プライバシーの観点でも安心なので、積極的に開発を進めています」

とはいえ、精度とレイテンシーを両立するモデルにするのが難しいという課題があります。End-to-End音声認識にはCTC、RNN-Transducer、Attentionの3つの代表的な手法があります。そのなかでも藤田はAttentionベースのモデルに着目しており、ここではAttentionモデルの一つであるTransformerというモデルについて解説を行いました。

Transformerは、精度は高いが計算量が多いモデル。Self-Attentionという構造がボトルネックになっています。Self-Attentionは1つの出力を得るためにT個の入力の重みづけの和を計算するため、T回の計算が発生します。
それをT回繰り返すため、Tの二乗の計算が発生。また「Tの値が事前にわからないという課題もある」と藤田は言います。

「この課題を解決するシンプルな手法が畳み込み。畳み込みでは1つの出力を得るために、例えば2つの入力の重み付け和を計算するため、2回の計算が発生します。それをT回繰り返すため2Tの計算で済みます。しかもTは事前にわからなくてもOKなのです。一方、畳み込みの場合は、重み係数がFIXされているので、モデルが弱くなる弱点がありました。そこで最近は、動的畳み込みが提案されています」

また藤田はもう一つ、「Adaptive Span」というアプローチも紹介しました。

「Adaptive Spanは最適なカーネル長(窓幅)をモデルとともに学習するというアプローチで、このモデルもTは事前にわからなくてもOK。この2つのモデルを音声認識に適用して実験をしており、いずれもTransformerと同等か若干劣る程度の精度で演算量を削減できました」

この結果についてはトップカンファレンスに投稿。畳み込みについては、ICASSP 2020で発表しています。Adaptive SpanについてもINTERSPEECH 2020に投稿していると言います。いずれの研究も、音声認識で世界最先端のJohns Hopkins大学との共同研究だそうです。詳しくはこちらのYahoo! JAPAN Tech Blogでも紹介しています。

今後の展開としては「レイテンシーについての分析をし、さらなる高速化・低レンテイシー化に取り組んでいく」と藤田。最近は機械翻訳の世界でNon-autoregressive Transformer(NAT)が盛んに研究されており、これにも注目していると語りました。

【3】Appleプラットフォームの技術動向

──iOSアプリ/林 和弘

iOSアプリ黒帯の林和弘は、「ここ数年のAppleプラットフォーム向けアプリの技術トレンド」をテーマにLTを行いました。Apple製プラットフォームのアプリ開発という観点から、直近でどんな変化が起きているのか、主に「アプリのポータビリティ」のトピックスについて語りました。

iOSアプリ/林 和弘
大手SNS企業でのバックエンド開発、新規事業開発などを経て、2014年にヤフー入社。入社後はiOSアプリ開発を専門として、Yahoo!ショッピング、GYAO!、Yahoo! JAPANなどのアプリ開発に従事。社外ではGithub、Qiita、Speaker Deckなどで技術情報を発信。
2019年までの全体像については、社外で発表したスライド資料「10分で振り返るここ数年のWWDCの技術トレンド」「AR・ML・その他Appleプラットフォームのアップデート」を参照してほしいとのこと。

「アプリのポータビリティについては、Apple製のOSはつかず離れず。各OS間の統合を懸命に模索しています。現在、Apple製OSはiOS、iPadOS、watchOS、tvOS、macOSの5種類でいずれも、プログラミング言語はSwiftを採用していますが、UI用のフレームワークが微妙に異なります」

また、同じUIフレームワークを使っているiPhoneや iPadでも細かいAPIレベルでは違いがどんどん生まれてきています。
「さらにそれを推し進め、 iPad上で動くOSは2019年にiPadOSという名前へリブランディングされました。マルチタスキングが提供されたことで、地図と時計のアプリをiPadでは横に並べることができるが、iPhoneではできないなど、iPhoneとiPadとで機能が著しく変わってきました。iPadはどんどんMacに近づいてきています」

また19年にCatalystが発表となり、iPadアプリをMacアプリとしてビルドできるようになり、20年macOSのデザイン刷新により、「見た目はiPadアプリになった」と林は続けます。さらにApple Siliconが発表となり、iPhoneアプリ。iPadアプリをmacOS上で動かせるようになり、コードに手を入れる必要がなくなったと言われています。

このように個別の統合を活発に取り組んでいるAppleに対し、「デザインレベルでは違いを作りつつ1ソースで全プラットフォームのアプリを作れる状態を目指している」と林は自身の考えを明かします。

そのカギを握っているのが「SwiftUI」。19年に発表された新しいUIフレームワークの存在です。SwiftUIは宣言的にコードでUIを記述でき、1ソースで全プラットフォームのアプリを作ることができます。またプラットフォーム間のUIの差異を吸収するため、「SwiftUIはそのAppleの戦略を実現するためのUIフレームワークとして捉えることができる」と林は力強く語ります。

「SwiftUIがUI実装の軸とする狙いは、コードのプラットフォーム間統合。一方で、UIの見た目に関しては柔軟性が乏しいため、現在の見た目の差異についてはプラットフォームに任せるかたちに戻っていくと考えています」

「まとめるとAppleのプラットフォーム環境は次のような方向性となっている。UIのレベルではデバイスごとに最適化する。コードのレベルでは1ソースで全デバイスへ対応する。各デバイス上でのUIを妥協せずにコードレベルの統合を新フレームワークで模索している」と林。最後に、「興味のある人は、社内で開催予定のSwiftUIセミナーに参加してほしい」と呼びかけました。

【4】最近のAndroid界隈の技術動向

──Androidアプリ/森 洋之

Androidアプリ黒帯の森洋之のLTテーマは、「最近のAndroid界隈について」。はじめに、Android11ではどんなことができるのか、新しく追加された機能から、語りはじめました。

Androidアプリ/森 洋之
Androidアプリの個人開発などを経て、2012年にヤフー入社。ヤフオク!のアプリ開発などに従事、2014年にAndroid分野での黒帯に認定。 Droid Kaigi、Droidcon Berlin、Droidcon Transylvania、Devoxxx Moroccoなどに登壇。
まず紹介されたのが「People」。通知を表示するためのオブジェクトに相手の情報などを設定することで、その通知が優先的に別枠で表示されるようになります。条件としては、メッセージ送受信用のスタイルを適用していることと、人対人のリアルタイムコミュニケーションであること。
「そうした条件を満たせる場合には、Bubblesという機能を実装することで、別のアプリを開いていても通知時に表示され、タップをすると即座に返信できるようになりました」

次は「Controls」。Device Controlは電源を長押しするとIoT機器のスイッチが表示されるという機能。一方のMedia Controlは現在ストリーミング再生しているメディアと前に再生していたメディアが同時に表示され、1つ前に再生していたものに即座に切り替えることができる機能です。

「Media Styleを通知に設定し、Media browser servicesを実装することで容易な切り替えが可能になります」

Privacy」では、One Time Permissionという機能を使えば、マイク・カメラ・位置情報に対するアクセス許可を「今回限り許可する」ことができるようになります。またPermissions auto-resetは、長期間使われていないアプリのランタイムパーミッションがすべてクリアされるというものです。

「アプリがバックグランドで位置情報にアクセスする場合は、目的などをユーザーに明示的に表示し、承認を得るというポリシーが追加されると言われていました。しかし、そのポリシーの適用は、2021年まで後ろ倒しになることになりました。この間に対応するようにしてほしいということです」

Developer friendliness」の機能により、開発者オプションが増え、無線adbデバッグがやりやすく、実用的になったと森は言います。

「ただし、互換性のない機能についてはターゲットSDKバージョン30にしない限りは有効にならないので余裕をもって対応することができます」

Crash Reasons Reporting」はアプリが終了した理由を簡単に取得できる機能です。

「内部テスト版でSlackにエラーのトレース情報を流したり、実リリース版でもログを送信し、アプリが終了する理由などの集計が容易になります」

続いて、Jetpack とその他のライブラリや裏技についても紹介されました。

「『ContentProvider』はプロセス間でデータを送受信するためのコンポーネントですが、アプリケーション起動時に、Applicationクラスよりも先に生成されることを利用して、データの送受信のためではなく、ライブラリの初期化用コンポーネントとして利用されてきました。しかしこれは速度面でデメリットがあり、また生成順序を制御できないため、これに代わるApp Startupというライブラリが作られました」
さらに、Google製のDIライブラリ「Hilt」、「Paging3」、「Compose」などの最新動向が紹介されました。


今回の黒帯LT会では、上記4名のほかに、プログラミング言語「Go」黒帯の加藤優介がGo言語の最新動向について語りました。加藤は社内のGoコミュニティの育成にも注力しており、毎月Go LTを開催しています。
このように黒帯たちは、社内外問わず、専門技術の動向や取り組みについて発信しています。興味を持った方は、ぜひ黒帯たちが登壇するセミナーやSNSでの発信情報などをチェックしてみてください。


採用情報 公式SNSアカウント

このページの先頭へ