JJUG CCC 2017 Springに参加してきました #jjug_ccc
こんにちは、小澤です。
JJUG CCC 2017 Springに参加してきましたので、そのレポートとなります。
看板の写真の撮り方が前回と同じですね。 どうやらこの半年で写真撮影のスキルは特に変わっていないようです。
今回は参加者数が1000人を超えたらしく、通路には次のセッション待ちで大行列ができていましたw
聴講したもの
今回聴講したものは以下のようになります。 資料に関しては、公開され次第適宜リンクを追加していきます。
- 非機能要件とSpring boot
- Java Clientで入門するApache Kafka
- Scala製機械学習基盤PredictionIOとSparkによるレコメンドシステム
- 今日からのDL4J
- グラフデータベース入門
- Spark + DeepLearning4Jの特徴と最新動向(仮)
各発表の概要
非機能要件とSpring boot
「非機能要件とは」の定義から始まる内容となっていました。 非機能要件を定義するのは難しく、絶対に譲れない(と思い込んでる)条件や明確に数値化できているもの、具体的にイメージできないものなど様々な状況となります。
この発表では、最初にIPAの定義する非機能要件グレードを紹介して、それに基づいた定義から、 費用対効果を含め、「何をどこまでやるべきか」やどのような項目が必要になるかといった項目と値の定義の仕方を解説していました。
発表のメインとなる部分はSpring Boot ActuatorやSpring Securityなどを利用して、それらをどう実現するかという話となっています。 こちらは、ソースコードや設定の具体的なものを出しての解説となっていました。 そのため、具体的な内容に関しては公開されている発表資料に記述してあるものを参考にしてください。
最後に「これらのライブラリを使用しない場合は、すべて考慮したものを自力で作る必要がある」と話しており、 こういったものを考慮しなければならないという観点でもライブラリの存在を知っておくのは大事なことだと実感しました。
Java Clientで入門するApache Kafka
タイトルにも入門と含まれるとおり、「Apache Kafkaとは」から始まる入門的な内容となっていました。
pubsub型でbrokerを介した非同期なキューイングの仕組みとそのメリットやパーティションの仕組みなど基本的な仕組みと概要を一通り知ることが可能な内容となっています。
このセッションの一番のみどころは、概要の説明で終わりではなく後半にライブコーディングでHello World的なアプリケーションを実装したところにあります。 これによって具体的な動作がどのようになっているかを見ることができ、それを実現するためにどのような実装が必要になるのかが明確になっていたかと思います。
また、例に漏れずライブコーディングは非常に盛り上がる内容となっていました。
Scala製機械学習基盤PredictionIOとSparkによるレコメンドシステム
こちらはPredictionIOというものの紹介と、それを利用して機械学習を利用したシステムを構築する上での課題をどのように解決するかという話となっていました。
機械学習の手法そのものや、精度向上に関する取り組みという話ではなくて、システムとして構築する上での課題を解決するためにPredictionIOを使ったという話になっていました。
- 学習データの取り込み
- 学習処理の長時間化
- データを保存するストレージ
- 予測処理のWeb API化
といった部分で、属人化する部分も多くあり、それらを一元管理可能なかたちにすることを主な目的としていました。
PredictionIOのD-A-S-Eというモデルで機械学習全体のフローを管理することで、データの保存からSparkを使った学習処理の実行、モデルの評価、予測APIの作成すべてが行えるようです。
今日からのDL4J
JavaとScalaで利用可能なDeep LearningのライブラリであるDeepLearning4Jについての内容となっていました。
はじめに、Deep Learningの歴史や機械学習で利用する評価指標の見方などを説明したのち、 DL4Jに含まれる様々なexampleについて解説するという内容となっていました。
exampleとはいえ、普通の性能のPCでは動かないようなものや、可視化まで含めてやってくれるようなものもあるようです。
グラフデータベース入門
前半は「グラフデータベースとは」という内容で、RDBやNoSQLとの比較を含め、グラフデータベースがどういったもので、どういった特徴があるのかという点についての解説となっていました。
後半は、グラフデータベースの1つであるNeo4Jについて、デモを交えながらチュートリアルを実際に行うことでどのようなことが実現できるのかという内容の解説を行っていました。 Cypherという、RDBでいうところのSQLのような言語でアクセスすることでグラフ構造間でのリレーションの取得などができていることをこのデモで見ることができました。
また、最後にはグラフデータベースが有効なケースの紹介もされています。
Spark + DeepLearning4Jの特徴と最新動向(仮)
Call for Paper時に(仮)をつけて応募したのち、そのまま変更しわすれてタイムテーブルにも乗ってしまったため、 発表タイトルもそのまま(仮)をつけることにしたそうです。
内容としては、「Sparkとは」、「Deep Learningとは」について解説したのち、 現状のDeep Learningを行う環境の課題として、従来の機械学習基盤とは別な環境を構築して、 その間でデータやモデルのやりとりが発生する点についてあげていました。
Deep LearningではGPUなどを利用ことが多く、フレームワークなどを利用する際にHadoop/Spark環境上で直接実行するといったことができなくなってしまいます。 そのため、MLのパイプラインが基盤間のデータ移動で一度途切れてしまったり、それぞれが別な言語で実装を行う必要があるなどの問題があります。 DeepLearning4JをSpark上で実行することでGPUを使った学習が行えるという話でした。
その後はDeepLearning4JがSpark上でどのように動くのかや、どのような実装を行うのかといった話となっておりました。
最後にGPUのリソース管理はYarnが行っているわけではない、高価なGPUをクラスタ全体に搭載する必要がある、Javaだと記述量がおおくなってしまう、DeepLeearning4Jでは強化学習系はサポートしていないといった課題もあげていました。
感想など
今回は、私が観測した範囲では前回に比べて入門的な領域を扱ったものが多い印象がありました(もちろん、聴講していないセッションで非常にマニアックな内容が話されていた可能性もあります)。
Javaというとすでに多くのユーザいて"これから"盛り上がっていく黎明期の技術といったイメージではないですが、 それでもこのイベントの参加者は年々増加していたり、Javaが利用されるシーンが数多くあるなど、普段当たり前のように利用している技術も実はまだまだ初心者向けに需要があるといった場面も多いのではないかと思います。