Amazon BedrockのClaude 3.5 Haiku 低価格で高性能な最新AIモデルを試してみた

Amazon BedrockのClaude 3.5 Haiku 低価格で高性能な最新AIモデルを試してみた

Amazon BedrockにAnthropic社の最新AIモデル「Claude 3.5 Haiku」が登場。従来のモデルと比較し、コーディング性能が大幅に向上し、低コストで高い性能を実現しています。
Clock Icon2024.11.05

2024年11月4日、Anthropicの最新モデル Claude 3.5 Haiku が Amazon Bedrock で サポートされました。

https://aws.amazon.com/jp/about-aws/whats-new/2024/11/anthropics-claude-3-5-haiku-model-amazon-bedrock/

2024年10月の発表により、従来のClaude 3.5 Sonnet や 3.0 Opus に匹敵する性能で利用できるとされている、Claude 3.5 Haiku を、Amazon Bedrockで試す機会がありましたので、紹介させていただきます。

0eb9a1b7d5db74a6d21500e9f188c83beef3842e-2601x1932

Introducing computer use, a new Claude 3.5 Sonnet, and Claude 3.5 Haiku

モデル有効化

オレゴンリージョンのBedrockで、 Claude 3.5 Haiku のモデルアクセスを有効化しました。

haiku_モデルアクセス

https://dev.classmethod.jp/articles/if-you-want-to-try-out-amazon-bedrock-from-the-management-console-you-can-set-up-access-to-base-models/

オンデマンド価格比較

Claude 3.5 Haikuのオンデマンド単価

  • Claude 3 Haiku 4倍
  • Claude 3.5 Sonnet の1/3
  • Claude 3 Opus の1/15

の設定となっています。

US East、US West オンデマンド価格(USD)

Anthropic models Price per 1,000 input tokens Price per 1,000 output tokens
Claude 3 Haiku 0.00025 0.00125
Claude 3.5 Haiku 0.00100 0.00500
Claude 3.5 Sonnet** 0.00300 0.015000
Claude 3 Sonnet 0.00300 0.01500
Claude 3 Opus* 0.01500 0.07500

試してみた

下記のプロンプトで、実行環境として Lambdaを利用するCodeBuild の設置用のCloudFormationテンプレートの作成を試みました

- Type: ARM_LAMBDA_CONTAINER
- ComputeType: BUILD_LAMBDA_1GB
- Image: aws/codebuild/amazonlinux-aarch64-lambda-standard:python3.12
の ARMのLambdaを実行環境とするCodeBuild 上で、
SDK BOTO3で STS.Client.get_caller_identity() を実行する処理をBuildSpecで定義。
実行結果は標準のログ出力にJSONで出力し、CloudWatch Logsで確認できるようにしたいです。

この処理を実現するために必要な、IAM、CloudWatchロググループを含む、CloudFormationテンプレートを生成してください。

Claude 3.5 Haiku

以下に、ご要望に対応するCloudFormationテンプレートを示します:
AWSTemplateFormatVersion: '2010-09-09'
Description: CodeBuild Project for STS Caller Identity Check with ARM Lambda Environment

Resources:
  # CloudWatch Logsロググループ
  CodeBuildLogGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: /aws/codebuild/sts-identity-check
      RetentionInDays: 30

  # IAMロール
  CodeBuildServiceRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: codebuild.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
      Policies:
        - PolicyName: STSIdentityAccessPolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - sts:GetCallerIdentity
                Resource: '*'

  # CodeBuildプロジェクト
  STSIdentityCheckProject:
    Type: AWS::CodeBuild::Project
    Properties:
      Name: sts-identity-check
      ServiceRole: !GetAtt CodeBuildServiceRole.Arn
      LogsConfig:
        CloudWatchLogs:
          GroupName: !Ref CodeBuildLogGroup
          Status: ENABLED
      Artifacts:
        Type: NO_ARTIFACTS
      Environment:
        Type: ARM_LAMBDA_CONTAINER
        ComputeType: BUILD_LAMBDA_1GB
        Image: aws/codebuild/amazonlinux-aarch64-lambda-standard:python3.12
        ImagePullCredentialsType: CODEBUILD
      Source:
        Type: NO_SOURCE
        BuildSpec: |
          version: 0.2
          phases:
            install:
              runtime-versions:
                python: 3.12
            build:
              commands:
                - |
                  python3 -c "
                  import boto3
                  import json
                  import sys

                  try:
                      # STSクライアントの作成
                      sts_client = boto3.client('sts')

                      # 呼び出し元のアイデンティティを取得
                      caller_identity = sts_client.get_caller_identity()

                      # 標準出力にJSONで出力
                      print(json.dumps({
                          'UserId': caller_identity['UserId'],
                          'Account': caller_identity['Account'],
                          'Arn': caller_identity['Arn']
                      }, indent=2))

                  except Exception as e:
                      print(f'Error retrieving caller identity: {str(e)}', file=sys.stderr)
                      sys.exit(1)
                  "

Outputs:
  CodeBuildProjectName:
    Description: Name of the CodeBuild Project
    Value: !Ref STSIdentityCheckProject

  CloudWatchLogGroupName:
    Description: Name of the CloudWatch Logs Group
    Value: !Ref CodeBuildLogGroup

