1. 소개
미세 조정이 중요한 이유
기반 모델은 범용으로 학습되지만 경우에 따라 특정 태스크를 원하는 대로 수행하지 않습니다. 이는 모델이 수행하려는 태스크가 프롬프트 설계만으로 모델을 학습시키기 어려운 전문 태스크이기 때문일 수 있습니다. 이러한 경우에는 모델 조정을 통해 특정 태스크에 대해 모델 성능을 향상시킬 수 있습니다. 모델 조정은 요청 사항이 충분하지 않을 때 특정한 출력 요구사항을 따르는 데에도 도움이 될 수 있습니다. 대규모 언어 모델 (LLM)은 방대한 양의 정보를 보유하고 있으며 많은 태스크를 수행할 수 있지만 전문 학습이 제공될 때만 뛰어난 성능을 발휘합니다. 미세 조정을 통해 LLM을 학습시켜 사전 학습된 LLM을 특정 요구사항에 맞게 조정할 수 있습니다.
이 Codelab에서는 지도 조정 접근 방식을 사용하여 LLM 모델을 미세 조정하는 방법을 알아봅니다.
지도 조정은 새로운 기술을 학습시켜 모델의 성능을 개선합니다. 라벨이 있는 예가 수백 개 포함된 데이터를 사용하여 모델이 원하는 행동 또는 작업을 모방하도록 학습시킵니다. 입력 텍스트 (프롬프트) 및 출력 텍스트 (대답)에 라벨이 지정된 데이터 세트를 제공하여 모델이 특정 사용 사례에 맞게 대답을 맞춤설정하는 방법을 학습시킵니다.
모델 맞춤설정에 대한 자세한 내용은 여기에서 확인하세요.
빌드할 항목
사용 사례: 뉴스 기사의 헤드라인 생성
뉴스 기사의 헤드라인을 자동으로 생성한다고 가정해 보겠습니다. Vertex AI를 사용하면 특정 스타일로 적절한 요약 제목을 생성하고 뉴스 채널의 가이드라인에 따라 제목을 맞춤설정하는 LLM을 미세 조정할 수 있습니다.
이 Codelab에서는 다음 작업을 실행합니다.
BBC FULLTEXT DATA(BigQuery 공개 데이터 세트bigquery-public-data.bbc_news.fulltext에서 제공)를 사용합니다.- LLM (
text-bison@002)을 "bbc-news-summary-tuned"라는 새로운 미세 조정 모델로 미세 조정하고 결과를 기본 모델의 대답과 비교합니다. 이 Codelab의 샘플 JSONL 파일은 저장소에서 확인할 수 있습니다. 파일을 Cloud Storage 버킷에 업로드하고 다음 미세 조정 단계를 실행할 수 있습니다. - 데이터 준비: 예시 코드에 사용된 BBC 뉴스 데이터 세트와 같이 뉴스 기사 및 해당 헤드라인의 데이터 세트로 시작합니다.
- 사전 학습된 모델 미세 조정: "
text-bison@002"와 같은 기본 모델을 선택하고 Python용 Vertex AI SDK를 사용하여 뉴스 데이터로 미세 조정합니다. - 결과 평가: 미세 조정된 모델의 성능을 기본 모델과 비교하여 헤드라인 생성 품질의 개선사항을 확인합니다.
- 모델 배포 및 사용: API 엔드포인트를 통해 미세 조정된 모델을 제공하고 새 기사의 헤드라인을 자동으로 생성하기 시작합니다.
2. 시작하기 전에
- Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
- Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
- Colab Notebook을 열고 현재 활성 상태인 Google Cloud 계정과 동일한 계정으로 로그인합니다.
3. 대규모 언어 모델 미세 조정
이 Codelab에서는 Python용 Vertex AI SDK를 사용하여 모델을 미세 조정합니다. HTTP, CURL 명령어, Java SDK, 콘솔과 같은 다른 옵션을 사용하여 미세 조정을 실행할 수도 있습니다.
5단계로 맞춤설정된 대답을 위해 모델을 미세 조정하고 평가할 수 있습니다. 저장소의 llm_fine_tuning_supervised.ipynb 파일에서 전체 코드를 참조할 수 있습니다.
4. 1단계: 종속 항목 설치 및 가져오기
!pip install google-cloud-aiplatform
!pip install --user datasets
!pip install --user google-cloud-pipeline-components
저장소의 .ipynb 파일에 표시된 대로 나머지 단계를 따릅니다. PROJECT_ID 및 BUCKET_NAME을 사용자 인증 정보로 바꾸어야 합니다.
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import warnings
warnings.filterwarnings('ignore')
import vertexai
vertexai.init(project=PROJECT_ID, location=REGION)
import kfp
import sys
import uuid
import json
import pandas as pd
from google.auth import default
from datasets import load_dataset
from google.cloud import aiplatform
from vertexai.preview.language_models import TextGenerationModel, EvaluationTextSummarizationSpec
5. 2단계: 학습 데이터 준비 및 로드
YOUR_BUCKET을 버킷으로 바꾸고 샘플 TRAIN.jsonl 학습 데이터 파일을 업로드합니다. 샘플 데이터는 위에 언급된 링크에서 이 사용 사례를 위해 프로비저닝되었습니다.
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
이 단계의 결과는 다음과 같습니다.

