1. บทนำ
เหตุใดการปรับแต่งจึงสำคัญ
โมเดลพื้นฐานได้รับการฝึกฝนเพื่อวัตถุประสงค์ทั่วไป และบางครั้งก็ทำงานได้ไม่ดีเท่าที่คุณต้องการ สาเหตุอาจเป็นเพราะงานที่คุณต้องการให้โมเดลทำเป็นงานเฉพาะทางที่สอนโมเดลได้ยากโดยใช้การออกแบบพรอมต์เพียงอย่างเดียว ในกรณีเช่นนี้ คุณสามารถใช้การปรับแต่งโมเดลเพื่อปรับปรุงประสิทธิภาพของโมเดลสำหรับงานที่เฉพาะเจาะจงได้ การปรับแต่งโมเดลยังช่วยให้เป็นไปตามข้อกำหนดเอาต์พุตที่เฉพาะเจาะจงได้ด้วยเมื่อคำสั่งไม่เพียงพอ โมเดลภาษาขนาดใหญ่ (LLM) อาจมีข้อมูลจำนวนมากและสามารถทำงานได้หลายอย่าง แต่จะทำงานได้ดีที่สุดเมื่อได้รับการฝึกเฉพาะทาง การปรับแต่งอย่างละเอียดจะฝึก LLM ซึ่งช่วยให้คุณปรับ LLM ที่ฝึกไว้ล่วงหน้าให้เหมาะกับความต้องการเฉพาะได้
ใน Codelab นี้ คุณจะได้เรียนรู้วิธีทำการปรับแต่งโดยใช้แนวทางการปรับแต่งภายใต้การดูแลสำหรับโมเดล LLM
การปรับแต่งภายใต้การควบคุมจะช่วยปรับปรุงประสิทธิภาพของโมเดลด้วยการสอนทักษะใหม่ ระบบจะใช้ข้อมูลที่มีตัวอย่างที่ติดป้ายกำกับหลายร้อยรายการเพื่อสอนโมเดลให้เลียนแบบลักษณะการทำงานหรืองานที่ต้องการ เราจะจัดเตรียมชุดข้อมูลที่มีป้ายกำกับสำหรับข้อความอินพุต (พรอมต์) และข้อความเอาต์พุต (คำตอบ) เพื่อสอนโมเดลวิธีปรับแต่งคำตอบสำหรับ Use Case ของเราโดยเฉพาะ
ดูข้อมูลเพิ่มเติมเกี่ยวกับการปรับแต่งโมเดลได้ที่นี่
สิ่งที่คุณจะสร้าง
กรณีการใช้งาน: สร้างพาดหัวข่าวสำหรับบทความข่าว
สมมติว่าคุณต้องการสร้างบรรทัดแรกสำหรับบทความข่าวโดยอัตโนมัติ การใช้ Vertex AI ช่วยให้คุณปรับแต่ง LLM ที่สร้างชื่อสรุปที่เหมาะสมในสไตล์ที่เฉพาะเจาะจง และปรับแต่งชื่อตามหลักเกณฑ์ของช่องข่าวได้
ใน Codelab นี้ คุณจะทำสิ่งต่อไปนี้
- ใช้
BBC FULLTEXT DATA(จัดทำโดยชุดข้อมูลสาธารณะของ BigQuerybigquery-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. ก่อนเริ่มต้น
- ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
- ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Google Cloud แล้ว ดูวิธีตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้วหรือไม่
- เปิด Colab Notebook แล้วเข้าสู่ระบบบัญชีเดียวกับบัญชี Google Cloud ที่ใช้งานอยู่
3. ปรับแต่งโมเดลภาษาขนาดใหญ่
Codelab นี้ใช้ Vertex AI SDK สำหรับ Python เพื่อปรับแต่งโมเดล คุณยังปรับแต่งโดยใช้ตัวเลือกอื่นๆ ได้ด้วย เช่น HTTP, คำสั่ง CURL, Java SDK และ Console
คุณสามารถปรับแต่งและประเมินโมเดลเพื่อรับคำตอบที่ปรับแต่งได้ใน 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 ใน repo โปรดตรวจสอบว่าคุณได้แทนที่ 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 ระบบได้จัดเตรียมข้อมูลตัวอย่างสำหรับกรณีการใช้งานนี้ในลิงก์ที่กล่าวถึงข้างต้น
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" ด้วย Data Frame ที่มีข้อมูลฝึกฝนที่เราโหลดในขั้นตอนก่อนหน้า
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)
คุณควรเห็นผลลัพธ์ต่อไปนี้

หากต้องการคาดการณ์ด้วยโมเดลพื้นฐาน (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)
คุณควรเห็นผลลัพธ์ต่อไปนี้

แม้ว่าชื่อทั้ง 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: ประเมินโมเดลที่ปรับแต่งใหม่
การประเมินเป็นส่วนสำคัญในการประเมินคุณภาพและความเกี่ยวข้องของคำตอบที่สร้างขึ้น ซึ่งเกี่ยวข้องกับการตรวจสอบเอาต์พุตจากโมเดลภาษา Generative เพื่อพิจารณาความสอดคล้อง ความถูกต้อง และการจัดแนวกับพรอมต์ที่ระบุ การประเมินโมเดลช่วยระบุจุดที่ควรปรับปรุง เพิ่มประสิทธิภาพโมเดล และตรวจสอบว่าข้อความที่สร้างขึ้นเป็นไปตามมาตรฐานที่ต้องการด้านคุณภาพและประโยชน์ใช้สอย อ่านข้อมูลเพิ่มเติมได้ในเอกสารประกอบ ตอนนี้เราจะมาดูวิธีรับเมตริกการประเมินบางอย่างในโมเดลที่ปรับแต่งแล้ว และเปรียบเทียบกับโมเดลฐาน
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) ระหว่างข้อมูลสรุป 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 สำหรับทรัพยากรที่ใช้ในโค้ดแล็บนี้
- ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์
- หรือคุณจะไปที่Model Registry ไปที่แท็บการติดตั้งใช้งานและการทดสอบโมเดล แล้วยกเลิกการติดตั้งใช้งานปลายทางและลบโมเดลที่ปรับแต่งแล้วที่ติดตั้งใช้งาน
11. ขอแสดงความยินดี
ยินดีด้วย คุณใช้ Vertex AI เพื่อปรับแต่งโมเดล LLM เรียบร้อยแล้ว การปรับแต่งแบบละเอียดเป็นเทคนิคที่มีประสิทธิภาพซึ่งช่วยให้คุณปรับแต่ง LLM ให้เหมาะกับโดเมนและงานของคุณได้ Vertex AI มีเครื่องมือและแหล่งข้อมูลที่จำเป็นต่อการปรับแต่งโมเดลอย่างมีประสิทธิภาพ
สำรวจที่เก็บ GitHub และทดลองใช้โค้ดตัวอย่างเพื่อสัมผัสประสบการณ์การปรับแต่งและการประเมินด้วยตนเอง พิจารณาว่า LLM ที่ปรับแต่งอย่างละเอียดจะตอบสนองความต้องการเฉพาะของคุณได้อย่างไร ตั้งแต่การสร้างข้อความทางการตลาดที่กำหนดเป้าหมายไปจนถึงการสรุปเอกสารที่ซับซ้อนหรือการแปลภาษาที่มีความแตกต่างทางวัฒนธรรม ใช้ชุดเครื่องมือและบริการที่ครอบคลุมซึ่ง Vertex AI มีให้เพื่อสร้าง ฝึก ประเมิน และติดตั้งใช้งานโมเดลที่ปรับแต่งแล้วได้อย่างง่ายดาย