

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

# LoRA 어댑터가 있는 모델에 대한 권장 사항 가져오기
<a name="generative-ai-inference-recommendations-adapters"></a>

Low-Rank Adaptation(LoRA)은 동결된 기본 모델 위에 작은 어댑터 가중치 세트를 훈련하는 파라미터 효율적인 미세 조정 기술입니다. 하나의 엔드포인트에서 단일 기본 모델을 공유하는 많은 어댑터를 제공할 수 있습니다. 이는 미세 조정된 각 변형에 대해 별도의 모델 사본을 배포하는 것보다 비용 효율적입니다.

추천 작업에 어댑터를 추가하면 SageMaker AI는 크기를 조정하고 *다중 어댑터* 배포를 벤치마킹합니다. 이 배포는 동일한 엔드포인트에 어댑터[추론 구성 요쇼](realtime-endpoints-deploy-models.md#inference-components)당 하나씩 있는 단일 기본 모델입니다. 권장 사항은 어댑터에 필요한 추가 메모리를 고려하므로 SageMaker AI는 기본 모델과 어댑터에 대해 반환된 구성을 함께 검증합니다.

## 사전 조건
<a name="generative-ai-inference-recommendations-adapters-prereqs"></a>

권장 작업에 [사전 조건](generative-ai-inference-recommendations-get-started.md#generative-ai-inference-recommendations-get-started-prereqs) 대한 외에도 어댑터를 포함하려면 다음이 필요합니다.
+ 1\~10개의 LoRA 어댑터. 각 어댑터는에서 지정한 기본 모델에 대해 훈련됩니다`ModelSource`.
+ PEFT 형식의 각 어댑터입니다. 어댑터 위치에는 양수 순위(`r`)가 있는 `adapter_config.json` 파일과 어댑터 가중치 파일(`.safetensors` 또는 )이 포함되어야 합니다`.bin`.
+ 모든 어댑터는 Amazon S3에서 또는 등록된 SageMaker AI 모델 패키지로 단일 형식으로 제공됩니다. 한 작업에서 두 양식을 혼합할 수 없습니다.

SageMaker AI는에서 전달하는 IAM 실행 역할을 사용하여 어댑터를 읽습니다`RoleArn`. 역할은 각 어댑터의 Amazon S3 위치(`s3:GetObject` 및 `s3:ListBucket`)를 읽을 수 있어야 합니다. 이는 기본 모델 아티팩트에 사용하는 것과 동일한 권한입니다. 어댑터를 모델 패키지로 제공하는 경우 SageMaker AI가 어댑터의 Amazon S3 위치를 확인할 수 있도록 각 패키지`sagemaker:DescribeModelPackage`에 역할도 필요합니다.

## 요구 사항 및 제한 사항
<a name="generative-ai-inference-recommendations-adapters-restrictions"></a>

권장 작업에 어댑터를 추가할 때 다음 요구 사항 및 제한 사항이 적용됩니다.
+ **작업당 하나의 소스 양식입니다.** `AdapterSource`는 조합입니다. `S3Uris` 또는 중 정확히 하나를 설정합니다`ModelPackageArns`. SageMaker AI는 필드를 둘 다 설정하거나 둘 다 설정하지 않는 작업을 거부합니다.
+ **어댑터 순위입니다.** 어댑터의 순위는 vLLM 서비스 엔진이 지원하는 가장 큰 LoRA 순위인 512를 초과할 수 없습니다. 자세한 내용은의 참고 사항을 참조하세요[추천 작업에 어댑터 추가](#generative-ai-inference-recommendations-adapters-input).

## 추천 작업에 어댑터 추가
<a name="generative-ai-inference-recommendations-adapters-input"></a>

어댑터를 포함하려면 `CreateAIRecommendationJob` 요청에 선택적 `AdapterSource` 객체를 추가합니다. `AdapterSource`는 조합입니다. 정확히 다음 필드 중 하나를 설정하고 각 필드에는 1\~10개의 어댑터 항목 목록을 설정합니다.

`S3Uris`  
`{"AdapterId": ..., "S3Uri": ...}` 항목 목록입니다. 자체 또는 오픈 소스 PEFT 파이프라인으로 생성한 어댑터에이 양식을 사용합니다. 각 `S3Uri`는 어댑터의 `adapter_config.json` 및 가중치 파일을 포함하는 Amazon S3 접두사입니다.

`ModelPackageArns`  
`{"AdapterId": ..., "ModelPackageArn": ...}` 항목 목록입니다. SageMaker AI 미세 조정 워크플로에서 생성된 어댑터와 같이 SageMaker AI 모델 패키지로 이미 등록된 어댑터에이 양식을 사용합니다. SageMaker AI는 각 모델 패키지에서 어댑터 아티팩트 위치를 읽습니다.

는 각 어댑터에 할당하는 이름`AdapterId`입니다. 다음 요구 사항을 충족해야 합니다.
+ 요청 내에서 고유해야 합니다.
+ 63자를 초과할 수 없습니다.
+ 패턴과 일치해야 합니다`^[a-zA-Z0-9](-*[a-zA-Z0-9])*$`. 영숫자 문자로 시작 및 끝나고, 영숫자 문자 사이에만 하이픈을 허용하며, 밑줄을 사용하지 않습니다.

SageMaker AI는를 해당 어댑터`AdapterId`의 추론 구성 요소 이름으로 사용합니다. 이 이름은 배포된 엔드포인트를 호출할 때 어댑터에 요청을 보내는 데 사용하는 라우팅 핸들이기도 합니다.

**Python(boto3) - Amazon S3의 어댑터**

```
try:
    response = client.create_ai_recommendation_job(
        AIRecommendationJobName="my-lora-recommendation-job",
        ModelSource={
            "S3": {
                "S3Uri": "s3://amzn-s3-demo-bucket/models/my-base-model/",
            }
        },
        OutputConfig={
            "S3OutputLocation": "s3://amzn-s3-demo-bucket/recommendations/"
        },
        AdapterSource={
            "S3Uris": [
                {"AdapterId": "sql", "S3Uri": "s3://amzn-s3-demo-bucket/adapters/sql/"},
                {"AdapterId": "chat", "S3Uri": "s3://amzn-s3-demo-bucket/adapters/chat/"},
            ]
        },
        PerformanceTarget={
            "Constraints": [
                {"Metric": "throughput"}
            ]
        },
        AIWorkloadConfigIdentifier="my-recommendation-workload",
        RoleArn="arn:aws:iam::111122223333:role/ExampleRole",
    )
    print(response["AIRecommendationJobArn"])
except client.exceptions.ResourceInUse as error:
    print(f"A job with this name already exists: {error}")
except Exception as error:
    print(f"Error creating recommendation job: {error}")
    raise
```

**Python(boto3) - 모델 패키지로서의 어댑터**

```
try:
    response = client.create_ai_recommendation_job(
        AIRecommendationJobName="my-lora-recommendation-job",
        ModelSource={
            "S3": {
                "S3Uri": "s3://amzn-s3-demo-bucket/models/my-base-model/",
            }
        },
        OutputConfig={
            "S3OutputLocation": "s3://amzn-s3-demo-bucket/recommendations/"
        },
        AdapterSource={
            "ModelPackageArns": [
                {
                    "AdapterId": "sql",
                    "ModelPackageArn": "arn:aws:sagemaker:us-west-2:111122223333:model-package/my-sql-adapter/1",
                }
            ]
        },
        PerformanceTarget={
            "Constraints": [
                {"Metric": "throughput"}
            ]
        },
        AIWorkloadConfigIdentifier="my-recommendation-workload",
        RoleArn="arn:aws:iam::111122223333:role/ExampleRole",
    )
    print(response["AIRecommendationJobArn"])
except client.exceptions.ResourceInUse as error:
    print(f"A job with this name already exists: {error}")
except Exception as error:
    print(f"Error creating recommendation job: {error}")
    raise
```

**AWS CLI**

```
aws sagemaker create-ai-recommendation-job \
  --ai-recommendation-job-name "my-lora-recommendation-job" \
  --model-source '{"S3": {"S3Uri": "s3://amzn-s3-demo-bucket/models/my-base-model/"}}' \
  --output-config '{"S3OutputLocation": "s3://amzn-s3-demo-bucket/recommendations/"}' \
  --adapter-source '{
    "S3Uris": [
      {"AdapterId": "sql", "S3Uri": "s3://amzn-s3-demo-bucket/adapters/sql/"},
      {"AdapterId": "chat", "S3Uri": "s3://amzn-s3-demo-bucket/adapters/chat/"}
    ]
  }' \
  --performance-target '{"Constraints": [{"Metric": "throughput"}]}' \
  --ai-workload-config-identifier "my-recommendation-workload" \
  --role-arn "arn:aws:iam::111122223333:role/ExampleRole" \
  --region us-west-2
```

**참고**  
어댑터의 순위(`r`의 `adapter_config.json`)는 vLLM 서비스 엔진이 지원하는 가장 큰 LoRA 순위인 512를 초과할 수 없습니다. SageMaker AI는 모든 어댑터를 단일 랭크로 제공하고 1, 8, 16, 32, 64, 128, 256, 320 또는 512를 vLLM 지원하는 가장 가까운 랭크로 반올림합니다. 예를 들어 SageMaker AI는 순위가 4 및 12이고 순위가 16인 어댑터를 제공합니다. 어댑터에서 가장 큰 순위가 512를 초과하면 검증 오류와 함께 작업이 실패합니다. 더 작은 순위로 영향을 받는 어댑터를 재훈련하거나에서 생략합니다`AdapterSource`.

## 권장 사항 해석
<a name="generative-ai-inference-recommendations-adapters-output"></a>

작업이 완료되면를 호출합니다`DescribeAIRecommendationJob`. 응답[3단계: 권장 사항 검토](generative-ai-inference-recommendations-get-started.md#generative-ai-inference-recommendations-get-started-results)에는에 설명된 필드 외에도 어댑터별 정보가 포함됩니다.

`AdapterSource`  
최상위 응답은 사용자가 제공한 `AdapterSource`를 동일한 형식(`S3Uris` 또는 )으로 에코합니다`ModelPackageArns`.

`AdapterDetails`  
`Recommendations` 배열의 각 권장 사항에는 로 `ModelPackageArns`키가 지정된 `S3Uris` 및 *형식*의 모든 어댑터를 나열하는 `AdapterDetails` 객체가 포함되어 있습니다`AdapterId`. 어댑터를 Amazon S3 URIs로만 제공한 경우 SageMaker AI는 사용자를 대신하여 각 어댑터에 대한 모델 패키지를 등록하고 여기에 해당 ARN을 반환합니다. 이렇게 하면 배포할 등록된 버전이 지정된 아티팩트가 제공됩니다.

각 권장 사항`DeploymentConfiguration`의는 다중 어댑터, inference-component-based 토폴로지(기본 모델과 어댑터당 하나의 추론 구성 요소)를 설명합니다.는 해당 구성에 대해 벤치마킹된 지표를 `ExpectedPerformance` 보고합니다.

다음 예제에서는 Amazon S3 어댑터로 생성된 작업에 대한 `DescribeAIRecommendationJob` 응답의 어댑터 관련 필드를 보여줍니다.

```
{
    "AIRecommendationJobName": "my-lora-recommendation-job",
    "AIRecommendationJobStatus": "Completed",
    "AdapterSource": {
        "S3Uris": [
            {"AdapterId": "sql", "S3Uri": "s3://amzn-s3-demo-bucket/adapters/sql/"},
            {"AdapterId": "chat", "S3Uri": "s3://amzn-s3-demo-bucket/adapters/chat/"}
        ]
    },
    "Recommendations": [
        {
            "AdapterDetails": {
                "S3Uris": [
                    {"AdapterId": "sql", "S3Uri": "s3://amzn-s3-demo-bucket/adapters/sql/"},
                    {"AdapterId": "chat", "S3Uri": "s3://amzn-s3-demo-bucket/adapters/chat/"}
                ],
                "ModelPackageArns": [
                    {"AdapterId": "sql", "ModelPackageArn": "arn:aws:sagemaker:us-west-2:111122223333:model-package/my-lora-recommendation-job-adapters/1"},
                    {"AdapterId": "chat", "ModelPackageArn": "arn:aws:sagemaker:us-west-2:111122223333:model-package/my-lora-recommendation-job-adapters/2"}
                ]
            },
            "DeploymentConfiguration": {
                "InstanceType": "ml.g6e.12xlarge",
                "InstanceCount": 1,
                "CopyCountPerInstance": 2,
                "MinCpuMemoryRequiredInMb": 12288,
                "EnvironmentVariables": {
                    "SAGEMAKER_SHM_SIZE_MB": "2048"
                }
            },
            "ExpectedPerformance": [
                {"Metric": "throughput", "Stat": "average", "Value": "512.0", "Unit": "tokens/second"}
            ]
        }
    ]
}
```

배포된 다중 어댑터 엔드포인트를 벤치마킹하거나 어댑터를 서로 비교하려면 벤치마크 작업의 각 어댑터에 대한 추론 구성 요소를 대상으로 지정합니다. 자세한 내용은 [다중 LoRA 엔드포인트 벤치마크](generative-ai-inference-recommendations-benchmark.md#generative-ai-inference-recommendations-benchmark-multi-lora) 단원을 참조하십시오.