۱. مقدمه
چرا تنظیم دقیق اهمیت دارد
مدلهای پایه برای اهداف عمومی آموزش داده میشوند و گاهی اوقات وظایف را آنطور که شما میخواهید انجام نمیدهند. این ممکن است به این دلیل باشد که وظایفی که میخواهید مدل انجام دهد، وظایف تخصصی هستند که آموزش آنها به یک مدل تنها با استفاده از طراحی سریع دشوار است. در این موارد، میتوانید از تنظیم مدل برای بهبود عملکرد یک مدل برای وظایف خاص استفاده کنید. تنظیم مدل همچنین میتواند به رعایت الزامات خروجی خاص در زمانی که دستورالعملها کافی نیستند، کمک کند. مدلهای زبان بزرگ (LLM) میتوانند اطلاعات زیادی داشته باشند و وظایف زیادی را انجام دهند، اما فقط در صورت ارائه آموزش تخصصی، برتری دارند. تنظیم دقیق میتواند یک LLM را آموزش دهد و به شما این امکان را میدهد که یک LLM از پیش آموزش دیده را برای نیازهای خاص خود تطبیق دهید.
در این آزمایشگاه کد، شما یاد خواهید گرفت که چگونه با استفاده از رویکرد تنظیم نظارتشده برای یک مدل LLM، تنظیم دقیق انجام دهید.
تنظیم نظارتشده با آموزش یک مهارت جدید، عملکرد یک مدل را بهبود میبخشد. دادههایی که شامل صدها مثال برچسبگذاریشده هستند، برای آموزش مدل جهت تقلید از یک رفتار یا وظیفه مطلوب استفاده میشوند. ما قصد داریم یک مجموعه داده برچسبگذاریشده برای متن ورودی (دستورالعمل) و متن خروجی (پاسخ) ارائه دهیم تا به مدل نحوه سفارشیسازی پاسخها برای مورد استفاده خاص خود را آموزش دهیم.
اطلاعات بیشتر در مورد سفارشیسازی مدل اینجا موجود است.
آنچه خواهید ساخت
مورد استفاده: ایجاد تیتر برای مقالات خبری
فرض کنید میخواهید به طور خودکار تیترهایی برای مقالات خبری تولید کنید. با استفاده از Vertex AI، میتوانید یک LLM را تنظیم کنید که یک عنوان خلاصه مناسب را با سبکی خاص تولید کند و عنوان را طبق دستورالعملهای کانال خبری سفارشی کند.
در این آزمایشگاه کد، موارد زیر را انجام خواهید داد:
-
BBC FULLTEXT DATA(که توسط مجموعه دادههای عمومی BigQuery،bigquery-public-data.bbc_news.fulltext، در دسترس قرار گرفته است) استفاده کنید. - یک LLM (
text-bison@002) را به یک مدل جدید با تنظیمات دقیق به نام "bbc-news-summary-tuned" تنظیم دقیق کنید و نتیجه را با پاسخ مدل پایه مقایسه کنید. یک فایل JSONL نمونه برای این codelab در مخزن موجود است. میتوانید فایل را در Cloud Storage Bucket خود آپلود کنید و مراحل تنظیم دقیق زیر را اجرا کنید: - دادههای خود را آماده کنید: با یک مجموعه داده از مقالات خبری و تیترهای مربوط به آنها، مانند مجموعه داده BBC News که در کد نمونه استفاده شده است، شروع کنید.
- تنظیم دقیق یک مدل از پیش آموزشدیده: یک مدل پایه مانند "
text-bison@002" را انتخاب کنید و آن را با دادههای خبری خود با استفاده از Vertex AI SDK برای پایتون تنظیم دقیق کنید. - نتایج را ارزیابی کنید: عملکرد مدل تنظیمشدهی دقیق خود را با مدل پایه مقایسه کنید تا بهبود کیفیت تولید تیتر را مشاهده کنید.
- مدل خود را مستقر و استفاده کنید: مدل تنظیمشدهی خود را از طریق یک نقطهی پایانی API در دسترس قرار دهید و شروع به تولید خودکار عناوین برای مقالات جدید کنید.
۲. قبل از شروع
- در کنسول گوگل کلود ، در صفحه انتخاب پروژه، یک پروژه گوگل کلود را انتخاب یا ایجاد کنید.
- مطمئن شوید که صورتحساب برای پروژه Google Cloud شما فعال است. یاد بگیرید که چگونه بررسی کنید که آیا صورتحساب در یک پروژه فعال است یا خیر .
- دفترچه یادداشت Colab را باز کنید و با همان حسابی که حساب Google Cloud فعلی شما فعال است، وارد شوید.
۳. تنظیم دقیق یک مدل زبانی بزرگ
این آزمایشگاه کد از Vertex AI SDK برای پایتون برای تنظیم دقیق مدل استفاده میکند. شما میتوانید با استفاده از گزینههای دیگر نیز تنظیم دقیق را انجام دهید - HTTP، دستور CURL، Java SDK، Console.
شما میتوانید مدل خود را برای پاسخهای سفارشی در ۵ مرحله تنظیم دقیق و ارزیابی کنید. میتوانید به کد کامل موجود در فایل llm_fine_tuning_supervised.ipynb از مخزن مراجعه کنید.
۴. مرحله ۱: نصب و وارد کردن وابستگیها
!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
۵. مرحله ۲: آمادهسازی و بارگذاری دادههای آموزشی
YOUR_BUCKET را با سطل خود جایگزین کنید و فایل داده آموزشی نمونه TRAIN.jsonl را در آن آپلود کنید. دادههای نمونه برای این مورد استفاده در لینک ذکر شده در بالا ارائه شده است.
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
این مرحله باید نتیجهی زیر را داشته باشد:

۶. مرحله ۳: تنظیم دقیق یک مدل زبانی بزرگ
در این مرحله میتوانید هر مدل زبانی بزرگی را تنظیم کنید (بر اساس پشتیبانی موجود). با این حال، در این قطعه کد، ما مدل از پیش آموزش دیده "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",
)
تکمیل این مرحله چند ساعت طول میکشد. میتوانید پیشرفت تنظیم دقیق را با استفاده از لینک pipeline job در نتیجه پیگیری کنید.
۷. مرحله ۴: پیشبینی با مدل جدید و تنظیمشده
پس از اتمام کار تنظیم دقیق، میتوانید با مدل جدید خود پیشبینی کنید. برای پیشبینی با مدل تنظیمشده جدید خود:
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)
شما باید نتیجه زیر را ببینید:

اگرچه هر دو عنوان تولید شده مناسب به نظر میرسند، عنوان اول (تولید شده با مدل تنظیم دقیق) با سبک عناوین استفاده شده در مجموعه داده مورد نظر هماهنگی بیشتری دارد.
مدل تنظیمشده دقیق را بارگذاری کنید
شاید بارگذاری مدلی که به تازگی تنظیم کردهاید آسانتر باشد. اما به یاد داشته باشید که در مرحله ۳، این مدل در محدوده خود کد فراخوانی میشود، بنابراین همچنان مدل تنظیمشده را در متغیر tuned_model نگه میدارد. اما اگر بخواهید مدلی را که در گذشته تنظیم شده است، فراخوانی کنید، چه؟
برای انجام این کار، میتوانید متد get_tuned_model() را در LLM با آدرس کامل 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"))
۸. مرحله ۵: مدل جدید و تنظیمشده را ارزیابی کنید
ارزیابی، جنبهای حیاتی در ارزیابی کیفیت و مرتبط بودن پاسخ تولید شده است. این شامل بررسی خروجی یک مدل زبان مولد برای تعیین انسجام، دقت و همترازی آن با درخواست ارائه شده است. ارزیابی مدل به شناسایی حوزههای بهبود، بهینهسازی عملکرد مدل و اطمینان از مطابقت متن تولید شده با استانداردهای مورد نظر برای کیفیت و سودمندی کمک میکند. برای اطلاعات بیشتر در مورد آن به مستندات مراجعه کنید. در حال حاضر، خواهیم دید که چگونه میتوانیم برخی از معیارهای ارزیابی را در مدل تنظیمشده دقیق به دست آوریم و با مدل پایه مقایسه کنیم.
- مجموعه دادهی ارزیابی (EVALATION) را بارگذاری کنید:
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
)
این مرحله چند دقیقه طول میکشد تا تکمیل شود. میتوانید پیشرفت را با استفاده از لینک pipeline job در نتیجه پیگیری کنید. پس از اتمام، باید نتیجه ارزیابی زیر را مشاهده کنید:

