

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

# 파운데이션 모델 사용자 지정
<a name="jumpstart-foundation-models-customize"></a>

파운데이션 모델은 다양한 작업을 해결할 수 있는 매우 강력한 모델입니다. 대부분의 작업을 효과적으로 해결하려면 이러한 모델에 특정 형태의 사용자 지정이 필요합니다.

먼저 파운데이션 모델을 특정 사용 사례에 맞게 사용자 지정하는 데 권장되는 방법은 프롬프트 엔지니어링을 사용하는 것입니다. 잘 설계되고 상황에 맞는 프롬프트를 파운데이션 모델에 제공하면 모델 가중치를 미세 조정하거나 변경하지 않고도 원하는 결과를 얻을 수 있습니다. 자세한 내용은 [파운데이션 모델을 위한 프롬프트 엔지니어링](jumpstart-foundation-models-customize-prompt-engineering.md) 섹션을 참조하세요.

프롬프트 엔지니어링만으로는 파운데이션 모델을 특정 작업에 맞게 사용자 지정할 수 없는 경우 추가 도메인별 데이터를 기반으로 파운데이션 모델을 미세 조정할 수 있습니다. 자세한 내용은 [미세 조정을 위한 파운데이션 모델 및 하이퍼파라미터](jumpstart-foundation-models-fine-tuning.md) 섹션을 참조하세요. 미세 조정 프로세스에는 모델 가중치 변경이 포함됩니다.

재훈련 없이 지식 라이브러리의 정보로 모델을 사용자 지정하려면 [검색 증강 생성](jumpstart-foundation-models-customize-rag.md)을 참조하세요.

# 파운데이션 모델을 위한 프롬프트 엔지니어링
<a name="jumpstart-foundation-models-customize-prompt-engineering"></a>

프롬프트 엔지니어링은 특정 유형의 출력을 생성하기 위해 언어 모델에 대한 프롬프트 또는 입력 자극을 설계하고 개선하는 프로세스입니다. 프롬프트 엔지니어링에는 적절한 키워드를 선택하고 컨텍스트를 제공하며 모델이 원하는 응답을 생성하도록 유도하는 방식으로 입력을 형성하는 것이 포함되며, 이는 파운데이션 모델의 동작과 출력을 능동적으로 형성하는 데 필수적인 기법입니다.

효과적인 프롬프트 엔지니어링은 모델 행동을 지시하고 원하는 응답을 달성하는 데 매우 중요합니다. 프롬프트 엔지니어링을 통해 미세 조정과 같은 복잡한 사용자 지정 조치 없이도 모델의 톤, 스타일 및 도메인 전문성을 제어할 수 있습니다. 추가 데이터에 대한 모델 미세 조정을 것을 고려하기 전에 프롬프트 엔지니어링에 시간을 할애하는 것이 좋습니다. 목표는 모델이 보이지 않거나 제한된 데이터 시나리오에서 모델이 일반화되고 잘 수행될 수 있도록 모델에 충분한 컨텍스트와 지침을 제공하는 것입니다.

## 제로샷 학습
<a name="jumpstart-foundation-models-customize-prompt-engineering-zero-shot"></a>

제로샷 학습에는 보이지 않는 클래스나 작업을 일반화하고 예측하도록 모델을 훈련시키는 것이 포함됩니다. 제로샷 학습 환경에서 프롬프트 엔지니어링을 수행하려면 대상 작업에 대한 정보와 원하는 출력 형식을 명시적으로 제공하는 프롬프트를 구성하는 것이 좋습니다. 예를 들어, 훈련 중에 모델이 인식하지 못한 일련의 클래스에 대해 제로샷 텍스트 분류를 위한 파운데이션 모델을 사용하려는 경우, 잘 설계된 프롬프트는 다음과 같습니다. `"Classify the following text as either sports, politics, or entertainment: [input text]."` 대상 클래스와 예상 출력 형식을 명시적으로 지정하면 보이지 않는 클래스에서도 정확한 예측을 수행하도록 모델을 유도할 수 있습니다.

## 퓨샷 학습
<a name="jumpstart-foundation-models-customize-prompt-engineering-few-shot"></a>

