1. مقدمه
چرا تنظیم دقیق اهمیت دارد
مدل های پایه برای اهداف عمومی آموزش داده می شوند و گاهی اوقات وظایف را آنطور که شما می خواهید انجام نمی دهند. این ممکن است به این دلیل باشد که وظایفی که میخواهید مدل انجام دهد، کارهای تخصصی هستند که آموزش یک مدل تنها با استفاده از طراحی سریع دشوار است. در این موارد، می توانید از تنظیم مدل برای بهبود عملکرد یک مدل برای کارهای خاص استفاده کنید. تنظیم مدل همچنین می تواند به رعایت الزامات خروجی خاص در زمانی که دستورالعمل ها کافی نیستند کمک کند. مدلهای زبان بزرگ (LLM) میتوانند حجم وسیعی از اطلاعات را داشته باشند و میتوانند وظایف زیادی را انجام دهند، اما آنها فقط زمانی عالی هستند که آموزشهای تخصصی ارائه شود. تنظیم دقیق می تواند یک LLM را آموزش دهد و به شما امکان می دهد یک LLM از قبل آموزش دیده را برای نیازهای خاص خود تطبیق دهید.
در این کد لبه، نحوه تنظیم دقیق با استفاده از رویکرد تنظیم نظارت شده برای یک مدل LLM را یاد خواهید گرفت.
تنظیم نظارت شده با آموزش یک مهارت جدید، عملکرد یک مدل را بهبود می بخشد. دادههایی که شامل صدها مثال برچسبگذاری شده است برای آموزش مدل برای تقلید یک رفتار یا کار دلخواه استفاده میشود. ما میخواهیم یک مجموعه داده برچسبدار برای متن ورودی (اعلان) و متن خروجی (پاسخ) ارائه کنیم تا به مدل آموزش دهیم که چگونه پاسخها را برای مورد خاص خود سفارشی کند.
اطلاعات بیشتر در مورد سفارشی سازی مدل در اینجا موجود است.
چیزی که خواهی ساخت
مورد استفاده: ایجاد تیتر برای مقالات خبری
بیایید فرض کنیم که میخواهید به طور خودکار برای مقالات خبری تیتر ایجاد کنید. با استفاده از Vertex AI، میتوانید یک LLM را تنظیم کنید که یک عنوان خلاصه شده مناسب را به سبک خاصی تولید میکند و عنوان را مطابق دستورالعملهای کانال خبری سفارشی میکند.
در این لبه کد، کارهای زیر را انجام خواهید داد:
- از
BBC FULLTEXT DATA
(که توسط BigQuery Public Datasetbigquery-public-data.bbc_news.fulltext
در دسترس است) استفاده کنید. - یک LLM (
text-bison@002
) را به یک مدل دقیق تنظیم شده جدید به نام "bbc-news-summary-tuned
" تنظیم کنید و نتیجه را با پاسخ مدل پایه مقایسه کنید. نمونه فایل JSONL برای این کد لبه در مخزن موجود است. می توانید فایل را در سطل ذخیره سازی ابری خود آپلود کنید و مراحل تنظیم دقیق زیر را انجام دهید: - دادههای خود را آماده کنید: با مجموعه دادهای از مقالات خبری و سرفصلهای مربوط به آنها، مانند مجموعه دادههای BBC News که در کد مثال استفاده شده است، شروع کنید.
- تنظیم دقیق یک مدل از پیش آموزش دیده: یک مدل پایه مانند "
text-bison@002
" را انتخاب کنید و آن را با داده های خبری خود با استفاده از Vertex AI SDK برای پایتون تنظیم کنید. - نتایج را ارزیابی کنید: عملکرد مدل تنظیم شده خود را با مدل پایه مقایسه کنید تا بهبود کیفیت تولید سرفصل را مشاهده کنید.
- استقرار و استفاده از مدل خود: مدل تنظیم شده خود را از طریق یک نقطه پایانی API در دسترس قرار دهید و شروع به ایجاد سرفصل برای مقالات جدید به طور خودکار کنید.
2. قبل از شروع
- در Google Cloud Console ، در صفحه انتخاب پروژه، یک پروژه Google Cloud را انتخاب یا ایجاد کنید.
- مطمئن شوید که صورتحساب برای پروژه Google Cloud شما فعال است. با نحوه بررسی فعال بودن صورتحساب در پروژه آشنا شوید.
- Colab Notebook را باز کنید و به همان حساب کاربری فعلی Google Cloud فعال خود وارد شوید.
3. یک مدل زبان بزرگ را تنظیم دقیق کنید
این کد لبه از Vertex AI SDK برای پایتون برای تنظیم دقیق مدل استفاده می کند. میتوانید با استفاده از گزینههای دیگر - 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 را با سطل خود جایگزین کنید و نمونه فایل داده آموزشی TRAIN.jsonl را در آن آپلود کنید. داده های نمونه برای این مورد استفاده در پیوند ذکر شده در بالا ارائه شده است.
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",
)
این مرحله چند ساعت طول خواهد کشید. میتوانید با استفاده از پیوند کار خط لوله در نتیجه، پیشرفت تنظیم دقیق را دنبال کنید.
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)
شما باید نتیجه زیر را ببینید:
حتی اگر هر دو عنوان تولید شده مناسب به نظر می رسند، عنوان اول (تولید شده با مدل دقیق تنظیم شده) بیشتر با سبک عناوین استفاده شده در مجموعه داده مورد نظر هماهنگ است.
مدل تنظیم شده را بارگیری کنید
ممکن است بارگذاری مدلی که به تازگی آن را تنظیم کرده اید آسان تر باشد. اما به یاد داشته باشید که در مرحله 3، در محدوده خود کد فراخوانی می شود، بنابراین هنوز مدل تنظیم شده را در متغیر tuned_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: مدل جدید تنظیم شده را ارزیابی کنید
ارزیابی یک جنبه حیاتی برای ارزیابی کیفیت و ارتباط پاسخ تولید شده است. این شامل بررسی خروجی یک مدل زبان مولد برای تعیین انسجام، دقت و همسویی آن با دستور ارائه شده است. ارزیابی مدل به شناسایی زمینههای بهبود، بهینهسازی عملکرد مدل و اطمینان از مطابقت متن تولید شده با استانداردهای مطلوب برای کیفیت و سودمندی کمک میکند. بیشتر در مورد آن در مستندات بخوانید. در حال حاضر، خواهیم دید که چگونه میتوانیم برخی از معیارهای ارزیابی را در مدل تنظیمشده دقیق بدست آوریم و با مدل پایه مقایسه کنیم.
- مجموعه داده EVALUATION را بارگیری کنید:
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) بین دو خلاصه و تقسیم آن بر طول خلاصه مرجع محاسبه می شود.
امتیاز rougeLSum
در عبارت ارائه شده 0.36600753600753694 است، به این معنی که خلاصه 36.6٪ با خلاصه مرجع همپوشانی دارد.
اگر مرحله ارزیابی را بر روی مدل پایه اجرا کنید، مشاهده خواهید کرد که امتیاز خلاصه برای مدل دقیق تنظیم شده نسبتاً بالاتر است.
میتوانید نتایج ارزیابی را در فهرست خروجی Cloud Storage که هنگام ایجاد کار ارزیابی مشخص کردهاید، بیابید. فایل evaluation_metrics.json
نام دارد. برای مدلهای تنظیمشده، میتوانید نتایج ارزیابی را در کنسول Google Cloud در صفحه رجیستری مدل Vertex AI مشاهده کنید.
9. ملاحظات مهم
- پشتیبانی مدل: همیشه اسناد مدل را برای آخرین سازگاری بررسی کنید.
- توسعه سریع: رشته LLM به سرعت پیشرفت می کند. یک مدل جدیدتر و قدرتمندتر به طور بالقوه می تواند از مدلی که بر روی پایه های قدیمی تر ساخته شده است بهتر عمل کند. خبر خوب این است که وقتی قابلیت در دسترس قرار گرفت، میتوانید این تکنیکهای تنظیم دقیق را در مدلهای جدیدتر اعمال کنید.
- LoRA: LoRA تکنیکی برای تنظیم دقیق LLM ها است. این کار را با معرفی ماتریسهای تجزیهپذیر قابل آموزش و با رتبه پایین در لایههای مدل از پیش آموزشدیده موجود انجام میدهد. اطلاعات بیشتر در مورد آن را اینجا بخوانید. بهجای بهروزرسانی تمام پارامترهای یک LLM عظیم، LoRA ماتریسهای کوچکتری را یاد میگیرد که به ماتریسهای وزن مدل اصلی اضافه یا با آنها ضرب میشوند. این به طور قابل توجهی تعداد پارامترهای اضافی معرفی شده در هنگام تنظیم دقیق را کاهش می دهد.
10. پاکسازی کنید
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این کد لبه، این مراحل را دنبال کنید:
- در کنسول Google Cloud، به صفحه مدیریت منابع بروید.
- در لیست پروژه، پروژه ای را که می خواهید حذف کنید انتخاب کنید و سپس روی Delete کلیک کنید.
- در محاوره، شناسه پروژه را تایپ کنید و سپس روی Shut down کلیک کنید تا پروژه حذف شود.
- یا میتوانید به رجیستری مدل بروید، به برگه استقرار و آزمایش مدل بروید و نقطه پایانی را بازگردانید و مدل تنظیمشده مستقر شده را حذف کنید.
11. تبریک می گویم
تبریک می گویم! شما با موفقیت از Vertex AI برای تنظیم دقیق مدل LLM استفاده کرده اید. تنظیم دقیق یک تکنیک قدرتمند است که به شما امکان می دهد LLM ها را برای دامنه و وظایف خود سفارشی کنید. با Vertex AI، ابزارها و منابع مورد نیاز برای تنظیم دقیق مدلهای خود را به طور کارآمد و مؤثر در اختیار دارید.
مخازن GitHub را کاوش کنید و با کد نمونه آزمایش کنید تا تنظیمات دقیق و ارزیابی را از نزدیک تجربه کنید. در نظر بگیرید که چگونه LLM های تنظیم شده می توانند نیازهای خاص شما را برطرف کنند، از تولید کپی بازاریابی هدفمند گرفته تا خلاصه کردن اسناد پیچیده یا ترجمه زبان هایی با تفاوت های ظریف فرهنگی. از مجموعه جامع ابزارها و خدمات ارائه شده توسط Vertex AI برای ساخت، آموزش، ارزیابی و استقرار مدل های دقیق خود به راحتی استفاده کنید.