💭

AWS Machine Learning Specialityのサービス周りの試験対策

2024/10/10に公開

はじめに

AWS Machine Learning Speciality試験は

  • 機械学習に関する知識
  • AWS上で機械学習を実現するための知識

に分解できます。前者は純粋な機械学習の知識で、kaggleなどで要求される知識と重複しています。後者はAWSで機械学習を実行するための専門的な知識で、機械学習をやってるだけでは身につきません。

本記事では後者のAWSで機械学習を実現するための知識に関する試験対策を備忘録としてまとめました。したがって、機械学習に関する知識はほぼこの記事には出てきません。

さて、AWS上で機械学習を実現するための知識を問う問題は

  1. AWSで提供しているサービスの概要を知っていれば回答できる問題
  • 機械学習に関連しているサービス
  • 機械学習に関連していないサービス(ソリューションアーキテクトの試験範囲と重複)
  1. AWSで提供しているサービスの概要と機械学習の知識を組み合わせて回答する問題
  2. AWSで提供しているサービスの細かい仕様を知っていないと回答できない問題
    に分解できそうです。

ここで3は正直捨て問だと思っています。このような問題は全体の1割もないので、解けなくても正直受かりますし、そもそも採点対象ではない可能性もあります。また、実務を行う上では調べながら実装するもので、細かい仕様はその時把握すればいいと思うためです。

なので、本記事ではAWSで提供しているサービスの概要の、特に機械学習と関連しているものについて解説することにします。

本文

AWS Batch

データの前処理や学習などを自動化するサービス。コンピューティングリソースを管理することなくコンテナを実行できる。コスト効率がいい。定期実行可能。データの分類、スキーマの作成、メタデータのカタログ化に使える。SageMakerはリアルタイム〜準リアルタイムのエンドポイントとして使って、Batchは蓄積したデータを定期的に処理するために使うといった使い分けが想定されてそう?

Amazon Comprehend

テキストからキーフレーズや固有名詞、センチメントなどを抽出する。テキストデータからビジネスインサイトを得たい、みたいな文脈で使われそう。

センチメントは肯定/否定/中立/混在から選択されるので、レビューがポジティブかネガティブかみたいな簡単な分析には使えそう。このサービスに限らずだが、text2textモデルはだいたいBedrockで代替できるので、コストを気にしないならBedrockに全振りするのも手だと思う。

Amazon EMR

Apache Spark、Apache Hive、Presto などのオープンソースフレームワークを使用して、ペタバイトスケールのデータ処理、相互分析、機械学習を行なう業界をリードするクラウドビッグデータソリューションらしい。キーワードは分散処理?

Amazon Forecast

時系列データ予測を行うサービス。予測した値を元にして在庫をコントロールするために使ったりするようである。実際、Amazonの在庫調整はこれを使っているとのこと。予測対象はスカラーっぽいので、複数の値を予測したい場合は複数個のデータセットを構成する必要がありそう。

AWS Glue

複数のデータソース(S3、RDSなど)からデータを取り出して加工するのに使う。サーバーレスなのでインフラを考えなくていい。ETL。SageMakerと直接統合されており、ETLタスクが完了したデータをそのままMLジョブに流すことができる。

AWS IoT Greengrass

エッジで機械学習を実行するためのサービス。エッジデバイスにGreengrassをセットアップして、処理を行う。エッジデバイスはセンサーと一体化している必要はない(センサーに接続されるローカルサーバーでも良い)。エッジで実行するためネットワーク環境がなくても実行可能。ネットワーク環境があるときはデータをAWSに配信することもできる。

AWS Kinesis

ストリーミングデータを扱うためのサービス群。

Kinesis Data Analytics

Amazon Managed Service for Apache Flinkに改称された。そちらを参照。

Kinesis Data Streams

ストリーミングデータを入力にして、他のサービスにデータをパイプする。Lambdaと連携することでリアルタイム分析できる。ManagedであるFirehoseと比べて高速で拡張性が高い。

シャード単位で拡張する。シャードはオンデマンドモードにすることでオートスケーリングできる。

動画に関してはVideo Streamsで処理する方がベストプラクティスっぽいので、こちらはそれ以外のログ(テキスト)やセンサーデータ(スカラー、ベクター)を扱うのかなと思う。

Kinesis Data Firehose

Managed Data Streams。拡張性が低い分シンプルで使いやすいが、速度が犠牲になっている。シャード管理をしなくていい。管理コストをかけずにストリーミングデータを扱いたい文脈で正解択になりそう。

Kinesis Video Streams

ストリーミングで動画を処理する。Amazon Rekognition Videoと統合できる。動画の配信もでき、ブラウザからストリーミング動画を視聴できる。

Amazon Lex

Alexaの中身でchatbotを構築するサービス。ChatGPTのように任意の文脈を読み取れるわけではなく、事前定義したキーフレーズを認識して、事前定義したレスポンスを返すような設定になっているようである。モダンなchatbot作るならBedrockを使う方が良さげ。

Apache Flinkを使ってストリーミングデータを並列処理するアプリケーションを構築する。ストリーミングデータをS3やOpenSearchに配信することもできる。旧Kinesis Data Analytics。RandomCutForestを使った異常検知ができる。

Amazon Personalize