퓨샷 학습에는 새로운 클래스나 작업에 대해 제한된 양의 데이터로 모델을 훈련시키는 것이 포함됩니다. 퓨샷 학습 환경에서의 프롬프트 엔지니어링은 사용 가능한 제한된 훈련 데이터를 효과적으로 사용하는 프롬프트를 설계하는 데 중점을 둡니다. 예를 들어 이미지 분류 작업에 파운데이션 모델을 사용하고 새 이미지 클래스의 예제가 몇 개뿐인 경우, 대상 클래스의 자리 표시자와 함께 사용 가능한 레이블이 지정된 예제가 포함된 프롬프트를 엔지니어링할 수 있습니다. 예를 들어 프롬프트는 `"[image 1], [image 2], and [image 3] are examples of [target class]. Classify the following image as [target class]"`과 같을 수 있습니다. 레이블이 지정된 제한된 예제를 통합하고 대상 클래스를 명시적으로 지정하면 최소한의 훈련 데이터로도 모델을 일반화하고 정확한 예측을 수행하도록 유도할 수 있습니다.

## 지원되는 추론 파라미터
<a name="jumpstart-foundation-models-customize-prompt-engineering-inference-params"></a>

추론 파라미터를 변경하면 프롬프트에 대한 응답에도 영향을 미칠 수 있습니다. 프롬프트에 최대한 많은 특이성과 컨텍스트를 추가하려고 할 수 있지만 지원되는 추론 파라미터를 실험할 수도 있습니다. 다음은 일반적으로 지원되는 일부 추론 파라미터의 예입니다.


| 추론 파라미터 | 설명 | 
| --- | --- | 
| `max_new_tokens` | 파운데이션 모델 응답의 최대 출력 길이입니다. 유횻값: 정수, 범위: 양의 정수. | 
| `temperature` | 출력의 무작위성을 제어합니다. 온도가 높을수록 확률이 낮은 단어의 출력 시퀀스가 생성되고 온도가 낮을수록 확률이 높은 단어의 출력 시퀀스가 생성됩니다. `temperature=0`인 경우 응답은 확률이 가장 높은 단어(그리스 디코딩)로만 구성됩니다. 유효한 값: 부동 소수점, 범위: 양의 부동 소수점. | 
| `top_p` | 텍스트 생성의 각 단계에서 모델은 누적 확률이 `top_p`인 가능한 가장 작은 단어 세트에서 샘플링합니다. 유효한 값: 부동 소수점, 범위: 0.0, 1.0. | 
| `return_full_text` | `True`인 경우 입력 텍스트는 생성된 출력 텍스트의 일부입니다. 유효한 값: 부울, 기본값: False. | 

파운데이션 모델 추론에 대한 자세한 정보는 [`JumpStartModel` 클래스와 함께 공개적으로 사용 가능한 파운데이션 모델 배포](jumpstart-foundation-models-use-python-sdk-model-class.md) 섹션을 참조하세요.

프롬프트 엔지니어링만으로는 특정 비즈니스 요구 사항, 도메인별 언어, 대상 작업 또는 기타 요구 사항에 맞게 기본 모델을 조정할 수 없는 경우 추가 데이터를 기반으로 모델을 미세 조정하거나 검색 증강 세대(RAG)를 사용하여 보관된 지식 소스에서 향상된 컨텍스트로 모델 아키텍처를 확장할 수 있습니다. 자세한 내용은 [미세 조정을 위한 파운데이션 모델 및 하이퍼파라미터](jumpstart-foundation-models-fine-tuning.md) 또는 [검색 증강 생성](jumpstart-foundation-models-customize-rag.md)을 참조하세요.

# 미세 조정을 위한 파운데이션 모델 및 하이퍼파라미터
<a name="jumpstart-foundation-models-fine-tuning"></a>

파운데이션 모델은 계산 비용이 많이 들고 레이블이 지정되지 않은 대규모 코퍼스에서 훈련됩니다. 사전 훈련된 파운데이션 모델을 미세 조정하는 것은 광범위한 기능을 활용하면서 자체 소규모 코퍼스에서 모델을 사용자 지정할 수 있는 경제적인 방법입니다. 미세 조정은 추가 훈련을 포함하는 사용자 지정 방법이며 모델의 가중치를 변경합니다.

다음과 같은 경우 미세 조정이 유용할 수 있습니다.
+ 특정 비즈니스 요구 사항에 맞게 모델을 사용자 지정
+ 업계 전문 용어, 기술 용어 또는 기타 전문 용어와 같은 도메인별 언어를 성공적으로 사용하기 위한 모델
+ 특정 작업에 대한 성능 향상
+ 애플리케이션에서의 정확하고 상대적이며 상황에 맞는 응답
+ 보다 사실적이고 독성이 적으며 특정 요구 사항에 더 잘 부합하는 대응

사용 사례와 선택한 파운데이션 모델에 따라 미세 조정을 위해 취할 수 있는 두 가지 주요 접근 방식이 있습니다.