このテンプレートの主な特徴:

  1. ARM Lambda用のCodeBuild環境

    • Type: ARM_LAMBDA_CONTAINER
    • ComputeType: BUILD_LAMBDA_1GB
    • Image: amazonlinux-aarch64-lambda-standard:python3.12
  2. CloudWatch Logsの設定

    • ロググループを作成
    • ログ保持期間を30日に設定
    • CodeBuildプロジェクトにログ設定を追加
  3. IAMロール

    • CloudWatchへのログ出力権限
    • STSのget_caller_identity呼び出し権限
  4. BuildSpec

    • Python 3.12を使用
    • 標準出力にJSONで結果を出力
    • エラー発生時は標準エラー出力に出力し、終了コード1で終了

使用方法:

  1. このテンプレートをデプロイ
  2. CodeBuildプロジェクトを実行
  3. CloudWatch Logsの /aws/codebuild/sts-identity-check ロググループで実行結果を確認

出力される情報:

  • UserId
  • Account
  • Arn

注意点:

  • 必要に応じて、ログ保持期間などを調整してください
  • 権限は最小権限の原則に従って適宜調整してください

実行すると、CloudWatch Logsに以下のような形式でログが出力されます:

{
  "UserId": "AROAEXAMPLEID:session-name",
  "Account": "123456789012",
  "Arn": "arn:aws:sts::123456789012:assumed-role/role-name/session-name"
}

Claude 3 Haiku

はい、以下のようなCloudFormationテンプレートを生成することができます。このテンプレートでは、ARM_LAMBDA_CONTAINERのCodeBuildプロジェクトを作成し、BOTO3を使ってSTS.Client.get_caller_identity()の処理を実行し、その結果を標準ログ出力に出力するように設定しています。また、CloudWatchログにもログ出力されるよう設定しています。
AWSTemplateFormatVersion: '2010-09-09'
Description: CodeBuild project to execute BOTO3 STS get_caller_identity on ARM Lambda

Parameters:
  CodeBuildProjectName:
    Type: String
    Default: my-codebuild-project

Resources:

  CloudWatchLogsGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: /aws/codebuild/my-codebuild-project
      RetentionInDays: 7

  CodeBuildRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal:
            Service: codebuild.amazonaws.com
          Action: 'sts:AssumeRole'
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
      - arn:aws:iam::aws:policy/AWSLambda_FullAccess
      - arn:aws:iam::aws:policy/AmazonSQSFullAccess
      - arn:aws:iam::aws:policy/AmazonS3FullAccess

  CodeBuildProject:
    Type: AWS::CodeBuild::Project
    Properties:
      Artifacts:
        Type: NO_ARTIFACTS
      Environment:
        ComputeType: BUILD_LAMBDA_1GB
        Image: aws/codebuild/amazonlinux-aarch64-lambda-standard:python3.12
        Type: ARM_LAMBDA_CONTAINER
        EnvironmentVariables:
        - Name: AWS_DEFAULT_REGION
          Value: !Ref AWS::Region
      Name: !Ref CodeBuildProjectName
      ServiceRole: !GetAtt CodeBuildRole.Arn
      Source:
        BuildSpec: |
          version: 0.2

          phases:
            install:
              runtime-versions:
                python: 3.12
            pre_build:
              commands:
                - pip install boto3
            build:
              commands:
                - |
                  import boto3
                  import json
                  sts = boto3.client('sts')
                  result = sts.get_caller_identity()
                  print(json.dumps(result, indent=2))
            post_build:
              commands:
                - echo "CodeBuild project finished"
        Type: CODEPIPELINE
      Logs:
        CloudWatchLogs:
          GroupName: !Ref CloudWatchLogsGroup
          StreamName: !Ref CodeBuildProject

Outputs:
  CodeBuildProjectName:
    Description: The name of the CodeBuild project
    Value: !Ref CodeBuildProject

このテンプレートを使用すると、以下のことができます:

  1. CodeBuildProjectName パラメーターを指定して、CodeBuildプロジェクトを作成します。
  2. CodeBuildプロジェクトの実行時に、BOTO3のSTS.Client.get_caller_identity()の結果がJSON形式で標準ログ出力に出力されます。
  3. CloudWatchログを確認することで、その出力結果を確認できます。

このテンプレートは、CodeBuildプロジェクトの作成、IAMロールの設定、ビルドスペックの定義、CloudWatchロググループの作成などを行っています。ご利用の際は、必要に応じて適宜変更をお願いいたします。

差分

3.5 と 3.0 の出力したCloudFormationテンプレート

  • CodeBuildServiceRole、3.5 Haikuは より最小権限なポリシーが設定されている。
  • boto3の実行結果をパース、例外処理も実装されている

3.5の方がより実用性の高いテンプレートが生成されていました。

まとめ

Claude 3.5 Haiku は、先行して利用可能となっていた Claude 3.5 Sonnet (v2) と同様、コーディング性能が強化され、より実用的なコード生成に利用できる可能性があります。

前世代の Claude 3 Haiku と比較するとオンデマンド単価は上昇しましたが、Claude 3.5 Sonnet、Claude 3 Opusと比較すると依然として低価格です。

現時点のClaude 3.5 Haiku はは画像処理など一部の機能が制限されていますが、費用対効果に優れたモデルの一つとして、ぜひお試し下さい。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.