การปรับโมเดลภาษาขนาดใหญ่: วิธีที่ Vertex AI ยกระดับ LLM ขึ้นไปอีกขั้น

1. บทนำ

เหตุใดการปรับแต่งอย่างละเอียดจึงสำคัญ

โมเดลพื้นฐานได้รับการฝึกมาเพื่อวัตถุประสงค์ทั่วไป และบางครั้งก็ทำงานได้ไม่ดีเท่าที่คุณต้องการ สาเหตุอาจเป็นเพราะงานที่คุณต้องการให้โมเดลทำเป็นงานเฉพาะทางซึ่งสอนโมเดลได้ยากโดยใช้การออกแบบพรอมต์เพียงอย่างเดียว ในกรณีเหล่านี้ คุณสามารถใช้การปรับโมเดลเพื่อปรับปรุงประสิทธิภาพของโมเดลสำหรับงานที่เฉพาะเจาะจงได้ การปรับโมเดลยังช่วยให้เป็นไปตามข้อกำหนดเอาต์พุตที่เฉพาะเจาะจงได้เมื่อคำแนะนำไม่เพียงพอ โมเดลภาษาขนาดใหญ่ (LLM) อาจมีข้อมูลจำนวนมากและสามารถทำงานได้หลายอย่าง แต่จะทำงานได้ดีที่สุดเมื่อได้รับการฝึกเฉพาะทาง การปรับแต่งอย่างละเอียดสามารถฝึก LLM ได้ ซึ่งช่วยให้คุณปรับ LLM ที่ได้รับการฝึกไว้ล่วงหน้าให้เหมาะกับความต้องการที่เฉพาะเจาะจงได้

ใน Codelab นี้ คุณจะได้เรียนรู้วิธีปรับแต่งอย่างละเอียดโดยใช้แนวทางการปรับแต่งแบบมีผู้สอนสำหรับโมเดล LLM

การปรับแต่งแบบมีผู้สอนช่วยปรับปรุงประสิทธิภาพของโมเดลโดยการสอนทักษะใหม่ ระบบจะใช้ข้อมูลที่มีตัวอย่างที่ติดป้ายกำกับหลายร้อยรายการเพื่อสอนโมเดลให้เลียนแบบพฤติกรรมหรืองานที่ต้องการ เราจะจัดเตรียมชุดข้อมูลที่ติดป้ายกำกับสำหรับข้อความอินพุต (พรอมต์) และข้อความเอาต์พุต (การตอบสนอง) เพื่อสอนโมเดลให้ปรับแต่งการตอบสนองสำหรับ Use Case ที่เฉพาะเจาะจงของเรา

ดูข้อมูลเพิ่มเติมเกี่ยวกับการปรับแต่งโมเดลได้ที่ นี่

สิ่งที่คุณจะได้สร้าง

Use Case: สร้างบรรทัดแรกสำหรับบทความข่าว

สมมติว่าคุณต้องการสร้างบรรทัดแรกสำหรับบทความข่าวโดยอัตโนมัติ Vertex AI ช่วยให้คุณปรับแต่ง LLM ที่สร้างชื่อสรุปที่เหมาะสมในรูปแบบที่เฉพาะเจาะจงและปรับแต่งชื่อตามหลักเกณฑ์ของช่องข่าวได้