1. 도메인별 데이터를 기반으로 모델을 미세 조정하려면 [도메인 조정을 사용하여 대규모 언어 모델(LLM) 미세 조정](jumpstart-foundation-models-fine-tuning-domain-adaptation.md)을 참조하세요.

1. 프롬프트 및 응답 예제를 사용한 명령어 기반 미세 조정에 관심이 있는 경우 [프롬프트 지침을 사용하여 대형 언어 모델(LLM) 미세 조정](jumpstart-foundation-models-fine-tuning-instruction-based.md)을 참조하세요.

## 미세 조정에 사용할 수 있는 파운데이션 모델
<a name="jumpstart-foundation-models-fine-tuning-models"></a>

다음 JumpStart 파운데이션 모델을 미세 조정할 수 있습니다.
+ 블룸 3B
+ Bloom 7B1
+ BloomZ 3B FP16
+ BloomZ 7B1 FP16
+ 코드 Llama 13B
+ 코드 Llama 13B Python
+ 코드 Llama 34B
+ 코드 Llama 34B Python
+ 코드 Llama 70B
+ 코드 Llama 70B Python
+ 코드 Llama 7B
+ 코드 Llama 7B Python
+ CyberAgentLM2-7B-Chat(CALM2-7B-Chat)
+ Falcon 40B BF16
+ Falcon 40B Instruct BF16
+ Falcon 7B BF16
+ Falcon 7B Instruct BF16
+ Flan-T5 Base
+ Flan-T5 Large
+ Flan-T5 Small
+ Flan-T5 XL
+ Flan-T5 XXL
+ Gemma 2B
+ Gemma 2B 지침
+ Gemma 7B
+ Gemma 7B 지침
+ GPT-2 XL
+ GOT-J 6B
+ GPT-Neo 1.3B
+ GPT-Neo 125M
+ GPT-NEO 2.7B
+ LightGPT Instruct 6B
+ Llama 2 13B
+ Llama 2 13B Chat
+ Llama 2 13B Neuron
+ Llama 2 70B
+ Llama 2 70B Chat
+ Llama 2 7B
+ Llama 2 7B Chat
+ Llama 2 7B Neuron
+ Mistral 7B
+ Mixtral 8x7B
+ Mixtral 8x7B Instruct
+ RedPajama INCITE Base 3B V1
+ RedPajama INCITE Base 7B V1
+ RedPajama INCITE Chat 3B V1
+ RedPajama INCITE Chat 7B V1
+ RedPajama INCITE Instruct 3B V1
+ RedPajama INCITE Instruct 7B V1
+ Stable Diffusion 2.1

## 일반적으로 지원되는 미세 조정 하이퍼파라미터
<a name="jumpstart-foundation-models-fine-tuning-hyperparameters"></a>

파운데이션 모델마다 미세 조정 시 다양한 하이퍼파라미터를 지원합니다. 다음은 훈련 중에 모델을 추가로 사용자 지정할 수 있는 일반적으로 지원되는 하이퍼파라미터입니다.


