Tinh chỉnh các mô hình ngôn ngữ lớn: Cách Vertex AI đưa các mô hình ngôn ngữ lớn lên một tầm cao mới

1. Giới thiệu

Lý do tinh chỉnh lại quan trọng

Mô hình nền tảng được huấn luyện cho các mục đích chung và đôi khi không thực hiện các nhiệm vụ hiệu quả như bạn mong muốn. Nguyên nhân có thể là do các nhiệm vụ bạn muốn mô hình thực hiện là những nhiệm vụ chuyên biệt mà bạn khó có thể hướng dẫn mô hình chỉ bằng cách sử dụng thiết kế câu lệnh. Trong những trường hợp này, bạn có thể sử dụng tính năng điều chỉnh mô hình để cải thiện hiệu suất của một mô hình cho các tác vụ cụ thể. Việc điều chỉnh mô hình cũng có thể giúp tuân thủ các yêu cầu cụ thể về đầu ra khi hướng dẫn không đầy đủ. Các mô hình ngôn ngữ lớn (LLM) có thể có một lượng lớn thông tin và có thể thực hiện nhiều nhiệm vụ, nhưng chúng chỉ hoạt động hiệu quả khi được huấn luyện chuyên biệt. Tinh chỉnh có thể huấn luyện một LLM, cho phép bạn điều chỉnh một LLM được huấn luyện tiền kỳ cho nhu cầu cụ thể của mình.

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách tinh chỉnh bằng phương pháp tinh chỉnh có giám sát cho một mô hình LLM.

Hoạt động điều chỉnh có giám sát giúp cải thiện hiệu suất của mô hình bằng cách dạy cho mô hình một kỹ năng mới. Dữ liệu chứa hàng trăm ví dụ được gắn nhãn được dùng để dạy mô hình bắt chước một hành vi hoặc nhiệm vụ mong muốn. Chúng ta sẽ cung cấp một tập dữ liệu được gắn nhãn cho văn bản đầu vào (câu lệnh) và văn bản đầu ra (phản hồi) để hướng dẫn mô hình cách tuỳ chỉnh các phản hồi cho trường hợp sử dụng cụ thể của chúng ta.

Bạn có thể xem thêm thông tin về cách tuỳ chỉnh mô hình tại đây.

Sản phẩm bạn sẽ tạo ra

Trường hợp sử dụng: Tạo dòng tiêu đề cho bài viết tin tức

Giả sử bạn muốn tự động tạo dòng tiêu đề cho các bài viết tin tức. Bằng cách sử dụng Vertex AI, bạn có thể tinh chỉnh một LLM để tạo tiêu đề tóm tắt phù hợp theo một phong cách cụ thể và tuỳ chỉnh tiêu đề theo nguyên tắc của kênh tin tức.

Trong lớp học lập trình này, bạn sẽ thực hiện những việc sau:

  • Sử dụng BBC FULLTEXT DATA (do Tập dữ liệu công khai của BigQuery bigquery-public-data.bbc_news.fulltext cung cấp).
  • Tinh chỉnh một LLM (text-bison@002) thành một mô hình tinh chỉnh mới có tên là "bbc-news-summary-tuned" và so sánh kết quả với phản hồi của mô hình cơ sở. Bạn có thể tìm thấy một tệp JSONL mẫu cho lớp học lập trình này trong kho lưu trữ. Bạn có thể tải tệp lên Bộ chứa Cloud Storage và thực hiện các bước tinh chỉnh sau:
  • Chuẩn bị dữ liệu: Bắt đầu bằng một tập dữ liệu gồm các bài viết tin tức và tiêu đề tương ứng, chẳng hạn như tập dữ liệu BBC News được dùng trong mã ví dụ.
  • Tinh chỉnh một mô hình được huấn luyện tiền kỳ: Chọn một mô hình cơ sở như "text-bison@002" rồi tinh chỉnh mô hình đó bằng dữ liệu tin tức của bạn thông qua Vertex AI SDK cho Python.
  • Đánh giá kết quả: So sánh hiệu suất của mô hình được tinh chỉnh với mô hình cơ sở để xem mức độ cải thiện về chất lượng tạo tiêu đề.
  • Triển khai và sử dụng mô hình: Cung cấp mô hình đã tinh chỉnh thông qua một điểm cuối API và bắt đầu tự động tạo tiêu đề cho các bài viết mới.

2. Trước khi bắt đầu

  1. Trong Google Cloud Console, trên trang chọn dự án, hãy chọn hoặc tạo một dự án trên Google Cloud.
  2. Đảm bảo bạn đã bật tính năng thanh toán cho dự án trên Google Cloud của mình. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trên một dự án hay không.
  3. Mở Sổ tay Colab rồi đăng nhập vào cùng tài khoản với tài khoản Google Cloud đang hoạt động hiện tại của bạn.

3. Tinh chỉnh mô hình ngôn ngữ lớn