ใน Codelab นี้ คุณจะได้ทำสิ่งต่อไปนี้

  • ใช้ BBC FULLTEXT DATA (จัดทำโดยชุดข้อมูลสาธารณะของ BigQuery bigquery-public-data.bbc_news.fulltext)
  • ปรับแต่งอย่างละเอียด LLM (text-bison@002) ให้เป็นโมเดลที่ปรับแต่งอย่างละเอียดใหม่ที่ชื่อว่า "bbc-news-summary-tuned" และเปรียบเทียบผลลัพธ์กับการตอบสนองจากโมเดลพื้นฐาน เราได้จัดเตรียมไฟล์ JSONL ตัวอย่างสำหรับ Codelab นี้ไว้ใน ที่เก็บ คุณสามารถอัปโหลดไฟล์ไปยัง Bucket ใน Cloud Storage และทำตามขั้นตอนการปรับแต่งอย่างละเอียดต่อไปนี้
  • เตรียมข้อมูล: เริ่มต้นด้วยชุดข้อมูลบทความข่าวและบรรทัดแรกที่เกี่ยวข้อง เช่น ชุดข้อมูล BBC News ที่ใช้ในโค้ดตัวอย่าง
  • ปรับแต่งอย่างละเอียดโมเดลที่ได้รับการฝึกไว้ล่วงหน้า: เลือกโมเดลพื้นฐาน เช่น "text-bison@002" และปรับแต่งอย่างละเอียดด้วยข้อมูลข่าวโดยใช้ Vertex AI SDK สำหรับ Python
  • ประเมินผลลัพธ์: เปรียบเทียบประสิทธิภาพของโมเดลที่ปรับแต่งอย่างละเอียดกับโมเดลพื้นฐานเพื่อดูการปรับปรุงคุณภาพการสร้างบรรทัดแรก
  • ทำให้โมเดลพร้อมใช้งานและใช้โมเดล: ทำให้โมเดลที่ปรับแต่งอย่างละเอียดพร้อมใช้งานผ่านปลายทาง API และเริ่มสร้างพาดหัวสำหรับบทความใหม่โดยอัตโนมัติ

2. ก่อนเริ่มต้น

  1. ใน คอนโซล Google Cloud ในหน้าตัวเลือกโปรเจ็กต์ ให้เลือกหรือสร้าง โปรเจ็กต์ Google Cloud
  2. ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Google Cloud แล้ว ดูวิธี ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้ว
  3. เปิด Colab Notebook และเข้าสู่ระบบด้วยบัญชีเดียวกับบัญชี Google Cloud ที่ใช้งานอยู่ในปัจจุบัน

3. ปรับแต่งอย่างละเอียดโมเดลภาษาขนาดใหญ่

Codelab นี้ใช้ Vertex AI SDK สำหรับ Python เพื่อปรับแต่งโมเดลอย่างละเอียด คุณยังปรับแต่งอย่างละเอียดได้โดยใช้ตัวเลือกอื่นๆ ด้วย เช่น 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 ด้วย Bucket ของคุณและอัปโหลดไฟล์ข้อมูลฝึกฝน TRAIN.jsonl ตัวอย่างลงใน Bucket เราได้จัดเตรียมข้อมูลตัวอย่างสำหรับ Use Case นี้ไว้ในลิงก์ที่กล่าวถึงข้างต้น

json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)

ขั้นตอนนี้ควรให้ผลลัพธ์ดังนี้

17274866af36a47c.png

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",
)

ขั้นตอนนี้จะใช้เวลา 2-3 ชั่วโมง คุณสามารถติดตามความคืบหน้าของการปรับแต่งอย่างละเอียดได้โดยใช้ลิงก์งานไปป์ไลน์ในผลลัพธ์

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)

คุณควรเห็นผลลัพธ์ต่อไปนี้

67061c36b7ba39b7.png

หากต้องการคาดการณ์ด้วยโมเดลพื้นฐาน (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)

คุณควรเห็นผลลัพธ์ต่อไปนี้

22ec58e4261405d6.png

แม้ว่าชื่อที่สร้างขึ้นทั้ง 2 ชื่อจะดูเหมาะสม แต่ชื่อแรก (สร้างด้วยโมเดลที่ปรับแต่งอย่างละเอียด) จะสอดคล้องกับสไตล์ของชื่อที่ใช้ในชุดข้อมูลที่เป็นปัญหามากกว่า

โหลดโมเดลที่ปรับแต่งอย่างละเอียด