| 추론 파라미터 | 설명 | 
| --- | --- | 
| `epoch` | 모델이 훈련 중에 미세 조정 데이터세트를 통과하는 패스 수입니다. 반드시 1보다 큰 정수이어야 합니다. | 
| `learning_rate` |  각 훈련 예제 미세 조정의 배치를 살펴본 후 모델 가중치가 업데이트되는 비율입니다. 0보다 큰 양수 부동이어야 합니다. | 
| `instruction_tuned` |  모델을 교육할지 여부. `'True'` 또는 `'False'`이어야 합니다. | 
| `per_device_train_batch_size` |  훈련을 위한 GPU 코어 또는 CPU당 배치 크기입니다. 반드시 양의 정수여야 합니다. | 
| `per_device_eval_batch_size` |  평가를 위한 GPU 코어 또는 CPU당 배치 크기입니다. 반드시 양의 정수여야 합니다. | 
| `max_train_samples` |  디버깅 또는 더 빠른 훈련을 위해 훈련 예제 수를 이 값으로 자릅니다. 값 -1은 모델이 모든 훈련 샘플을 사용함을 의미합니다. 반드시 양의 정수 또는 -1이어야 합니다. | 
| `max_val_samples` |  디버깅 또는 더 빠른 훈련을 위해 검증 예제 수를 이 값으로 자릅니다. 값 -1은 모델이 모든 검증 샘플을 사용함을 의미합니다. 반드시 양의 정수 또는 -1이어야 합니다. | 
| `max_input_length` |  토큰화 후 최대 총 입력 시퀀스 길이입니다. 이보다 긴 시퀀스는 잘립니다. -1인 경우 `max_input_length`는 최소 1024로 설정되고 `model_max_length`는 토큰화기에 의해 정의됩니다. 양수 값으로 설정하면 `max_input_length`가 제공된 값의 최소값과 토큰화기에 의해 정의된 `model_max_length`로 설정됩니다. 반드시 양의 정수 또는 -1이어야 합니다. | 
| `validation_split_ratio` |  검증 채널이 없는 경우 훈련 데이터에서 분할된 훈련 검증의 비율입니다. 0에서 1 사이 범위여야 합니다. | 
| `train_data_split_seed` |  검증 데이터가 없는 경우 입력 훈련 데이터의 무작위 분할을 모델에서 사용하는 훈련 및 검증 데이터에 수정합니다. 정수여야 합니다. | 
| `preprocessing_num_workers` |  전처리에 사용할 프로세스의 수입니다. `None`인 경우 기본 프로세스가 사전 처리에 사용됩니다. | 
| `lora_r` |  가중치 업데이트의 조정 인자 역할을 하는 저순위 조정(LoRA ) r 값입니다. 반드시 양의 정수여야 합니다. | 
| `lora_alpha` |  가중치 업데이트의 조정 인자 역할을 하는 저순위 조정(LoRA ) 알파 값입니다. 일반적으로 `lora_r` 크기의 2\$14배입니다. 반드시 양의 정수여야 합니다. | 
| `lora_dropout` |  하위 순위 조정(LoRA ) 계층의 드롭아웃 값은 0\$11 사이의 양수 부동 소수여야 합니다. | 
| `int8_quantization` |  `True`인 경우 모델은 훈련을 위해 8비트 정밀도로 로드됩니다. | 
| `enable_fsdp` |  `True`인 경우 훈련은 완전 샤딩된 데이터 병렬 처리를 사용합니다. | 

Studio에서 모델을 미세 조정할 때 하이퍼파라미터 값을 지정할 수 있습니다. 자세한 내용은 [Studio에서 모델 미세 조정](jumpstart-foundation-models-use-studio-updated-fine-tune.md) 섹션을 참조하세요.

SageMaker Python SDK를 사용하여 모델을 미세 조정할 때 기본 하이퍼파라미터 값을 재정의할 수도 있습니다. 자세한 내용은 [`JumpStartEstimator` 클래스를 사용하여 공개적으로 사용 가능한 파운데이션 모델을 미세 조정합니다.](jumpstart-foundation-models-use-python-sdk-estimator-class.md) 섹션을 참조하세요.

# 도메인 조정을 사용하여 대규모 언어 모델(LLM) 미세 조정
<a name="jumpstart-foundation-models-fine-tuning-domain-adaptation"></a>

도메인 적응 미세 조정을 통해 사전 훈련된 파운데이션 모델을 활용하고 제한된 도메인별 데이터를 사용하여 특정 작업에 적응할 수 있습니다. 프롬프트 엔지니어링 노력으로도 충분한 사용자 지정이 이루어지지 않는 경우, 도메인 적응 미세 조정을 사용하여 산업 용어, 기술 용어 또는 기타 특수 데이터와 같은 도메인별 언어를 사용하여 모델을 작동시킬 수 있습니다. 이 미세 조정 프로세스는 모델의 가중치를 수정합니다.

도메인별 데이터세트에서 모델을 미세 조정하려면

