swastudy’s diary

AWSに関することは楽しみに書いてます。

AWSのコースでGenerative AIを学ぼう!#AI #Coursera

Coursera でAWSのコースでGenerative AI with Large Language Models

Generative AI with Large Language Models | Coursera

を受講しました。 現在、無料で参加することができます。AWSに感謝します!

コースの詳細は以下の通りです

  • Pythonなどのプログラミング言語がわかれば、コースを理解するのに十分です。

  • 日本語の字幕が付いています。

  • コースは3週間で、週に5時間の講義があります。

  • Amazon SageMaker Studioを使用してコースを実践することができます。アカウント

https://studiolab.sagemaker.aws

を申請 することで無料で利用できます。

VPCエンドポイントのセキュリティ設定

以下は、EC2がプライベートサブネット内でAmazon SQSにVPCエンドポイントを介してアクセスする場合のセキュリティの設定例です。

① EC2

EC2 IAMロールを設定し、Amazon SQSのAPI呼び出しを実行できるポリシーを付与します。

② EC2セキュリティグループ

EC2セキュリティグループのルールを設定して、VPCインターフェイスエンドポイントからのインバウンドトラフィックを許可します。

VPCインターフェイスエンドポイントセキュリティグループ

セキュリティグループのルールを使用して、VPCエンドポイントへのアクセスを制限します。セキュリティグループのルールでは、VPC内のプライベートサブネットからのインバウンドトラフィックのみを許可します。

VPCインターフェイスエンドポイント

特定のSQSに対するエンドポイントの使用を許可し、AWSアカウントIDからのアクセスのみを許可します。

{
   "Statement": [{
      "Action": ["sqs:ReceiveMessage","sqs:SendMessage","sqs:DeleteMessage"],
      "Effect": "Allow",
      "Resource": "具体的SQSのARN",
      "Principal": { "AWS": "具体的AWS Account ID" }
   }]
}

Amazon SQS

SQSのポリシーを使用して、VPCエンドポイントからの送信、メッセージの削除などのアクションのみを許可します。

{
  "Version": "2012-10-17",
  "Id": "sqs-queue-resource-policy",
  "Statement": [
    {
      "Sid": "all-messages-sent-from-interface-vpc-endpoint",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "sqs:SendMessage",
      "Resource": "具体的SQSのARN",
      "Condition": {
        "StringEquals": {
          "aws:sourceVpce": "具体的 VPC  Endpoint ID"
        }
      }
    }
  ]
}

Amazon SESを使用した2つのアーキテクチャ

Amazon SESを使用した2つのアーキテクチャを確認しましょう。

ユーザーケース1

ビジネス要件により、クレジットカード取引が完了した際に通知メールを送信する必要があります。支払いの処理とメール送信を同期させると、大量の取引が同時に発生した場合にシステムのボトルネックが発生しやすくなります。

この問題の解決策は、支払い処理とメール送信の同期を使用しない以下のアーキテクチャを採用することです。このアーキテクチャは、小〜中規模の環境に適しています。

Amazon SQS, Amazon SESの非同期にメース送信

利点:サーバーレスアーキテクチャを使用するため、実際の取引が発生した場合にのみコストが発生します。このアーキテクチャの実行は簡単です。

デメリット:Lambdaのスロットリングの問題を回避するために、SQSがLambda関数を制限された数しか呼び出さないように設定することができます。これにより、メール送信プロセスが遅くなり、ユーザーエクスペリエンスに影響が及ぶ可能性があります。

ユーザーケース2

ビジネス要件により、特定の時点で大規模なキャンペーンを実施する必要があり、予定された時間に大量の顧客にメールを送信する必要があります。大規模で正確なスケジュール要件のため、ユーザーケース1のアーキテクチャは使用できません。

Amazon SQS, Amazon SESの大規模なメース送信

Amazon SQSとLambdaを組み合わせたメッセージの効率的な処理

Amazon SQSキュー内のメッセージを処理する際に、Lambda 関数を使用することがよくあるパターンです。Lambdaがメッセージを複数回処理しないようにするには、二つの方法があります。

  • 関数レスポンスにバッチアイテムの失敗を含めるようにイベントソースマッピングを設定します。

  • Amazon SQS APIアクションのDeleteMessageを使用します。

それぞれのメリットとデメリットを確認しましょう。

それぞれのメリットとデメリットを確認しましょう。

Amazon SQS APIの DeleteMessage

Lambdaの処理でエラーメッセージをキューに残したまま、処理済みメッセージを SQS から正常に削除することが必要になります。2021年末まで、LambdaのコードでDeleteMessageを使って個別なメッセージを削除するかまたバッチ削除するのがよく見られるパターンです。しかし、この方法はSQSのAPIのコストがかかります。

イベントソースマッピングの設定

2021年末から、関数レスポンスにバッチアイテム(ReportBatchItemFailures)の失敗を含めるようにイベントソースマッピングを設定して、コストも削減できます。