Lớp học lập trình này sử dụng Vertex AI SDK cho Python để tinh chỉnh mô hình. Bạn cũng có thể tinh chỉnh bằng các lựa chọn khác – HTTP, lệnh CURL, Java SDK, Bảng điều khiển.

Bạn có thể tinh chỉnh và đánh giá mô hình để có câu trả lời tuỳ chỉnh trong 5 bước. Bạn có thể tham khảo mã đầy đủ trong tệp llm_fine_tuning_supervised.ipynb trong kho lưu trữ.

4. Bước 1: Cài đặt và nhập các phần phụ thuộc

!pip install google-cloud-aiplatform
!pip install --user datasets
!pip install --user google-cloud-pipeline-components

Làm theo các bước còn lại như trong tệp .ipynb trong repo. Đảm bảo rằng bạn thay thế PROJECT_ID và BUCKET_NAME bằng thông tin đăng nhập của mình.

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. Bước 2: Chuẩn bị và tải dữ liệu huấn luyện

Thay thế YOUR_BUCKET bằng nhóm của bạn và tải tệp dữ liệu huấn luyện mẫu TRAIN.jsonl lên nhóm đó. Dữ liệu mẫu đã được cung cấp cho trường hợp sử dụng này trong đường liên kết nêu trên.

json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)

Bước này sẽ cho ra kết quả như sau:

17274866af36a47c.png

6. Bước 3: Điều chỉnh mô hình ngôn ngữ lớn

Tại thời điểm này, bạn có thể điều chỉnh bất kỳ mô hình ngôn ngữ lớn nào (dựa trên phạm vi hỗ trợ) . Tuy nhiên, trong đoạn mã này, chúng ta đang điều chỉnh mô hình được huấn luyện trước "text-bison@002" bằng khung dữ liệu có dữ liệu huấn luyện mà chúng ta đã tải ở bước trước:

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",
)

Quá trình này sẽ mất vài giờ để hoàn tất. Bạn có thể theo dõi tiến trình tinh chỉnh bằng cách sử dụng đường liên kết đến quy trình trong kết quả.

7. Bước 4: Dự đoán bằng mô hình mới được tinh chỉnh

Sau khi hoàn tất công việc tinh chỉnh, bạn sẽ có thể dự đoán bằng mô hình mới. Cách dự đoán bằng mô hình đã điều chỉnh mới:

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)

Bạn sẽ thấy kết quả sau:

67061c36b7ba39b7.png

Để dự đoán bằng mô hình cơ sở (text-bison@002) để so sánh, hãy chạy các lệnh sau:

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)

Bạn sẽ thấy kết quả sau:

22ec58e4261405d6.png

Mặc dù cả hai tiêu đề được tạo đều có vẻ phù hợp, nhưng tiêu đề đầu tiên (được tạo bằng mô hình tinh chỉnh) phù hợp hơn với kiểu tiêu đề được dùng trong tập dữ liệu được đề cập.

Tải mô hình đã tinh chỉnh

Bạn có thể dễ dàng tải một mô hình mà bạn vừa tinh chỉnh. Nhưng hãy nhớ rằng ở bước 3, hàm này được gọi trong phạm vi của chính mã nên vẫn giữ mô hình đã điều chỉnh trong biến tuned_model. Nhưng nếu bạn muốn gọi một mô hình đã được điều chỉnh trong quá khứ thì sao?

Để thực hiện việc này, bạn có thể gọi phương thức get_tuned_model() trên LLM bằng URL ENDPOINT đầy đủ của mô hình đã triển khai được tinh chỉnh từ Vertex AI Model Registry. Xin lưu ý rằng trong trường hợp này, bạn đang nhập PROJECT_NUMBER và MODEL_NUMBER thay vì mã nhận dạng tương ứng của chúng.

tuned_model_1 = TextGenerationModel.get_tuned_model("projects/<<PROJECT_NUMBER>>/locations/europe-west4/models/<<MODEL_NUMBER>>")
print(tuned_model_1.predict("YOUR_PROMPT"))

8. Bước 5: Đánh giá mô hình mới được tinh chỉnh

Đánh giá là một khía cạnh quan trọng trong việc đánh giá chất lượng và mức độ liên quan của câu trả lời được tạo. Việc này bao gồm kiểm tra kết quả đầu ra của một mô hình ngôn ngữ tạo sinh để xác định tính nhất quán, độ chính xác và mức độ phù hợp của kết quả đó với câu lệnh được cung cấp. Việc đánh giá mô hình giúp xác định những điểm cần cải thiện, tối ưu hoá hiệu suất của mô hình và đảm bảo văn bản được tạo đáp ứng các tiêu chuẩn mong muốn về chất lượng và tính hữu ích. Đọc thêm về vấn đề này trong tài liệu. Hiện tại, chúng ta sẽ xem cách lấy một số chỉ số đánh giá về mô hình được tinh chỉnh và so sánh với mô hình cơ sở.

  1. Tải tập dữ liệu ĐÁNH GIÁ:
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
  1. Xác định quy cách đánh giá cho một tác vụ tóm tắt văn bản trên mô hình được tinh chỉnh.