6. 3단계: 대규모 언어 모델 미세 조정
이 시점에서 지원 가능 여부에 따라 대규모 언어 모델을 조정할 수 있습니다. 하지만 이 스니펫에서는 이전 단계에서 로드한 학습 데이터가 포함된 데이터 프레임으로 사전 학습된 모델 'text-bison@002'를 조정합니다.
model_display_name = 'bbc-finetuned-model' # @param {type:"string"}
tuned_model = TextGenerationModel.from_pretrained("text-bison@002")
tuned_model.tune_model(
training_data=df,
train_steps=100,
tuning_job_location="europe-west4",
tuned_model_location="europe-west4",
)
이 단계를 완료하는 데 몇 시간이 걸립니다. 결과의 파이프라인 작업 링크를 사용하여 미세 조정 진행 상황을 추적할 수 있습니다.
7. 4단계: 새 미세 조정 모델로 예측
미세 조정 작업이 완료되면 새 모델로 예측할 수 있습니다. 새로 조정된 모델로 예측하려면 다음 단계를 따르세요.
response = tuned_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)
다음과 같은 결과가 표시됩니다.

비교를 위해 기본 모델 (text-bison@002)로 예측하려면 다음 명령어를 실행합니다.
base_model = TextGenerationModel.from_pretrained("text-bison@002")
response = base_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)
다음과 같은 결과가 표시됩니다.

생성된 두 제목 모두 적절해 보이지만 첫 번째 제목 (미세 조정된 모델로 생성)이 문제의 데이터 세트에 사용된 제목 스타일에 더 적합합니다.
미세 조정된 모델 로드
미세 조정한 모델을 로드하는 것이 더 쉬울 수 있습니다. 하지만 3단계에서 코드가 자체 범위 내에서 호출되므로 조정된 모델이 여전히 tuned_model 변수에 포함되어 있습니다. 하지만 과거에 조정된 모델을 호출하려면 어떻게 해야 할까요?
이렇게 하려면 Vertex AI Model Registry에서 배포된 미세 조정 모델의 전체 엔드포인트 URL을 사용하여 LLM에서 get_tuned_model() 메서드를 호출하면 됩니다. 이 경우 각 ID 대신 PROJECT_NUMBER와 MODEL_NUMBER를 입력합니다.
tuned_model_1 = TextGenerationModel.get_tuned_model("projects/<<PROJECT_NUMBER>>/locations/europe-west4/models/<<MODEL_NUMBER>>")
print(tuned_model_1.predict("YOUR_PROMPT"))
8. 5단계: 새 미세 조정 모델 평가
평가는 생성된 대답의 품질과 관련성을 평가하는 데 중요한 측면입니다. 생성형 언어 모델의 출력을 검사하여 일관성, 정확성, 제공된 프롬프트와의 정렬을 확인합니다. 모델 평가는 개선이 필요한 영역을 파악하고 모델 성능을 최적화하며 생성된 텍스트가 품질 및 유용성에 대한 원하는 표준을 충족하는지 확인하는 데 도움이 됩니다. 자세한 내용은 문서를 참조하세요. 지금은 미세 조정된 모델에서 평가 측정항목을 가져오고 기본 모델과 비교하는 방법을 알아보겠습니다.
- 평가 데이터 세트를 로드합니다.
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
- 미세 조정된 모델에서 텍스트 요약 태스크의 평가 사양을 정의합니다.
task_spec = EvaluationTextSummarizationSpec(
task_name = "summarization",
ground_truth_data=df
)
이 단계를 완료하는 데 몇 분 정도 걸립니다. 결과의 파이프라인 작업 링크를 사용하여 진행 상황을 추적할 수 있습니다. 완료되면 다음과 같은 평가 결과가 표시됩니다.