การโหลดโมเดลที่คุณเพิ่งปรับแต่งอย่างละเอียดอาจทำได้ง่ายกว่า แต่โปรดทราบว่าในขั้นตอนที่ 3 เราเรียกใช้โมเดลในขอบเขตของโค้ดเอง ดังนั้นโมเดลที่ปรับแต่งแล้วจะยังคงอยู่ในตัวแปร tuned_model แต่จะเกิดอะไรขึ้นหากคุณต้องการเรียกใช้โมเดลที่ปรับแต่งไว้ในอดีต

หากต้องการทำเช่นนี้ คุณสามารถเรียกใช้เมธอด get_tuned_model() ใน LLM ด้วย URL ปลายทางแบบเต็มของโมเดลที่ปรับแต่งอย่างละเอียดที่ติดตั้งใช้งานจาก Vertex AI Model Registry โปรดทราบว่าในกรณีนี้ คุณจะต้องป้อน 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: ประเมินโมเดลที่ปรับแต่งอย่างละเอียดใหม่

การประเมินเป็นส่วนสำคัญในการประเมินคุณภาพและความเกี่ยวข้องของการตอบสนองที่สร้างขึ้น ซึ่งเกี่ยวข้องกับการตรวจสอบเอาต์พุตจากโมเดลภาษาแบบสร้างสรรค์เพื่อพิจารณาความสอดคล้อง ความถูกต้อง และการจัดแนวกับพรอมต์ที่ระบุ การประเมินโมเดลช่วยระบุส่วนที่ต้องปรับปรุง เพิ่มประสิทธิภาพของโมเดล และตรวจสอบว่าข้อความที่สร้างขึ้นเป็นไปตามมาตรฐานที่ต้องการด้านคุณภาพและประโยชน์ใช้สอย อ่านข้อมูลเพิ่มเติมได้ใน เอกสารประกอบ ตอนนี้เราจะมาดูวิธีรับเมตริกการประเมินบางอย่างในโมเดลที่ปรับแต่งอย่างละเอียดและเปรียบเทียบกับโมเดลพื้นฐาน

  1. โหลดชุดข้อมูลการประเมิน :
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
  1. กำหนดข้อกำหนดการประเมินสำหรับงานสรุปข้อความในโมเดลที่ปรับแต่งอย่างละเอียด
task_spec = EvaluationTextSummarizationSpec(
 task_name = "summarization",
 ground_truth_data=df
)

ขั้นตอนนี้จะใช้เวลา 2-3 นาที คุณสามารถติดตามความคืบหน้าได้โดยใช้ลิงก์งานไปป์ไลน์ในผลลัพธ์ หลังจากเสร็จสิ้น คุณควรเห็นผลการประเมินต่อไปนี้

387843d6c970e02.png

เมตริก rougeLSum ในผลการประเมินจะระบุคะแนน ROUGE-L สำหรับสรุป ROUGE-L เป็นเมตริกที่อิงตามการเรียกคืนซึ่งวัดการทับซ้อนกันระหว่างสรุปกับสรุปอ้างอิง โดยคำนวณจากการหาลำดับย่อยที่ยาวที่สุดที่ใช้ร่วมกัน (LCS) ระหว่างสรุป 2 รายการ แล้วหารด้วยความยาวของสรุปอ้างอิง

คะแนน rougeLSum ในนิพจน์ที่ระบุคือ 0.36600753600753694 ซึ่งหมายความว่าสรุปมีการทับซ้อนกับสรุปอ้างอิง 36.6%

หากคุณเรียกใช้ขั้นตอนการประเมินในโมเดลพื้นฐาน คุณจะเห็นว่าคะแนนสรุปของโมเดลที่ปรับแต่งอย่างละเอียดนั้น ค่อนข้าง สูงกว่า

คุณสามารถดูผลการประเมินได้ในไดเรกทอรีเอาต์พุตของ Cloud Storage ที่คุณระบุเมื่อสร้างงานประเมิน ไฟล์จะมีชื่อว่า evaluation_metrics.json สำหรับโมเดลที่ปรับแต่งแล้ว คุณยังดูผลการประเมินได้ในคอนโซล Google Cloud ในหน้า Vertex AI Model Registry

