Microsoft đã gia nhập cuộc đua mô hình ngôn ngữ lớn cùng Meta AI với việc ra mắt dòng Phi-3.5. Dòng này bao gồm một mô hình ngôn ngữ nhỏ, một mô hình ngôn ngữ thị giác và sử dụng phương pháp Mixture-of-Experts để đạt hiệu năng hàng đầu.
Trong hướng dẫn này, chúng ta sẽ khám phá họ mô hình Microsoft Phi-3.5. Chúng ta sẽ tải mô hình Phi-3.5-mini-instruct và tinh chỉnh nó để phân loại sản phẩm thương mại điện tử dựa trên mô tả văn bản. Ở bước cuối, chúng ta sẽ minh họa cách hợp nhất LoRA (Low-Rank Adaptation) với mô hình gốc và đẩy lên Hugging Face. Điều này giúp triển khai trên đám mây hiệu quả, đưa mô hình vào sử dụng cho nhiều ứng dụng khác nhau.
Bản phát hành Microsoft Phi-3.5 giới thiệu ba mô hình tiên tiến: Phi-3.5-mini, Phi-3.5-vision và bổ sung mới nhất, Phi-3.5-MoE, một mô hình Mixture-of-Experts.
Phi-3.5-mini được tối ưu cho hỗ trợ đa ngôn ngữ nâng cao với độ dài ngữ cảnh 128K ấn tượng. Dù kích thước nhỏ, nó cho hiệu năng sánh ngang các mô hình lớn hơn nhờ được tăng cường nghiêm ngặt qua tinh chỉnh có giám sát, tối ưu hóa chính sách tiệm cận và tối ưu hóa ưu tiên trực tiếp, đảm bảo tuân thủ hướng dẫn chính xác.
Phi-3.5-vision là mô hình đa phương thức nhẹ, tiên tiến được huấn luyện trên tập dữ liệu tổng hợp và các trang web công khai đã lọc. Nó xuất sắc trong hiểu và suy luận hình ảnh đa khung, lý tưởng cho so sánh hình ảnh chi tiết, tóm tắt/kể chuyện từ nhiều ảnh, và tóm tắt video, với tiềm năng ứng dụng rộng.
Mô hình nổi bật, Phi-3.5-MoE, sở hữu kiến trúc Mixture-of-Experts với 16 expert và 6,6 tỷ tham số hoạt động. Nó mang lại hiệu năng vượt trội với độ trễ giảm, an toàn mạnh mẽ, cùng hỗ trợ đa ngôn ngữ toàn diện.
Họ Phi-3.5 cung cấp các giải pháp hiệu quả chi phí, hiệu năng cao cho cộng đồng mã nguồn mở, thúc đẩy tiến bộ mô hình ngôn ngữ nhỏ và AI sinh sinh.
Trong phần này, chúng ta sẽ tải mô hình Phi-3.5-mini-instruct và chạy suy luận mô hình trên nền tảng Kaggle.
Bắt đầu phiên với GPU T4x2 được bật.
Cài đặt tất cả các gói Python cần thiết bằng lệnh pip.
%%capture
%pip install -U transformers accelerateĐược hỗ trợ bởi
Tải đầy đủ mô hình và tokenizer bằng thư viện Transformers.
Tạo pipeline text-generation với mô hình và tokenizer.
from transformers import AutoTokenizer,AutoModelForCausalLM,pipeline
import torch
base_model ="microsoft/Phi-3.5-mini-instruct"
tokenizer = AutoTokenizer.from_pretrained(base_model)
model = AutoModelForCausalLM.from_pretrained(
base_model,
return_dict=True,
low_cpu_mem_usage=True,
torch_dtype=torch.float16,
device_map="auto",
trust_remote_code=True,)
pipe = pipeline("text-generation",
model=model,
tokenizer=tokenizer,
torch_dtype=torch.float16,
device_map="auto",)Được hỗ trợ bởi
Tạo thông điệp với system prompt và truy vấn của người dùng rồi chuyển đổi thành chat prompt bằng chat template.
Sinh phản hồi bằng cách cung cấp prompt cho pipeline.
messages =[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is the tallest building in the world?"}]# Apply the chat template to the messages
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)# Generate the output using the pipeline
outputs = pipe(prompt, max_new_tokens=120, do_sample=True)# Print the generated textprint(outputs[0]["generated_text"])Được hỗ trợ bởi
Chúng ta đã nhận được kết quả chính xác và chi tiết.
<|system|>
You are a helpful assistant.<|end|><|user|>
What is the tallest building in the world?<|end|><|assistant|>
As of my knowledge cutoff in2023, the tallest building in the world is the Burj Khalifa, located in Dubai, United Arab Emirates. It stands at a remarkable 828 meters (2,716.5 feet) tall once its antenna is included. Completed in January 2010, the Burj Khalifa marks a significant achievement in architecture and engineering, setting numerous records. It provides office space, luxury condominiums,and various leisure facilities. This landmark continues toĐược hỗ trợ bởi
Chúng ta thậm chí có thể cung cấp cho pipeline sinh văn bản một prompt tùy chỉnh dùng hướng dẫn và bản chép cuộc gọi để kiểm tra mô hình có tuân theo lệnh của người dùng hay không.
prompt ="""
In a call center environment, classify customer interactions as 'Fraudulent' or 'Non-Fraudulent'.
Consider factors such as the nature of the inquiry, caller verification details, transaction history, and any red flags raised during the call.
[Lisa Adams, contacts the call center claiming unauthorized transactions on her credit card statement. She demands a full refund, asserting that she has never visited the merchant in question.] =
"""
outputs = pipe(prompt, max_new_tokens=120, do_sample=True)print(outputs[0]["generated_text"])Được hỗ trợ bởi
Như có thể thấy, mô hình hoạt động khá tốt, gắn cờ cuộc gọi là gian lận và đưa ra lời giải thích.
In a call center environment, classify customer interactions as'Fraudulent'or'Non-Fraudulent'.
Consider factors such as the nature of the inquiry, caller verification details, transaction history,andany red flags raised during the call.[Lisa Adams, contacts the call center claiming unauthorized transactions on her credit card statement. She demands a full refund, asserting that she has never visited the merchant in question.]=
Call Interaction Classification: Fraudulent
Explanation:
The situation described by Lisa Adams indicates a potential case of credit card fraud. There are several red flags in this interaction that suggest the customer might be reporting unauthorized transactions:1. The caller claims unauthorized transactions - This is a common indicator of fraud, especially if the transactions were for places or services the customer did not recognize or didn't patronize according to their personal knowledge or documented transaction history (e.g., no visits to theĐược hỗ trợ bởi
Nếu bạn gặp vấn đề khi chạy mô hình trên nền tảng Kaggle, vui lòng tham khảo sổ tay Kaggle Simple Model Inference of Phi-3.5. Sổ tay đi kèm thiết lập và mã dựng sẵn cùng đầu ra.
Tinh chỉnh Microsoft Phi-3.5-mini-instruct
Trong hướng dẫn này, chúng ta sẽ học cách tải và xử lý dữ liệu phân loại văn bản thương mại điện tử. Chúng ta cũng sẽ tải mô hình và tokenizer, đánh giá mô hình trên tập kiểm tra trước khi tinh chỉnh, xây dựng trainer, tinh chỉnh mô hình trên tập huấn luyện và kiểm thử mô hình sau tinh chỉnh.
Nếu bạn mới bắt đầu, hãy đọc hướng dẫn Nhập môn tinh chỉnh LLM và tìm hiểu lý thuyết đằng sau việc tinh chỉnh LLM.
1. Thiết lập
Khởi chạy sổ tay Kaggle mới với tăng tốc GPU được bật. Sau đó, đảm bảo bạn đã đặt token API của Hugging Face và Weights & Biases làm biến môi trường thông qua Kaggle secrets.
Đăng nhập vào dịch vụ Weights & Biases, ký API key và khởi tạo dự án mới.
import wandb
from kaggle_secrets import UserSecretsClient
user_secrets = UserSecretsClient()
wb_token = user_secrets.get_secret("wandb")
wandb.login(key=wb_token)
run = wandb.init(
project='Fine-tune Phi-3.5-it on Ecommerce Text Classification',
job_type="training",
anonymous="allow"Được hỗ trợ bởi
Cuối cùng, tải tất cả gói và hàm Python cần thiết mà chúng ta sẽ dùng trong quá trình tinh chỉnh và đánh giá.
import numpy as np
import pandas as pd
import os
from tqdm import tqdm
import bitsandbytes as bnb
import torch
import torch.nn as nn
import transformers
from datasets import Dataset
from peft import LoraConfig, PeftConfig
from trl import SFTTrainer
from trl import setup_chat_format
from transformers import(AutoModelForCausalLM,
AutoTokenizer,
BitsAndBytesConfig,
TrainingArguments,
pipeline,
logging)from sklearn.metrics import(accuracy_score,
classification_report,
confusion_matrix)from sklearn.model_selection import train_test_splitĐược hỗ trợ bởi
2. Tải và xử lý bộ dữ liệu
Thêm bộ dữ liệu E-commerce Text Classification vào sổ tay như dưới đây. Bộ dữ liệu gồm hai cột: nhãn (các danh mục e-commerce) và mô tả văn bản của sản phẩm.
Bộ dữ liệu bao gồm mô tả sản phẩm và nhãn danh mục.
Xáo trộn bộ dữ liệu và chỉ chọn 2000 hàng đầu. Đây là hướng dẫn minh họa, nhằm tăng tốc quá trình tinh chỉnh bằng cách tinh chỉnh mô hình trên một tập mẫu giới hạn.
Tiếp theo, chúng ta sẽ chia dữ liệu thành các tập huấn luyện, đánh giá và kiểm tra.
# Shuffle the DataFrame and select only 2000 rows
df = df.sample(frac=1, random_state=85).reset_index(drop=True).head(2000)# Split the DataFrame
train_size =0.8
eval_size =0.1# Calculate sizes
train_end =int(train_size *len(df))
eval_end = train_end +int(eval_size *len(df))# Split the data
X_train = df[:train_end]
X_eval = df[train_end:eval_end]
X_test = df[eval_end:]Được hỗ trợ bởi
Chúng ta sẽ tạo hai hàm. Hàm generate_prompt sẽ chuyển đổi cột văn bản thành prompt, gồm hướng dẫn, mô tả văn bản và nhãn. Hàm generate_test_prompt tương tự nhưng không có nhãn.
# Define the prompt generation functionsdefgenerate_prompt(data_point):returnf"""
Classify the E-commerce text into Electronics, Household, Books and Clothing.
text: {data_point["text"]}
label: {data_point["label"]}""".strip()defgenerate_test_prompt(data_point):returnf"""
Classify the E-commerce text into Electronics, Household, Books and Clothing.
text: {data_point["text"]}
label: """.strip()# Generate prompts for training and evaluation data
X_train.loc[:,'text']= X_train.apply(generate_prompt, axis=1)
X_eval.loc[:,'text']= X_eval.apply(generate_prompt, axis=1)# Generate test prompts and extract true labels
y_true = X_test.loc[:,'label']
X_test = pd.DataFrame(X_test.apply(generate_test_prompt, axis=1), columns=["text"])Được hỗ trợ bởi
Chuyển đổi các dataframe huấn luyện và đánh giá của pandas thành các dataset của Hugging Face.
# Convert to datasets
train_data = Dataset.from_pandas(X_train[["text"]])
eval_data = Dataset.from_pandas(X_eval[["text"]])
train_data['text'][3]Được hỗ trợ bởi
Văn bản gồm hướng dẫn hệ thống, mô tả văn bản của sản phẩm và nhãn.
3. Tải mô hình và tokenizer
Tải mô hình lượng tử hóa 4-bit và tokenizer từ Hugging Face Hub bằng repository ID. Sau đó, thiết lập mô hình và tokenizer để sẵn sàng sử dụng.
Chúng ta cần đánh giá mô hình gốc trước khi tinh chỉnh để xác định tinh chỉnh có cải thiện kết quả hay không. Với mục đích này, chúng ta sẽ tạo hàm predict nhận tập kiểm tra và sinh danh mục thương mại điện tử dựa trên sản phẩm và mô tả văn bản.
defpredict(test, model, tokenizer):
y_pred =[]
categories =["Electronics","Household","Books","Clothing"]for i in tqdm(range(len(test))):
prompt = test.iloc[i]["text"]
pipe = pipeline(task="text-generation",
model=model,
tokenizer=tokenizer,
max_new_tokens=4,
temperature=0.1)
result = pipe(prompt)
answer = result[0]['generated_text'].split("label:")[-1].strip()# Determine the predicted categoryfor category in categories:if category.lower()in answer.lower():
y_pred.append(category)breakelse:
y_pred.append("none")return y_pred
y_pred = predict(X_test, model, tokenizer)Được hỗ trợ bởi
Chúng ta đã có danh sách các danh mục dự đoán và giờ sẽ so sánh với danh mục thực để tạo báo cáo đánh giá mô hình. Hàm "evaluate" nhận danh sách danh mục dự đoán và thực, tạo báo cáo đánh giá chi tiết gồm độ chính xác trung bình, độ chính xác theo từng danh mục, báo cáo phân loại và ma trận nhầm lẫn.
defevaluate(y_true, y_pred):
labels =["Electronics","Household","Books","Clothing"]
mapping ={label: idx for idx, label inenumerate(labels)}defmap_func(x):return mapping.get(x,-1)# Map to -1 if not found, but should not occur with correct data
y_true_mapped = np.vectorize(map_func)(y_true)
y_pred_mapped = np.vectorize(map_func)(y_pred)# Calculate accuracy
accuracy = accuracy_score(y_true=y_true_mapped, y_pred=y_pred_mapped)print(f'Accuracy: {accuracy:.3f}')# Generate accuracy report
unique_labels =set(y_true_mapped)# Get unique labelsfor label in unique_labels:
label_indices =[i for i inrange(len(y_true_mapped))if y_true_mapped[i]== label]
label_y_true =[y_true_mapped[i]for i in label_indices]
label_y_pred =[y_pred_mapped[i]for i in label_indices]
label_accuracy = accuracy_score(label_y_true, label_y_pred)print(f'Accuracy for label {labels[label]}: {label_accuracy:.3f}')# Generate classification report
class_report = classification_report(y_true=y_true_mapped, y_pred=y_pred_mapped, target_names=labels, labels=list(range(len(labels))))print('\nClassification Report:')print(class_report)# Generate confusion matrix
conf_matrix = confusion_matrix(y_true=y_true_mapped, y_pred=y_pred_mapped, labels=list(range(len(labels))))print('\nConfusion Matrix:')print(conf_matrix)
evaluate(y_true, y_pred)Được hỗ trợ bởi
Chúng ta đạt độ chính xác trung bình 65%. Hãy xác định xem tinh chỉnh có thể cải thiện điểm số này không.
Accuracy:0.645
Accuracy for label Electronics:0.950
Accuracy for label Household:0.531
Accuracy for label Books:0.561
Accuracy for label Clothing:0.658
Classification Report:
precision recall f1-score support
Electronics 0.460.950.6240
Household 0.830.530.6581
Books 0.960.560.7141
Clothing 0.860.660.7538
micro avg 0.690.650.67200
macro avg 0.780.670.68200
weighted avg 0.790.650.67200
Confusion Matrix:[[38010][334302][96232][23025]]Được hỗ trợ bởi
5. Thiết lập mô hình
Trích xuất tên mô-đun tuyến tính từ mô hình.
deffind_all_linear_names(model):
cls = bnb.nn.Linear4bit
lora_module_names =set()for name, module in model.named_modules():ifisinstance(module, cls):
names = name.split('.')
lora_module_names.add(names[0]iflen(names)==1else names[-1])if'lm_head'in lora_module_names:# needed for 16 bit
lora_module_names.remove('lm_head')returnlist(lora_module_names)
modules = find_all_linear_names(model)
modulesĐược hỗ trợ bởi
['gate_up_proj','down_proj','qkv_proj','o_proj']Được hỗ trợ bởi
Sử dụng tên mô-đun tuyến tính để tạo LoRA. Chúng ta chỉ tinh chỉnh LoRA và giữ nguyên phần còn lại của mô hình để tiết kiệm bộ nhớ và rút ngắn thời gian huấn luyện.
Tiếp theo, cấu hình các siêu tham số của mô hình cho môi trường Kaggle. Bạn có thể thay đổi các tham số này để cải thiện độ chính xác và giảm thời gian huấn luyện tùy theo máy của bạn. Để tìm hiểu về từng siêu tham số, hãy theo dõi hướng dẫn Tinh chỉnh Llama 2.
Giờ chúng ta sẽ thiết lập trainer tinh chỉnh có giám sát (SFT) và cung cấp tập huấn luyện và đánh giá, cấu hình LoRA, tham số huấn luyện, tokenizer và mô hình.
output_dir="Phi-3.5-mini-instruct"
peft_config = LoraConfig(
lora_alpha=16,
lora_dropout=0,
r=64,
bias="none",
task_type="CAUSAL_LM",
target_modules=modules,)
training_arguments = TrainingArguments(
output_dir=output_dir,# directory to save and repository id
num_train_epochs=1,# number of training epochs
per_device_train_batch_size=1,# batch size per device during training
gradient_accumulation_steps=4,# number of steps before performing a backward/update pass
gradient_checkpointing=True,# use gradient checkpointing to save memory
optim="paged_adamw_8bit",
logging_steps=1,
learning_rate=2e-5,# learning rate, based on QLoRA paper
weight_decay=0.001,
fp16=False,
bf16=False,
max_grad_norm=0.3,# max gradient norm based on QLoRA paper
max_steps=-1,
warmup_ratio=0.03,# warmup ratio based on QLoRA paper
group_by_length=False,
lr_scheduler_type="cosine",# use cosine learning rate scheduler
report_to="wandb",# report metrics to w&b
eval_strategy="steps",# save checkpoint every epoch
eval_steps =0.2)
trainer = SFTTrainer(
model=model,
args=training_arguments,
train_dataset=train_data,
eval_dataset=eval_data,
peft_config=peft_config,
dataset_text_field="text",
tokenizer=tokenizer,
max_seq_length=512,
packing=False,
dataset_kwargs={"add_special_tokens":False,"append_concat_token":False,})Được hỗ trợ bởi
6. Huấn luyện mô hình
Chúng ta sẽ dùng hàm .train để bắt đầu quá trình tinh chỉnh.
Bạn có thể phân tích hiệu năng mô hình bằng cách truy cập website Weights & Biases, chọn dự án của bạn và xem phân tích huấn luyện.
Lưu mô hình và tokenizer cục bộ để sau này dùng hợp nhất mô hình và đẩy lên máy chủ từ xa.
# Save trained model and tokenizer
trainer.save_model(output_dir)
tokenizer.save_pretrained(output_dir)Được hỗ trợ bởi
Hướng dẫn này khá nhiều mã. Nếu bạn muốn cách đơn giản hơn, bạn có thể tinh chỉnh một mô hình mã nguồn mở bằng cách theo dõi hướng dẫn LlaMA-Factory WebUI cho người mới: Tinh chỉnh LLM. Với giải pháp còn đơn giản hơn nơi bạn không phải bận tâm phần cứng, chúng tôi rất khuyến nghị hướng dẫn Tinh chỉnh GPT-4o Mini: Hướng dẫn từng bước. Điều này giúp bạn tinh chỉnh trên đám mây với lượng mã tối thiểu.
7. Kiểm thử mô hình sau tinh chỉnh
Hãy kiểm tra liệu hiệu năng mô hình có cải thiện sau tinh chỉnh không. Trước tiên chúng ta sẽ sinh danh sách nhãn dự đoán và cung cấp cho hàm evaluate cùng với nhãn thực.
y_pred = predict(X_test, model, tokenizer)
evaluate(y_true, y_pred)Được hỗ trợ bởi
Độ chính xác mô hình đã cải thiện khoảng 32,31%, và các chỉ số hiệu năng còn lại đều rất ấn tượng. Ngoại trừ danh mục Books, mô hình xác định các danh mục khá chính xác.
Accuracy:0.860
Accuracy for label Electronics:0.825
Accuracy for label Household:0.926
Accuracy for label Books:0.683
Accuracy for label Clothing:0.947
Classification Report:
precision recall f1-score support
Electronics 0.970.820.8940
Household 0.880.930.9081
Books 0.900.680.7841
Clothing 0.880.950.9138
micro avg 0.900.860.88200
macro avg 0.910.850.87200
weighted avg 0.900.860.88200
Confusion Matrix:[[33610][17523][03282][01036]]Được hỗ trợ bởi
Hãy nhớ lưu sổ tay Kaggle bằng cách nhấp nút "Save Version" ở góc trên bên phải. Sau đó chọn tùy chọn lưu nhanh và đổi tùy chọn lưu output để bao gồm cả tập tin mô hình và toàn bộ mã.
Để hợp nhất và xuất mô hình lên Hugging Face, trước tiên chúng ta sẽ tạo sổ tay Kaggle mới và thêm sổ tay đã lưu để truy cập mô hình và tokenizer đã tinh chỉnh.
Thêm sổ tay Kaggle khác tương tự như thêm bộ dữ liệu và mô hình. Nhấp nút “+ Add Input”, dán liên kết sổ tay, rồi nhấn nút add.
Đặt API của Hugging Face làm biến môi trường bằng Kaggle secrets và cài đặt tất cả gói Python cần thiết để tải và hợp nhất mô hình.
Thiết lập biến mô hình gốc và mô hình đã tinh chỉnh với ID mô hình và vị trí bộ điều hợp mô hình.
# Model
base_model ="microsoft/Phi-3.5-mini-instruct"
fine_tuned_model ="/kaggle/input/fine-tune-phi-3-5-for-text-classification/Phi-3.5-mini-instruct/"Được hỗ trợ bởi
Tải đầy đủ mô hình từ Hugging Face hub cùng với tokenizer.
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
from peft import PeftModel
import torch
# Reload tokenizer and model
tokenizer = AutoTokenizer.from_pretrained(base_model)
base_model_reload = AutoModelForCausalLM.from_pretrained(
base_model,
return_dict=True,
low_cpu_mem_usage=True,
torch_dtype=torch.float16,
device_map="auto",
trust_remote_code=True,)Được hỗ trợ bởi
Hợp nhất mô hình gốc với bộ điều hợp chỉ bằng hai dòng mã.
# Merge adapter with base model
model = PeftModel.from_pretrained(base_model_reload, fine_tuned_model)
model = model.merge_and_unload()Được hỗ trợ bởi
Để kiểm tra mô hình đã hợp nhất thành công, chúng ta sẽ tạo pipeline sinh văn bản với mô hình và tokenizer đã hợp nhất, rồi truyền prompt mẫu để sinh phản hồi.
text ="Inalsa Dazzle Glass Top, 3 Burner Gas Stove with Rust Proof Powder Coated Body, Black Toughened Glass Top, 2 Medium and 1 Small High Efficiency Brass Burners, Aluminum Mixing Tubes, Powder Coated Body, Inbuilt Stainless Steel Drip Trays, 360 degree Swivel Nozzle,Bigger Legs to Facilitate Cleaning Under Cooktop"
prompt =f"""Classify the E-commerce text into Electronics, Household, Books and Clothing.
text: {text}
label: """.strip()
pipe = pipeline("text-generation",
model=model,
tokenizer=tokenizer,
torch_dtype=torch.float16,
device_map="auto",)
outputs = pipe(prompt, max_new_tokens=4, do_sample=True, temperature=0.1)print(outputs[0]["generated_text"].split("label: ")[-1].strip())1].strip())Được hỗ trợ bởi
Chúng ta sẽ lưu đầy đủ mô hình cục bộ bằng cách cung cấp thư mục mô hình.
model_dir ="Phi-3.5-mini-instruct-Ecommerce-Text-Classification"
model.save_pretrained(model_dir)
tokenizer.save_pretrained(model_dir)Được hỗ trợ bởi
Đẩy mô hình đã lưu lên Hugging Face hub. Trước tiên, đăng nhập CLI của Hugging Face bằng API key trích xuất từ Kaggle secrets, sau đó dùng hàm push_to_hub để đẩy cả mô hình và tokenizer.
from huggingface_hub import login
from kaggle_secrets import UserSecretsClient
user_secrets = UserSecretsClient()
hf_token = user_secrets.get_secret("HUGGINGFACE_TOKEN")
login(token = hf_token)
model.push_to_hub(model_dir, use_temp_dir=False)
tokenizer.push_to_hub(model_dir, use_temp_dir=False)Được hỗ trợ bởi
Hệ thống đã tạo một kho mô hình mới và đẩy tất cả tệp lên kho mô hình trên Hugging Face.
Ngoài ra, hãy xem hướng dẫn mới nhất của chúng tôi về Tinh chỉnh Llama 3.2 và sử dụng cục bộ: Hướng dẫn từng bước. Trong hướng dẫn này, bạn sẽ học cách tinh chỉnh mô hình trên bộ dữ liệu tùy chỉnh bằng GPU miễn phí, hợp nhất và xuất mô hình lên Hugging Face Hub, và chuyển đổi mô hình đã tinh chỉnh sang định dạng GGUF để có thể dùng cục bộ với ứng dụng Jan.
Kết luận
Các mô hình ngôn ngữ lớn đang trở nên nhỏ gọn và hiệu quả hơn, giúp giảm chi phí vận hành và tăng khả năng thích ứng trong nhiều lĩnh vực. Trong hướng dẫn này, chúng ta đã khám phá các mô hình Phi-3.5 Mini, Vision và MoE. Chúng ta cũng học cách truy cập các mô hình Phi-3.5 Mini bằng Kaggle Notebooks.
Tiếp đến, chúng ta tinh chỉnh mô hình trên dữ liệu phân loại và đánh giá hiệu năng, đạt cải thiện đáng kể từ 65% lên 86% độ chính xác — một thành tựu ấn tượng. Hiệu năng như vậy không thể đạt được chỉ với RAG hay gọi hàm.
Cuối cùng, chúng ta tích hợp LoRA với mô hình gốc và xuất mô hình hoàn chỉnh lên Hugging Face Hub, nơi mọi người đều có thể sử dụng.
Bước tiếp theo trong hành trình của bạn là xây dựng một dự án theo danh sách 12 dự án LLM cho mọi cấp độ. Bao gồm các dự án LLM cho người mới bắt đầu, trình độ trung cấp, sinh viên năm cuối và chuyên gia. Mỗi dự án đi kèm mã nguồn, hướng dẫn trực quan và liên kết hỗ trợ.
Là một nhà khoa học dữ liệu được chứng nhận, tôi đam mê tận dụng công nghệ tiên tiến để tạo ra các ứng dụng học máy đổi mới. Với nền tảng vững chắc về nhận dạng giọng nói, phân tích và báo cáo dữ liệu, MLOps, AI hội thoại và NLP, tôi đã rèn giũa kỹ năng phát triển các hệ thống thông minh có thể tạo ra tác động thực sự. Bên cạnh chuyên môn kỹ thuật, tôi cũng là một người truyền đạt tốt, có khả năng chắt lọc các khái niệm phức tạp thành ngôn ngữ rõ ràng, súc tích. Nhờ đó, tôi trở thành một blogger được nhiều người quan tâm trong lĩnh vực khoa học dữ liệu, chia sẻ góc nhìn và kinh nghiệm với cộng đồng các chuyên gia dữ liệu ngày càng lớn. Hiện tại, tôi tập trung vào sáng tạo và biên tập nội dung, làm việc với các mô hình ngôn ngữ lớn để phát triển nội dung mạnh mẽ và hấp dẫn, giúp doanh nghiệp và cá nhân tận dụng tối đa dữ liệu của mình.
Microsoft đã gia nhập cuộc đua mô hình ngôn ngữ lớn cùng Meta AI với việc ra mắt dòng Phi-3.5. Dòng này bao gồm một mô hình ngôn ngữ nhỏ, một mô hình ngôn ngữ thị giác và sử dụng phương pháp Mixture-of-Experts để đạt hiệu năng hàng đầu.
Trong hướng dẫn này, chúng ta sẽ khám phá họ mô hình Microsoft Phi-3.5. Chúng ta sẽ tải mô hình Phi-3.5-mini-instruct và tinh chỉnh nó để phân loại sản phẩm thương mại điện tử dựa trên mô tả văn bản. Ở bước cuối, chúng ta sẽ minh họa cách hợp nhất LoRA (Low-Rank Adaptation) với mô hình gốc và đẩy lên Hugging Face. Điều này giúp triển khai trên đám mây hiệu quả, đưa mô hình vào sử dụng cho nhiều ứng dụng khác nhau.
Tham gia khóa học Nắm vững khái niệm Mô hình Ngôn ngữ Lớn (LLMs) và tìm hiểu về ứng dụng LLM, phương pháp huấn luyện, các cân nhắc đạo đức, và nghiên cứu mới nhất.
Hình ảnh: Tác giả
Giới thiệu Microsoft Phi-3.5
Bản phát hành Microsoft Phi-3.5 giới thiệu ba mô hình tiên tiến: Phi-3.5-mini, Phi-3.5-vision và bổ sung mới nhất, Phi-3.5-MoE, một mô hình Mixture-of-Experts.
Phi-3.5-mini được tối ưu cho hỗ trợ đa ngôn ngữ nâng cao với độ dài ngữ cảnh 128K ấn tượng. Dù kích thước nhỏ, nó cho hiệu năng sánh ngang các mô hình lớn hơn nhờ được tăng cường nghiêm ngặt qua tinh chỉnh có giám sát, tối ưu hóa chính sách tiệm cận và tối ưu hóa ưu tiên trực tiếp, đảm bảo tuân thủ hướng dẫn chính xác.
Phi-3.5-vision là mô hình đa phương thức nhẹ, tiên tiến được huấn luyện trên tập dữ liệu tổng hợp và các trang web công khai đã lọc. Nó xuất sắc trong hiểu và suy luận hình ảnh đa khung, lý tưởng cho so sánh hình ảnh chi tiết, tóm tắt/kể chuyện từ nhiều ảnh, và tóm tắt video, với tiềm năng ứng dụng rộng.
Mô hình nổi bật, Phi-3.5-MoE, sở hữu kiến trúc Mixture-of-Experts với 16 expert và 6,6 tỷ tham số hoạt động. Nó mang lại hiệu năng vượt trội với độ trễ giảm, an toàn mạnh mẽ, cùng hỗ trợ đa ngôn ngữ toàn diện.
Họ Phi-3.5 cung cấp các giải pháp hiệu quả chi phí, hiệu năng cao cho cộng đồng mã nguồn mở, thúc đẩy tiến bộ mô hình ngôn ngữ nhỏ và AI sinh sinh.
Để tìm hiểu kiến trúc, tính năng và ứng dụng của Phi-3, hãy theo dõi hướng dẫn Hướng dẫn Phi-3: Thực hành với mô hình AI nhỏ nhất của Microsoft.
Truy cập mô hình Microsoft Phi-3.5
Trong phần này, chúng ta sẽ tải mô hình Phi-3.5-mini-instruct và chạy suy luận mô hình trên nền tảng Kaggle.
pip.text-generationvới mô hình và tokenizer.Chúng ta đã nhận được kết quả chính xác và chi tiết.
Như có thể thấy, mô hình hoạt động khá tốt, gắn cờ cuộc gọi là gian lận và đưa ra lời giải thích.
Nếu bạn gặp vấn đề khi chạy mô hình trên nền tảng Kaggle, vui lòng tham khảo sổ tay Kaggle Simple Model Inference of Phi-3.5. Sổ tay đi kèm thiết lập và mã dựng sẵn cùng đầu ra.
Tinh chỉnh Microsoft Phi-3.5-mini-instruct
Trong hướng dẫn này, chúng ta sẽ học cách tải và xử lý dữ liệu phân loại văn bản thương mại điện tử. Chúng ta cũng sẽ tải mô hình và tokenizer, đánh giá mô hình trên tập kiểm tra trước khi tinh chỉnh, xây dựng trainer, tinh chỉnh mô hình trên tập huấn luyện và kiểm thử mô hình sau tinh chỉnh.
Nếu bạn mới bắt đầu, hãy đọc hướng dẫn Nhập môn tinh chỉnh LLM và tìm hiểu lý thuyết đằng sau việc tinh chỉnh LLM.
1. Thiết lập
Khởi chạy sổ tay Kaggle mới với tăng tốc GPU được bật. Sau đó, đảm bảo bạn đã đặt token API của Hugging Face và Weights & Biases làm biến môi trường thông qua Kaggle secrets.
Cài đặt tất cả các gói Python cần thiết.
Đăng nhập vào dịch vụ Weights & Biases, ký API key và khởi tạo dự án mới.
Cuối cùng, tải tất cả gói và hàm Python cần thiết mà chúng ta sẽ dùng trong quá trình tinh chỉnh và đánh giá.
2. Tải và xử lý bộ dữ liệu
Thêm bộ dữ liệu E-commerce Text Classification vào sổ tay như dưới đây. Bộ dữ liệu gồm hai cột: nhãn (các danh mục e-commerce) và mô tả văn bản của sản phẩm.
Tải tệp CSV, xử lý và xem 5 hàng đầu tiên.
Bộ dữ liệu bao gồm mô tả sản phẩm và nhãn danh mục.
Xáo trộn bộ dữ liệu và chỉ chọn 2000 hàng đầu. Đây là hướng dẫn minh họa, nhằm tăng tốc quá trình tinh chỉnh bằng cách tinh chỉnh mô hình trên một tập mẫu giới hạn.
Tiếp theo, chúng ta sẽ chia dữ liệu thành các tập huấn luyện, đánh giá và kiểm tra.
Chúng ta sẽ tạo hai hàm. Hàm
generate_promptsẽ chuyển đổi cột văn bản thành prompt, gồm hướng dẫn, mô tả văn bản và nhãn. Hàmgenerate_test_prompttương tự nhưng không có nhãn.Chuyển đổi các dataframe huấn luyện và đánh giá của pandas thành các dataset của Hugging Face.
Văn bản gồm hướng dẫn hệ thống, mô tả văn bản của sản phẩm và nhãn.
3. Tải mô hình và tokenizer
Tải mô hình lượng tử hóa 4-bit và tokenizer từ Hugging Face Hub bằng repository ID. Sau đó, thiết lập mô hình và tokenizer để sẵn sàng sử dụng.
4. Đánh giá mô hình trước khi tinh chỉnh
Chúng ta cần đánh giá mô hình gốc trước khi tinh chỉnh để xác định tinh chỉnh có cải thiện kết quả hay không. Với mục đích này, chúng ta sẽ tạo hàm
predictnhận tập kiểm tra và sinh danh mục thương mại điện tử dựa trên sản phẩm và mô tả văn bản.Chúng ta đã có danh sách các danh mục dự đoán và giờ sẽ so sánh với danh mục thực để tạo báo cáo đánh giá mô hình. Hàm "evaluate" nhận danh sách danh mục dự đoán và thực, tạo báo cáo đánh giá chi tiết gồm độ chính xác trung bình, độ chính xác theo từng danh mục, báo cáo phân loại và ma trận nhầm lẫn.
Chúng ta đạt độ chính xác trung bình 65%. Hãy xác định xem tinh chỉnh có thể cải thiện điểm số này không.
5. Thiết lập mô hình
Trích xuất tên mô-đun tuyến tính từ mô hình.
Sử dụng tên mô-đun tuyến tính để tạo LoRA. Chúng ta chỉ tinh chỉnh LoRA và giữ nguyên phần còn lại của mô hình để tiết kiệm bộ nhớ và rút ngắn thời gian huấn luyện.
Tiếp theo, cấu hình các siêu tham số của mô hình cho môi trường Kaggle. Bạn có thể thay đổi các tham số này để cải thiện độ chính xác và giảm thời gian huấn luyện tùy theo máy của bạn. Để tìm hiểu về từng siêu tham số, hãy theo dõi hướng dẫn Tinh chỉnh Llama 2.
Giờ chúng ta sẽ thiết lập trainer tinh chỉnh có giám sát (SFT) và cung cấp tập huấn luyện và đánh giá, cấu hình LoRA, tham số huấn luyện, tokenizer và mô hình.
6. Huấn luyện mô hình
Chúng ta sẽ dùng hàm
.trainđể bắt đầu quá trình tinh chỉnh.Loss giảm dần, và với nhiều epoch hơn, chúng ta có thể đạt kết quả tốt hơn nữa.
Kết thúc phiên Weights & Biases để tạo báo cáo đánh giá.
Bạn có thể phân tích hiệu năng mô hình bằng cách truy cập website Weights & Biases, chọn dự án của bạn và xem phân tích huấn luyện.
Lưu mô hình và tokenizer cục bộ để sau này dùng hợp nhất mô hình và đẩy lên máy chủ từ xa.
Hướng dẫn này khá nhiều mã. Nếu bạn muốn cách đơn giản hơn, bạn có thể tinh chỉnh một mô hình mã nguồn mở bằng cách theo dõi hướng dẫn LlaMA-Factory WebUI cho người mới: Tinh chỉnh LLM. Với giải pháp còn đơn giản hơn nơi bạn không phải bận tâm phần cứng, chúng tôi rất khuyến nghị hướng dẫn Tinh chỉnh GPT-4o Mini: Hướng dẫn từng bước. Điều này giúp bạn tinh chỉnh trên đám mây với lượng mã tối thiểu.
7. Kiểm thử mô hình sau tinh chỉnh
Hãy kiểm tra liệu hiệu năng mô hình có cải thiện sau tinh chỉnh không. Trước tiên chúng ta sẽ sinh danh sách nhãn dự đoán và cung cấp cho hàm
evaluatecùng với nhãn thực.Độ chính xác mô hình đã cải thiện khoảng 32,31%, và các chỉ số hiệu năng còn lại đều rất ấn tượng. Ngoại trừ danh mục Books, mô hình xác định các danh mục khá chính xác.
Hãy nhớ lưu sổ tay Kaggle bằng cách nhấp nút "Save Version" ở góc trên bên phải. Sau đó chọn tùy chọn lưu nhanh và đổi tùy chọn lưu output để bao gồm cả tập tin mô hình và toàn bộ mã.
Nếu bạn gặp vấn đề khi tinh chỉnh mô hình, vui lòng tham khảo sổ tay Kaggle Fine-tune Phi-3.5 for Text Classification.
Hợp nhất và xuất mô hình đã tinh chỉnh
Để hợp nhất và xuất mô hình lên Hugging Face, trước tiên chúng ta sẽ tạo sổ tay Kaggle mới và thêm sổ tay đã lưu để truy cập mô hình và tokenizer đã tinh chỉnh.
Thêm sổ tay Kaggle khác tương tự như thêm bộ dữ liệu và mô hình. Nhấp nút “+ Add Input”, dán liên kết sổ tay, rồi nhấn nút add.
Đặt API của Hugging Face làm biến môi trường bằng Kaggle secrets và cài đặt tất cả gói Python cần thiết để tải và hợp nhất mô hình.
Thiết lập biến mô hình gốc và mô hình đã tinh chỉnh với ID mô hình và vị trí bộ điều hợp mô hình.
Tải đầy đủ mô hình từ Hugging Face hub cùng với tokenizer.
Hợp nhất mô hình gốc với bộ điều hợp chỉ bằng hai dòng mã.
Để kiểm tra mô hình đã hợp nhất thành công, chúng ta sẽ tạo pipeline sinh văn bản với mô hình và tokenizer đã hợp nhất, rồi truyền prompt mẫu để sinh phản hồi.
Mô hình đã dự đoán chính xác danh mục sản phẩm.
Chúng ta sẽ lưu đầy đủ mô hình cục bộ bằng cách cung cấp thư mục mô hình.
Đẩy mô hình đã lưu lên Hugging Face hub. Trước tiên, đăng nhập CLI của Hugging Face bằng API key trích xuất từ Kaggle secrets, sau đó dùng hàm
push_to_hubđể đẩy cả mô hình và tokenizer.Hệ thống đã tạo một kho mô hình mới và đẩy tất cả tệp lên kho mô hình trên Hugging Face.
Nguồn: kingabzpro/Phi-3.5-mini-instruct-Ecommerce-Text-Classification
Nếu bạn gặp khó khăn khi hợp nhất mô hình và xuất nó, vui lòng xem sổ tay Kaggle Phi-3.5 Fine-tuned Adapter to the full model.
Ngoài ra, hãy xem hướng dẫn mới nhất của chúng tôi về Tinh chỉnh Llama 3.2 và sử dụng cục bộ: Hướng dẫn từng bước. Trong hướng dẫn này, bạn sẽ học cách tinh chỉnh mô hình trên bộ dữ liệu tùy chỉnh bằng GPU miễn phí, hợp nhất và xuất mô hình lên Hugging Face Hub, và chuyển đổi mô hình đã tinh chỉnh sang định dạng GGUF để có thể dùng cục bộ với ứng dụng Jan.
Kết luận
Các mô hình ngôn ngữ lớn đang trở nên nhỏ gọn và hiệu quả hơn, giúp giảm chi phí vận hành và tăng khả năng thích ứng trong nhiều lĩnh vực. Trong hướng dẫn này, chúng ta đã khám phá các mô hình Phi-3.5 Mini, Vision và MoE. Chúng ta cũng học cách truy cập các mô hình Phi-3.5 Mini bằng Kaggle Notebooks.
Tiếp đến, chúng ta tinh chỉnh mô hình trên dữ liệu phân loại và đánh giá hiệu năng, đạt cải thiện đáng kể từ 65% lên 86% độ chính xác — một thành tựu ấn tượng. Hiệu năng như vậy không thể đạt được chỉ với RAG hay gọi hàm.
Cuối cùng, chúng ta tích hợp LoRA với mô hình gốc và xuất mô hình hoàn chỉnh lên Hugging Face Hub, nơi mọi người đều có thể sử dụng.
Bước tiếp theo trong hành trình của bạn là xây dựng một dự án theo danh sách 12 dự án LLM cho mọi cấp độ. Bao gồm các dự án LLM cho người mới bắt đầu, trình độ trung cấp, sinh viên năm cuối và chuyên gia. Mỗi dự án đi kèm mã nguồn, hướng dẫn trực quan và liên kết hỗ trợ.