task_spec = EvaluationTextSummarizationSpec(
 task_name = "summarization",
 ground_truth_data=df
)

Bước này sẽ mất vài phút để hoàn tất. Bạn có thể theo dõi tiến trình bằng cách sử dụng đường liên kết đến lệnh trong quy trình trong kết quả. Sau khi hoàn tất, bạn sẽ thấy kết quả đánh giá sau:

387843d6c970e02.png

Chỉ số rougeLSum trong kết quả đánh giá chỉ định điểm ROUGE-L cho bản tóm tắt. ROUGE-L là một chỉ số dựa trên khả năng thu hồi, đo lường mức độ trùng lặp giữa bản tóm tắt và bản tóm tắt tham chiếu. Chỉ số này được tính bằng cách lấy chuỗi con chung dài nhất (LCS) giữa hai bản tóm tắt rồi chia cho độ dài của bản tóm tắt tham chiếu.

Điểm rougeLSum trong biểu thức được cung cấp là 0,36600753600753694, tức là bản tóm tắt có mức độ trùng lặp 36,6% với bản tóm tắt tham chiếu.

Nếu chạy bước đánh giá trên mô hình cơ sở, bạn sẽ thấy điểm số tóm tắt tương đối cao hơn đối với mô hình được tinh chỉnh.

Bạn có thể tìm thấy kết quả đánh giá trong thư mục đầu ra của Cloud Storage mà bạn đã chỉ định khi tạo quy trình đánh giá. Tệp này có tên là evaluation_metrics.json. Đối với các mô hình được tinh chỉnh, bạn cũng có thể xem kết quả đánh giá trong bảng điều khiển Cloud trên trang Model Registry (Sổ đăng ký mô hình) của Vertex AI.

9. Điểm quan trọng cần lưu ý

  • Hỗ trợ mô hình: Luôn kiểm tra tài liệu về mô hình để biết khả năng tương thích mới nhất.
  • Phát triển nhanh chóng: Lĩnh vực LLM phát triển nhanh chóng. Một mô hình mới hơn và mạnh mẽ hơn có thể hoạt động hiệu quả hơn một mô hình được tinh chỉnh dựa trên một mô hình cơ sở cũ. Tin vui là bạn có thể áp dụng những kỹ thuật tinh chỉnh này cho các mô hình mới hơn khi tính năng này ra mắt.
  • LoRA: LoRA là một kỹ thuật tinh chỉnh LLM một cách hiệu quả. Việc này được thực hiện bằng cách đưa các ma trận phân tách có thể huấn luyện và có thứ hạng thấp vào các lớp của mô hình được huấn luyện trước hiện có. Đọc thêm về vấn đề này tại đây. Thay vì cập nhật tất cả các tham số của một LLM lớn, LoRA học các ma trận nhỏ hơn được thêm vào hoặc nhân với ma trận trọng số của mô hình ban đầu. Điều này giúp giảm đáng kể số lượng tham số bổ sung được giới thiệu trong quá trình tinh chỉnh.

10. Dọn dẹp

Để tránh phát sinh phí cho tài khoản Google Cloud của bạn đối với các tài nguyên được dùng trong lớp học lập trình này, hãy làm theo các bước sau:

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Quản lý tài nguyên.
  2. Trong danh sách dự án, hãy chọn dự án mà bạn muốn xoá, rồi nhấp vào Xoá.
  3. Trong hộp thoại, hãy nhập mã dự án rồi nhấp vào Tắt để xoá dự án.
  4. Ngoài ra, bạn có thể chuyển đến Model Registry (Sổ đăng ký mô hình), chuyển đến thẻ triển khai và kiểm thử mô hình, sau đó huỷ triển khai điểm cuối và xoá mô hình đã triển khai được tinh chỉnh.

11. Xin chúc mừng

Xin chúc mừng! Bạn đã sử dụng thành công Vertex AI để tinh chỉnh một mô hình LLM. Tinh chỉnh là một kỹ thuật mạnh mẽ giúp bạn tuỳ chỉnh các mô hình ngôn ngữ lớn (LLM) cho miền và nhiệm vụ của mình. Với Vertex AI, bạn có các công cụ và tài nguyên cần thiết để tinh chỉnh mô hình một cách hiệu quả.

Khám phá các kho lưu trữ trên GitHub và thử nghiệm với mã mẫu để trực tiếp trải nghiệm quy trình điều chỉnhđánh giá. Hãy cân nhắc cách các LLM được tinh chỉnh có thể đáp ứng nhu cầu cụ thể của bạn, từ việc tạo bản sao tiếp thị nhắm đến mục tiêu đến việc tóm tắt các tài liệu phức tạp hoặc dịch ngôn ngữ có sắc thái văn hoá. Tận dụng bộ công cụ và dịch vụ toàn diện do Vertex AI cung cấp để dễ dàng xây dựng, huấn luyện, đánh giá và triển khai các mô hình được tinh chỉnh.