1. 학습 데이터를 준비합니다. 지침은 [도메인 조정 미세 조정을 위한 훈련 데이터 준비 및 업로드](#jumpstart-foundation-models-fine-tuning-domain-adaptation-prepare-data) 섹션을 참조하세요.

1. 미세 조정 훈련 작업을 생성합니다. 지침은 [지침 기반 미세 조정을 위한 훈련 작업 생성](#jumpstart-foundation-models-fine-tuning-domain-adaptation-train) 섹션을 참조하세요.

에서 엔드 투 엔드 예제를 찾을 수 있습니다[예제 노트북](#jumpstart-foundation-models-fine-tuning-domain-adaptation-examples).

도메인 적응 미세 조정은 다음 파운데이션 모델에서 사용할 수 있습니다.

**참고**  
Llama 2 7B와 같은 일부 JumpStart 파운데이션 모델은 미세 조정 및 추론 수행 전에 최종 사용자 라이선스 계약을 수락해야 합니다. 자세한 내용은 [최종 사용자 라이선스 계약](jumpstart-foundation-models-choose.md#jumpstart-foundation-models-choose-eula) 섹션을 참조하세요.
+ Bloom 3B
+ Bloom 7B1
+ BloomZ 3B FP16
+ BloomZ 7B1 FP16
+ GPT-2 XL
+ GOT-J 6B
+ GPT-Neo 1.3B
+ GPT-Neo 125M
+ GPT-NEO 2.7B
+ Llama 2 13B
+ Llama 2 13B Chat
+ Llama 2 13B Neuron
+ Llama 2 70B
+ Llama 2 70B Chat
+ Llama 2 7B
+ Llama 2 7B Chat
+ Llama 2 7B Neuron

## 도메인 조정 미세 조정을 위한 훈련 데이터 준비 및 업로드
<a name="jumpstart-foundation-models-fine-tuning-domain-adaptation-prepare-data"></a>

도메인 조정 미세 조정을 위한 훈련 데이터는 CSV, JSON 또는 TXT 파일 형식으로 제공할 수 있습니다. 모든 훈련 데이터는 단일 폴더 내의 단일 파일에 있어야 합니다.

훈련 데이터는 CSV 또는 JSON 훈련 데이터 파일의 **텍스트** 열에서 가져옵니다. **텍스트 레이블**이 지정된 열이 없는 경우 훈련 데이터는 CSV 또는 JSON 훈련 데이터 파일의 첫 번째 열에서 가져옵니다.

다음은 미세 조정에 사용할 TXT 파일의 예제 본문입니다.

```
This report includes estimates, projections, statements relating to our
business plans, objectives, and expected operating results that are “forward-
looking statements” within the meaning of the Private Securities Litigation
Reform Act of 1995, Section 27A of the Securities Act of 1933, and Section 21E
of ....
```

### 훈련 및 테스트를 위한 데이터 분할
<a name="jumpstart-foundation-models-fine-tuning-domain-adaptation-split-data"></a>

필요에 따라 검증 데이터가 포함된 다른 폴더를 제공할 수 있습니다. 이 폴더에는 CSV, JSON 또는 TXT 파일 하나도 포함되어야 합니다. 검증 데이터세트가 제공되지 않은 경우 검증 목적으로 설정된 양의 훈련 데이터가 따로 설정됩니다. 모델을 미세 조정할 하이퍼파라미터를 선택할 때 검증에 사용되는 훈련 데이터의 비율을 조정할 수 있습니다.

### Amazon S3에 미세 조정 데이터 업로드
<a name="jumpstart-foundation-models-fine-tuning-domain-adaptation-upload-data"></a>

준비된 데이터를 Amazon Simple Storage Service(Amazon S3)에 업로드하여 JumpStart 파운데이션 모델을 미세 조정할 때 사용합니다. 다음 명령을 사용하여 데이터를 업로드할 수 있습니다.

```
from sagemaker.s3 import S3Uploader
import sagemaker
import random

output_bucket = sagemaker.Session().default_bucket()
local_data_file = "train.txt"
train_data_location = f"s3://{output_bucket}/training_folder"
S3Uploader.upload(local_data_file, train_data_location)
S3Uploader.upload("template.json", train_data_location)
print(f"Training data: {train_data_location}")
```

## 지침 기반 미세 조정을 위한 훈련 작업 생성
<a name="jumpstart-foundation-models-fine-tuning-domain-adaptation-train"></a>

데이터가 Amazon S3에 업로드된 후 JumpStart 파운데이션 모델을 미세 조정하고 배포할 수 있습니다. Studio에서 모델을 미세 조정하려면 [Studio에서 모델 미세 조정](jumpstart-foundation-models-use-studio-updated-fine-tune.md) 섹션을 참조하세요. SageMaker Python SDK를 사용하여 모델을 미세 조정하려면 [`JumpStartEstimator` 클래스를 사용하여 공개적으로 사용 가능한 파운데이션 모델을 미세 조정합니다.](jumpstart-foundation-models-use-python-sdk-estimator-class.md) 섹션을 참조하세요.

## 예제 노트북
<a name="jumpstart-foundation-models-fine-tuning-domain-adaptation-examples"></a>

도메인 조정 미세 조정에 대한 자세한 내용은 다음 예제 노트북을 참조하세요.
+ [SageMaker JumpStart 파운데이션 모델 - 도메인별 데이터세트에 대한 텍스트 생성 GPT-J 6B 모델 미세 조정](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/domain-adaption-finetuning-gpt-j-6b.html)
+ [JumpStart에서 LLaMA 2 모델 미세 조정](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/llama-2-finetuning.html)

# 프롬프트 지침을 사용하여 대형 언어 모델(LLM) 미세 조정
<a name="jumpstart-foundation-models-fine-tuning-instruction-based"></a>

명령어 기반 미세 조정은 레이블이 지정된 예제를 사용하여 특정 작업에 대한 사전 훈련된 파운데이션 모델의 성능을 개선합니다. 레이블이 지정된 예제는 프롬프트, 응답 쌍으로 형식이 지정되고 지시사항으로 구문이 지정됩니다. 이 미세 조정 프로세스는 모델의 가중치를 수정합니다. 명령어 기반 미세 조정에 대한 자세한 내용은 [FLAN 소개: 명령어 조정 기능을 갖춘 보다 일반화 가능한 언어 모델](https://ai.googleblog.com/2021/10/introducing-flan-more-generalizable.html) 및 [스케일링 명령어-미세 조정된 언어 모델](https://arxiv.org/abs/2210.11416)을 참조하세요.

FLAN(Fine-tuned LANguage Net) 모델은 명령어 조정을 사용하여 모델이 일반적인 다운스트림 NLP 작업을 보다 쉽게 해결할 수 있도록 합니다. Amazon SageMaker JumpStart는 FLAN 모델 제품군에 다양한 파운데이션 모델을 제공합니다. 예를 들어 FLAN-T5 모델은 다양한 일반 사용 사례에 대해 제로샷 성능을 높이기 위해 광범위한 작업에 대해 미세 조정된 명령입니다. 추가 데이터와 미세 조정을 통해 훈련 전에는 고려하지 않았던 보다 구체적인 작업에 명령어 기반 모델을 추가로 적용할 수 있습니다.

프롬프트-응답 페어 작업 지침을 사용하여 특정 작업에서 LLM을 미세 조정하려면:

1. JSON 파일에서 지침을 준비합니다. 프롬프트-응답 페어 파일의 필수 형식과 데이터 폴더 구조에 대한 자세한 내용은 [지침 기반 미세 조정을 위한 훈련 데이터 준비 및 업로드](#jumpstart-foundation-models-fine-tuning-instruction-based-prepare-data) 섹션을 참조하세요.

1. 미세 조정 훈련 작업을 생성합니다. 지침은 [지침 기반 미세 조정을 위한 훈련 작업 생성](#jumpstart-foundation-models-fine-tuning-instruction-based-train) 섹션을 참조하세요.

[예제 노트북](#jumpstart-foundation-models-fine-tuning-instruction-based-examples)에서 엔드 투 엔드 예제를 찾을 수 있습니다.

JumpStart 파운데이션 모델의 하위 집합만 명령 기반 미세 조정과 호환됩니다. 명령어 기반 미세 조정은 다음과 같은 파운데이션 모델에서 사용할 수 있습니다.

**참고**  
Llama 2 7B와 같은 일부 JumpStart 파운데이션 모델은 미세 조정 및 추론 수행 전에 최종 사용자 라이선스 계약을 수락해야 합니다. 자세한 내용은 [최종 사용자 라이선스 계약](jumpstart-foundation-models-choose.md#jumpstart-foundation-models-choose-eula) 섹션을 참조하세요.
+ Flan-T5 Base
+ Flan-T5 Large
+ Flan-T5 Small
+ Flan-T5 XL
+ Flan-T5 XXL
+ Llama 2 13B
+ Llama 2 13B Chat
+ Llama 2 13B Neuron
+ Llama 2 70B
+ Llama 2 70B Chat
+ Llama 2 7B
+ Llama 2 7B Chat
+ Llama 2 7B Neuron
+ Mistral 7B
+ RedPajama INCITE Base 3B V1
+ RedPajama INCITE Base 7B V1
+ RedPajama INCITE Chat 3B V1
+ RedPajama INCITE Chat 7B V1
+ RedPajama INCITE Instruct 3B V1
+ RedPajama INCITE Instruct 7B V1

## 지침 기반 미세 조정을 위한 훈련 데이터 준비 및 업로드
<a name="jumpstart-foundation-models-fine-tuning-instruction-based-prepare-data"></a>

지침 기반 미세 조정을 위한 훈련 데이터는 JSON Lines 텍스트 파일 형식으로 제공되어야 하며, 여기서 각 줄은 사전입니다. 모든 훈련 데이터는 단일 폴더에 있어야 합니다. 폴더에는 여러 개의 .jsonl 파일이 포함될 수 있습니다.

훈련 폴더에는 데이터의 입력 및 출력 형식을 설명하는 템플릿 JSON 파일(`template.json`)도 포함될 수 있습니다. 템플릿 파일이 제공되지 않으면 다음 템플릿 파일이 사용됩니다.

```
{
  "prompt": "Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n\n### Instruction:\n{instruction}\n\n### Input:\n{context}",
  "completion": "{response}"
}
```

`template.json` 파일에 따르면 훈련 데이터의 각 .jsonl 항목에는 `{instruction}`, `{context}`및 `{response}` 필드가 포함되어야 합니다.

사용자 지정 템플릿 JSON 파일을 제공하는 경우 `"prompt"` 및 `"completion"` 키를 사용하여 자체 필수 필드를 정의합니다. 다음 사용자 지정 템플릿 JSON 파일에 따라 훈련 데이터의 각 .jsonl 항목에는 `{question}`, `{context}` 및 `{answer}` 필드가 포함되어야 합니다.

```
{
  "prompt": "question: {question} context: {context}",
  "completion": "{answer}"
}
```

### 훈련 및 테스트를 위한 데이터 분할
<a name="jumpstart-foundation-models-fine-tuning-instruction-based-split-data"></a>

필요에 따라 검증 데이터가 포함된 다른 폴더를 제공할 수 있습니다. 이 폴더에는 하나 이상의 .jsonl 파일도 포함되어야 합니다. 검증 데이터세트가 제공되지 않은 경우 검증 목적으로 설정된 양의 훈련 데이터가 따로 설정됩니다. 모델을 미세 조정할 하이퍼파라미터를 선택할 때 검증에 사용되는 훈련 데이터의 비율을 조정할 수 있습니다.

### Amazon S3에 미세 조정 데이터 업로드
<a name="jumpstart-foundation-models-fine-tuning-instruction-based-upload-data"></a>

준비된 데이터를 Amazon Simple Storage Service(Amazon S3)에 업로드하여 JumpStart 파운데이션 모델을 미세 조정할 때 사용합니다. 다음 명령을 사용하여 데이터를 업로드할 수 있습니다.

```
from sagemaker.s3 import S3Uploader
import sagemaker
import random

output_bucket = sagemaker.Session().default_bucket()
local_data_file = "train.jsonl"
train_data_location = f"s3://{output_bucket}/dolly_dataset"
S3Uploader.upload(local_data_file, train_data_location)
S3Uploader.upload("template.json", train_data_location)
print(f"Training data: {train_data_location}")
```

## 지침 기반 미세 조정을 위한 훈련 작업 생성
<a name="jumpstart-foundation-models-fine-tuning-instruction-based-train"></a>

데이터가 Amazon S3에 업로드된 후 JumpStart 파운데이션 모델을 미세 조정하고 배포할 수 있습니다. Studio에서 모델을 미세 조정하려면 [Studio에서 모델 미세 조정](jumpstart-foundation-models-use-studio-updated-fine-tune.md) 섹션을 참조하세요. SageMaker Python SDK를 사용하여 모델을 미세 조정하려면 [`JumpStartEstimator` 클래스를 사용하여 공개적으로 사용 가능한 파운데이션 모델을 미세 조정합니다.](jumpstart-foundation-models-use-python-sdk-estimator-class.md) 섹션을 참조하세요.

## 예제 노트북
<a name="jumpstart-foundation-models-fine-tuning-instruction-based-examples"></a>

명령 기반 미세 조정에 대한 자세한 내용은 다음 예제 노트북을 참조하세요.
+ [JumpStart에서 LLaMA 2 모델 미세 조정](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/llama-2-finetuning.html)
+ [SageMaker JumpStart 소개 - Mistral 모델을 사용한 텍스트 생성](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/mistral-7b-instruction-domain-adaptation-finetuning.html)
+ [SageMaker JumpStart 소개 - Falcon 모델을 사용한 텍스트 생성](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/falcon-7b-instruction-domain-adaptation-finetuning.html)
+ [SageMaker JumpStart 파운데이션 모델 - HuggingFace Text2Text 명령어 미세 조정](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/instruction-fine-tuning-flan-t5.html)

# 검색 증강 생성
<a name="jumpstart-foundation-models-customize-rag"></a>

파운데이션 모델은 일반적으로 오프라인에서 훈련되므로 모델을 훈련한 후 생성되는 모든 데이터에 구애받지 않고 모델을 훈련할 수 있습니다. 또한 파운데이션 모델은 매우 일반적인 도메인 코퍼스를 대상으로 훈련되므로 도메인별 작업에서는 효율성이 떨어집니다. 검색 증강 세대(RAG)를 사용하여 파운데이션 모델 외부에서 데이터를 검색하고 컨텍스트에 맞게 검색된 관련 데이터를 추가하여 프롬프트를 확대할 수 있습니다. RAG 모델 아키텍처에 대한 자세한 내용은 [지식 집약적 NLP 작업을 위한 검색 증강 생성](https://arxiv.org/abs/2005.11401)을 참조하세요.

RAG를 사용하면 프롬프트를 강화하는 데 사용되는 외부 데이터는 문서 리포지토리, 데이터베이스 또는 API와 같은 여러 데이터 소스에서 가져올 수 있습니다. 첫 번째 단계는 관련성 검색을 수행하기 위해 문서와 사용자 쿼리를 호환 가능한 형식으로 변환하는 것입니다. 형식이 호환되도록 하기 위해 문서 컬렉션 또는 지식 라이브러리와 사용자가 제출한 쿼리를 임베딩 언어 모델을 사용하여 수치 표현으로 변환합니다. *임베딩*은 텍스트를 벡터 공간에 숫자로 표현하는 프로세스입니다. RAG 모델 아키텍처는 지식 라이브러리의 벡터 내에서 사용자 쿼리의 임베딩을 비교합니다. 그런 다음 원본 사용자 프롬프트에 지식 라이브러리 내 유사한 문서의 관련 컨텍스트가 추가됩니다. 그러면 이 증강 프롬프트가 파운데이션 모델로 전송됩니다. 지식 라이브러리 및 관련 임베딩을 비동기적으로 업데이트할 수 있습니다.

 ![\[A model architecture diagram of Retrieval Augmented Generation (RAG).\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/jumpstart/jumpstart-fm-rag.jpg) 

검색된 문서는 프롬프트를 보강하는 데 도움이 되는 유용한 컨텍스트를 포함할 만큼 충분히 커야 하지만 프롬프트의 최대 시퀀스 길이에 맞게 충분히 작아야 합니다. Hugging Face의 일반 텍스트 임베딩(GTE) 모델과 같은 태스크별 JumpStart 모델을 사용하여 프롬프트 및 지식 라이브러리 문서에 대한 임베딩을 제공할 수 있습니다. 프롬프트와 문서 임베딩을 비교하여 가장 관련성이 높은 문서를 찾은 후 보충 컨텍스트를 사용하여 새 프롬프트를 구성합니다. 그런 다음 증강 프롬프트를 선택한 텍스트 생성 모델에 전달합니다.

## 예제 노트북
<a name="jumpstart-foundation-models-customize-rag-examples"></a>

RAG 파운데이션 모델 솔루션에 대한 자세한 내용은 다음 예제 노트북을 참조하세요.
+ [검색 증강 생성: LangChain과 Cohere의 SageMaker JumpStart에서 모델 생성 및 임베딩을 사용한 질문 응답](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/question_answering_retrieval_augmented_generation/question_answering_Cohere+langchain_jumpstart.html)
+ [검색 증강 생성: LLama-2, Pinecone 및 사용자 지정 데이터세트를 사용한 질문 응답](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/question_answering_retrieval_augmented_generation/question_answering_pinecone_llama-2_jumpstart.html)
+ [검색 증강 생성: 오픈 소스 LangChain 라이브러리를 사용한 사용자 지정 데이터세트 기반 질문 답변](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/question_answering_retrieval_augmented_generation/question_answering_langchain_jumpstart.html)
+ [검색 증강 생성: 사용자 지정 데이터세트 기반 질문 답변](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/question_answering_retrieval_augmented_generation/question_answering_jumpstart_knn.html)
+ [Retrieval-Augmented Generation: Llama-2 및 텍스트 임베딩 모델을 사용한 질문 응답](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/question_answering_retrieval_augmented_generation/question_answering_text_embedding_llama-2_jumpstart.html)
+ [Amazon SageMaker JumpStart - 텍스트 임베딩 및 문장 유사성](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/jumpstart-foundation-models/question_answering_retrieval_augmented_generation/text-embedding-sentence-similarity.html)

[Amazon SageMaker AI 예시 리포지토리](https://github.com/aws/amazon-sagemaker-examples/tree/main/introduction_to_amazon_algorithms/jumpstart-foundation-models)를 복제하여 Studio 내에서 선택한 Jupyter 환경에서 사용 가능한 JumpStart 파운데이션 모델 예시를 실행할 수 있습니다. SageMaker AI에서 Jupyter를 만들고 액세스하는 데 사용할 수 있는 애플리케이션에 대한 자세한 내용은 [Amazon SageMaker Studio에서 지원되는 애플리케이션](studio-updated-apps.md) 섹션을 참조하세요.