Amazon Web Services 한국 블로그

Amazon Bedrock 미세 조정 및 지속적인 사전 훈련 기능 정식 출시

오늘부터 Amazon Bedrock에서 자체 데이터를 사용하여 비공개로 안전하게 파운데이션 모델(FM)을 사용자 지정할 수 있습니다. 그런 다음 도메인, 조직 및 사용 사례에 맞는 특정 애플리케이션을 구축할 수 있습니다. 사용자 지정 모델을 사용하면 회사의 스타일, 의견, 서비스를 반영하는 고유한 사용자 경험을 만들 수 있습니다.

미세 조정을 수행하면 태스크별로 레이블링된 훈련 데이터 세트를 제공하여 모델 정확도를 높이고 FM을 추가로 전문화할 수 있습니다. 지속적 사전 훈련을 수행하면 고객 관리형 키로 관리되는 환경에서 레이블링되지 않은 자체 데이터를 사용하여 모델을 훈련할 수 있습니다. 지속적 사전 훈련은 원래 훈련에 그치지 않고 더욱 탄탄한 지식과 적응력을 쌓음으로써 도메인에 더 특화된 모델을 만드는 데 도움이 됩니다.

이 2가지 모델 사용자 지정 옵션을 간단히 살펴보겠습니다. Amazon Bedrock 콘솔 또는 API를 사용하여 미세 조정 및 지속적 사전 훈련 작업을 생성할 수 있습니다. 콘솔에서 Amazon Bedrock으로 이동한 다음 Custom models(사용자 지정 모델)을 선택합니다.

Amazon Bedrock - 사용자 지정 모델

Meta Llama 2, Cohere Command Light 및 Amazon Titan FM 미세 조정
이제 Amazon Bedrock에서 Meta Llama 2, Cohere Command LightAmazon Titan 모델에 대한 미세 조정을 지원합니다. 콘솔에서 미세 조정 작업을 생성하려면 Customize model(모델 사용자 지정)을 선택한 다음 Create Fine-tuning job(미세 조정 작업 생성)을 선택합니다.

Amazon Bedrock - 사용자 지정 모델

다음은 AWS SDK for Python(Boto3)을 사용한 간략한 데모입니다. Cohere Command Light를 미세 조정하여 대화를 요약해 보겠습니다. 데모용으로는 퍼블릭 dialogsum 데이터 세트를 사용하고 있지만 회사와 관련된 자체 데이터를 사용해도 됩니다.

Amazon Bedrock에서 미세 조정을 준비하기 위해 데이터 세트를 JSON Lines 형식으로 변환하고 Amazon S3에 업로드했습니다. 각 JSON 행에는 프롬프트 필드와 완료 필드가 모두 있어야 합니다. 최대 1만 개의 훈련 데이터 레코드를 지정할 수 있지만 몇 백 개의 예제에서 이미 모델 성능이 개선되는 것을 볼 수 있습니다.

