

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

# 사용자 지정 모델 가져오기를 위한 코드 샘플
<a name="custom-model-import-code-samples"></a>

다음 코드 샘플은 권한을 설정하고, 사용자 지정 모델 가져오기 작업을 만들고, 가져오기 작업 및 가져온 모델의 세부 정보를 확인하고, 가져온 모델을 삭제하는 방법을 보여줍니다. 이러한 코드 샘플은 Mistral AI, Llama, Qwen, FlanGPTBigCode, 및 Mixtral 아키텍처에 적용됩니다.

## 중요: 모델 아키텍처 지원
<a name="model-architecture-support"></a>

**GPT-OSS 모델 제한 사항:**
+ **Converse API 지원되지 않음:** GPT-OSS 기반 사용자 지정 모델 가져오기 모델은 Converse API 또는 ConverseStream API를 지원하지 않습니다.
+ **대신 InvokeModel API 사용:** 고객은 GPT-OSS 기반 사용자 지정 모델로 작업할 때 [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) API를 사용해야 합니다.
+ **API 스키마 요구 사항:** GPT-OSS 모델에는 OpenAI 호환 API 스키마가 필요합니다.
  + 완료 요청의 완료 형식
  + 채팅 요청에 대한 ChatCompletion 형식
  + 응답 형식은 OpenAI API 사양을 따릅니다.
+ **Converse API에 지원되는 모델:** Converse API는 Mistral AI, , Llama, QwenFlanGPTBigCode, 및 Mixtral 아키텍처에서만 지원됩니다.

[InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) API를 사용한 GPT-OSS 모델 사용 예제는 요청/응답 스키마에 대한 OpenAI API 설명서를 참조하세요.

