

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 프로비저닝된 처리량의 코드 예제
<a name="prov-thru-code-examples"></a>

다음 코드 예제에서는 AWS CLI및 Python SDK를 사용하여 프로비저닝된 처리량을 생성하는 방법과 이를 관리하고 호출하는 방법을 보여줍니다. 파운데이션 모델 또는 이미 사용자 지정한 모델에서 프로비저닝된 처리량을 생성할 수 있습니다. 시작하기 전에 다음 사전 조건을 수행합니다.

**사전 조건**

다음 예제에서는 Amazon Nova Lite 모델 ID가 인 모델을 사용합니다`amazon.nova-lite-v1:0:24k`. 아직 하지 않았다면의 단계에 Amazon Nova Lite 따라에 대한 액세스를 요청합니다[SDK 및 CLI를 사용하여 모델 액세스 관리](model-access.md#model-access-modify).

다른 파운데이션 모델 또는 사용자 지정 모델에 대해 프로비저닝된 처리량을 구매하려면 다음을 수행해야 합니다.

1. 다음 중 하나를 수행하여 모델의 ID(파운데이션 모델의 경우), 이름(사용자 지정 모델의 경우) 또는 ARN(둘 중 하나)을 찾습니다.
   + 파운데이션 모델의 프로비저닝된 처리량을 구매하는 경우 다음 방법 중 하나로 프로비저닝을 지원하는 모델의 ID 또는 Amazon 리소스 이름(ARN)을 찾습니다.
     + 테이블에서 값을 조회합니다.
     + [ListFoundationModels](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_ListFoundationModels.html) 요청을 보내고 `byInferenceType` 값을 로 지정`PROVISIONED`하여 프로비저닝을 지원하는 모델 목록을 확인합니다. `modelId` 또는 `modelArn` 필드에서 값을 찾습니다.
   + 사용자 지정 모델의 프로비저닝된 처리량을 구매하는 경우 다음 방법 중 하나로 사용자 지정한 모델의 이름 또는 Amazon 리소스 이름(ARN)을 찾습니다.
     + Amazon Bedrock 콘솔의 왼쪽 탐색 창에서 **사용자 지정 모델을** 선택합니다. **모델** 목록에서 사용자 지정 모델의 이름을 찾거나 선택한 다음 모델 **세부 정보에서 모델** **ARN**을 찾습니다.
     + [ListCustomModels](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_ListCustomModels.html) 요청을 보내고 응답에서 사용자 지정 모델의 `modelName` 또는 `modelArn` 값을 찾습니다.

1. 아래 예제에서 [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) 요청`body`의를에서 찾아 모델 본문의 형식과 일치하도록 수정합니다[파운데이션 모델의 추론 요청 파라미터 및 응답 필드](model-parameters.md).

원하는 방법의 탭을 선택한 후 다음 단계를 따릅니다.

------
#### [ AWS CLI ]

1. 터미널에서 다음 명령을 실행하여 [CreateProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateProvisionedModelThroughput.html) 요청을 전송하여 *MyPT*라는 커밋 없는 프로비저닝된 처리량을 생성합니다.

   ```
   aws bedrock create-provisioned-model-throughput \
      --model-units 1 \
      --provisioned-model-name MyPT \
      --model-id amazon.nova-lite-v1:0:24k
   ```

1. 응답은 `provisioned-model-arn`을 반환합니다. 생성이 완료될 때까지 잠시 기다립니다. 상태를 확인하려면 다음 명령을 실행`provisioned-model-id`하여 [GetProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetProvisionedModelThroughput.html) 요청을 보내고 프로비저닝된 모델의 이름 또는 ARN을 로 제공합니다.

   ```
   aws bedrock get-provisioned-model-throughput \
       --provisioned-model-id ${provisioned-model-arn}
   ```

1. [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) 요청을 전송하여 프로비저닝된 모델로 추론을 실행합니다. `CreateProvisionedModelThroughput` 응답에서 반환된 프로비저닝된 모델의 ARN을 로 제공합니다`model-id`. 출력은 현재 폴더에서 *output.txt* 파일에 작성됩니다.

   ```
   aws bedrock-runtime invoke-model \
       --model-id ${provisioned-model-arn} \
       --body '{
                   "messages": [{
                       "role": "user",
                       "content": [{
                           "text": "Hello"
                       }]
                   }],
                   "inferenceConfig": {
                       "temperature":0.7
                   }
               }' \
       --cli-binary-format raw-in-base64-out \
       output.txt
   ```

1. 다음 명령을 사용하여 프로비저닝된 처리량을 삭제하려면 [DeleteProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_DeleteProvisionedModelThroughput.html) 요청을 보냅니다. 프로비저닝된 처리량에 대해서 더 이상 요금이 부과되지 않습니다.

   ```
   aws bedrock delete-provisioned-model-throughput 
     --provisioned-model-id MyPT
   ```

------
#### [ Python (Boto) ]

다음 코드 조각은 프로비저닝된 처리량을 생성하여 이에 대한 정보를 얻고 프로비저닝된 처리량을 호출하는 과정을 안내합니다.

1. *MyPT*라는 커밋 없는 프로비저닝된 처리량을 생성하고 프로비저닝된 처리량의 ARN을 *provisioned\$1model\$1arn*이라는 변수에 할당하려면 다음 [CreateProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateProvisionedModelThroughput.html) 요청을 보냅니다.

   ```
   import boto3 
   
   provisioned_model_name = 'MyPT'
   
   bedrock = boto3.client(service_name='bedrock')
   response = bedrock.create_provisioned_model_throughput(
       modelUnits=1,
       provisionedModelName=provisioned_model_name, 
       modelId='amazon.nova-lite-v1:0:24k' 
   )
                           
   provisioned_model_arn = response['provisionedModelArn']
   ```

1. 생성이 완료될 때까지 잠시 기다립니다. 다음 코드 스니펫을 실행하여 상태를 확인할 수 있습니다. 프로비저닝된 처리량의 이름 또는 [CreateProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateProvisionedModelThroughput.html) 응답에서 반환된 ARN을 `provisionedModelId`로 제공할 수 있습니다.

   ```
   bedrock.get_provisioned_model_throughput(provisionedModelId=provisioned_model_name)
   ```

1. 다음 명령을 사용하고 프로비저닝된 모델의 ARN을 로 사용하여 업데이트된 프로비저닝된 모델을 사용하여 추론을 실행합니다`modelId`.

   ```
   import json
   import logging
   import boto3
   
   from botocore.exceptions import ClientError
   
   
   class ImageError(Exception):
       "Custom exception for errors returned by the model"
   
       def __init__(self, message):
           self.message = message
   
   
   logger = logging.getLogger(__name__)
   logging.basicConfig(level=logging.INFO)
   
   
   def generate_text(model_id, body):
       """
       Generate text using your provisioned custom model.
       Args:
           model_id (str): The model ID to use.
           body (str) : The request body to use.
       Returns:
           response (json): The response from the model.
       """
   
       logger.info(
           "Generating text with your provisioned custom model %s", model_id)
   
       brt = boto3.client(service_name='bedrock-runtime')
   
       accept = "application/json"
       content_type = "application/json"
   
       response = brt.invoke_model(
           body=body, modelId=model_id, accept=accept, contentType=content_type
       )
       response_body = json.loads(response.get("body").read())
   
       finish_reason = response_body.get("error")
   
       if finish_reason is not None:
           raise ImageError(f"Text generation error. Error is {finish_reason}")
   
       logger.info(
           "Successfully generated text with provisioned custom model %s", model_id)
   
       return response_body
   
   
   def main():
       """
       Entrypoint for example.
       """
       try:
           logging.basicConfig(level=logging.INFO,
                               format="%(levelname)s: %(message)s")
   
           model_id = provisioned-model-arn
   
           body = json.dumps({
               "inputText": "what isAWS?"
           })
   
           response_body = generate_text(model_id, body)
           print(f"Input token count: {response_body['inputTextTokenCount']}")
   
           for result in response_body['results']:
               print(f"Token count: {result['tokenCount']}")
               print(f"Output text: {result['outputText']}")
               print(f"Completion reason: {result['completionReason']}")
   
       except ClientError as err:
           message = err.response["Error"]["Message"]
           logger.error("A client error occurred: %s", message)
           print("A client error occured: " +
                 format(message))
       except ImageError as err:
           logger.error(err.message)
           print(err.message)
   
       else:
           print(
               f"Finished generating text with your provisioned custom model {model_id}.")
   
   
   if __name__ == "__main__":
       main()
   ```

1. 다음 코드 스니펫을 사용해 프로비저닝된 처리량을 삭제합니다. 프로비저닝된 처리량에 대해서 더 이상 요금이 부과되지 않습니다.

   ```
   bedrock.delete_provisioned_model_throughput(provisionedModelId=provisioned_model_name)
   ```

------