평가 결과의 rougeLSum 측정항목은 요약의 ROUGE-L 점수를 지정합니다. ROUGE-L은 요약과 참조 요약 간의 중복을 측정하는 재현율 기반 측정항목입니다. 두 요약 간의 최장 공통 부분 수열 (LCS)을 가져와 참조 요약의 길이로 나누어 계산합니다.
제공된 표현식의 rougeLSum 점수는 0.36600753600753694입니다. 즉, 요약이 참조 요약과 36.6% 중복됩니다.
기준 모델에서 평가 단계를 실행하면 미세 조정된 모델의 요약 점수가 상대적으로 더 높다는 것을 알 수 있습니다.
평가 작업을 만들 때 지정한 Cloud Storage 출력 디렉터리에서 평가 결과를 찾을 수 있습니다. 파일 이름은 evaluation_metrics.json입니다. 조정된 모델의 경우 Vertex AI Model Registry 페이지의 Google Cloud 콘솔에서 평가 결과를 볼 수도 있습니다.
9. 중요 고려사항
- 모델 지원: 항상 모델 문서에서 최신 호환성을 확인하세요.
- 빠른 개발: LLM 분야는 빠르게 발전하고 있습니다. 더 강력한 최신 모델이 이전 기본 모델을 기반으로 빌드된 미세 조정 모델보다 성능이 뛰어날 수 있습니다. 기능이 제공되면 이러한 미세 조정 기술을 최신 모델에 적용할 수 있다는 좋은 소식이 있습니다.
- LoRA: LoRA는 LLM을 효율적으로 미세 조정하는 기술입니다. 기존 사전 학습된 모델의 레이어에 학습 가능한 저순위 분해 행렬을 도입하여 이 작업을 실행합니다. 자세한 내용은 여기를 참고하세요. LoRA는 대규모 LLM의 모든 매개변수를 업데이트하는 대신 원래 모델의 가중치 행렬에 추가되거나 곱해지는 더 작은 행렬을 학습합니다. 이렇게 하면 미세 조정 중에 도입되는 추가 매개변수의 수가 크게 줄어듭니다.
10. 정리
이 Codelab에서 사용한 리소스의 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 따르세요.
- Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.
- 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제 를 클릭합니다.
- 대화상자에서 프로젝트 ID를 입력하고 종료 를 클릭하여 프로젝트를 삭제합니다.
- 또는 Model Registry로 이동하여 모델 배포 및 테스트 탭으로 이동한 후 엔드포인트를 배포 취소하고 배포된 조정 모델을 삭제할 수 있습니다.
11. 마무리
수고하셨습니다 Vertex AI를 사용하여 LLM 모델을 미세 조정했습니다. 미세 조정은 LLM을 도메인 및 태스크에 맞게 맞춤설정할 수 있는 강력한 기술입니다. Vertex AI를 사용하면 모델을 효율적이고 효과적으로 미세 조정하는 데 필요한 도구와 리소스를 사용할 수 있습니다.
GitHub 저장소를 살펴보고 샘플 코드를 실험하여 미세 조정 및 평가를 직접 경험해 보세요. 타겟 마케팅 문구 생성부터 복잡한 문서 요약 또는 문화적 뉘앙스가 있는 언어 번역에 이르기까지 미세 조정된 LLM이 특정 요구사항을 어떻게 해결할 수 있는지 고려해 보세요. Vertex AI에서 제공하는 포괄적인 도구 및 서비스 제품군을 활용하여 미세 조정된 모델을 손쉽게 빌드, 학습, 평가, 배포하세요.