失敗したバッチ内の正常に処理されたメッセージを再処理しないようにするために、失敗したメッセージのみを再び表示するようにイベントソースマッピングを設定できます。これを部分的なバッチレスポンスと呼びます。部分的なバッチレスポンスをオンにするには、イベントソースマッピングを設定するときに FunctionResponseTypes アクション用に ReportBatchItemFailures を指定します。そうすると、関数が部分的な成功を返すようになるため、レコードでの不必要な再試行回数を減らすことができます。

例えば、CDKで設定します。

new lambdaEventSources.SqsEventSource(this.queue, {
        //他の設定
        reportBatchItemFailures: true,
    });

Python を使用した Lambda での SQS バッチアイテム失敗のレポートします。

def lambda_handler(event, context):
    if event:
        batch_item_failures = []
        
    for record in event["Records"]:
        try:
            #メッセージ処理
        except Exception as e:
            batch_item_failures.append({"itemIdentifier": record['messageId']})

    return {"batchItemFailures": batch_item_failures}

参考

同じ SQS メッセージについて Lambda 関数が再試行されないようにする | AWS re:Post Amazon SQS での Lambda の使用 - AWS Lambda

VPCエンドポイントのコスト削減方法とは

VPC内のEC2が他のAWSサービスに接続するためには、図で示される2つの方法があります。

VPC エンドポイント① を利用する

AWS内のネットワークを介して、他のAWSサービスに接続します。

コストは、固定費(各AZのVPCエンドポイント1つあたりの料金(USD/時間))+変動費(処理データ1GBあたりの料金)になります。

例えば、米国東部(バージニア北部)で、2つのAZ、10のVPCエンドポイント、100GBのデータ送信/1ヶ月の場合、

固定費 = 0.01 (USD/時間) * 2 (AZ) * 24 (時間) * 30 (日) * 10 (VPCエンドポイント) = 144 USD
変動費 = 0.01 (1GB) * 100 = 1USD

NAT Gateway ② を利用する

インターネット経由で、他のAWSサービスに接続します。

コストは、固定費(NATゲートウェイ1つあたりの料金(USD/時間))+変動費(処理データ1GBあたりの料金)になります。

例えば、米国東部(バージニア北部)で、2つのNAT、100GBのデータ送信/1ヶ月の場合
固定費 = 0.045 (USD/時間) * 24 (時間) * 30 (日) * 2 = 64.8 USD
変動費 = 0.045 (1GB) * 100 = 4.5USD

VPC Enpointのコストを削減できるか

コスト面では、固定費はVPCエンドポイント①の方が高くなります。変動費は本番環境でデータ送信が多い場合は①の方が安くなりますが、開発環境の場合はデータ送信が少ないため②の方が安くなることもあります。

セキュリティー面では、本番環境などセキュリティー要件が厳しい場合は、データ送信がAWSネットワーク内で行われるVPCエンドポイント①が推奨されます。

コスト削減の可否
答えは環境によって異なります。本番環境では必ずVPCエンドポイント①を使用する必要がありますが、開発環境などセキュリティー要件が厳しくない場合は、VPCエンドポイント②の方がコストを削減できます。毎月144USD削減されます!

参考

料金 - Amazon VPC | AWS

料金 - AWS PrivateLink | AWS

機械学習の基礎を解説! #ML #AI

「深層学習」、「機械学習」、「生成AI」、「大規模言語モデル」などの用語は、一般に同じように使用されることがありますが、異なる意味を持っています。AIテクノロジーの機能と制限を理解し、適切に用語を理解することは重要です。

 

機械学習(Machine Learning)」

コンピューターがデータから学習し、その学習を元に意思決定や予測を行うためのアルゴリズムを開発するAIの一部分。これらのアルゴリズムはデータセットを「トレーニング」し、新しいデータの予測や分類に利用される。機械学習モデルには、教師あり学習教師なし学習、半教師あり学習強化学習などの種類がある。

「深層学習(Deep Learning)」

多層(「深い」)ニューラルネットワークを使用して、複雑なパターンをモデル化し理解する機械学習の一部分。これらのニューロン層はさまざまな特徴を処理し、その出力を組み合わせて最終結果を生成する。深層学習モデルは大量のデータを処理し、特に画像、音声、テキストの処理に適している。

「生成AI(Generative AI)」

レーニングされたデータを模倣し、新しいデータを生成できるAIモデル。これは敵対的生成ネットワーク(GAN)や変分オートエンコーダー(VAE)などのモデルを使用して実現される。生成AIは、文章コンテンツからビジュアルデザイン、音楽など、さまざまなものを作成できる。

「大規模言語モデル(Large Language Models (LLMs))」

生成AIの一種であり、大規模なテキストデータのコーパスでトレーニングされ、人間のようなテキストを生成できる。テキスト内で使用される前の単語を考慮して、その単語の確率を予測する。これらはテキスト補完、翻訳、要約などのアプリケーションで特に役立つ。これらは生成AIの一種であり、テキストデータの処理に特化して設計されている。

簡単に言えば、大規模言語モデルは生成AIの一部であり、生成AIは機械学習の一部であり、最終的には人工知能の包括的な用語に分類されることが理解されます。