معیار rougeLSum در نتیجه ارزیابی، امتیاز ROUGE-L را برای خلاصه مشخص میکند. ROUGE-L یک معیار مبتنی بر یادآوری است که همپوشانی بین یک خلاصه و یک خلاصه مرجع را اندازهگیری میکند. این معیار با در نظر گرفتن طولانیترین زیردنباله مشترک (LCS) بین دو خلاصه و تقسیم آن بر طول خلاصه مرجع محاسبه میشود.
امتیاز rougeLSum در عبارت ارائه شده برابر با 0.36600753600753694 است، به این معنی که خلاصه دارای همپوشانی 36.6٪ با خلاصه مرجع است.
اگر مرحله ارزیابی را روی مدل پایه اجرا کنید، مشاهده خواهید کرد که امتیاز خلاصه برای مدل تنظیمشده دقیق نسبتاً بالاتر است.
میتوانید نتایج ارزیابی را در دایرکتوری خروجی Cloud Storage که هنگام ایجاد شغل ارزیابی مشخص کردهاید، پیدا کنید. نام فایل evaluation_metrics.json است. برای مدلهای تنظیمشده، میتوانید نتایج ارزیابی را در کنسول Google Cloud در صفحه Vertex AI Model Registry نیز مشاهده کنید.
۹. ملاحظات مهم
- پشتیبانی مدل: همیشه مستندات مدل را برای آخرین سازگاری بررسی کنید.
- توسعه سریع: حوزه LLM به سرعت در حال پیشرفت است. یک مدل جدیدتر و قدرتمندتر میتواند به طور بالقوه از یک مدل تنظیمشده دقیق ساختهشده بر پایه قدیمیتر، عملکرد بهتری داشته باشد. خبر خوب این است که میتوانید این تکنیکهای تنظیمشده دقیق را در مدلهای جدیدتر، زمانی که این قابلیت در دسترس قرار گرفت، اعمال کنید.
- LoRA: LoRA تکنیکی برای تنظیم دقیق LLMها به طور موثر است. این کار را با معرفی ماتریسهای تجزیه قابل آموزش و با رتبه پایین به لایههای مدل از پیش آموزش دیده موجود انجام میدهد. برای اطلاعات بیشتر اینجا را بخوانید. به جای بهروزرسانی تمام پارامترهای یک LLM عظیم، LoRA ماتریسهای کوچکتری را یاد میگیرد که به ماتریسهای وزن مدل اصلی اضافه یا در آنها ضرب میشوند. این امر به طور قابل توجهی تعداد پارامترهای اضافی معرفی شده در طول تنظیم دقیق را کاهش میدهد.
۱۰. تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این codelab، این مراحل را دنبال کنید:
- در کنسول گوگل کلود، به صفحه مدیریت منابع بروید.
- در لیست پروژهها، پروژهای را که میخواهید حذف کنید انتخاب کنید و سپس روی «حذف» کلیک کنید.
- در کادر محاورهای، شناسه پروژه را تایپ کنید و سپس برای حذف پروژه، روی خاموش کردن کلیک کنید.
- روش دیگر این است که به Model Registry بروید، به تب Model deploy and test بروید و نقطه پایانی را undeploy کرده و مدل تنظیمشدهی مستقر شده را حذف کنید.
۱۱. تبریک
تبریک! شما با موفقیت از Vertex AI برای تنظیم دقیق یک مدل LLM استفاده کردید. تنظیم دقیق یک تکنیک قدرتمند است که به شما امکان میدهد LLMها را با دامنه و وظایف خود سفارشی کنید. با Vertex AI، ابزارها و منابع مورد نیاز برای تنظیم دقیق و کارآمد مدلهای خود را در اختیار دارید.
مخازن گیتهاب را کاوش کنید و با کد نمونه آزمایش کنید تا تنظیم دقیق و ارزیابی را از نزدیک تجربه کنید. در نظر بگیرید که چگونه LLM های تنظیمشده میتوانند نیازهای خاص شما را برطرف کنند، از تولید متن بازاریابی هدفمند گرفته تا خلاصهسازی اسناد پیچیده یا ترجمه زبانها با ظرافتهای فرهنگی. از مجموعه جامع ابزارها و خدمات ارائه شده توسط Vertex AI برای ساخت، آموزش، ارزیابی و استقرار مدلهای تنظیمشده خود به راحتی استفاده کنید.