レコメンデーションサービス。他にレコメンデーションができるサービスはないはずなので、組み込みサービスでレコメンデーションしたいなら選択肢はPersonalizeになると思われる。

Amazon Polly

テキストを音声に変換する。音声チャット系のアプリケーションを構築するときに使う感じか。

Amazon Rekognition (Image/Video)

画像 or 動画に対してコンピュータビジョンタスクを適用した結果を返す。画像 or 動画の分析と言われたらこれが選択肢の可能性が高い。実行できるタスクは以下の通り:

  • face liveness(本物の顔かどうかを判定)
  • face recognition
  • face detection & expression recognition
  • content moderation(コンテンツがNSFWかどうかなどを判定)
  • few shot detection(ロゴ検出などに使える)
  • OCR(Textractとの違いはin the wildで使えるかどうかだと推察)
  • object detection
  • segment extraction(動画をセグメント分けする)
  • celebrity recognition(有名人の顔認識)

Amazon SageMaker

機械学習モデルを学習、検証、デプロイできるサービス。自分で学習する必要があるモデルはSageMakerを使うと思っていい。

テストに出そうなところとしては、

  • 学習データをロードするときにはEFS or FSxを使うと高速化できる。FSxの方が速いので、最速でやりたい場合はこちらが正解択になる。また、pipeモードにすることでも高速化できる
  • ハイパラチューニングはランダム探索とベイズ探索を選択可能。APIの名称は HyperparameterTuner()
  • モデルのデプロイは3種類の方法が選べる。これらは1つのエンドポイントに対して背後で複数のモデルバリアントを作成できる
    • all at once:同時に全てのモデルを置き換え。問題があった時の影響がでかいので、安全に運用する上で正解択になることはほぼないと推測される
    • canary:一部のトラフィックを新規モデルにルーティング、問題がなければ全て置き換え
    • linear:canaryを多段階にし、問題がなければ徐々に置き換え
  • SageMakerエンドポイントはALBのターゲットではない
  • SageMakerの処理ジョブはApache Sparkに対応している

Amazon SageMaker Algorithm

SageMaker上に実装されている機械学習アルゴリズムで、自分のデータを使って学習できる。学習コンテナが用意されている状態なので、その分の手間が省けるという感じ。画像、表データ、テキストなど一通りのアルゴリズムは揃っている。

その他細かいところ

  • XGBoostをcsvで学習するとき、最初のカラムがターゲットで、それ以外が入力データ

Amazon SageMaker Canvas

ノーコードで機械学習モデルをデプロイできる。データラベルが不均衡な場合でもいい感じに学習できる機能が搭載されている。

Amazon SageMaker Debugger

トレーニングジョブのプロファイリングとデバッグを行う。データ準備ジョブのメトリクスの追跡やトレースには使えない。AWS Glue ジョブとは統合できない。

Amaon SageMaker Experiments

アーティファクト、パラメータ、メトリクスをキャプチャできる。トレーニング、バッチ変換、処理ジョブに使える。

Amazon SageMaker Ground Truth

アノテーションサービス。Amazonが抱えている人間のソーシャルワーカーにラベリングを依頼できる(Amazon Mechanical Turk)。秘匿性の高いデータや専門性の高いアノテーションに関してはユーザー自身でアノテーションすることも可能。アノテーションツールも同時に提供されており、物体検出やクラス分類、セマンティックセグメンテーションなどのラベルを作成できる。

また、Ground Truth PlusではLLMの学習用のpreference dataのアノテーションも作成できるようである。

Amazon SageMaker Notebook

Jupyter notebookを立ち上げてSageMakerの学習や推論インスタンスのデプロイができる。ローカルでSageMakerの環境をセットアップしなくても済むことが利点?やってることはBoto3やSageMakerのAPIを呼び出しているだけな気がするので、ローカルで環境作ってAPI叩いても同じことはできる。

Amazon SageMaker Object2Vec

Amazon SageMaker RL

強化学習をする。Deep LearningフレームワークとしてはTensorFlowとMXNetのみ利用可能。DQNとかA3Cとかの有名な(初期の?)アルゴリズムがtoolkitとして提供されている。

Amazon Textract

その名の通り画像からテキストを抽出するOCRサービス。Google Cloud VisionやAzure Document IntelligenceのAWS版。ただし、スキャンした文章を入力の前提としているため、in the wildな画像に対して適用することはできないと推察される。一応手書き文字でもいけるようなので、文書データを学習に使っているモデルと推察される。

Amazon Transcribe

Amazon Pollyの逆で音声をテキストに変換する。文字起こし。whisperと同じ。

Amazon Translate

その名の通り翻訳を行う。リアルタイム翻訳とバッチ翻訳がある。

AWS Panorama

IPカメラと接続してコンピュータビジョンタスクを実行できる。インターネットに接続せずに処理を実行できるため、オフライン環境での実行が要件の場合に選択肢になりうる。オフラインで処理したデータをAWSに送信することもできる。

雑感

  • sagemakerとglueを知っとけばインフラの半分くらいは取れそう
  • 機械学習はそんなに難しくない。何を何に変換したいのか(ex. text -> text、text -> speech)がわかってれば選択肢は選べる
  • (2024/10/15追記)受かってました

Discussion