SFT on Amazon Nova 2용 데이터 준비하기
SFT on Amazon Nova 2는 추론 지원 여부에 관계없이 텍스트, 이미지, 비디오, 문서 이해와 도구 직접 호출을 지원합니다. 이 페이지에서는 Amazon Nova 2 이해 모델의 SFT 훈련 데이터를 준비하는 것과 관련하여 제약 조건, 지원되는 형식, 모범 사례를 설명합니다.
작은 정보
훈련 작업을 시작하기 전에 데이터세트 형식을 검증하려면 검증 도구 섹션을 참조하세요.
데이터 형식
Amazon Nova 2 SFT 데이터는 선택적 추론 콘텐츠 필드를 추가하여 Amazon Nova 1과 동일한 Converse API 형식을 사용합니다.
JSONL 훈련 파일의 각 줄은 최상위 필드가 다음과 같은 JSON 객체입니다. 자세히 알아보려면 섹션을 펼치세요.
필수 사항입니다. messages 필드는 메시지 객체의 배열로, 각 객체는 대화의 턴을 정의합니다. 메시지 객체는 다음 필드를 포함합니다.
-
role – 필수입니다. 메시지가
user(모델로 전송된 프롬프트) 또는assistant(모델 응답) 중 어디서 왔는지 정의합니다. 첫 번째 턴은user이어야 하고, 마지막 턴은assistant이어야 하며, 턴이 교대로 이루어져야 합니다. -
content – 필수입니다. 이 턴의 콘텐츠 블록 배열입니다.
content 필드는 콘텐츠 블록의 배열에 매핑됩니다. Amazon Nova 2 SFT 데이터는 다음 블록을 지원합니다.
시스템 프롬프트를 정의하는 선택적 배열 - 수행해야 하는 작업 또는 채택해야 하는 페르소나에 대한 지침 또는 컨텍스트를 모델에 제공하는 프롬프트입니다. 최상의 결과를 얻으려면 훈련과 추론 모두에 동일한 시스템 프롬프트를 사용하세요.
"system": [ { "text": "You are a helpful assistant." } ]
대화 중에 모델에 사용 가능한 도구를 정의하는 선택적 객체입니다. 각 도구는 입력 파라미터의 이름, 설명 및 JSON 스키마로 정의됩니다.
"toolConfig": { "tools": [ { "toolSpec": { "name": "tool-name", "description": "tool-description", "inputSchema": { "json": { "type": "object", "properties": { "param": { "type": "string", "description": "param-description" } }, "required": ["param"] } } } } ] }
필수 사항입니다. 스키마 버전을 식별하는 문자열 필드입니다. 임의의 문자열 값일 수 있습니다.
"schemaVersion": "bedrock-conversation-2024"
데이터 검증
훈련 작업을 제출하기 전에, 데이터세트를 검증하여 형식 지정 문제를 조기에 포착합니다. 사용 가능한 검증 도구는 검증 도구 섹션을 참조하세요.
샘플 입력
다음은 다양한 양식에 맞게 필드를 조합하는 방법을 보여주는 완전한 JSON 객체의 예입니다.
지원되는 기능
다음 표에서는 여러 Nova 모델 버전에 걸쳐 SFT 기능 지원을 비교합니다.
| 기능 | Nova 2.0에서 SFT |
|---|---|
| 텍스트 이해 | Nova 2.0 Lite에서 지원됩니다. 일반/텍스트 이해을(를) 참조하세요. |
| 이미지 이해 | Nova 2.0 Lite에서 지원됩니다. 이미지 이해을(를) 참조하세요. |
| 비디오 이해 | Nova 2.0 Lite에서 지원됩니다. 비디오 이해을(를) 참조하세요. |
| 문서 이해 | Nova 2.0 Lite에서 지원됩니다. 문서 이해을(를) 참조하세요. |
| 도구 직접 호출 | Nova 2.0 Lite에서 지원됩니다. 도구 직접 호출을(를) 참조하세요. |
| 추론 | Nova 2.0 Lite에서 지원됩니다. 추론을(를) 참조하세요. |
일반/텍스트 이해
이 섹션에는 SFT on Amazon Nova 2 훈련 데이터를 준비할 때 적용되는 일반적인 제약 조건이 요약되어 있습니다.
제약 조건
| 제약 조건 | 세부 사항 |
|---|---|
| 데이터세트 형식 | JSONL(줄당 JSON 객체 1개). 파일 이름은 영숫자, 밑줄, 하이픈, 슬래시 및 점으로만 구성할 수 있습니다. |
| 최소 샘플 수 | 8 |
| 최대 샘플 수 | 2만 |
| 컨텍스트 길이 | 3만 2,000 |
| 데이터세트 동질성 | 하나의 데이터세트에 여러 미디어 형식을 조합할 수 없습니다. 텍스트를 이미지와 함께, 텍스트를 비디오와 함께, 텍스트를 문서와 함께 사용하되, 조합은 사용하지 않습니다. |
| 예약어 | User:, Bot:, Assistant:, System:, <image>, <video>, [EOS] 등입니다. 프롬프트에 이러한 키워드가 포함되어 있으면 훈련 작업이 실패합니다. 비슷한 의미의 다른 키워드로 대체하세요. |
모범 사례:
미세 조정을 위한 최소 데이터 크기는 작업(복잡 또는 단순)에 따라 다르지만 모델이 훈련할 각 작업에 대해 최소 200개 이상의 샘플을 보유하는 것이 좋습니다.
최상의 결과를 얻으려면 훈련과 추론 모두에서 제로샷 설정으로 최적화된 프롬프트를 사용하는 것이 좋습니다.
양보다는 품질을 우선시합니다. 품질이 높고 일관적인 수백 개의 예제가 대체로 노이즈가 있거나 모순되는 수천 개의 예시보다 성과가 뛰어납니다.
샘플 입력
schemaVersion는 모든 문자열 값일 수 있습니다.지원되는 역할은
user및assistant입니다.system턴(선택 사항)은 고객이 제공한 사용자 지정 시스템 프롬프트일 수 있습니다.messages의 첫 번째 턴은 항상"role": "user"로 시작해야 합니다. 마지막 턴은 봇의 응답이며,"role": "assistant"로 표시됩니다.
{ "schemaVersion": "bedrock-conversation-2024", "system": [ { "text": "You are a digital assistant with a friendly personality" } ], "messages": [ { "role": "user", "content": [ { "text": "What country is right next to Australia?" } ] }, { "role": "assistant", "content": [ { "text": "The closest country is New Zealand" } ] } ] }
이미지 이해
SFT는 이미지 기반 태스크에 대한 훈련을 지원하므로 모델이 이미지에 대한 질문을 분석하고 이에 응답하는 방법을 배울 수 있습니다.
제약 조건
| 제약 조건 | 세부 사항 |
|---|---|
| 지원되는 형식 | PNG, JPEG, GIF, WebP |
| 샘플당 최대 이미지 수 | 10 |
| 최대 이미지 파일 크기 | 10MB |
| 데이터세트 동질성 | 샘플에는 이미지와 텍스트가 있을 수 있지만, 이미지를 다른 양식(비디오, 문서)과 결합할 수는 없습니다. |
| S3 위치 | image.source.s3Location.uri는 데이터세트와 동일한 Amazon S3 버킷에 있어야 합니다. 예를 들어 데이터세트가 s3://amzn-s3-demo-bucket/train/train.jsonl에 있는 경우 이미지 또는 비디오는 s3://amzn-s3-demo-bucket에 있어야 합니다. |
모범 사례:
이미지가 고품질이고 작업과 관련이 있는지 확인합니다.
여러 이미지 유형 및 질문 형식을 포괄하는 다양한 예시를 제공합니다.
이미지 콘텐츠의 특정 측면을 참조하는 명확한 질문을 포함합니다.
샘플 입력
{ "schemaVersion": "bedrock-conversation-2024", "system": [ { "text": "You are a helpful assistant." } ], "messages": [ { "role": "user", "content": [ { "image": { "format": "jpeg", "source": { "s3Location": { "uri": "s3://your-bucket/your-path/your-image.jpg", "bucketOwner": "your-aws-account-id" } } } }, { "text": "Which country is highlighted in the image?" } ] }, { "role": "assistant", "content": [ { "text": "The highlighted country is New Zealand" } ] } ] }
비디오 이해
SFT는 비디오 기반 태스크에 대한 훈련을 지원하므로 모델이 비디오 콘텐츠에 대한 질문을 분석하고 이에 응답하는 방법을 배울 수 있습니다.
제약 조건
| 제약 조건 | 세부 사항 |
|---|---|
| 지원되는 형식 | MOV, MKV, MP4, WebM |
| 샘플당 최대 비디오 수 | 1 |
| 최대 비디오 파일 크기 | 50MB |
| 최대 비디오 지속 시간 | 15분 |
| 데이터세트 동질성 | 샘플에는 비디오와 텍스트가 있을 수 있지만, 비디오를 다른 양식(이미지, 문서)과 결합할 수는 없습니다. |
| S3 위치 | video.source.s3Location.uri는 데이터세트와 동일한 Amazon S3 버킷에 있어야 합니다. 예를 들어 데이터세트가 s3://amzn-s3-demo-bucket/train/train.jsonl에 있는 경우, 비디오는 s3://amzn-s3-demo-bucket에 있어야 합니다. |
모범 사례:
비디오를 간결하게 유지하고 태스크와 관련된 콘텐츠에 집중합니다.
모델이 의미 있는 정보를 추출하기에 비디오 품질이 충분한지 확인합니다.
비디오 콘텐츠의 특정 측면을 참조하는 명확한 질문을 제공합니다.
여러 비디오 유형 및 질문 형식을 포괄하는 다양한 예시를 포함합니다.
샘플 입력
{ "schemaVersion": "bedrock-conversation-2024", "messages": [ { "role": "user", "content": [ { "text": "What are the ways in which a customer can experience issues during checkout on Amazon?" }, { "video": { "format": "mp4", "source": { "s3Location": { "uri": "s3://my-bucket-name/path/to/videos/customer_service_debugging.mp4", "bucketOwner": "123456789012" } } } } ] }, { "role": "assistant", "content": [ { "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?" } ] } ] }
문서 이해
SFT는 문서 기반 태스크에 대한 훈련을 지원하므로 모델이 PDF 문서에 대한 질문을 분석하고 이에 응답하는 방법을 배울 수 있습니다.
제약 조건
| 제약 조건 | 세부 사항 |
|---|---|
| 지원되는 형식 | |
| 최대 문서 크기 | 10MB |
| 데이터세트 동질성 | 샘플에는 문서와 텍스트가 있을 수 있지만, 문서를 다른 양식(이미지, 비디오)과 혼합할 수는 없습니다. |
| S3 위치 | document.source.s3Location.uri는 데이터세트와 동일한 Amazon S3 버킷에 있어야 합니다. 예를 들어 데이터세트가 s3://amzn-s3-demo-bucket/train/train.jsonl에 있는 경우, 문서는 s3://amzn-s3-demo-bucket에 있어야 합니다. |
모범 사례:
문서의 형식이 명확하게 지정되고 텍스트를 추출할 수 있는지 확인합니다.
여러 문서 유형 및 질문 형식을 포괄하는 다양한 예시를 제공합니다.
모델이 문서 분석 패턴을 학습하는 데 도움이 되는 추론 콘텐츠를 포함합니다.
샘플 입력
{ "schemaVersion": "bedrock-conversation-2024", "messages": [ { "role": "user", "content": [ { "text": "What are the ways in which a customer can experience issues during checkout on Amazon?" }, { "document": { "format": "pdf", "source": { "s3Location": { "uri": "s3://my-bucket-name/path/to/documents/customer_service_debugging.pdf", "bucketOwner": "123456789012" } } } } ] }, { "role": "assistant", "content": [ { "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?" } ] } ] }
도구 직접 호출
SFT는 도구 직접 호출 패턴에서 모델 훈련을 지원하므로 모델은 외부 도구 또는 함수를 간접 호출하는 시점과 방법을 배울 수 있습니다.
제약 조건
| 제약 조건 | 세부 사항 |
|---|---|
| 지원되는 형식 | ToolResult 콘텐츠의 텍스트 또는 JSON |
| ToolUse 배치 | ToolUse는 어시스턴트 턴에만 표시되어야 함 |
| ToolResult 배치 | ToolResult는 사용자 턴에만 표시되어야 함 |
| inputSchema 형식 | toolSpec 내 inputSchema는 유효한 JSON 스키마 객체여야 함 |
| toolUseId 일치 | 각 ToolResult는 이전 어시스턴트 ToolUse에서 유효한 toolUseId를 참조해야 하며, 이때 각 toolUseId는 대화당 정확히 한 번만 사용됨 |
모범 사례:
모든 훈련 샘플에서 도구 정의가 일관된지 확인합니다.
모델은 사용자가 제공하는 데모에서 도구 간접 호출 패턴을 학습합니다.
각 도구를 사용해야 하는 경우와 도구를 사용하지 않아야 하는 경우에 관한 다양한 예제를 포함합니다.
샘플 입력
{ "schemaVersion": "bedrock-conversation-2024", "system": [ { "text": "You are an expert in composing function calls." } ], "toolConfig": { "tools": [ { "toolSpec": { "name": "getItemAvailability", "description": "Retrieve whether an item is available in a given location", "inputSchema": { "json": { "type": "object", "properties": { "zipcode": { "type": "string", "description": "The zipcode of the location to check in" }, "quantity": { "type": "integer", "description": "The number of items to check availability for" }, "item_id": { "type": "string", "description": "The ASIN of item to check availability for" } }, "required": ["item_id", "zipcode"] } } } } ] }, "messages": [ { "role": "user", "content": [ { "text": "I need to check whether there are twenty pieces of the following item available. Here is the item ASIN on Amazon: id-123. Please check for the zipcode 94086" } ] }, { "role": "assistant", "content": [ { "toolUse": { "toolUseId": "getItemAvailability_0", "name": "getItemAvailability", "input": { "zipcode": "94086", "quantity": 20, "item_id": "id-123" } } } ] }, { "role": "user", "content": [ { "toolResult": { "toolUseId": "getItemAvailability_0", "content": [ { "text": "[{\"name\": \"getItemAvailability\", \"results\": {\"availability\": true}}]" } ] } } ] }, { "role": "assistant", "content": [ { "text": "Yes, there are twenty pieces of item id-123 available at 94086. Would you like to place an order or know the total cost?" } ] } ] }
추론
추론 콘텐츠(연쇄적 사고라고도 함)는 최종 답변을 생성하기 전에 모델의 중간 사고 단계를 캡처합니다.
제약 조건
| 제약 조건 | 세부 사항 |
|---|---|
| 지원되는 형식 | 텍스트 전용입니다. 이미지 기반 추론 콘텐츠는 지원되지 않습니다. |
| Placement | 어시스턴트 턴에서만 reasoningContent 필드를 통해 사용합니다. |
| 형식 지정 | 일반 텍스트를 사용합니다. 작업에 특별히 필요하지 않은 한 <thinking> 및 </thinking>과 같은 마크업 태그는 사용하지 않습니다. |
모범 사례:
고품질 추론 콘텐츠에는 중간 사고, 논리적 추론, 단계별 문제 해결 접근 방식, 단계와 결론 간의 명시적 연결이 포함되어야 합니다.
멀티턴 대화의 여러 어시스턴트 턴에서
reasoningContent를 포함할 수 있습니다.데이터세트에 추론 트레이스가 없는 경우 Nova Premier와 같은 추론 지원 모델을 사용하여 생성할 수 있습니다.
샘플 입력
{ "schemaVersion": "bedrock-conversation-2024", "system": [ { "text": "You are a digital assistant with a friendly personality" } ], "messages": [ { "role": "user", "content": [ { "text": "What country is right next to Australia?" } ] }, { "role": "assistant", "content": [ { "reasoningContent": { "reasoningText": { "text": "I need to use my world knowledge of geography to answer this question" } } }, { "text": "The closest country to Australia is New Zealand, located to the southeast across the Tasman Sea." } ] } ] }
추가 참고 사항
손실 계산 방법:
추론 콘텐츠 포함 - 훈련 손실에 추론 토큰과 최종 출력 토큰이 모두 포함됩니다.
추론 콘텐츠 제외 - 훈련 손실이 최종 출력 토큰에서만 계산됩니다.
훈련 데이터에 추론 토큰이 있거나, 모델이 최종 출력을 생성하기 전에 사고 토큰을 생성하도록 하고 싶거나, 복잡한 추론 작업에서 향상된 성능이 요구되는 경우, 훈련 구성에서 reasoning_enabled: true를 설정합니다.
훈련 데이터에 추론 토큰이 없거나, 명시적 추론 단계의 이점을 활용하지 않는 간단한 작업을 훈련하고 있거나, 속도를 최적화하고 토큰 사용량을 줄이려는 경우, reasoning_enabled: false를 설정합니다.
reasoning_enabled = true를 사용하여 비추론 데이터세트에서 Nova 훈련이 허용됩니다. 그러나 Nova는 주로 추론을 적용하지 않고 데이터에 표시된 응답을 생성하는 방법을 배우기 때문에 이 경우 모델이 추론 기능을 상실할 수 있습니다. 일반적으로 추론 데이터세트를 사용할 때는 훈련 및 유추 모두에 대한 추론을 활성화하고, 비추론 데이터세트를 사용할 때는 둘 다에 대해 추론을 비활성화합니다.
효과적인 훈련 설계 예제
훈련 데이터에서 모델이 보여주길 원하는 동작을 보여줘야 합니다. SFT는 모델에 알아야 할 내용이 아닌 답변하는 방식을 가르칩니다. 주로 사실적 지식을 주입하기 위한 훈련 예제를 만드는 경우(예: “오류 코드 E-45는 무엇을 의미합니까?”의 답변은 “E-45는 센서 제한 시간을 나타냅니다”) 미세 조정 없이 RAG 또는 프롬프트 엔지니어링으로 동일한 결과를 달성할 수 있는지 고려합니다.
소스 데이터를 대화 형식으로 변환할 때는 따라야 하는 원칙:
-
실제 사용자 쿼리에서 시작합니다. 프로덕션에서 최종 사용자가 실제로 모델에 입력할 법한 프롬프트를 그대로 반영해 사용자 턴을 작성합니다. 실제 사용 패턴을 반영하지 않는 인위적이거나 지나치게 간소화된 질문은 피하세요.
-
모범적인 어시스턴트 응답을 작성합니다. 각 어시스턴트 턴은 모델에서 생성하기를 원하는 이상적인 응답이어야 합니다. 즉, 모든 예제에서 정확하고 형식이 양호하며 어조와 구조가 일관적이어야 합니다.
-
시스템 프롬프트를 전략적으로 사용합니다. 출력 형식, 페르소나 및 도메인 컨텍스트와 같은 영구 지침을 시스템 턴에 배치합니다. 훈련과 추론 모두에서 동일한 시스템 프롬프트를 사용하면 최상의 결과를 얻을 수 있습니다.
-
예제는 샘플당 하나의 스킬에 초점을 맞춥니다. 모델을 분류하고, 질문에 답하고, 요약해야 하는 경우 단일 샘플에서 여러 스킬을 결합하는 대신 각 스킬에 대해 별도의 예제 세트를 생성합니다.
-
양보다는 품질을 우선시합니다. 품질이 높고 일관적인 수백 개의 예제가 대체로 노이즈가 있거나 모순되는 수천 개의 예시보다 성과가 뛰어납니다. 훈련 전에 데이터를 중복 제거하고 검토하세요.
일반 데이터 변환 패턴
다음 패턴은 일반적인 엔터프라이즈 데이터 형식을 효과적인 SFT 훈련 예제로 변환하는 방법을 보여줍니다.
패턴 1: 분류 또는 조회를 위한 구조화된 레코드
소스 데이터가 issue, cause 및 resolution과 같은 필드가 있는 레코드의 테이블 또는 데이터베이스인 경우 각 레코드를 관련 입력 필드와 어시스턴트 응답을 대상 출력 필드로 사용하여 사용자 질문으로 프레이밍합니다.
// train.jsonl { "schemaVersion": "bedrock-conversation-2024", "system": [ { "text": "You are a technical support assistant. Given an issue description, identify the most likely root cause and recommended resolution." } ], "messages": [ { "role": "user", "content": [ { "text": "A user reports: 'Application crashes on startup after the latest update.' What is the likely cause and resolution?" } ] }, { "role": "assistant", "content": [ { "text": "Cause: Incompatible configuration file from the previous version.\nResolution: Delete the local configuration cache and restart the application to regenerate default settings." } ] } ] }
패턴 2: 구조화된 Q&A에 대한 계층적 또는 분류 체계 데이터
소스 데이터가 제품 범주 트리 또는 분류 시스템과 같은 코드 계층 구조 또는 분류 체계인 경우 모델에 계층 구조를 탐색하도록 요청하는 질문을 생성합니다. 시스템 프롬프트 또는 사용자 턴에 분류 컨텍스트를 포함합니다.
// train.jsonl { "schemaVersion": "bedrock-conversation-2024", "system": [ { "text": "You are a product catalog assistant. Answer questions about product categories and classifications accurately." } ], "messages": [ { "role": "user", "content": [ { "text": "What top-level category does product code 'EL-4520' belong to, and what subcategories does it include?" } ] }, { "role": "assistant", "content": [ { "text": "Product code EL-4520 belongs to the Electronics category. It includes the subcategories: Audio Equipment, Portable Speakers, and Wireless Accessories." } ] } ] }
패턴 3: 절차적 문서를 교육 대화로 변환
소스 데이터가 표준 운영 절차, 런북 또는 단계별 가이드로 구성된 경우 절차를 작업 중심 질문으로 변환합니다. 사용자는 작업를 수행하는 방법을 질문하고, 어시스턴트는 일관된 형식으로 단계를 제공합니다.
// train.jsonl { "schemaVersion": "bedrock-conversation-2024", "system": [ { "text": "You are an IT operations assistant. Provide step-by-step instructions based on approved runbooks and standard operating procedures." } ], "messages": [ { "role": "user", "content": [ { "text": "How do I reset a user's multi-factor authentication when they have lost access to their device?" } ] }, { "role": "assistant", "content": [ { "text": "Follow these steps to reset a user's multi-factor authentication:\n1. Verify the user's identity using the approved verification procedure.\n2. Disable the existing MFA configuration in the identity management console.\n3. Generate a new temporary access code and send it to the user's verified email.\n4. Instruct the user to log in with the temporary code and re-enroll their new device.\n5. Confirm the new MFA device is working by requesting a test authentication.\n6. Document the reset in the support ticket." } ] } ] }
참고
패턴 1 및 2에서 사실적 콘텐츠(예: 코드, 범주 또는 해결 방법)가 모델의 훈련 전 데이터에 아직 없는 경우 SFT에만 의존하여 기억하는 대신 추론 시간에 RAG를 사용하여 이 정보를 제공하는 것이 바람직합니다. SFT는 모델에 응답 형식과 추론 패턴을 가르치는 데 가장 효과적이며, RAG는 사실적 기반을 처리합니다.