9. สิ่งสำคัญที่ต้องคำนึงถึง

  • การรองรับโมเดล: ตรวจสอบเอกสารประกอบของโมเดลเสมอเพื่อดูความเข้ากันได้ล่าสุด
  • การพัฒนาอย่างรวดเร็ว: สาขา LLM มีการพัฒนาอย่างรวดเร็ว โมเดลใหม่กว่าและมีประสิทธิภาพมากกว่าอาจทำงานได้ดีกว่าโมเดลที่ปรับแต่งอย่างละเอียดซึ่งสร้างขึ้นจากโมเดลพื้นฐานรุ่นเก่า ข่าวดีคือคุณสามารถใช้เทคนิคการปรับแต่งอย่างละเอียดเหล่านี้กับโมเดลใหม่กว่าได้เมื่อความสามารถพร้อมใช้งาน
  • LoRA: LoRA เป็นเทคนิคในการปรับแต่ง LLM อย่างละเอียดอย่างมีประสิทธิภาพ โดยการนำเมทริกซ์การแยกส่วนที่มีอันดับต่ำและฝึกได้มาใช้ในเลเยอร์ของโมเดลที่ได้รับการฝึกไว้ล่วงหน้าที่มีอยู่ อ่านข้อมูลเพิ่มเติมได้ที่นี่ ที่นี่ LoRA จะเรียนรู้เมทริกซ์ขนาดเล็กกว่าซึ่งจะเพิ่มหรือคูณกับเมทริกซ์น้ำหนักของโมเดลเดิม แทนที่จะอัปเดตพารามิเตอร์ทั้งหมดของ LLM ขนาดใหญ่ ซึ่งจะช่วยลดจำนวนพารามิเตอร์เพิ่มเติมที่นำมาใช้ระหว่างการปรับแต่งอย่างละเอียดได้อย่างมาก

10. ล้างข้อมูล

โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ใน Codelab นี้

  1. ในคอนโซล Google Cloud ให้ไปที่หน้า จัดการทรัพยากร
  2. ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
  3. ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิด เพื่อลบโปรเจ็กต์
  4. หรือคุณจะไปที่ Model Registry แล้วไปที่แท็บติดตั้งใช้งานและทดสอบโมเดล จากนั้นยกเลิกการติดตั้งใช้งานปลายทางและลบโมเดลที่ปรับแต่งอย่างละเอียดที่ติดตั้งใช้งาน

11. ขอแสดงความยินดี

ยินดีด้วย คุณใช้ Vertex AI เพื่อปรับแต่งโมเดล LLM อย่างละเอียดได้สำเร็จแล้ว การปรับแต่งอย่างละเอียดเป็นเทคนิคที่มีประสิทธิภาพซึ่งช่วยให้คุณปรับแต่ง LLM ให้เหมาะกับโดเมนและงานของคุณได้ Vertex AI มีเครื่องมือและทรัพยากรที่จำเป็นเพื่อให้คุณปรับแต่งโมเดลอย่างละเอียดได้อย่างมีประสิทธิภาพ

สำรวจที่เก็บ GitHub และทดลองใช้โค้ดตัวอย่างเพื่อสัมผัสประสบการณ์การปรับแต่งอย่างละเอียดfine-tuning และการประเมินevaluationด้วยตนเอง พิจารณาว่า LLM ที่ปรับแต่งอย่างละเอียดจะตอบสนองความต้องการที่เฉพาะเจาะจงของคุณได้อย่างไร ตั้งแต่การสร้างข้อความทางการตลาดที่กำหนดเป้าหมายไปจนถึงการสรุปเอกสารที่ซับซ้อนหรือการแปลภาษาที่มีความแตกต่างทางวัฒนธรรม ใช้ชุดเครื่องมือและบริการที่ครอบคลุมซึ่ง Vertex AI มีให้เพื่อสร้าง ฝึก ประเมิน และทำให้โมเดลที่ปรับแต่งอย่างละเอียดของคุณใช้งานได้ง่ายดาย