{"completion": "Mr. Smith's getting a check-up, and Doctor Haw...", "prompt": Summarize the following conversation.\n\n#Pers..."}
{"completion": "Mrs Parker takes Ricky for his vaccines. Dr. P...", "prompt": "Summarize the following conversation.\n\n#Pers..."}
{"completion": "#Person1#'s looking for a set of keys and asks...", "prompt": "Summarize the following conversation.\n\n#Pers..."} 

간결함을 위해 프롬프트 및 완료 필드를 수정했습니다.

다음 명령을 사용하여 미세 조정을 지원하는 파운데이션 모델을 나열할 수 있습니다.

import boto3 
bedrock = boto3.client(service_name="bedrock")
bedrock_runtime = boto3.client(service_name="bedrock-runtime")

for model in bedrock.list_foundation_models(
    byCustomizationType="FINE_TUNING")["modelSummaries"]:
    for key, value in model.items():
        print(key, ":", value)
    print("-----\n")

다음으로 모델 사용자 지정 작업을 생성합니다. 미세 조정을 지원하는 Cohere Command Light 모델 ID를 지정하고 사용자 지정 유형을 FINE_TUNING으로 설정한 다음 훈련 데이터의 Amazon S3 위치를 가리킵니다. 필요한 경우 미세 조정에 대한 하이퍼파라미터를 조정할 수도 있습니다.

# Select the foundation model you want to customize
base_model_id = "cohere.command-light-text-v14:7:4k"

bedrock.create_model_customization_job(
    customizationType="FINE_TUNING",
    jobName=job_name,
    customModelName=model_name,
    roleArn=role,
    baseModelIdentifier=base_model_id,
    hyperParameters = {
        "epochCount": "1",
        "batchSize": "8",
        "learningRate": "0.00001",
    },
    trainingDataConfig={"s3Uri": "s3://path/to/train-summarization.jsonl"},
    outputDataConfig={"s3Uri": "s3://path/to/output"},
)

# Check for the job status
status = bedrock.get_model_customization_job(jobIdentifier=job_name)["status"]

작업이 완료되면 사용자 지정 모델에 대한 고유한 모델 ID가 할당됩니다. 미세 조정된 모델은 Amazon Bedrock에 안전하게 보관됩니다. 모델을 테스트하고 배포하려면 프로비저닝된 처리량을 구매해야 합니다.

결과를 봅시다. 데이터 세트에서 한 예를 선택하고 미세 조정 전 기본 모델과 미세 조정 후 사용자 지정 모델에 다음 대화 내용을 요약해 줄 것을 요청합니다.

prompt = """Summarize the following conversation.\\n\\n
#Person1#: Hello. My name is John Sandals, and I've got a reservation.\\n
#Person2#: May I see some identification, sir, please?\\n
#Person1#: Sure. Here you are.\\n
#Person2#: Thank you so much. Have you got a credit card, Mr. Sandals?\\n
#Person1#: I sure do. How about American Express?\\n
#Person2#: Unfortunately, at the present time we take only MasterCard or VISA.\\n
#Person1#: No American Express? Okay, here's my VISA.\\n
#Person2#: Thank you, sir. You'll be in room 507, nonsmoking, with a queen-size bed. Do you approve, sir?\\n
#Person1#: Yeah, that'll be fine.\\n
#Person2#: That's great. This is your key, sir. If you need anything at all, anytime, just dial zero.\\n\\n
Summary: """

Amazon Bedrock InvokeModel API를 사용하여 모델을 쿼리합니다.

body = {
    "prompt": prompt,
    "temperature": 0.5,
    "p": 0.9,
    "max_tokens": 512,
}

response = bedrock_runtime.invoke_model(
	# Use on-demand inference model ID for response before fine-tuning
    # modelId="cohere.command-light-text-v14",
	# Use ARN of your deployed custom model for response after fine-tuning
	modelId=provisioned_custom_model_arn,
    modelId=base_model_id, 
    body=json.dumps(body)
)

다음은 미세 조정 전의 기본 모델 응답입니다.

#Person2# helps John Sandals with his reservation(#Person2#가 John Sandals의 예약을 확인하고 있습니다) . John gives his credit card information and #Person2# confirms that they take only MasterCard and VISA(John이 신용카드 정보를 제공하자 #Person2#는 MasterCard와 VISA만 사용할 수 있다고 알려줍니다). John will be in room 507 and #Person2# will be his host if he needs anything(John의 객실은 507호이며 필요한 것이 있으면 #Person2#가 처리해 줄 것입니다).

다음은 미세 조정 후의 응답입니다. 더 간결한 문장 안에 중요한 내용을 담고 있습니다.

John Sandals has a reservation and checks in at a hotel. #Person2# takes his credit card and gives him a key(John Sandals가 예약한 호텔에 체크인합니다. #Person2#가 신용카드를 받고 키를 건네줍니다).

Amazon Titan Text의 지속적 사전 훈련(평가판)
Amazon Bedrock의 지속적 사전 훈련 기능을 오늘부터 공개 평가판 버전으로 Amazon Titan Text 모델(Titan Text Express 및 Titan Text Lite 포함)에 사용할 수 있습니다. 콘솔에서 지속적 사전 훈련 작업을 생성하려면 Customize model(모델 사용자 지정)을 선택한 다음 Create Continued Pre-training job(지속적 사전 훈련 작업 생성)을 선택합니다.

Amazon Bedrock - 사용자 지정 모델

다음은 boto3를 사용한 간단한 데모입니다. 투자 회사에서 일하는 한 개발자가 금융 및 애널리스트 보고서로 모델을 지속적으로 사전 훈련하려고 한다고 가정해 보겠습니다. 목표는 금융 업계의 용어에 대한 지식을 늘리는 것입니다. 데모를 위해 Amazon 주주 서신 모음을 훈련 데이터로 선택했습니다.

지속적 사전 훈련을 준비하기 위해 데이터 세트를 다시 JSON Lines 형식으로 변환하고 Amazon S3에 업로드했습니다. 레이블링되지 않은 데이터로 작업하기 때문에 각 JSON 행에는 프롬프트 필드만 있으면 됩니다. 최대 10만 개의 훈련 데이터 레코드를 지정할 수 있습니다. 일반적으로 최소 10억 개의 토큰을 제공하면 긍정적인 효과를 볼 수 있습니다.

{"input": "Dear shareholders: As I sit down to..."}
{"input": "Over the last several months, we to..."}
{"input": "work came from optimizing the conne..."}
{"input": "of the Amazon shopping experience f..."}

간결함을 위해 입력 필드를 수정했습니다.

그런 다음 데이터를 가리키는 사용자 지정 유형 CONTINUED_PRE_TRAINING을 사용하여 모델 사용자 지정 작업을 생성합니다. 필요한 경우 지속적 사전 훈련에 대한 하이퍼파라미터를 조정할 수도 있습니다.

# Select the foundation model you want to customize
base_model_id = "amazon.titan-text-express-v1"

bedrock.create_model_customization_job(
    customizationType="CONTINUED_PRE_TRAINING",
    jobName=job_name,
    customModelName=model_name,
    roleArn=role,
    baseModelIdentifier=base_model_id,
    hyperParameters = {
        "epochCount": "10",
        "batchSize": "8",
        "learningRate": "0.00001",
    },
    trainingDataConfig={"s3Uri": "s3://path/to/train-continued-pretraining.jsonl"},
    outputDataConfig={"s3Uri": "s3://path/to/output"},
)

작업이 완료되면 또 다른 고유한 모델 ID가 할당됩니다. 사용자 지정된 모델은 Amazon Bedrock에 다시 안전하게 저장됩니다. 미세 조정과 마찬가지로 모델을 테스트하고 배포하려면 프로비저닝된 처리량을 구매해야 합니다.

알아야 할 사항
다음은 알아두어야 할 몇 가지 주요 사항입니다.

데이터 개인 정보 보호 및 네트워크 보안 – Amazon Bedrock을 사용할 때 데이터에 대한 제어권은 사용자에게 있으며 모든 입력 및 사용자 지정 내용은 비공개로 AWS 계정에 유지됩니다. 프롬프트, 완료, 사용자 지정 모델, 미세 조정 또는 지속적 사전 훈련에 사용되는 데이터와 같은 데이터는 서비스 개선에 사용되지 않으며 서드 파티 모델 제공업체와 공유되지 않습니다. 데이터는 API 직접 호출이 처리되는 AWS 리전에 유지됩니다. 모든 데이터는 전송 중과 저장 시에 암호화됩니다. AWS PrivateLink를 사용하여 VPC와 Amazon Bedrock 간에 프라이빗 연결을 생성할 수 있습니다.

청구 – Amazon Bedrock 요금은 모델 사용자 지정, 스토리지 및 추론에 대해 부과됩니다. 모델 사용자 지정에는 처리된 토큰당 요금이 부과됩니다. 훈련 데이터 세트의 토큰 수에 훈련 에포크 수를 곱한 값입니다. 에포크란 사용자 지정 중에 훈련 데이터를 한 번 완전히 패스스루하는 것을 말합니다. 모델 스토리지 요금은 매월 모델별로 부과됩니다. 추론 요금은 모델별로 프로비저닝된 처리량을 사용하여 시간당 부과됩니다. 자세한 요금 정보는 Amazon Bedrock 요금을 참조하세요.

사용자 지정 모델 및 프로비저닝된 처리량 – Amazon Bedrock을 사용할 때는 프로비저닝된 처리량을 구매하여 사용자 지정 모델에서 추론을 실행할 수 있습니다. 이 요금 구조에서는 기간을 약정하여 일관된 수준의 처리량을 확보할 수 있습니다. 애플리케이션의 성능 요구 사항을 충족하는 데 필요한 모델 단위 수를 지정하면 됩니다. 처음에 사용자 지정 모델을 평가할 때는 장기 약정 없이 시간당 프로비저닝된 처리량을 구매할 수 있습니다. 약정 없이 프로비저닝된 처리량당 모델 단위 1개의 할당량을 사용할 수 있습니다. 계정당 최대 2개의 프로비저닝된 처리량을 생성할 수 있습니다.

가용성
오늘부터 미국 동부(버지니아 북부)와 미국 서부(오레곤) AWS 리전에서 Meta Llama 2, Cohere Command Light 및 Amazon Titan Text FM에 대한 미세 조정을 사용할 수 있습니다. 지속적 사전 훈련은 현재 미국 동부(버지니아 북부) 및 미국 서부(오레곤) AWS 리전에서 공개 평가판을 통해 사용 가능합니다. 자세히 알아보려면 Amazon Bedrock Developer Experience(Amazon Bedrock 개발자 경험) 웹 페이지를 방문하여 사용 설명서를 확인하세요.

지금 바로 Amazon Bedrock으로 FM을 사용자 지정하세요!

— Antje