1. 가져오기 작업을 위한 모델 파일 준비

   1. Amazon S3 버킷에서 모델을 가져오는 경우 모델 파일을 Hugging Face 가중치 형식으로 제공해야 합니다. 자세한 내용은 [Amazon S3에서 모델 소스 가져오기](model-customization-import-model.md#model-customization-import-model-source) 섹션을 참조하세요.

   1. 모델 파일에 대한 Amazon S3 버킷을 만듭니다(이름은 고유해야 함).

   1. 모델 파일을 버킷에 업로드합니다.

1. 모델 파일에 액세스할 수 있는 정책을 만들고, Amazon Bedrock 신뢰 관계가 있는 IAM 역할에 연결합니다. 원하는 방법의 탭을 선택한 후 다음 단계를 따릅니다.

------
#### [ Console ]

   1. 모델 파일이 포함된 Amazon S3 버킷에 액세스할 수 있도록 Amazon S3 정책을 만듭니다.

      1. [https://console.aws.amazon.com/iam](https://console.aws.amazon.com/iam)에서 IAM 콘솔로 이동하여 왼쪽 탐색 창에서 **정책**을 선택합니다.

      1. **정책 생성**을 선택한 다음 **JSON**을 선택하여 **정책 편집기**를 엽니다.

      1. 다음 정책을 붙여넣고 *\$1\$1model-file-bucket\$1*을 버킷 이름으로 바꾼 후 **다음**을 선택합니다.

------
#### [ JSON ]

****  

         ```
         {
             "Version":"2012-10-17",		 	 	 
             "Statement": [
                 {
                     "Effect": "Allow",
                     "Action": [
                         "s3:GetObject",
                         "s3:ListBucket"
                     ],
                     "Resource": [
                         "arn:aws:s3:::${model-file-bucket}",
                         "arn:aws:s3:::${model-file-bucket}/*"
                     ]
                   }
                 ]
               }
         ```

------

      1. *S3BucketPolicy* 정책의 이름을 지정하고 **정책 생성**을 선택합니다.

   1. IAM 역할을 만들고 여기에 정책을 연결합니다.

      1. 왼쪽 탐색 창에서 **역할**을 선택한 후 **역할 생성**을 선택합니다.

      1. **사용자 지정 신뢰 정책 **을 선택하고 다음 정책을 붙여넣은 후 **다음**을 선택합니다.

------
#### [ JSON ]

****  

         ```
         {
             "Version":"2012-10-17",		 	 	 
             "Statement": [
                 {
                     "Effect": "Allow",
                     "Principal": {
                         "Service": "bedrock.amazonaws.com"
                     },
                     "Action": "sts:AssumeRole"
                 }
             ] 
         }
         ```

------

      1. 만든 *S3BucketPolicy* 정책을 검색하고 확인란을 선택한 후 **다음**을 선택합니다.

      1. *MyImportModelRole* 역할의 이름을 지정하고 *역할 생성*을 선택합니다.

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

   1. *BedrockTrust.json*이라는 파일을 만들고 다음 정책을 붙여넣습니다.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "bedrock.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ] 
      }
      ```

------

   1. *S3BucketPolicy.json*이라는 파일을 하나 더 만들고 다음 정책을 붙여넣기한 다음 *\$1\$1model-file-bucket\$1*을 버킷 이름으로 바꿉니다.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "s3:GetObject",
                      "s3:ListBucket"
                  ],
                  "Resource": [
                      "arn:aws:s3:::${model-file-bucket}",
                      "arn:aws:s3:::${model-file-bucket}/*"
                  ]
              }
           ]
      }
      ```

------

   1. 터미널에서, 앞서 만든 정책이 포함된 폴더로 이동합니다.

   1. [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html) 요청으로 *MyImportModelRole*이라는 IAM 역할을 만들고, 만들어 둔 *BedrockTrust.json* 신뢰 정책을 연결합니다.

      ```
      aws iam create-role \
          --role-name MyImportModelRole \
          --assume-role-policy-document file://BedrockTrust.json
      ```

   1. 만들어 둔 *S3BucketPolicy.json* 파일을 사용하여 S3 데이터 액세스 정책을 만드는 [CreatePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html) 요청을 수행합니다. 응답은 정책에 대해 `Arn`을 반환합니다.

      ```
      aws iam create-policy \
          --policy-name S3BucketPolicy \
          --policy-document file://S3BucketPolicy.json
      ```

   1. [AttachRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachRolePolicy.html) 요청으로 S3 데이터 액세스 정책을 역할에 연결하고, 이전 단계의 응답에서 `policy-arn`을 ARN으로 바꿉니다.

      ```
      aws iam attach-role-policy \
          --role-name MyImportModelRole \
          --policy-arn ${policy-arn}
      ```

------
#### [ Python ]

   1. 다음 코드를 실행하여 [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html) 요청으로 *MyImportModel*이라는 IAM 역할을 만들고, [CreatePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html) 요청으로 *S3BucketPolicy*라는 S3 데이터 액세스 정책을 만듭니다. S3 데이터 액세스 정책의 경우 *\$1\$1model-file-bucket\$1*을 S3 버킷 이름으로 바꿉니다.

      ```
      import boto3
      import json
      
      iam = boto3.client("iam")
      
      iam.create_role(
          RoleName="MyImportModelRole",
          AssumeRolePolicyDocument=json.dumps({
              "Version": "2012-10-17",		 	 	 
              "Statement": [
                  {
                      "Effect": "Allow",
                      "Principal": {
                          "Service": "bedrock.amazonaws.com"
                      },
                      "Action": "sts:AssumeRole"
                  }
              ] 
          })
      )
      
      iam.create_policy(
          PolicyName="S3BucketPolicy",
          PolicyDocument=json.dumps({
              "Version": "2012-10-17",		 	 	 
              "Statement": [
                  {
                      "Effect": "Allow",
                      "Action": [
                          "s3:GetObject",
                          "s3:ListBucket"
                      ],
                      "Resource": [
                          "arn:aws:s3:::${training-bucket}",
                          "arn:aws:s3:::${training-bucket}/*"
                      ]
                  }
                ]
             })
           )
      ```

   1. 응답에서 `Arn`이 반환됩니다. 다음 코드 스니펫을 실행하여 [AttachRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachRolePolicy.html) 요청을 수행하고 *\$1\$1policy-arn\$1*을 반환된 `Arn`으로 바꿉니다.

      ```
      iam.attach_role_policy(
          RoleName="MyImportModelRole",
          PolicyArn="${policy-arn}"
      )
      ```

------

1. 언어를 선택하여 사용자 지정 모델 가져오기 API 작업을 직접적으로 호출할 코드 샘플을 확인합니다.

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

사용자 지정 모델 가져오기 작업을 제출하려면 터미널을 열고 명령줄에서 다음 명령을 실행하여 *\$1\$1my-import-model-role-arn\$1*을 설정한 모델 역할로 바꾸고 *s3-bucket-path*를 모델 파일의 S3 버킷 경로로 바꿉니다.

```
aws bedrock create-model-import-job 
    --job-name MyImportedModelJobName
    --imported-model-name MyImportedModelName
    --role-arn ${my-import-model-role-arn}  
    --model-data-source '{"s3DataSource": {"s3Uri": s3-bucket-path }}
```

응답은 *jobArn*을 반환합니다. 사용자 지정 가져오기 작업이 완료되기까지 약간의 시간이 걸립니다. `jobArn`을 다음 명령과 함께 사용하여 가져오기 작업의 상태를 확인할 수 있습니다.

다음 필드는 선택 사항입니다.
+ VPC 구성을 추가하려면 위 명령에 다음과 같은 인수를 추가하여 보안 그룹 및 서브넷을 지정합니다.

  ```
     -\\-vpc-config '{securityGroupIds": ["sg-xx"], "subnetIds": ["subnet-yy", "subnet-zz"]}'
  ```
+ KMS 키로 모델을 암호화하려면 위 명령에 다음 인수를 추가하여, 모델을 암호화하는 데 사용할 키를 지정하기 위한 값을 바꿉니다.

  ```
     -\\-customModelKmsKeyId 'arn:aws:kms:region:account-id:key/key-id'
  ```
+ 태그를 추가하려면 위 명령에 다음과 같은 인수를 추가하여, 키와 값을 작업 및/또는 출력 모델에 연결할 태그로 바꿉니다. 그리고 키/값 페어는 공백으로 구분해야 합니다.

  ```
     -\\-tags key=key1,value=value1 key=key2,value=value2
  ```

응답은 *jobArn*을 반환합니다. 사용자 지정 가져오기 작업이 완료되기까지 약간의 시간이 걸립니다. `jobArn`을 다음 명령과 함께 사용하여 가져오기 작업의 상태를 확인할 수 있습니다.

```
aws bedrock get-model-import-job \
    --job-identifier "jobArn"
```

다음과 비슷한 응답이 반환됩니다.

```
{
    "jobArn": ${job-arn} ,
    "jobName": MyImportedModelJobName,
    "importedModelName": MyImportedModelName,
    "roleArn": ${my-role-arn},
    "modelDataSource": {
        "s3DataSource": {
            "s3Uri": "${S3Uri}"
        }
    },
    "status": "Complete",
    "creationTime": "2024-08-13T23:38:42.457Z",
    "lastModifiedTime": "2024-08-13T23:39:25.158Z"
```

`status`가 `Complete`이면 가져오기 작업이 완료된 것입니다.

새로 가져온 모델에서 추론을 실행하려면 가져온 모델의 ARN을 `model-id`로 제공해야 합니다. 가져온 모델의 ARN을 가져옵니다.

```
aws bedrock list-imported-models              
```

응답에는 모델 이름과 모델 ARN이 포함됩니다. 모델 ARN을 사용하여 가져온 모델을 간접적으로 호출합니다. 자세한 내용은 [InvokeModel을 사용하여 단일 프롬프트 제출](inference-invoke.md) 섹션을 참조하세요.

```
{
    "modelSummaries": [
        {
            "modelArn": model-arn,
            "modelName": "MyImportedModelName",
            "modelArchitecture":model-architecture,
            "instructSupported":Y,
            "creationTime": "2024-08-13T19:20:14.058Z"
            
        }
    ]
}
```

가져온 모델을 삭제하려면 터미널을 열고 삭제하려는 모델의 모델 이름 또는 모델 ARN을 사용하여 명령줄에서 다음 명령을 실행합니다.

```
aws bedrock delete-imported-model 
                --model-identifier MyImportedModelName
```

------
#### [ Python ]

다음 코드 스니펫을 실행하여 사용자 지정 모델 가져오기 작업을 제출합니다. *my-region*을 모델을 가져온 리전으로, *\$1\$1my-import-model-role-arn\$1*을 설정한 *MyImportModelRole*의 ARN으로 바꾸고 *\$1\$1model-file-bucket\$1*을 S3 버킷 이름으로 바꿉니다.

```
import boto3
import json

REGION_NAME = my-region
bedrock = boto3.client(service_name='bedrock',
                       region_name=REGION_NAME)

JOB_NAME = MyImportedModelJobName 
ROLE_ARN = ${my-import-model-role-arn}
IMPORTED_MODEL_NAME = ImportedModelName
S3_URI = ${S3Uri}

# createModelImportJob API
create_job_response = bedrock.create_model_import_job(
    jobName=JOB_NAME,
    importedModelName=IMPORTED_MODEL_NAME,
    roleArn=ROLE_ARN,
    modelDataSource={
        "s3DataSource": {
            "s3Uri": S3_URI
        }
    },
)
job_arn = create_job_response.get("jobArn")
```

다음 필드는 선택 사항입니다.
+ VPC 구성을 추가하려면 위 명령에 다음과 같은 인수를 추가하여 보안 그룹 및 서브넷을 지정합니다.

  ```
     vpc-config = {'securityGroupIds: ["sg-xx".], 'subnetIds': [subnet-yy, 'subnet-zz']}'
  ```
+ KMS 키로 모델을 암호화하려면 위 명령에 다음 인수를 추가하여, 모델을 암호화하는 데 사용할 키를 지정하기 위한 값을 바꿉니다.

  ```
     importedModelKmsKeyId = 'arn:aws:kms:region:account-id:key/key-id'
  ```
+ 태그를 추가하려면 위 명령에 다음과 같은 인수를 추가하여, 키와 값을 작업 및/또는 출력 모델에 연결할 태그로 바꿉니다. 그리고 키/값 페어는 공백으로 구분해야 합니다.

  ```
     jobTags key=key1,value=value1 key=key2,value=value2
  ```

응답은 jobArn을 반환합니다.

```
               job_arn = create_job_response.get("jobArn")
```

사용자 지정 가져오기 작업이 완료되기까지 약간의 시간이 걸립니다. `jobArn`을 다음 명령과 함께 사용하여 가져오기 작업의 상태를 확인할 수 있습니다.

```
bedrock.get_model_import_job(jobIdentifier=jobArn)
```

`status`가 `Completed`이면 가져오기 작업이 완료된 것입니다.

새로 가져온 모델에서 추론을 실행하려면 가져온 모델의 ARN을 `model-id`로 제공해야 합니다. 가져온 모델의 ARN을 가져옵니다.

```
response_pt = bedrock.list_imported_models(
    creationTimeBefore=datetime (2015,1,1,
    creationTimeAfter= datetime (2015,1,1,
    nameContains = 'MyImportedModelName,
    maxresults = 123
    nextToken = 'none',
    sortBy = 'creationTime',
    sortOrder = 'Ascending'
```

응답은 가져온 모델의 다른 세부 정보와 함께 `modelArn`을 반환합니다.

```
{
    'nextToken': '',
    'modelSummaries': [
        {
            'modelArn': 'your-model-arn',
            'modelName': 'MyImportedModelName',
            'modelArchitecture':model-architecture,
            'instructSupported':Y,
            'creationTime': datetime(2015, 1, 1)
        },
    ]
```

모델 ARN을 사용하여 가져온 모델을 간접적으로 호출합니다. 자세한 내용은 [InvokeModel을 사용하여 단일 프롬프트 제출](inference-invoke.md) 섹션을 참조하세요.

가져온 모델을 삭제하려면 삭제하려는 모델의 모델 이름 또는 모델 ARN을 사용하여 다음 명령을 실행합니다.

```
response = client.delete_imported_model(
    modelIdentifier='MyImportedModelName'
            )
```

------