AWS re:Post을(를) 사용하면 다음에 동의하게 됩니다. AWS re:Post 이용 약관

AWS Lambda에서 boto3 및 botocore를 업그레이드하여 최신 AI 모델에 액세스하려면 어떻게 해야 합니까?

3분 분량
0

Amazon Bedrock의 최신 AI 모델에 액세스하기 위해 AWS Lambda에 최신 버전의 boto3 및 botocore를 설치하려고 합니다.

간략한 설명

Python과 함께 Lambda 함수를 사용하여 Amazon Bedrock 모델을 호출하면 다음과 같은 오류가 발생할 수 있습니다. Error: "errorMessage": "Unknown service: 'bedrock'. 이 문제를 해결하려면 Lambda에서 boto3 및 botocore 라이브러리를 최신 버전으로 업그레이드해야 합니다.

해결 방법

사전 요구 사항

시작하기 전에 Amazon Bedrock 기반 모델에 액세스할 수 있는지 확인하십시오.

참고: Amazon Bedrock 기반 모델을 사용할 때는 판매자의 요금 약관이 적용됩니다.

Lambda 계층 생성

다음 AWS Command Line Interface(AWS CLI) 명령은 Linux, Unix 및 macOS 운영 체제에서 작동합니다.

참고: AWS CLI 명령을 실행할 때 오류가 발생하면 AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

  1. 임시 폴더를 만듭니다.

    LIB_DIR=boto3-mylayer/python
    mkdir -p $LIB_DIR

    참고: boto3-mylayer를 임시 폴더 이름으로 바꾸십시오.

  2. **LIB_DIR에 boto3 라이브러리를 설치합니다.
    **

    pip3 install boto3==1.34.44 -t $LIB_DIR
    pip3 install botocore==1.34.44 -t $LIB_DIR
  3. 모든 종속 항목을 /tmp/boto3-mylayer.zip으로 압축합니다.

    cd boto3-mylayer
    zip -r /tmp/boto3-mylayer.zip .

    참고: boto3-mylayer를 임시 폴더 이름으로 바꾸십시오.

  4. 계층을 게시하려면 publish-layer-version 명령을 실행합니다.

    aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb:///tmp/boto3-mylayer.zip

    참고: layer-name을 Lambda 계층 이름으로 바꾸고 boto3-mylayer를 임시 폴더 이름으로 바꾸십시오.

  5. 계층을 게시하면 해당 계층의 ARN을 수신하게 됩니다. 이 절차에서 나중에 사용할 수 있도록 ARN을 텍스트 파일에 복사합니다.

Lambda 함수 생성

  1. Lambda 함수를 생성합니다.
  2. Lambda 함수에 생성된 ](https://docs.aws.amazon.com/lambda/latest/dg/adding-layers.html)계층을 연결[하려면 update-function-configuration 명령을 실행합니다.
    aws lambda update-function-configuration --function-name MY_FUNCTION --layer_ARN
    참고: layer_ARN을 수신된 계층 ARN으로 바꾸십시오.
  3. 업데이트를 테스트하려면 다음 코드를 실행하여 Anthropic Claude 2.1을 호출합니다.
    import boto3
    import json
    import os
    def lambda_handler(event, context):
      print("Boto3 version:", boto3.__version__)
    
      bedrock = boto3.client(service_name='bedrock', region_name='us-east-1', endpoint_url='https://bedrock.us-east-1.amazonaws.com')
    
      bedrock_runtime = boto3.client(service_name='bedrock-runtime', region_name='us-east-1', endpoint_url='https://bedrock-runtime.us-east-1.amazonaws.com')
      models=bedrock.list_foundation_models()
      modelIds = [model['modelId'] for model in models['modelSummaries']]
      print("Models: ", modelIds)
    
      for required_field in ["model"]:
        if required_field not in event:
          return {'statusCode': 400, 'body': f'ERROR: MISSING REQUEST PARAMETER {required_field}'}
      #event = {"model":"anthropic.claude-v2:1", "prompt": "Why is the sky blue?", "max_tokens_to_sample": 4000, "temperature": 0.5, "top_k": 250, "top_p": 1, "stop_sequences": ["Command:"]}
      print(f"EVENT: {event}")
      bedrock_model = event.pop("model")
      print(f"BEDROCK_MODEL: {bedrock_model}")
      if bedrock_model not in modelIds:
        return {'statusCode': 400, 'body': f'ERROR: INVALID MODEL {bedrock_model} REQUESTED. SUPPORTED MODELS: {modelIds}'}
    
      if "claude" in bedrock_model:
        event["prompt"] = f'Human: {event["prompt"]}\n\nAssistant:'
    
      bedrock_str = json.dumps(event)
      print(f"BEDROCK_STR: {bedrock_str}")
      modelId = 'anthropic.claude-v2:1'
    
      bodyprompt = {"prompt":"\n\nHuman:who is the prime minister of India\n\nAssistant:","max_tokens_to_sample":42,"temperature":0.5,"top_k":250,"top_p":1,"anthropic_version":"bedrock-2023-05-31"}
      response = bedrock_runtime.invoke_model(body=bedrock_str, modelId=modelId, accept='application/json', contentType='application/json')
      #response = bedrock.invoke_model(body= json.dumps(bodyprompt), modelId=bedrock_model, accept='application/json', contentType='application/json')
      response_body = json.loads(response.get('body').read())
      print(response_body)
    
      return {'statusCode': 200, 'body': json.dumps(response_body)}
    참고: region_nameendpoint_url을 Amazon Bedrock의 AWS 리전 정보로 바꾸십시오.