เกี่ยวกับ Codelab นี้
1 บทนำ
เหตุใดการปรับแต่งจึงสำคัญ
โมเดลพื้นฐานได้รับการฝึกเพื่อวัตถุประสงค์ทั่วไป และบางครั้งอาจทํางานได้ไม่ดีเท่าที่คุณต้องการ สาเหตุอาจเป็นเพราะงานที่คุณต้องการให้โมเดลทําเป็นงานที่เฉพาะเจาะจงซึ่งสอนโมเดลได้ยากโดยใช้เฉพาะการออกแบบพรอมต์ ในกรณีเหล่านี้ คุณสามารถใช้การปรับโมเดลเพื่อปรับปรุงประสิทธิภาพของโมเดลสำหรับงานหนึ่งๆ ได้ การปรับแต่งโมเดลยังช่วยให้เป็นไปตามข้อกำหนดเอาต์พุตที่เฉพาะเจาะจงได้อีกด้วยเมื่อวิธีการไม่เพียงพอ โมเดลภาษาขนาดใหญ่ (LLM) มีข้อมูลจํานวนมากและทํางานได้หลายอย่าง แต่ทํางานได้ดีที่สุดเมื่อได้รับการฝึกเฉพาะทาง การปรับแต่งแบบละเอียดจะฝึก LLM ซึ่งช่วยให้คุณปรับ LLM ที่ฝึกไว้ล่วงหน้าให้เหมาะกับความต้องการเฉพาะได้
ใน Codelab นี้ คุณจะได้เรียนรู้วิธีปรับแต่งแบบละเอียดโดยใช้วิธีการปรับแต่งแบบควบคุมดูแลสําหรับโมเดล LLM
การปรับที่มีการควบคุมจะปรับปรุงประสิทธิภาพของโมเดลด้วยการสอนทักษะใหม่ ระบบจะใช้ข้อมูลที่มีตัวอย่างที่ติดป้ายกำกับหลายร้อยรายการเพื่อสอนให้โมเดลเลียนแบบลักษณะการทำงานหรืองานที่ต้องการให้ทำ เราจะจัดเตรียมชุดข้อมูลที่มีป้ายกำกับสำหรับข้อความอินพุต (พรอมต์) และข้อความเอาต์พุต (คำตอบ) เพื่อสอนโมเดลวิธีปรับแต่งคำตอบสำหรับ Use Case ที่เฉพาะเจาะจง
ดูข้อมูลเพิ่มเติมเกี่ยวกับการปรับแต่งโมเดลได้ที่นี่
สิ่งที่คุณจะสร้าง
Use Case: สร้างบรรทัดแรกสำหรับบทความข่าว
สมมติว่าคุณต้องการสร้างบรรทัดแรกสำหรับบทความข่าวโดยอัตโนมัติ เมื่อใช้ Vertex AI คุณจะปรับแต่ง LLM ที่สร้างชื่อแบบสรุปที่เหมาะสมในสไตล์ที่เฉพาะเจาะจงและปรับแต่งชื่อตามหลักเกณฑ์ของช่องข่าวได้
ในโค้ดแล็บนี้ คุณจะทำสิ่งต่อไปนี้
- ใช้
BBC FULLTEXT DATA
(มีให้บริการโดยชุดข้อมูลสาธารณะ BigQuerybigquery-public-data.bbc_news.fulltext
) - ปรับแต่ง LLM (
text-bison@002
) เป็นรูปแบบใหม่ที่ปรับแต่งแล้วชื่อ "bbc-news-summary-tuned
" และเปรียบเทียบผลลัพธ์กับการตอบกลับจากรูปแบบพื้นฐาน ไฟล์ JSONL ตัวอย่างสําหรับโค้ดแล็บนี้มีอยู่ในที่เก็บ คุณสามารถอัปโหลดไฟล์ไปยังที่เก็บข้อมูล Cloud Storage แล้วทำตามขั้นตอนการปรับแต่งต่อไปนี้ - เตรียมข้อมูล: เริ่มต้นด้วยชุดข้อมูลบทความข่าวและบรรทัดแรกที่เกี่ยวข้อง เช่น ชุดข้อมูล BBC News ที่ใช้กับโค้ดตัวอย่าง
- ปรับแต่งโมเดลที่ผ่านการฝึกอบรมล่วงหน้า: เลือกโมเดลพื้นฐาน เช่น "
text-bison@002
" และปรับแต่งด้วยข้อมูลข่าวโดยใช้ Vertex AI SDK สําหรับ Python - ประเมินผลลัพธ์: เปรียบเทียบประสิทธิภาพของโมเดลที่ปรับแต่งกับโมเดลฐานเพื่อดูการปรับปรุงคุณภาพการสร้างบรรทัดแรก
- ทำให้โมเดลใช้งานได้และใช้งาน: ทำให้โมเดลที่ปรับแต่งแล้วพร้อมใช้งานผ่านปลายทาง API และเริ่มสร้างพาดหัวสำหรับบทความใหม่โดยอัตโนมัติ
2 ก่อนเริ่มต้น
- ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
- ตรวจสอบว่าเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Google Cloud แล้ว ดูวิธีตรวจสอบว่าเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์หรือไม่
- เปิด Colab Notebook และเข้าสู่ระบบบัญชีเดียวกับบัญชี Google Cloud ที่ใช้งานอยู่ในปัจจุบัน
3 ปรับแต่งโมเดลภาษาขนาดใหญ่
โค้ดแล็บนี้ใช้ Vertex AI SDK สําหรับ Python เพื่อปรับแต่งโมเดล คุณปรับแต่งโดยใช้ตัวเลือกอื่นๆ ได้ด้วย เช่น HTTP, คําสั่ง CURL, Java SDK, Console
คุณสามารถปรับแต่งและประเมินโมเดลสําหรับคำตอบที่กําหนดเองได้ใน 5 ขั้นตอน คุณสามารถดูโค้ดฉบับเต็มได้ในไฟล์ llm_fine_tuning_supervised.ipynb จากที่เก็บ
4 ขั้นตอนที่ 1: ติดตั้งและนําเข้าทรัพยากร Dependency
!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 ด้วยที่เก็บข้อมูลของคุณ แล้วอัปโหลดไฟล์ข้อมูลการฝึกอบรม TRAIN.jsonl ตัวอย่างไปยังที่เก็บข้อมูลดังกล่าว เราได้จัดสรรข้อมูลตัวอย่างสําหรับ Use Case นี้ในลิงก์ที่กล่าวถึงข้างต้นแล้ว
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",
)
ขั้นตอนนี้อาจใช้เวลา 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 ได้ด้วย
9 สิ่งสำคัญที่ควรพิจารณา
- การรองรับรุ่น: โปรดตรวจสอบเอกสารประกอบของรุ่นเสมอเพื่อดูความเข้ากันได้ล่าสุด
- การพัฒนาอย่างรวดเร็ว: วงการ LLM พัฒนาไปอย่างรวดเร็ว โมเดลที่ใหม่กว่าและมีประสิทธิภาพมากขึ้นอาจมีประสิทธิภาพดีกว่าโมเดลที่ปรับแต่งมาอย่างดีซึ่งสร้างขึ้นจากฐานข้อมูลเก่า ข่าวดีคือคุณสามารถใช้เทคนิคการปรับแต่งเหล่านี้กับโมเดลที่ใหม่กว่าได้เมื่อความสามารถดังกล่าวพร้อมใช้งาน
- LoRA: LoRA เป็นเทคนิคในการปรับแต่ง LLM อย่างละเอียดได้อย่างมีประสิทธิภาพ โดยนําเข้าเมทริกซ์การแยกองค์ประกอบอันดับต่ำที่ฝึกได้ไปยังเลเยอร์ของโมเดลที่ผ่านการฝึกล่วงหน้าที่มีอยู่ อ่านข้อมูลเพิ่มเติมได้ที่นี่ LoRA จะเรียนรู้เมทริกซ์ขนาดเล็กซึ่งจะเพิ่มหรือคูณกับเมทริกซ์น้ำหนักของโมเดลเดิมแทนการอัปเดตพารามิเตอร์ทั้งหมดของ LLM ขนาดใหญ่ ซึ่งจะช่วยลดจํานวนพารามิเตอร์เพิ่มเติมที่นําเข้าระหว่างการปรับแต่งอย่างละเอียดได้อย่างมาก
10 ล้างข้อมูล
โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโค้ดแล็บนี้
- ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์
- หรือไปที่รีจิสทรีโมเดล ไปที่แท็บ "การทําให้ใช้งานได้จริงและการทดสอบโมเดล" แล้วยกเลิกการทําให้ใช้งานได้จริงของปลายทางและลบโมเดลที่ปรับแต่งแล้วซึ่งทําให้ใช้งานได้จริง
11 ขอแสดงความยินดี
ยินดีด้วย คุณใช้ Vertex AI เพื่อปรับแต่งโมเดล LLM เรียบร้อยแล้ว การปรับแต่งเป็นเทคนิคที่มีประสิทธิภาพซึ่งช่วยให้คุณปรับแต่ง LLM ให้เหมาะกับโดเมนและงานได้ Vertex AI มีเครื่องมือและแหล่งข้อมูลที่จําเป็นในการปรับแต่งโมเดลอย่างมีประสิทธิภาพ
สำรวจที่เก็บ GitHub และทดลองใช้โค้ดตัวอย่างเพื่อสัมผัสประสบการณ์การปรับแต่งและการประเมินด้วยตนเอง ลองพิจารณาว่า LLM ที่ปรับแต่งมาอย่างดีจะช่วยตอบสนองความต้องการเฉพาะของคุณได้อย่างไร ตั้งแต่การสร้างข้อความการตลาดที่ตรงกลุ่มเป้าหมายไปจนถึงการสรุปเอกสารที่ซับซ้อน หรือแปลภาษาที่มีความละเอียดอ่อนทางวัฒนธรรม ใช้ชุดเครื่องมือและบริการที่ครอบคลุมซึ่ง Vertex AI มอบให้เพื่อสร้าง ฝึก ประเมิน และติดตั้งใช้งานโมเดลที่ปรับแต่งมาอย่างดีได้อย่างง่ายดาย