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

1. บทนำ

ทำไมการปรับแต่งถึงสำคัญ

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

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

การปรับแต่งภายใต้การควบคุมดูแลจะช่วยปรับปรุงประสิทธิภาพของโมเดลด้วยการสอนทักษะใหม่ ข้อมูลที่มีตัวอย่างที่มีป้ายกำกับหลายร้อยรายการจะนำมาใช้เพื่อสอนโมเดลให้เลียนแบบพฤติกรรมหรืองานที่ต้องการ เราจะจัดเตรียมชุดข้อมูลที่ติดป้ายกำกับสำหรับข้อความอินพุต (พรอมต์) และข้อความเอาต์พุต (คำตอบ) เพื่อสอนโมเดลให้รู้วิธีปรับแต่งคำตอบสำหรับ 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 นี้ในที่เก็บ คุณสามารถอัปโหลดไฟล์ไปยังที่เก็บข้อมูล 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, 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 ในที่เก็บ โปรดตรวจสอบว่าคุณแทนที่ 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)

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

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

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

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

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

ในการดำเนินการนี้ คุณสามารถเรียกใช้เมธอด get_tuned_model() ใน LLM ที่มี URL ENDPOINT แบบเต็มของโมเดลที่ปรับแต่งอย่างละเอียดซึ่งทำให้ใช้งานได้แล้วจาก 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 AI เพื่อระบุความสอดคล้อง ความถูกต้อง และความสอดคล้องกับพรอมต์ที่มีให้ การประเมินโมเดลช่วยระบุจุดที่ควรปรับปรุง เพิ่มประสิทธิภาพโมเดล และตรวจสอบว่าข้อความที่สร้างขึ้นเป็นไปตามมาตรฐานที่ต้องการในด้านคุณภาพและความมีประโยชน์ อ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในเอกสารประกอบ สำหรับตอนนี้ เราจะดูว่าเราจะรับเมตริกการประเมินบางอย่างเกี่ยวกับรูปแบบที่ปรับแต่งอย่างละเอียดและเปรียบเทียบกับโมเดลฐานได้อย่างไร

  1. โหลดชุดข้อมูล EVALUATION
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
)

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

387843d6c970e02.png

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

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

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

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

9. สิ่งสำคัญที่ควรพิจารณา

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

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

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

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

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

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

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