[AWS re:Invent 2018]Building Serverless Machine Learning Workflows – API315-R #reinvent

こんにちは。データサイエンスチームのtmtkです。
この記事はNHN テコラス Advent Calendar 2018の7日目の記事です。

11月25日よりはじまったAWS re:Invent 2018に、当社からは私を含む若手エンジニア4人が参加しました。
この記事では、「Building Serverless Machine Learning Workflows」というチョークトークの内容をレポートします。

概要

セッションカタログから概要を引用します。

Modern machine learning workflows leverage AWS services, such as Amazon Transcribe and Amazon Comprehend, to extract, validate, mutate, and enrich your data. Some might drive transactional systems that use machine learning to generate metadata for media assets, while others might derive insights by visualizing customer interaction sentiment from call logs. They all share a common challenge: orchestrating a combination of distinct sequential and parallel steps that are fulfilled by independent microservices. Join us as we examine how workflows can be used to manage that orchestration in a way that is scalable, reliable, and easy to maintain and run. We contrast two approaches for creating such workflows: a traditional monolithic approach and a serverless approach utilizing AWS Steps Functions.

要約すると、機械学習のワークフローをAWS Steps Functionsで統合しようというチョークトークです。講師はAWSのソリューションアーキテクトであるRonald Widha Sunarno氏です。Ronald氏のほかにも、AWSの方と思われる人が補助として2人いました。
チョークトークについての説明はAWSの公式ページにあります。チョークトークでは、15分ほどの講演のあと45分ほどの質疑応答と討論の時間が続きます。

内容

※2018年12月7日 スライドを追加

本チョークトークの内容をレポートします。筆者は英語の聞き取りが苦手なので、枝葉が相当落ちており、内容もあまり正確でないことをご了承ください。
最初に導入としてデータ処理や機械学習の典型的なワークフローについての概説があり、続いて本題に入ります。
例として、あるPodcastの各回の音声をダウンロードし、Amazon Transcribeで自動的に文字起こしをするシステムを考えます。これを実現する一つの方法として、以下のようなスクリプトを書き実行するというアプローチがあります。

// ingest
const podcastFeed = processPodcastFeed(uri)

// enrich
const vocabName = createTransribeVocabulary(podcastFeed)

for(let episode of podcastFeed.episodes) {
    const transript = transcribe(episode, vocabName)

    // mutate
    index(transcript)
}

ポッドキャストの音声ファイルをダウンロードし、Amazon Transcribeのカスタム語彙を作成し、for 文で各回の音声を文字起こしする、というものです。
このようなアプローチには、考慮するべき点がいくつかあります。エラー処理や並列処理がその一例です。このスクリプトの実行中にエラーが起こったら再試行する仕組みが必要です。また、for 文の途中で、第一話のtranscribeは成功したが第二話のtranscribeで失敗したら、どう再試行するのがいいでしょうか。ほかにも、for 文の中でtranscribeする部分は各回ごとに独立な操作なので、並列化したいところです。非同期処理があればどのように同期するかも考えなければいけません。

これらの対処が簡単に実現できるサービスとして、AWS Step Functionsがあります。Step Functionsを使うと、JSON形式で、エラー時のリトライや非同期処理の完了待ちなども含めたワークフローが簡単に作成できます。

質疑応答

講演のあと、参加者の質問を講師が募集します。参加者からは、たとえば以下のような質問が出ていました。

  • 同時実行の制限はどれくらいなのか? たとえば1時間越えの動画をフレームごとに処理するようなケースの場合、相当数のフレームを同時に処理することになるが、そのようなユースケースにも対応できるのか?
  • エラー処理が指定できるということだが、具体的にどのように設定するのか? エラー時の通知なども設定できるのか?
  • Podcastを文字起こしをするユースケースの場合、最初はすべての回を処理すればいいが、新しい回が追加されたときに自動的にその回が処理するようにするには、どのようにすればいいか?
  • Step FunctionsのState Machineのバージョニングはどのように行うのか?

これらの質問に対し、ときに質問を深堀し話題を広げながら、講師らが答えていました。

感想

Amazon Step Functionsの使い方とメリットが、具体的なユースケースとともに解説されていたので、非常にわかりやすかったです。また、質疑応答でも、他の参加者の想像するユースケースを知ることができたり、実際に使うときに問題になりそうな点についての質問へのAWSの専門家の回答を聞けたりするので、とても参考になりました。
チョークトークは公式ページで

チョークトークは、少人数の対象者で行われる、非常にインタラクティブな形式のコンテンツです。最初の 10~15 分間は AWS のエキスパートが講義を行い、その後に 45~50 分間の対象者との Q&A セッションが続きます。目標は、アーキテクチャの現実の課題について技術的な討論を促進することです。チョークトークは、AWS のエキスパートによって 1 時間行われます。その内容はエキスパートレベルです。

チョークトークは、メインの司会者 1 人と、討論が展開したときに問題と解決策をホワイトボードに記入する役割を担当する 1 人か 2 人の AWS のエキスパートによって行われます。re:Invent 2018 では数百ものチョークトークが行われるため、興味のある内容を慎重に選び、質問を準備してお越しください。

と説明されており、思わず尻込みしてしまいますが、参加してみると非常にためになります。参加者が十分多いので必ずしも全員が発言する必要はありませんでした。実践的な話と専門家の見解が聞ける機会なので、おすすめです。

AWS移行支援キャンペーン

あなたにおすすめの記事